aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--THANKS2
-rw-r--r--doc/guix.texi1100
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/docbook.scm47
-rw-r--r--gnu/packages/gnome.scm15
-rw-r--r--gnu/packages/linux.scm25
-rw-r--r--gnu/packages/package-management.scm4
-rw-r--r--gnu/packages/patches/flac-fix-memcmp-not-declared.patch13
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/web.scm32
-rw-r--r--gnu/packages/xiph.scm16
-rw-r--r--gnu/services/base.scm58
-rw-r--r--gnu/system.scm7
-rw-r--r--gnu/system/install.scm14
-rw-r--r--gnu/system/linux-initrd.scm12
-rw-r--r--guix/gexp.scm10
-rw-r--r--guix/records.scm52
-rw-r--r--guix/scripts/refresh.scm4
-rw-r--r--po/guix/eo.po450
-rw-r--r--po/guix/vi.po528
-rw-r--r--po/packages/eo.po22
-rw-r--r--tests/gexp.scm18
-rw-r--r--tests/records.scm59
24 files changed, 1552 insertions, 942 deletions
diff --git a/AUTHORS b/AUTHORS
index 6d3bf30a9e..a513d05e3a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -21,6 +21,7 @@ alphabetical order):
Cyril Roelandt <tipecaml@gmail.com>
Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
Cyrill Schenkel <cyrill.schenkel@gmail.com>
+ Jason Self <j@jxself.org>
Sree Harsha Totakura <sreeharsha@totakura.in>
David Thompson <dthompson2@worcester.edu>
Mark H. Weaver <mhw@netris.org>
diff --git a/THANKS b/THANKS
index 8dd410a56b..b9ed07c6c7 100644
--- a/THANKS
+++ b/THANKS
@@ -13,7 +13,7 @@ infrastructure help:
Daniel Clark <dclark@pobox.com>
Alexandru Cojocaru <xojoc@gmx.com>
Aleix Conchillo Flaqué <aconchillo@gmail.com>
- John Darrington <john@cellform.com>
+ John Darrington <jmd@gnu.org>
Rafael Ferreira <rafael.f.f1@gmail.com>
Christian Grothoff <christian@grothoff.org>
Jeffrin Jose <ahiliation@yahoo.co.in>
diff --git a/doc/guix.texi b/doc/guix.texi
index 7187f76936..c7a7e8b55e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2604,12 +2604,12 @@ For information on porting to other architectures or kernels,
@menu
* System Installation:: Installing the whole operating system.
+* System Configuration:: Configuring a GNU system.
* Installing Debugging Files:: Feeding the debugger.
* Package Modules:: Packages from the programmer's viewpoint.
* Packaging Guidelines:: Growing the distribution.
* Bootstrapping:: GNU/Linux built from scratch.
* Porting:: Targeting another platform or kernel.
-* System Configuration:: Configuring a GNU system.
@end menu
Building this distribution is a cooperative effort, and you are invited
@@ -2631,11 +2631,47 @@ link that follows: @ref{Help,,, info, Info: An Introduction}. Hit
@kbd{l} afterwards to come back here.
@end ifinfo
-@emph{This section documents work-in-progress. The system lacks
-features and may be buggy. You've been warned. But more than a
-disclaimer, this is an invitation to report issues (and success
-stories!), and join us in improving it. @xref{Contributing}, for more
-info.}
+@subsection Limitations
+
+As of version @value{VERSION}, GNU@tie{}Guix and the GNU system
+distribution are alpha software. It may contain bugs and lack important
+features. Thus, if you are looking for a stable production system that
+respects your freedom as a computer user, a good solution at this point
+is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
+more established GNU/Linux distributions}. We hope you can soon switch
+to the GNU system without fear, of course. In the meantime, you can
+also keep using your distribution and try out the package manager on top
+of it (@pxref{Installation}).
+
+Before you proceed with the installation, be aware of the following
+noteworthy limitations applicable to version @value{VERSION}:
+
+@itemize
+@item
+The installation process does not include a graphical user interface and
+requires familiarity with GNU/Linux (see the following subsections to
+get a feel of what that means.)
+
+@item
+The system does not yet provide graphical desktop environments such as
+GNOME and KDE.
+
+@item
+Support for encrypted disks, the Logical Volume Manager (LVM), and swap
+devices are missing.
+
+@item
+Few system services are currently supported out-of-the-box
+(@pxref{Services}).
+
+@item
+On the order of 1,000 packages are available, which means that you may
+occasionally find that a useful package is missing.
+@end itemize
+
+You've been warned. But more than a disclaimer, this is an invitation
+to report issues (and success stories!), and join us in improving it.
+@xref{Contributing}, for more info.
@subsection USB Stick Installation
@@ -2781,473 +2817,6 @@ guix system disk-image --image-size=800MiB gnu/system/install.scm
@file{gnu/system/install.scm} in the source tree for more information
about the installation image.
-
-@node Installing Debugging Files
-@section Installing Debugging Files
-
-@cindex debugging files
-Program binaries, as produced by the GCC compilers for instance, are
-typically written in the ELF format, with a section containing
-@dfn{debugging information}. Debugging information is what allows the
-debugger, GDB, to map binary code to source code; it is required to
-debug a compiled program in good conditions.
-
-The problem with debugging information is that is takes up a fair amount
-of disk space. For example, debugging information for the GNU C Library
-weighs in at more than 60 MiB. Thus, as a user, keeping all the
-debugging info of all the installed programs is usually not an option.
-Yet, space savings should not come at the cost of an impediment to
-debugging---especially in the GNU system, which should make it easier
-for users to exert their computing freedom (@pxref{GNU Distribution}).
-
-Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
-mechanism that allows users to get the best of both worlds: debugging
-information can be stripped from the binaries and stored in separate
-files. GDB is then able to load debugging information from those files,
-when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
-with GDB}).
-
-The GNU distribution takes advantage of this by storing debugging
-information in the @code{lib/debug} sub-directory of a separate package
-output unimaginatively called @code{debug} (@pxref{Packages with
-Multiple Outputs}). Users can choose to install the @code{debug} output
-of a package when they need it. For instance, the following command
-installs the debugging information for the GNU C Library and for GNU
-Guile:
-
-@example
-guix package -i glibc:debug guile:debug
-@end example
-
-GDB must then be told to look for debug files in the user's profile, by
-setting the @code{debug-file-directory} variable (consider setting it
-from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
-GDB}):
-
-@example
-(gdb) set debug-file-directory ~/.guix-profile/lib/debug
-@end example
-
-From there on, GDB will pick up debugging information from the
-@code{.debug} files under @file{~/.guix-profile/lib/debug}.
-
-In addition, you will most likely want GDB to be able to show the source
-code being debugged. To do that, you will have to unpack the source
-code of the package of interest (obtained with @code{guix build
---source}, @pxref{Invoking guix build}), and to point GDB to that source
-directory using the @code{directory} command (@pxref{Source Path,
-@code{directory},, gdb, Debugging with GDB}).
-
-@c XXX: keep me up-to-date
-The @code{debug} output mechanism in Guix is implemented by the
-@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
-opt-in---debugging information is available only for those packages
-whose definition explicitly declares a @code{debug} output. This may be
-changed to opt-out in the future, if our build farm servers can handle
-the load. To check whether a package has a @code{debug} output, use
-@command{guix package --list-available} (@pxref{Invoking guix package}).
-
-
-@node Package Modules
-@section Package Modules
-
-From a programming viewpoint, the package definitions of the
-GNU distribution are provided by Guile modules in the @code{(gnu packages
-@dots{})} name space@footnote{Note that packages under the @code{(gnu
-packages @dots{})} module name space are not necessarily ``GNU
-packages''. This module naming scheme follows the usual Guile module
-naming convention: @code{gnu} means that these modules are distributed
-as part of the GNU system, and @code{packages} identifies modules that
-define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
-Reference Manual}). For instance, the @code{(gnu packages emacs)}
-module exports a variable named @code{emacs}, which is bound to a
-@code{<package>} object (@pxref{Defining Packages}).
-
-The @code{(gnu packages @dots{})} module name space is special: it is
-automatically scanned for packages by the command-line tools. For
-instance, when running @code{guix package -i emacs}, all the @code{(gnu
-packages @dots{})} modules are scanned until one that exports a package
-object whose name is @code{emacs} is found. This package search
-facility is implemented in the @code{(gnu packages)} module.
-
-Users can store package definitions in modules with different
-names---e.g., @code{(my-packages emacs)}. In that case, commands such
-as @command{guix package} and @command{guix build} have to be used with
-the @code{-e} option so that they know where to find the package.
-
-The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
-each package is built based solely on other packages in the
-distribution. The root of this dependency graph is a small set of
-@dfn{bootstrap binaries}, provided by the @code{(gnu packages
-bootstrap)} module. For more information on bootstrapping,
-@ref{Bootstrapping}.
-
-@node Packaging Guidelines
-@section Packaging Guidelines
-
-The GNU distribution is nascent and may well lack some of your favorite
-packages. This section describes how you can help make the distribution
-grow. @xref{Contributing}, for additional information on how you can
-help.
-
-Free software packages are usually distributed in the form of
-@dfn{source code tarballs}---typically @file{tar.gz} files that contain
-all the source files. Adding a package to the distribution means
-essentially two things: adding a @dfn{recipe} that describes how to
-build the package, including a list of other packages required to build
-it, and adding @dfn{package meta-data} along with that recipe, such as a
-description and licensing information.
-
-In Guix all this information is embodied in @dfn{package definitions}.
-Package definitions provide a high-level view of the package. They are
-written using the syntax of the Scheme programming language; in fact,
-for each package we define a variable bound to the package definition,
-and export that variable from a module (@pxref{Package Modules}).
-However, in-depth Scheme knowledge is @emph{not} a prerequisite for
-creating packages. For more information on package definitions,
-@ref{Defining Packages}.
-
-Once a package definition is in place, stored in a file in the Guix
-source tree, it can be tested using the @command{guix build} command
-(@pxref{Invoking guix build}). For example, assuming the new package is
-called @code{gnew}, you may run this command from the Guix build tree:
-
-@example
-./pre-inst-env guix build gnew --keep-failed
-@end example
-
-Using @code{--keep-failed} makes it easier to debug build failures since
-it provides access to the failed build tree. Another useful
-command-line option when debugging is @code{--log-file}, to access the
-build log.
-
-If the package is unknown to the @command{guix} command, it may be that
-the source file contains a syntax error, or lacks a @code{define-public}
-clause to export the package variable. To figure it out, you may load
-the module from Guile to get more information about the actual error:
-
-@example
-./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
-@end example
-
-Once your package builds correctly, please send us a patch
-(@pxref{Contributing}). Well, if you need help, we will be happy to
-help you too. Once the patch is committed in the Guix repository, the
-new package automatically gets built on the supported platforms by
-@url{http://hydra.gnu.org/gnu/master, our continuous integration
-system}.
-
-@cindex substituter
-Users can obtain the new package definition simply by running
-@command{guix pull} (@pxref{Invoking guix pull}). When
-@code{hydra.gnu.org} is done building the package, installing the
-package automatically downloads binaries from there
-(@pxref{Substitutes}). The only place where human intervention is
-needed is to review and apply the patch.
-
-
-@menu
-* Software Freedom:: What may go into the distribution.
-* Package Naming:: What's in a name?
-* Version Numbers:: When the name is not enough.
-* Python Modules:: Taming the snake.
-* Perl Modules:: Little pearls.
-@end menu
-
-@node Software Freedom
-@subsection Software Freedom
-
-@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
-
-The GNU operating system has been developed so that users can have
-freedom in their computing. GNU is @dfn{free software}, meaning that
-users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
-essential freedoms}: to run the program, to study and change the program
-in source code form, to redistribute exact copies, and to distribute
-modified versions. Packages found in the GNU distribution provide only
-software that conveys these four freedoms.
-
-In addition, the GNU distribution follow the
-@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
-software distribution guidelines}. Among other things, these guidelines
-reject non-free firmware, recommendations of non-free software, and
-discuss ways to deal with trademarks and patents.
-
-Some packages contain a small and optional subset that violates the
-above guidelines, for instance because this subset is itself non-free
-code. When that happens, the offending items are removed with
-appropriate patches or code snippets in the package definition's
-@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
-build --source} returns the ``freed'' source rather than the unmodified
-upstream source.
-
-
-@node Package Naming
-@subsection Package Naming
-
-A package has actually two names associated with it:
-First, there is the name of the @emph{Scheme variable}, the one following
-@code{define-public}. By this name, the package can be made known in the
-Scheme code, for instance as input to another package. Second, there is
-the string in the @code{name} field of a package definition. This name
-is used by package management commands such as
-@command{guix package} and @command{guix build}.
-
-Both are usually the same and correspond to the lowercase conversion of
-the project name chosen upstream, with underscores replaced with
-hyphens. For instance, GNUnet is available as @code{gnunet}, and
-SDL_net as @code{sdl-net}.
-
-We do not add @code{lib} prefixes for library packages, unless these are
-already part of the official project name. But see @pxref{Python
-Modules} and @ref{Perl Modules} for special rules concerning modules for
-the Python and Perl languages.
-
-
-@node Version Numbers
-@subsection Version Numbers
-
-We usually package only the latest version of a given free software
-project. But sometimes, for instance for incompatible library versions,
-two (or more) versions of the same package are needed. These require
-different Scheme variable names. We use the name as defined
-in @ref{Package Naming}
-for the most recent version; previous versions use the same name, suffixed
-by @code{-} and the smallest prefix of the version number that may
-distinguish the two versions.
-
-The name inside the package definition is the same for all versions of a
-package and does not contain any version number.
-
-For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
-
-@example
-(define-public gtk+
- (package
- (name "gtk+")
- (version "3.9.12")
- ...))
-(define-public gtk+-2
- (package
- (name "gtk+")
- (version "2.24.20")
- ...))
-@end example
-If we also wanted GTK+ 3.8.2, this would be packaged as
-@example
-(define-public gtk+-3.8
- (package
- (name "gtk+")
- (version "3.8.2")
- ...))
-@end example
-
-
-@node Python Modules
-@subsection Python Modules
-
-We currently package Python 2 and Python 3, under the Scheme variable names
-@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
-To avoid confusion and naming clashes with other programming languages, it
-seems desirable that the name of a package for a Python module contains
-the word @code{python}.
-
-Some modules are compatible with only one version of Python, others with both.
-If the package Foo compiles only with Python 3, we name it
-@code{python-foo}; if it compiles only with Python 2, we name it
-@code{python2-foo}. If it is compatible with both versions, we create two
-packages with the corresponding names.
-
-If a project already contains the word @code{python}, we drop this;
-for instance, the module python-dateutil is packaged under the names
-@code{python-dateutil} and @code{python2-dateutil}.
-
-
-@node Perl Modules
-@subsection Perl Modules
-
-Perl programs standing for themselves are named as any other package,
-using the lowercase upstream name.
-For Perl packages containing a single class, we use the lowercase class name,
-replace all occurrences of @code{::} by dashes and prepend the prefix
-@code{perl-}.
-So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
-Modules containing several classes keep their lowercase upstream name and
-are also prepended by @code{perl-}. Such modules tend to have the word
-@code{perl} somewhere in their name, which gets dropped in favor of the
-prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
-
-
-
-@node Bootstrapping
-@section Bootstrapping
-
-@c Adapted from the ELS 2013 paper.
-
-@cindex bootstrapping
-
-Bootstrapping in our context refers to how the distribution gets built
-``from nothing''. Remember that the build environment of a derivation
-contains nothing but its declared inputs (@pxref{Introduction}). So
-there's an obvious chicken-and-egg problem: how does the first package
-get built? How does the first compiler get compiled? Note that this is
-a question of interest only to the curious hacker, not to the regular
-user, so you can shamelessly skip this section if you consider yourself
-a ``regular user''.
-
-@cindex bootstrap binaries
-The GNU system is primarily made of C code, with libc at its core. The
-GNU build system itself assumes the availability of a Bourne shell and
-command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
-`grep'. Furthermore, build programs---programs that run
-@code{./configure}, @code{make}, etc.---are written in Guile Scheme
-(@pxref{Derivations}). Consequently, to be able to build anything at
-all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
-Binutils, libc, and the other packages mentioned above---the
-@dfn{bootstrap binaries}.
-
-These bootstrap binaries are ``taken for granted'', though we can also
-re-create them if needed (more on that later).
-
-@unnumberedsubsec Preparing to Use the Bootstrap Binaries
-
-@c As of Emacs 24.3, Info-mode displays the image, but since it's a
-@c large image, it's hard to scroll. Oh well.
-@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
-
-The figure above shows the very beginning of the dependency graph of the
-distribution, corresponding to the package definitions of the @code{(gnu
-packages bootstrap)} module. At this level of detail, things are
-slightly complex. First, Guile itself consists of an ELF executable,
-along with many source and compiled Scheme files that are dynamically
-loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
-tarball shown in this graph. This tarball is part of Guix's ``source''
-distribution, and gets inserted into the store with @code{add-to-store}
-(@pxref{The Store}).
-
-But how do we write a derivation that unpacks this tarball and adds it
-to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
-derivation---the first one that gets built---uses @code{bash} as its
-builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
-@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
-@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
-the Guix source distribution, whose sole purpose is to allow the Guile
-tarball to be unpacked.
-
-Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
-Guile that can be used to run subsequent build programs. Its first task
-is to download tarballs containing the other pre-built binaries---this
-is what the @code{.tar.xz.drv} derivations do. Guix modules such as
-@code{ftp-client.scm} are used for this purpose. The
-@code{module-import.drv} derivations import those modules in a directory
-in the store, using the original layout. The
-@code{module-import-compiled.drv} derivations compile those modules, and
-write them in an output directory with the right layout. This
-corresponds to the @code{#:modules} argument of
-@code{build-expression->derivation} (@pxref{Derivations}).
-
-Finally, the various tarballs are unpacked by the
-derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
-etc., at which point we have a working C tool chain.
-
-
-@unnumberedsubsec Building the Build Tools
-
-@c TODO: Add a package-level dependency graph generated from (gnu
-@c packages base).
-
-Bootstrapping is complete when we have a full tool chain that does not
-depend on the pre-built bootstrap tools discussed above. This
-no-dependency requirement is verified by checking whether the files of
-the final tool chain contain references to the @file{/gnu/store}
-directories of the bootstrap inputs. The process that leads to this
-``final'' tool chain is described by the package definitions found in
-the @code{(gnu packages base)} module.
-
-@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
-The first tool that gets built with the bootstrap binaries is
-GNU Make, which is a prerequisite for all the following packages.
-From there Findutils and Diffutils get built.
-
-Then come the first-stage Binutils and GCC, built as pseudo cross
-tools---i.e., with @code{--target} equal to @code{--host}. They are
-used to build libc. Thanks to this cross-build trick, this libc is
-guaranteed not to hold any reference to the initial tool chain.
-
-From there the final Binutils and GCC are built. GCC uses @code{ld}
-from the final Binutils, and links programs against the just-built libc.
-This tool chain is used to build the other packages used by Guix and by
-the GNU Build System: Guile, Bash, Coreutils, etc.
-
-And voilà! At this point we have the complete set of build tools that
-the GNU Build System expects. These are in the @code{%final-inputs}
-variables of the @code{(gnu packages base)} module, and are implicitly
-used by any package that uses @code{gnu-build-system} (@pxref{Defining
-Packages}).
-
-
-@unnumberedsubsec Building the Bootstrap Binaries
-
-Because the final tool chain does not depend on the bootstrap binaries,
-those rarely need to be updated. Nevertheless, it is useful to have an
-automated way to produce them, should an update occur, and this is what
-the @code{(gnu packages make-bootstrap)} module provides.
-
-The following command builds the tarballs containing the bootstrap
-binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
-of Coreutils and other basic command-line tools):
-
-@example
-guix build bootstrap-tarballs
-@end example
-
-The generated tarballs are those that should be referred to in the
-@code{(gnu packages bootstrap)} module mentioned at the beginning of
-this section.
-
-Still here? Then perhaps by now you've started to wonder: when do we
-reach a fixed point? That is an interesting question! The answer is
-unknown, but if you would like to investigate further (and have
-significant computational and storage resources to do so), then let us
-know.
-
-@node Porting
-@section Porting to a New Platform
-
-As discussed above, the GNU distribution is self-contained, and
-self-containment is achieved by relying on pre-built ``bootstrap
-binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
-operating system kernel, CPU architecture, and application binary
-interface (ABI). Thus, to port the distribution to a platform that is
-not yet supported, one must build those bootstrap binaries, and update
-the @code{(gnu packages bootstrap)} module to use them on that platform.
-
-Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
-When everything goes well, and assuming the GNU tool chain supports the
-target platform, this can be as simple as running a command like this
-one:
-
-@example
-guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
-@end example
-
-Once these are built, the @code{(gnu packages bootstrap)} module needs
-to be updated to refer to these binaries on the target platform. In
-addition, the @code{glibc-dynamic-linker} procedure in that module must
-be augmented to return the right file name for libc's dynamic linker on
-that platform; likewise, @code{system->linux-architecture} in @code{(gnu
-packages linux)} must be taught about the new platform.
-
-In practice, there may be some complications. First, it may be that the
-extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
-above) is not recognized by all the GNU tools. Typically, glibc
-recognizes some of these, whereas GCC uses an extra @code{--with-abi}
-configure flag (see @code{gcc.scm} for examples of how to handle this).
-Second, some of the required packages could fail to build for that
-platform. Lastly, the generated binaries could be broken for some
-reason.
-
-
@node System Configuration
@section System Configuration
@@ -3278,6 +2847,8 @@ instance to support new system services.
* File Systems:: Configuring file system mounts.
* User Accounts:: Specifying user accounts.
* Services:: Specifying system services.
+* Setuid Programs:: Programs running with root privileges.
+* Initial RAM Disk:: Linux-Libre bootstrapping.
* Invoking guix system:: Instantiating a system configuration.
* Defining Services:: Adding new service definitions.
@end menu
@@ -3690,6 +3261,123 @@ password. When @var{auto-login?} is true, log in automatically as
@end deffn
+@node Setuid Programs
+@subsection Setuid Programs
+
+@cindex setuid programs
+Some programs need to run with ``root'' privileges, even when they are
+launched by unprivileged users. A notorious example is the
+@command{passwd} programs, which can users can run to change their
+password, and which requires write access to the @file{/etc/passwd} and
+@file{/etc/shadow} files---something normally restricted to root, for
+obvious security reasons. To address that, these executables are
+@dfn{setuid-root}, meaning that they always run with root privileges
+(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
+for more info about the setuid mechanisms.)
+
+The store itself @emph{cannot} contain setuid programs: that would be a
+security issue since any user on the system can write derivations that
+populate the store (@pxref{The Store}). Thus, a different mechanism is
+used: instead of changing the setuid bit directly on files that are in
+the store, we let the system administrator @emph{declare} which programs
+should be setuid root.
+
+The @code{setuid-programs} field of an @code{operating-system}
+declaration contains a list of G-expressions denoting the names of
+programs to be setuid-root (@pxref{Using the Configuration System}).
+For instance, the @command{passwd} program, which is part of the Shadow
+package, can be designated by this G-expression (@pxref{G-Expressions}):
+
+@example
+#~(string-append #$shadow "/bin/passwd")
+@end example
+
+A default set of setuid programs is defined by the
+@code{%setuid-programs} variable of the @code{(gnu system)} module.
+
+@defvr {Scheme Variable} %setuid-programs
+A list of G-expressions denoting common programs that are setuid-root.
+
+The list includes commands such as @command{passwd}, @command{ping},
+@command{su}, and @command{sudo}.
+@end defvr
+
+Under the hood, the actual setuid programs are created in the
+@file{/run/setuid-programs} directory at system activation time. The
+files in this directory refer to the ``real'' binaries, which are in the
+store.
+
+
+@node Initial RAM Disk
+@subsection Initial RAM Disk
+
+@cindex initial RAM disk (initrd)
+@cindex initrd (initial RAM disk)
+For bootstrapping purposes, the Linux-Libre kernel is passed an
+@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
+root file system, as well as an initialization script. The latter is
+responsible for mounting the real root file system, and for loading any
+kernel modules that may be needed to achieve that.
+
+The @code{initrd} field of an @code{operating-system} declaration allows
+you to specify which initrd you would like to use. The @code{(gnu
+system linux-initrd)} module provides two ways to build an initrd: the
+high-level @code{base-initrd} procedure, and the low-level
+@code{expression->initrd} procedure.
+
+The @code{base-initrd} procedure is intended to cover most common uses.
+For example, if you want to add a bunch of kernel modules to be loaded
+at boot time, you can define the @code{initrd} field of the operating
+system declaration like this:
+
+@example
+(initrd (cut base-init <>
+ #:extra-modules '("my.ko" "modules.ko")))
+@end example
+
+It also handles common use cases that involves using the system as a
+QEMU guest, or as a ``live'' system whose root file system is volatile.
+
+@deffn {Monadic Procedure} base-initrd @var{file-systems} @
+ [#:qemu-networking? #f] [#:virtio? #f] [#:volatile-root? #f] @
+ [#:extra-modules '()]
+Return a monadic derivation that builds a generic initrd. @var{file-systems} is
+a list of file-systems to be mounted by the initrd, possibly in addition to
+the root file system specified on the kernel command line via @code{--root}.
+
+When @var{qemu-networking?} is true, set up networking with the standard QEMU
+parameters. When @var{virtio?} is true, load additional modules so the initrd can
+be used as a QEMU guest with para-virtualized I/O drivers.
+
+When @var{volatile-root?} is true, the root file system is writable but any changes
+to it are lost.
+
+The initrd is automatically populated with all the kernel modules necessary
+for @var{file-systems} and for the given options. However, additional kernel
+modules can be listed in @var{extra-modules}. They will be added to the initrd, and
+loaded at boot time in the order in which they appear.
+@end deffn
+
+Needless to say, the initrds we produce and use embed a
+statically-linked Guile, and the initialization program is a Guile
+program. That gives a lot of flexibility. The
+@code{expression->initrd} procedure builds such an initrd, given the
+program to run in that initrd.
+
+@deffn {Monadic Procedure} expression->initrd @var{exp} @
+ [#:guile %guile-static-stripped] [#:name "guile-initrd"] @
+ [#:modules '()] [#:to-copy '()] [#:linux #f] @
+ [#:linux-modules '()]
+Return a derivation that builds a Linux initrd (a gzipped cpio archive)
+containing @var{guile} and that evaluates @var{exp}, a G-expression,
+upon booting.
+
+@var{linux-modules} is a list of @file{.ko} file names to be copied from
+@var{linux} into the initrd. @var{to-copy} is a list of additional
+derivations or packages to copy to the initrd. @var{modules} is a list
+of Guile module names to be embedded in the initrd.
+@end deffn
+
@node Invoking guix system
@subsection Invoking @code{guix system}
@@ -3846,6 +3534,472 @@ on-line documentation. Thus, the commands @command{deco start ncsd},
would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}).
+@node Installing Debugging Files
+@section Installing Debugging Files
+
+@cindex debugging files
+Program binaries, as produced by the GCC compilers for instance, are
+typically written in the ELF format, with a section containing
+@dfn{debugging information}. Debugging information is what allows the
+debugger, GDB, to map binary code to source code; it is required to
+debug a compiled program in good conditions.
+
+The problem with debugging information is that is takes up a fair amount
+of disk space. For example, debugging information for the GNU C Library
+weighs in at more than 60 MiB. Thus, as a user, keeping all the
+debugging info of all the installed programs is usually not an option.
+Yet, space savings should not come at the cost of an impediment to
+debugging---especially in the GNU system, which should make it easier
+for users to exert their computing freedom (@pxref{GNU Distribution}).
+
+Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
+mechanism that allows users to get the best of both worlds: debugging
+information can be stripped from the binaries and stored in separate
+files. GDB is then able to load debugging information from those files,
+when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
+with GDB}).
+
+The GNU distribution takes advantage of this by storing debugging
+information in the @code{lib/debug} sub-directory of a separate package
+output unimaginatively called @code{debug} (@pxref{Packages with
+Multiple Outputs}). Users can choose to install the @code{debug} output
+of a package when they need it. For instance, the following command
+installs the debugging information for the GNU C Library and for GNU
+Guile:
+
+@example
+guix package -i glibc:debug guile:debug
+@end example
+
+GDB must then be told to look for debug files in the user's profile, by
+setting the @code{debug-file-directory} variable (consider setting it
+from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
+GDB}):
+
+@example
+(gdb) set debug-file-directory ~/.guix-profile/lib/debug
+@end example
+
+From there on, GDB will pick up debugging information from the
+@code{.debug} files under @file{~/.guix-profile/lib/debug}.
+
+In addition, you will most likely want GDB to be able to show the source
+code being debugged. To do that, you will have to unpack the source
+code of the package of interest (obtained with @code{guix build
+--source}, @pxref{Invoking guix build}), and to point GDB to that source
+directory using the @code{directory} command (@pxref{Source Path,
+@code{directory},, gdb, Debugging with GDB}).
+
+@c XXX: keep me up-to-date
+The @code{debug} output mechanism in Guix is implemented by the
+@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
+opt-in---debugging information is available only for those packages
+whose definition explicitly declares a @code{debug} output. This may be
+changed to opt-out in the future, if our build farm servers can handle
+the load. To check whether a package has a @code{debug} output, use
+@command{guix package --list-available} (@pxref{Invoking guix package}).
+
+
+@node Package Modules
+@section Package Modules
+
+From a programming viewpoint, the package definitions of the
+GNU distribution are provided by Guile modules in the @code{(gnu packages
+@dots{})} name space@footnote{Note that packages under the @code{(gnu
+packages @dots{})} module name space are not necessarily ``GNU
+packages''. This module naming scheme follows the usual Guile module
+naming convention: @code{gnu} means that these modules are distributed
+as part of the GNU system, and @code{packages} identifies modules that
+define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
+Reference Manual}). For instance, the @code{(gnu packages emacs)}
+module exports a variable named @code{emacs}, which is bound to a
+@code{<package>} object (@pxref{Defining Packages}).
+
+The @code{(gnu packages @dots{})} module name space is special: it is
+automatically scanned for packages by the command-line tools. For
+instance, when running @code{guix package -i emacs}, all the @code{(gnu
+packages @dots{})} modules are scanned until one that exports a package
+object whose name is @code{emacs} is found. This package search
+facility is implemented in the @code{(gnu packages)} module.
+
+Users can store package definitions in modules with different
+names---e.g., @code{(my-packages emacs)}. In that case, commands such
+as @command{guix package} and @command{guix build} have to be used with
+the @code{-e} option so that they know where to find the package.
+
+The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
+each package is built based solely on other packages in the
+distribution. The root of this dependency graph is a small set of
+@dfn{bootstrap binaries}, provided by the @code{(gnu packages
+bootstrap)} module. For more information on bootstrapping,
+@ref{Bootstrapping}.
+
+@node Packaging Guidelines
+@section Packaging Guidelines
+
+The GNU distribution is nascent and may well lack some of your favorite
+packages. This section describes how you can help make the distribution
+grow. @xref{Contributing}, for additional information on how you can
+help.
+
+Free software packages are usually distributed in the form of
+@dfn{source code tarballs}---typically @file{tar.gz} files that contain
+all the source files. Adding a package to the distribution means
+essentially two things: adding a @dfn{recipe} that describes how to
+build the package, including a list of other packages required to build
+it, and adding @dfn{package meta-data} along with that recipe, such as a
+description and licensing information.
+
+In Guix all this information is embodied in @dfn{package definitions}.
+Package definitions provide a high-level view of the package. They are
+written using the syntax of the Scheme programming language; in fact,
+for each package we define a variable bound to the package definition,
+and export that variable from a module (@pxref{Package Modules}).
+However, in-depth Scheme knowledge is @emph{not} a prerequisite for
+creating packages. For more information on package definitions,
+@ref{Defining Packages}.
+
+Once a package definition is in place, stored in a file in the Guix
+source tree, it can be tested using the @command{guix build} command
+(@pxref{Invoking guix build}). For example, assuming the new package is
+called @code{gnew}, you may run this command from the Guix build tree:
+
+@example
+./pre-inst-env guix build gnew --keep-failed
+@end example
+
+Using @code{--keep-failed} makes it easier to debug build failures since
+it provides access to the failed build tree. Another useful
+command-line option when debugging is @code{--log-file}, to access the
+build log.
+
+If the package is unknown to the @command{guix} command, it may be that
+the source file contains a syntax error, or lacks a @code{define-public}
+clause to export the package variable. To figure it out, you may load
+the module from Guile to get more information about the actual error:
+
+@example
+./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
+@end example
+
+Once your package builds correctly, please send us a patch
+(@pxref{Contributing}). Well, if you need help, we will be happy to
+help you too. Once the patch is committed in the Guix repository, the
+new package automatically gets built on the supported platforms by
+@url{http://hydra.gnu.org/gnu/master, our continuous integration
+system}.
+
+@cindex substituter
+Users can obtain the new package definition simply by running
+@command{guix pull} (@pxref{Invoking guix pull}). When
+@code{hydra.gnu.org} is done building the package, installing the
+package automatically downloads binaries from there
+(@pxref{Substitutes}). The only place where human intervention is
+needed is to review and apply the patch.
+
+
+@menu
+* Software Freedom:: What may go into the distribution.
+* Package Naming:: What's in a name?
+* Version Numbers:: When the name is not enough.
+* Python Modules:: Taming the snake.
+* Perl Modules:: Little pearls.
+@end menu
+
+@node Software Freedom
+@subsection Software Freedom
+
+@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
+
+The GNU operating system has been developed so that users can have
+freedom in their computing. GNU is @dfn{free software}, meaning that
+users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
+essential freedoms}: to run the program, to study and change the program
+in source code form, to redistribute exact copies, and to distribute
+modified versions. Packages found in the GNU distribution provide only
+software that conveys these four freedoms.
+
+In addition, the GNU distribution follow the
+@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
+software distribution guidelines}. Among other things, these guidelines
+reject non-free firmware, recommendations of non-free software, and
+discuss ways to deal with trademarks and patents.
+
+Some packages contain a small and optional subset that violates the
+above guidelines, for instance because this subset is itself non-free
+code. When that happens, the offending items are removed with
+appropriate patches or code snippets in the package definition's
+@code{origin} form (@pxref{Defining Packages}). That way, @code{guix
+build --source} returns the ``freed'' source rather than the unmodified
+upstream source.
+
+
+@node Package Naming
+@subsection Package Naming
+
+A package has actually two names associated with it:
+First, there is the name of the @emph{Scheme variable}, the one following
+@code{define-public}. By this name, the package can be made known in the
+Scheme code, for instance as input to another package. Second, there is
+the string in the @code{name} field of a package definition. This name
+is used by package management commands such as
+@command{guix package} and @command{guix build}.
+
+Both are usually the same and correspond to the lowercase conversion of
+the project name chosen upstream, with underscores replaced with
+hyphens. For instance, GNUnet is available as @code{gnunet}, and
+SDL_net as @code{sdl-net}.
+
+We do not add @code{lib} prefixes for library packages, unless these are
+already part of the official project name. But see @pxref{Python
+Modules} and @ref{Perl Modules} for special rules concerning modules for
+the Python and Perl languages.
+
+
+@node Version Numbers
+@subsection Version Numbers
+
+We usually package only the latest version of a given free software
+project. But sometimes, for instance for incompatible library versions,
+two (or more) versions of the same package are needed. These require
+different Scheme variable names. We use the name as defined
+in @ref{Package Naming}
+for the most recent version; previous versions use the same name, suffixed
+by @code{-} and the smallest prefix of the version number that may
+distinguish the two versions.
+
+The name inside the package definition is the same for all versions of a
+package and does not contain any version number.
+
+For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
+
+@example
+(define-public gtk+
+ (package
+ (name "gtk+")
+ (version "3.9.12")
+ ...))
+(define-public gtk+-2
+ (package
+ (name "gtk+")
+ (version "2.24.20")
+ ...))
+@end example
+If we also wanted GTK+ 3.8.2, this would be packaged as
+@example
+(define-public gtk+-3.8
+ (package
+ (name "gtk+")
+ (version "3.8.2")
+ ...))
+@end example
+
+
+@node Python Modules
+@subsection Python Modules
+
+We currently package Python 2 and Python 3, under the Scheme variable names
+@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
+To avoid confusion and naming clashes with other programming languages, it
+seems desirable that the name of a package for a Python module contains
+the word @code{python}.
+
+Some modules are compatible with only one version of Python, others with both.
+If the package Foo compiles only with Python 3, we name it
+@code{python-foo}; if it compiles only with Python 2, we name it
+@code{python2-foo}. If it is compatible with both versions, we create two
+packages with the corresponding names.
+
+If a project already contains the word @code{python}, we drop this;
+for instance, the module python-dateutil is packaged under the names
+@code{python-dateutil} and @code{python2-dateutil}.
+
+
+@node Perl Modules
+@subsection Perl Modules
+
+Perl programs standing for themselves are named as any other package,
+using the lowercase upstream name.
+For Perl packages containing a single class, we use the lowercase class name,
+replace all occurrences of @code{::} by dashes and prepend the prefix
+@code{perl-}.
+So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
+Modules containing several classes keep their lowercase upstream name and
+are also prepended by @code{perl-}. Such modules tend to have the word
+@code{perl} somewhere in their name, which gets dropped in favor of the
+prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
+
+
+
+@node Bootstrapping
+@section Bootstrapping
+
+@c Adapted from the ELS 2013 paper.
+
+@cindex bootstrapping
+
+Bootstrapping in our context refers to how the distribution gets built
+``from nothing''. Remember that the build environment of a derivation
+contains nothing but its declared inputs (@pxref{Introduction}). So
+there's an obvious chicken-and-egg problem: how does the first package
+get built? How does the first compiler get compiled? Note that this is
+a question of interest only to the curious hacker, not to the regular
+user, so you can shamelessly skip this section if you consider yourself
+a ``regular user''.
+
+@cindex bootstrap binaries
+The GNU system is primarily made of C code, with libc at its core. The
+GNU build system itself assumes the availability of a Bourne shell and
+command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
+`grep'. Furthermore, build programs---programs that run
+@code{./configure}, @code{make}, etc.---are written in Guile Scheme
+(@pxref{Derivations}). Consequently, to be able to build anything at
+all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
+Binutils, libc, and the other packages mentioned above---the
+@dfn{bootstrap binaries}.
+
+These bootstrap binaries are ``taken for granted'', though we can also
+re-create them if needed (more on that later).
+
+@unnumberedsubsec Preparing to Use the Bootstrap Binaries
+
+@c As of Emacs 24.3, Info-mode displays the image, but since it's a
+@c large image, it's hard to scroll. Oh well.
+@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
+
+The figure above shows the very beginning of the dependency graph of the
+distribution, corresponding to the package definitions of the @code{(gnu
+packages bootstrap)} module. At this level of detail, things are
+slightly complex. First, Guile itself consists of an ELF executable,
+along with many source and compiled Scheme files that are dynamically
+loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
+tarball shown in this graph. This tarball is part of Guix's ``source''
+distribution, and gets inserted into the store with @code{add-to-store}
+(@pxref{The Store}).
+
+But how do we write a derivation that unpacks this tarball and adds it
+to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
+derivation---the first one that gets built---uses @code{bash} as its
+builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
+@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
+@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
+the Guix source distribution, whose sole purpose is to allow the Guile
+tarball to be unpacked.
+
+Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
+Guile that can be used to run subsequent build programs. Its first task
+is to download tarballs containing the other pre-built binaries---this
+is what the @code{.tar.xz.drv} derivations do. Guix modules such as
+@code{ftp-client.scm} are used for this purpose. The
+@code{module-import.drv} derivations import those modules in a directory
+in the store, using the original layout. The
+@code{module-import-compiled.drv} derivations compile those modules, and
+write them in an output directory with the right layout. This
+corresponds to the @code{#:modules} argument of
+@code{build-expression->derivation} (@pxref{Derivations}).
+
+Finally, the various tarballs are unpacked by the
+derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
+etc., at which point we have a working C tool chain.
+
+
+@unnumberedsubsec Building the Build Tools
+
+@c TODO: Add a package-level dependency graph generated from (gnu
+@c packages base).
+
+Bootstrapping is complete when we have a full tool chain that does not
+depend on the pre-built bootstrap tools discussed above. This
+no-dependency requirement is verified by checking whether the files of
+the final tool chain contain references to the @file{/gnu/store}
+directories of the bootstrap inputs. The process that leads to this
+``final'' tool chain is described by the package definitions found in
+the @code{(gnu packages base)} module.
+
+@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
+The first tool that gets built with the bootstrap binaries is
+GNU Make, which is a prerequisite for all the following packages.
+From there Findutils and Diffutils get built.
+
+Then come the first-stage Binutils and GCC, built as pseudo cross
+tools---i.e., with @code{--target} equal to @code{--host}. They are
+used to build libc. Thanks to this cross-build trick, this libc is
+guaranteed not to hold any reference to the initial tool chain.
+
+From there the final Binutils and GCC are built. GCC uses @code{ld}
+from the final Binutils, and links programs against the just-built libc.
+This tool chain is used to build the other packages used by Guix and by
+the GNU Build System: Guile, Bash, Coreutils, etc.
+
+And voilà! At this point we have the complete set of build tools that
+the GNU Build System expects. These are in the @code{%final-inputs}
+variables of the @code{(gnu packages base)} module, and are implicitly
+used by any package that uses @code{gnu-build-system} (@pxref{Defining
+Packages}).
+
+
+@unnumberedsubsec Building the Bootstrap Binaries
+
+Because the final tool chain does not depend on the bootstrap binaries,
+those rarely need to be updated. Nevertheless, it is useful to have an
+automated way to produce them, should an update occur, and this is what
+the @code{(gnu packages make-bootstrap)} module provides.
+
+The following command builds the tarballs containing the bootstrap
+binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
+of Coreutils and other basic command-line tools):
+
+@example
+guix build bootstrap-tarballs
+@end example
+
+The generated tarballs are those that should be referred to in the
+@code{(gnu packages bootstrap)} module mentioned at the beginning of
+this section.
+
+Still here? Then perhaps by now you've started to wonder: when do we
+reach a fixed point? That is an interesting question! The answer is
+unknown, but if you would like to investigate further (and have
+significant computational and storage resources to do so), then let us
+know.
+
+@node Porting
+@section Porting to a New Platform
+
+As discussed above, the GNU distribution is self-contained, and
+self-containment is achieved by relying on pre-built ``bootstrap
+binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
+operating system kernel, CPU architecture, and application binary
+interface (ABI). Thus, to port the distribution to a platform that is
+not yet supported, one must build those bootstrap binaries, and update
+the @code{(gnu packages bootstrap)} module to use them on that platform.
+
+Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
+When everything goes well, and assuming the GNU tool chain supports the
+target platform, this can be as simple as running a command like this
+one:
+
+@example
+guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
+@end example
+
+Once these are built, the @code{(gnu packages bootstrap)} module needs
+to be updated to refer to these binaries on the target platform. In
+addition, the @code{glibc-dynamic-linker} procedure in that module must
+be augmented to return the right file name for libc's dynamic linker on
+that platform; likewise, @code{system->linux-architecture} in @code{(gnu
+packages linux)} must be taught about the new platform.
+
+In practice, there may be some complications. First, it may be that the
+extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
+above) is not recognized by all the GNU tools. Typically, glibc
+recognizes some of these, whereas GCC uses an extra @code{--with-abi}
+configure flag (see @code{gcc.scm} for examples of how to handle this).
+Second, some of the required packages could fail to build for that
+platform. Lastly, the generated binaries could be broken for some
+reason.
+
+
@c *********************************************************************
@node Contributing
@chapter Contributing
diff --git a/gnu-system.am b/gnu-system.am
index 22bb4ef70d..7d2fbcce89 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -297,7 +297,6 @@ dist_patch_DATA = \
gnu/packages/patches/doxygen-tmake.patch \
gnu/packages/patches/emacs-configure-sh.patch \
gnu/packages/patches/findutils-absolute-paths.patch \
- gnu/packages/patches/flac-fix-memcmp-not-declared.patch \
gnu/packages/patches/flex-bison-tests.patch \
gnu/packages/patches/gawk-shell.patch \
gnu/packages/patches/gcc-cross-environment-variables.patch \
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index 29fa409a8c..c689c9c81d 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -50,8 +50,12 @@
(dtd (string-append out "/xml/dtd/docbook")))
(mkdir-p dtd)
(with-directory-excursion dtd
- (system* unzip source))))
- #:modules ((guix build utils))))
+ (system* unzip source))
+ (substitute* (string-append out "/xml/dtd/docbook/catalog.xml")
+ (("uri=\"")
+ (string-append
+ "uri=\"file://" dtd "/")))))
+ #:modules ((guix build utils))))
(native-inputs `(("unzip" ,unzip)))
(home-page "http://docbook.org")
(synopsis "DocBook XML DTDs for document authoring")
@@ -61,20 +65,42 @@ suited to books and papers about computer hardware and software (though it is
by no means limited to these applications.) This package provides XML DTDs.")
(license (x11-style "" "See file headers."))))
+(define-public docbook-xml-4.4
+ (package (inherit docbook-xml)
+ (version "4.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://www.docbook.org/xml/" version
+ "/docbook-xml-" version ".zip"))
+ (sha256
+ (base32
+ "141h4zsyc71sfi2zzd89v4bb4qqq9ca1ri9ix2als9f4i3mmkw82"))))))
+
+(define-public docbook-xml-4.3
+ (package (inherit docbook-xml)
+ (version "4.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://www.docbook.org/xml/" version
+ "/docbook-xml-" version ".zip"))
+ (sha256
+ (base32
+ "0r1l2if1z4wm2v664sqdizm4gak6db1kx9y50jq89m3gxaa8l1i3"))))))
+
(define-public docbook-xsl
(package
(name "docbook-xsl")
- (version "1.72.0")
+ (version "1.78.1")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/docbook/docbook-xsl-"
version ".tar.bz2"))
(sha256
(base32
- "1cnrfgqz8pc9wnlgqjch2338ad7jki6d4h6b2fhaxn1a2201df5k"))))
+ "0rxl013ncmz1n6ymk2idvx3hix9pdabk8xn01cpcv32wmfb753y9"))))
(build-system trivial-build-system)
(arguments
- `(#:builder (begin
+ `(#:builder (let ((name-version (string-append ,name "-" ,version)))
(use-modules (guix build utils))
(let* ((bzip2 (assoc-ref %build-inputs "bzip2"))
@@ -86,10 +112,13 @@ by no means limited to these applications.) This package provides XML DTDs.")
(system* (string-append tar "/bin/tar") "xvf" source)
(mkdir-p xsl)
- (copy-recursively (string-append ,name "-" ,version)
- (string-append xsl "/" ,name
- "-" ,version))))
- #:modules ((guix build utils))))
+ (copy-recursively name-version
+ (string-append xsl "/" name-version))
+
+ (substitute* (string-append xsl "/" name-version "/catalog.xml")
+ (("rewritePrefix=\"./")
+ (string-append "rewritePrefix=\"file://" xsl "/" name-version "/")))))
+ #:modules ((guix build utils))))
(native-inputs `(("bzip2" ,bzip2)
("tar" ,tar)))
(home-page "http://docbook.org")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a043d8d4d2..893c3e8a6b 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -26,6 +26,7 @@
#:use-module (gnu packages)
#:use-module (gnu packages bison)
#:use-module (gnu packages flex)
+ #:use-module (gnu packages docbook)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages gstreamer)
@@ -136,14 +137,24 @@ The gnome-about program helps find which version of GNOME is installed.")
(base32
"19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb"))))
(build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (alist-cons-before
+ 'check 'pre-check
+ (lambda* (#:key inputs #:allow-other-keys #:rest args)
+ ;; This is needed, because without it, xmlint etc tries
+ ;; to download docbookx.dtd from the net
+ (setenv "XML_CATALOG_FILES"
+ (string-append (assoc-ref inputs "docbook-xml")
+ "/xml/dtd/docbook/catalog.xml")))
+ %standard-phases)))
(native-inputs
`(("intltool" ,intltool)
+ ("docbook-xml" ,docbook-xml-4.4)
("libxml2" ,libxml2)
("libxslt" ,libxslt)
("pkg-config" ,pkg-config)
("python-2" ,python-2)))
- (arguments
- `(#:tests? #f)) ; tries to load http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd
(home-page "https://wiki.gnome.org/GnomeDocUtils")
(synopsis
"Documentation utilities for the Gnome project")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index d33492a1af..b9864f4f44 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1187,10 +1187,15 @@ system.")
"0c34b0za2v0934acvgnva0vaqpghmmhz4zh7k0m9jd4mbc91byqm"))
(modules '((guix build utils)))
(snippet
- '(substitute* "tests/Makefile.in"
- ;; The '%: %.in' rule incorrectly uses @VERSION@.
- (("@VERSION@")
- "[@]VERSION[@]")))))
+ '(begin
+ (substitute* "tests/Makefile.in"
+ ;; The '%: %.in' rule incorrectly uses @VERSION@.
+ (("@VERSION@")
+ "[@]VERSION[@]"))
+ (substitute* '("src/unicode_start" "src/unicode_stop")
+ ;; Assume the Coreutils are in $PATH.
+ (("/usr/bin/tty")
+ "tty"))))))
(build-system gnu-build-system)
(arguments
'(#:phases (alist-cons-before
@@ -1203,7 +1208,17 @@ system.")
(string-append gzip "/bin/gzip"))
(("bzip2")
(string-append bzip2 "/bin/bzip2")))))
- %standard-phases)))
+ (alist-cons-after
+ 'install 'post-install
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; Make sure these programs find their comrades.
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (for-each (lambda (prog)
+ (wrap-program (string-append bin "/" prog)
+ `("PATH" ":" prefix (,bin))))
+ '("unicode_start" "unicode_stop"))))
+ %standard-phases))))
(inputs `(("check" ,check)
("gzip" ,guix:gzip)
("bzip2" ,guix:bzip2)
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 5ab537aa8a..cf808970ce 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -111,7 +111,7 @@ Nix package manager.")
(define-public guix
;; Development version of Guix.
- (let ((commit "20b1d19"))
+ (let ((commit "0ae8c15"))
(package (inherit guix-0.6)
(version (string-append "0.6." commit))
(source (origin
@@ -122,7 +122,7 @@ Nix package manager.")
(recursive? #t)))
(sha256
(base32
- "0n278kzp586rzbhcghbj7am641yjc35pcb6n1r304myziwd0mz6r"))))
+ "1y6mwzwsjdxbfibqypb55dix371rifhfz0bygfr8k868lcdsawic"))))
(arguments
(substitute-keyword-arguments (package-arguments guix-0.6)
((#:phases phases)
diff --git a/gnu/packages/patches/flac-fix-memcmp-not-declared.patch b/gnu/packages/patches/flac-fix-memcmp-not-declared.patch
deleted file mode 100644
index 9dd5c81ba5..0000000000
--- a/gnu/packages/patches/flac-fix-memcmp-not-declared.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-See http://sourceforge.net/p/flac/bugs/364/
-
-diff -Naur flac-1.2.1-orig/examples/cpp/encode/file/main.cpp flac-1.2.1-ae/examples/cpp/encode/file/main.cpp
---- flac-1.2.1-orig/examples/cpp/encode/file/main.cpp 2012-12-27 20:15:11.000000000 +0100
-+++ flac-1.2.1-ae/examples/cpp/encode/file/main.cpp 2012-12-27 20:25:01.000000000 +0100
-@@ -30,6 +30,7 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <string.h>
- #include "FLAC++/metadata.h"
- #include "FLAC++/encoder.h"
-
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 9946b3adcf..075113ca9d 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -56,14 +56,14 @@
(define-public ffmpeg
(package
(name "ffmpeg")
- (version "2.2.1")
+ (version "2.3")
(source (origin
(method url-fetch)
(uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-"
version ".tar.bz2"))
(sha256
(base32
- "153kfk8rzrfxx930rrk417b2m695dvy47v4hci3nd49iggx9jzz1"))))
+ "17l0bx95al6cjhz3pzfcbwg07sbfbwqbxg34zl5lhl89w9jbngbb"))))
(build-system gnu-build-system)
(inputs
`(("fontconfig" ,fontconfig)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 6e94953bfe..4bf714bfe7 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -528,25 +528,19 @@ help you implement simple HTTP servers.")
(alist-cons-before
'build 'pre-build
(lambda* (#:key inputs #:allow-other-keys #:rest args)
- ;; This stuff is needed, because without it, xmlint etc tries
- ;; to download docbookx.dtd and docbook.xsl from the net
- (let ((build (assoc-ref %standard-phases 'build))
- (docbook-xml (assoc-ref inputs "docbook-xml"))
- (docbook-xsl (assoc-ref inputs "docbook-xsl"))
- (our-catalog "/tmp/docbook-xml.xml"))
- (setenv "XML_CATALOG_FILES" our-catalog)
- (with-output-to-file our-catalog
- (lambda ()
- (display (string-append
- "<?xml version=\"1.0\"?>
-<!DOCTYPE catalog PUBLIC \"-//OASIS//DTD XML Catalogs V1.0//EN\"
-\"file:///usr/share/xml/schema/xml-core/catalog.dtd\">
-<catalog xmlns=\"urn:oasis:names:tc:entity:xmlns:xml:catalog\">
-<system systemId=\"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\"
-uri=\"file://" docbook-xml "/xml/dtd/docbook/docbookx.dtd\"/>
-<system systemId=\"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\"
-uri=\"file://" docbook-xsl "/xml/xsl/docbook-xsl-1.72.0/manpages/docbook.xsl\"/>
-</catalog>\n"))))))
+ ;; Uncommenting the next two lines may assist in debugging
+ ;; (substitute* "docs/man5/Makefile" (("a2x") "a2x -v"))
+ ;; (setenv "XML_DEBUG_CATALOG" "1")
+
+ (setenv "XML_CATALOG_FILES"
+ (string-append
+ (assoc-ref inputs "docbook-xsl")
+ "/xml/xsl/docbook-xsl-1.78.1/catalog.xml"
+ ;; Contrary to the documentation, the file names must
+ ;; be separated by a space, not a colon.
+ " "
+ (assoc-ref inputs "docbook-xml")
+ "/xml/dtd/docbook/catalog.xml")))
%standard-phases)))
;; All of the below are used to generate the documentation
;; (Should they be propagated inputs of asciidoc ??)
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 03cf0e49d2..8259be3f7d 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -49,14 +49,14 @@
(define libogg
(package
(name "libogg")
- (version "1.3.0")
+ (version "1.3.2")
(source (origin
(method url-fetch)
(uri (string-append "http://downloads.xiph.org/releases/ogg/libogg-"
version ".tar.xz"))
(sha256
(base32
- "0jy79ffkl34vycnwfsj4svqsdg1lwy2l1rr49y8r4d44kh12a5r3"))))
+ "16z74q422jmprhyvy7c9x909li8cqzmvzyr8cgbm52xcsp6pqs1z"))))
(build-system gnu-build-system)
(synopsis "libogg, a library for manipulating the ogg multimedia format")
(description
@@ -72,14 +72,14 @@ periodic timestamps for seeking.")
(define libvorbis
(package
(name "libvorbis")
- (version "1.3.3")
+ (version "1.3.4")
(source (origin
(method url-fetch)
(uri (string-append "http://downloads.xiph.org/releases/vorbis/libvorbis-"
version ".tar.xz"))
(sha256
(base32
- "1gby6hapz9njx4l9g0pndyk4q83z5fgrgc30mfwfgx7bllspsk43"))))
+ "0wpk87jnhngcl3nc5i39flkycx1sjzilx8jjx4zc4p8r55ylj19g"))))
(build-system gnu-build-system)
(propagated-inputs `(("libogg" ,libogg)))
(arguments `(#:configure-flags '("LDFLAGS=-lm")
@@ -192,16 +192,14 @@ OpenBSD's sndio.")
(define flac
(package
(name "flac")
- (version "1.2.1")
+ (version "1.3.0")
(source (origin
(method url-fetch)
(uri (string-append "http://downloads.xiph.org/releases/flac/flac-"
- version ".tar.gz"))
+ version ".tar.xz"))
(sha256
(base32
- "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"))
- (patches
- (list (search-patch "flac-fix-memcmp-not-declared.patch")))))
+ "1p0hh190kqvpkbk1bbajd81jfbmkyl4fn2i7pggk2zppq6m68bgs"))))
(build-system gnu-build-system)
(arguments
`(#:parallel-tests? #f
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index acda08d19a..55ee5c4b08 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -25,7 +25,7 @@
#:use-module (gnu system linux) ; 'pam-service', etc.
#:use-module (gnu packages admin)
#:use-module ((gnu packages linux)
- #:select (udev))
+ #:select (udev kbd))
#:use-module ((gnu packages base)
#:select (glibc-final))
#:use-module (gnu packages package-management)
@@ -38,6 +38,7 @@
file-system-service
user-processes-service
host-name-service
+ console-font-service
udev-service
mingetty-service
nscd-service
@@ -199,6 +200,50 @@ stopped before 'kill' is called."
(sethostname #$name)))
(respawn? #f)))))
+(define (unicode-start tty)
+ "Return a gexp to start Unicode support on @var{tty}."
+
+ ;; We have to run 'unicode_start' in a pipe so that when it invokes the
+ ;; 'tty' command, that command returns TTY.
+ #~(begin
+ (let ((pid (primitive-fork)))
+ (case pid
+ ((0)
+ (close-fdes 0)
+ (dup2 (open-fdes #$tty O_RDONLY) 0)
+ (close-fdes 1)
+ (dup2 (open-fdes #$tty O_WRONLY) 1)
+ (execl (string-append #$kbd "/bin/unicode_start")
+ "unicode_start"))
+ (else
+ (zero? (cdr (waitpid pid))))))))
+
+(define* (console-font-service tty #:optional (font "LatGrkCyr-8x16"))
+ "Return a service that sets up Unicode support in @var{tty} and loads
+@var{font} for that tty (fonts are per virtual console in Linux.)"
+ ;; Note: 'LatGrkCyr-8x16' has the advantage of providing three common
+ ;; scripts as well as glyphs for em dash, quotation marks, and other Unicode
+ ;; codepoints notably found in the UTF-8 manual.
+ (let ((device (string-append "/dev/" tty)))
+ (with-monad %store-monad
+ (return (service
+ (documentation "Load a Unicode console font.")
+ (provision (list (symbol-append 'console-font-
+ (string->symbol tty))))
+
+ ;; Start after mingetty has been started on TTY, otherwise the
+ ;; settings are ignored.
+ (requirement (list (symbol-append 'term-
+ (string->symbol tty))))
+
+ (start #~(lambda _
+ (and #$(unicode-start device)
+ (zero?
+ (system* (string-append #$kbd "/bin/setfont")
+ "-C" #$device #$font)))))
+ (stop #~(const #t))
+ (respawn? #f))))))
+
(define* (mingetty-service tty
#:key
(motd (text-file "motd" "Welcome.\n"))
@@ -290,7 +335,7 @@ the ``message of the day''."
# level notice or higher and anything of level err or
# higher to the console.
# Don't log private authentication messages!
- *.err;auth.notice;authpriv.none /dev/console
+ *.alert;auth.notice;authpriv.none /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
@@ -469,7 +514,14 @@ passed to @command{guix-daemon}."
;; Convenience variable holding the basic services.
(let ((motd (text-file "motd" "
This is the GNU operating system, welcome!\n\n")))
- (list (mingetty-service "tty1" #:motd motd)
+ (list (console-font-service "tty1")
+ (console-font-service "tty2")
+ (console-font-service "tty3")
+ (console-font-service "tty4")
+ (console-font-service "tty5")
+ (console-font-service "tty6")
+
+ (mingetty-service "tty1" #:motd motd)
(mingetty-service "tty2" #:motd motd)
(mingetty-service "tty3" #:motd motd)
(mingetty-service "tty4" #:motd motd)
diff --git a/gnu/system.scm b/gnu/system.scm
index 82397be3a3..20942ec7f0 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -222,7 +222,12 @@ explicitly appear in OS."
lsof ;for Guix's 'list-runtime-roots'
util-linux inetutils isc-dhcp
net-tools ; XXX: remove when Inetutils suffices
- module-init-tools udev kbd
+
+ ;; Get 'insmod' & co. from kmod, not module-init-tools, since udev
+ ;; already depends on it anyway.
+ kmod udev
+
+ e2fsprogs kbd
;; The packages below are also in %FINAL-INPUTS, so take them from
;; there to avoid duplication.
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index b30c5577e4..07e8938ba0 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -40,7 +40,7 @@ manual."
#~(execl (string-append #$texinfo-4 "/bin/info") "info"
"-d" "/run/current-system/profile/share/info"
"-f" (string-append #$guix "/share/info/guix.info")
- "-n" "System Configuration")))
+ "-n" "System Installation")))
(define (installation-services)
"Return the list services for the installation image."
@@ -63,7 +63,9 @@ You have been warned. Thanks for being so brave.
#:motd motd
#:auto-login "root")
- ;; Documentation.
+ ;; Documentation. The manual is in UTF-8, but
+ ;; 'console-font-service' sets up Unicode support and loads a font
+ ;; with all the useful glyphs like em dash and quotation marks.
(mingetty-service "tty2"
#:motd motd
#:auto-login "guest"
@@ -86,6 +88,14 @@ You have been warned. Thanks for being so brave.
;; Start udev so that useful device nodes are available.
(udev-service)
+ ;; Install Unicode support and a suitable font.
+ (console-font-service "tty1")
+ (console-font-service "tty2")
+ (console-font-service "tty3")
+ (console-font-service "tty4")
+ (console-font-service "tty5")
+ (console-font-service "tty6")
+
(nscd-service))))
(define %issue
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index afbfc692d3..9e39f2d663 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -57,11 +57,13 @@
(to-copy '())
(linux #f)
(linux-modules '()))
- "Return a package that contains a Linux initrd (a gzipped cpio archive)
-containing GUILE and that evaluates EXP upon booting. LINUX-MODULES is a list
-of `.ko' file names to be copied from LINUX into the initrd. TO-COPY is a
-list of additional derivations or packages to copy to the initrd. MODULES is
-a list of Guile module names to be embedded in the initrd."
+ "Return a derivation that builds a Linux initrd (a gzipped cpio archive)
+containing GUILE and that evaluates EXP, a G-expression, upon booting.
+
+LINUX-MODULES is a list of '.ko' file names to be copied from LINUX into the
+initrd. TO-COPY is a list of additional derivations or packages to copy to
+the initrd. MODULES is a list of Guile module names to be embedded in the
+initrd."
;; General Linux overview in `Documentation/early-userspace/README' and
;; `Documentation/filesystems/ramfs-rootfs-initramfs.txt'.
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 7d6a882787..c9f6cbe99a 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -60,7 +60,12 @@
(define (write-gexp gexp port)
"Write GEXP on PORT."
(display "#<gexp " port)
- (write (apply (gexp-proc gexp) (gexp-references gexp)) port)
+
+ ;; Try to write the underlying sexp. Now, this trick doesn't work when
+ ;; doing things like (ungexp-splicing (gexp ())) because GEXP's procedure
+ ;; tries to use 'append' on that, which fails with wrong-type-arg.
+ (false-if-exception
+ (write (apply (gexp-proc gexp) (gexp-references gexp)) port))
(format port " ~a>"
(number->string (object-address gexp) 16)))
@@ -377,7 +382,8 @@ its search path."
(gexp
(call-with-output-file (ungexp output)
(lambda (port)
- (write '(ungexp exp) port))))))
+ (write '(ungexp exp) port))))
+ #:local-build? #t))
diff --git a/guix/records.scm b/guix/records.scm
index 37d34b4c81..cd887b77ce 100644
--- a/guix/records.scm
+++ b/guix/records.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -34,6 +34,14 @@
;;;
;;; Code:
+(define-syntax record-error
+ (syntax-rules ()
+ "Report a syntactic error in use of CONSTRUCTOR."
+ ((_ constructor form fmt args ...)
+ (syntax-violation constructor
+ (format #f fmt args ...)
+ form))))
+
(define-syntax define-record-type*
(lambda (s)
"Define the given record type such that an additional \"syntactic
@@ -61,6 +69,14 @@ thunked fields."
field+value)
car))
+ ;; Make sure there are no unknown field names.
+ (let* ((fields (map (compose car syntax->datum)
+ field+value))
+ (unexpected (lset-difference eq? fields 'expected)))
+ (when (pair? unexpected)
+ (record-error 'name s "extraneous field initializers ~a"
+ unexpected)))
+
#`(make-struct type 0
#,@(map (lambda (field index)
(or (field-inherited-value field)
@@ -107,25 +123,21 @@ thunked fields."
#`(lambda () #,value)
value))))
- (let-syntax ((error*
- (syntax-rules ()
- ((_ fmt args (... ...))
- (syntax-violation 'name
- (format #f fmt args
- (... ...))
- s)))))
- (let ((fields (append fields (map car dflt))))
- (cond ((lset= eq? fields 'expected)
- #`(let* #,(field-bindings
- #'((field value) (... ...)))
- (ctor #,@(map field-value 'expected))))
- ((pair? (lset-difference eq? fields 'expected))
- (error* "extraneous field initializers ~a"
- (lset-difference eq? fields 'expected)))
- (else
- (error* "missing field initializers ~a"
- (lset-difference eq? 'expected
- fields)))))))))))))
+ (let ((fields (append fields (map car dflt))))
+ (cond ((lset= eq? fields 'expected)
+ #`(let* #,(field-bindings
+ #'((field value) (... ...)))
+ (ctor #,@(map field-value 'expected))))
+ ((pair? (lset-difference eq? fields 'expected))
+ (record-error 'name s
+ "extraneous field initializers ~a"
+ (lset-difference eq? fields
+ 'expected)))
+ (else
+ (record-error 'name s
+ "missing field initializers ~a"
+ (lset-difference eq? 'expected
+ fields))))))))))))
(define (field-default-value s)
(syntax-case s (default)
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index c65a7d0cfb..af7beb748b 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -201,8 +201,8 @@ update would trigger a complete rebuild."
(filter-map (match-lambda
(('argument . value)
(let ((p (find-packages-by-name value)))
- (unless p
- (leave (_ "~a: no package by that name")
+ (when (null? p)
+ (leave (_ "~a: no package by that name~%")
value))
p))
(_ #f))
diff --git a/po/guix/eo.po b/po/guix/eo.po
index 7d67da61ea..ec64cc8ef1 100644
--- a/po/guix/eo.po
+++ b/po/guix/eo.po
@@ -5,13 +5,13 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: guix 0.6-pre1\n"
+"Project-Id-Version: guix 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
-"POT-Creation-Date: 2014-06-14 22:38+0200\n"
-"PO-Revision-Date: 2014-06-03 09:35-0300\n"
+"POT-Creation-Date: 2014-07-13 17:06+0200\n"
+"PO-Revision-Date: 2014-07-14 11:29-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
-"Language: eo\n"
+"Language: Esperanto\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,12 +22,12 @@ msgstr ""
msgid "cannot access `~a': ~a~%"
msgstr "ne eblas atingi '~a': ~a~%"
-#: guix/scripts/build.scm:54 guix/scripts/package.scm:337
+#: guix/scripts/build.scm:54 guix/scripts/package.scm:349
#, scheme-format
msgid "ambiguous package specification `~a'~%"
msgstr "plursenca pak-specifigo '~a'~%"
-#: guix/scripts/build.scm:55 guix/scripts/package.scm:339
+#: guix/scripts/build.scm:55 guix/scripts/package.scm:351
#, scheme-format
msgid "choosing ~a from ~a~%"
msgstr "ni elektas ~a el ~a~%"
@@ -69,8 +69,7 @@ msgid ""
" --fallback fall back to building when the substituter fails"
msgstr ""
"\n"
-" --fallback retropaŝi al konstruado kiam la anstataŭiganto "
-"fiaskas"
+" --fallback retropaŝi al konstruado kiam la anstataŭiganto fiaskas"
#: guix/scripts/build.scm:129
msgid ""
@@ -78,8 +77,7 @@ msgid ""
" --no-substitutes build instead of resorting to pre-built substitutes"
msgstr ""
"\n"
-" --no-substitutes konstrui anstataŭ provi jam-konstruitajn "
-"anstataŭigantojn"
+" --no-substitutes konstrui anstataŭ provi jam-konstruitajn anstataŭigantojn"
#: guix/scripts/build.scm:131
msgid ""
@@ -97,8 +95,7 @@ msgid ""
msgstr ""
"\n"
" --max-silent-time=SEKUNDOJ\n"
-" marki la konstruon kiel fiaskintan post SEKUNDOJ da "
-"silento"
+" marki la konstruon kiel fiaskintan post SEKUNDOJ da silento"
#: guix/scripts/build.scm:136
msgid ""
@@ -106,8 +103,7 @@ msgid ""
" --timeout=SECONDS mark the build as failed after SECONDS of activity"
msgstr ""
"\n"
-" --timeout=SEKUNDOJ marki la konstruon kiel fiaskintan post SEKUNDOJ da "
-"aktivado"
+" --timeout=SEKUNDOJ marki la konstruon kiel fiaskintan post SEKUNDOJ da aktivado"
#: guix/scripts/build.scm:138
msgid ""
@@ -195,8 +191,7 @@ msgid ""
" as a garbage collector root"
msgstr ""
"\n"
-" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj "
-"registri\n"
+" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj registri\n"
" ĝin kiel radikon de rubaĵ-kolektanto"
#: guix/scripts/build.scm:241
@@ -205,13 +200,12 @@ msgid ""
" --log-file return the log file names for the given derivations"
msgstr ""
"\n"
-" --log-file liveri la protokol-dosierajn nomojn por la "
-"indikitaj derivaĵoj"
+" --log-file liveri la protokol-dosierajn nomojn por la indikitaj derivaĵoj"
#: guix/scripts/build.scm:246 guix/scripts/download.scm:53
-#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58
+#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58
#: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82
-#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:142
+#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334
msgid ""
"\n"
" -h, --help display this help and exit"
@@ -220,9 +214,9 @@ msgstr ""
" -h, --help montri ĉi tiun helpon kaj eliri"
#: guix/scripts/build.scm:248 guix/scripts/download.scm:55
-#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60
+#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60
#: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84
-#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:144
+#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336
msgid ""
"\n"
" -V, --version display version information and exit"
@@ -236,8 +230,8 @@ msgid "sources do not match any package:~{ ~a~}~%"
msgstr "fontoj ne kongruas al iu ajn pako:~{ ~a~}~%"
#: guix/scripts/build.scm:397 guix/scripts/download.scm:96
-#: guix/scripts/package.scm:744 guix/scripts/gc.scm:122
-#: guix/scripts/pull.scm:115 guix/scripts/system.scm:190
+#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122
+#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: nerekonata modifilo~%"
@@ -286,73 +280,73 @@ msgstr "~a: analizo de URI fiaskis~%"
msgid "~a: download failed~%"
msgstr "~a: elŝuto fiaskis~%"
-#: guix/scripts/package.scm:76
+#: guix/scripts/package.scm:88
#, scheme-format
msgid "failed to build the empty profile~%"
msgstr "fiasko dum konstruo de malplena profilo~%"
-#: guix/scripts/package.scm:85
+#: guix/scripts/package.scm:97
#, scheme-format
msgid "switching from generation ~a to ~a~%"
msgstr "alterno el generacio ~a al ~a~%"
-#: guix/scripts/package.scm:96 guix/scripts/package.scm:852
-#: guix/scripts/package.scm:964
+#: guix/scripts/package.scm:108 guix/scripts/package.scm:866
+#: guix/scripts/package.scm:978
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "profilo '~a' ne ekzistas~%"
-#: guix/scripts/package.scm:100
+#: guix/scripts/package.scm:112
#, scheme-format
msgid "nothing to do: already at the empty profile~%"
msgstr "nenio por fari: jam estas ĉe la malplena profilo~%"
-#: guix/scripts/package.scm:185
+#: guix/scripts/package.scm:197
#, scheme-format
msgid "The following package would be removed:~%~{~a~%~}~%"
msgstr "La jena pako devos esti forigata:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:190
+#: guix/scripts/package.scm:202
#, scheme-format
msgid "The following package will be removed:~%~{~a~%~}~%"
msgstr "La jena pako estos forigata:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:202
+#: guix/scripts/package.scm:214
#, scheme-format
msgid "The following package would be installed:~%~{~a~%~}~%"
msgstr "La jena pako estus instalata:~% ~{~a~%~}~%"
-#: guix/scripts/package.scm:207
+#: guix/scripts/package.scm:219
#, scheme-format
msgid "The following package will be installed:~%~{~a~%~}~%"
msgstr "La jena pako estos instalata:~% ~{~a~%~}~%"
-#: guix/scripts/package.scm:327
+#: guix/scripts/package.scm:339
#, scheme-format
msgid "package `~a' lacks output `~a'~%"
msgstr "pako '~a' malhavas eligon '~a'~%"
-#: guix/scripts/package.scm:344
+#: guix/scripts/package.scm:356
#, scheme-format
msgid "~a: package not found~%"
msgstr "~a: pako ne trovita~%"
-#: guix/scripts/package.scm:379
+#: guix/scripts/package.scm:391
#, scheme-format
msgid "looking for the latest release of GNU ~a..."
msgstr "ni serĉas la lastan eldonon de GNU ~a..."
-#: guix/scripts/package.scm:383
+#: guix/scripts/package.scm:395
#, scheme-format
msgid "~a: note: using ~a but ~a is available upstream~%"
msgstr "~a: rimarko: ni uzas ~a sed ~a disponeblas unuanivele~%"
-#: guix/scripts/package.scm:455
+#: guix/scripts/package.scm:467
#, scheme-format
msgid "The following environment variable definitions may be needed:~%"
msgstr "La jenaj medi-variablaj difinoj povos esti necesaj:~%"
-#: guix/scripts/package.scm:471
+#: guix/scripts/package.scm:483
msgid ""
"Usage: guix package [OPTION]... PACKAGES...\n"
"Install, remove, or upgrade PACKAGES in a single transaction.\n"
@@ -360,7 +354,7 @@ msgstr ""
"Uzmaniero: guix package [MODIFILO]... PAKOJ...\n"
"Instalas, forigas, aŭ ĝisdatigas PAKOJn en ununura ago.\n"
-#: guix/scripts/package.scm:473
+#: guix/scripts/package.scm:485
msgid ""
"\n"
" -i, --install=PACKAGE install PACKAGE"
@@ -368,7 +362,7 @@ msgstr ""
"\n"
" -i, --install=PAKO instali PAKOn"
-#: guix/scripts/package.scm:475
+#: guix/scripts/package.scm:487
msgid ""
"\n"
" -e, --install-from-expression=EXP\n"
@@ -378,7 +372,7 @@ msgstr ""
" -e, --install-from-expression=ESP\n"
" instali la pakon ESP rezultas al"
-#: guix/scripts/package.scm:478
+#: guix/scripts/package.scm:490
msgid ""
"\n"
" -r, --remove=PACKAGE remove PACKAGE"
@@ -386,16 +380,15 @@ msgstr ""
"\n"
" -r, --remove=PAKO forigi PAKOn"
-#: guix/scripts/package.scm:480
+#: guix/scripts/package.scm:492
msgid ""
"\n"
" -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
msgstr ""
"\n"
-" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al "
-"REGESP"
+" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al REGESP"
-#: guix/scripts/package.scm:482
+#: guix/scripts/package.scm:494
msgid ""
"\n"
" --roll-back roll back to the previous generation"
@@ -403,7 +396,7 @@ msgstr ""
"\n"
" --roll-back retropaŝi al la antaŭa generacio"
-#: guix/scripts/package.scm:484
+#: guix/scripts/package.scm:496
msgid ""
"\n"
" --search-paths display needed environment variable definitions"
@@ -411,7 +404,7 @@ msgstr ""
"\n"
" --search-paths montri necesajn medi-variablajn difinojn"
-#: guix/scripts/package.scm:486
+#: guix/scripts/package.scm:498
msgid ""
"\n"
" -l, --list-generations[=PATTERN]\n"
@@ -421,7 +414,7 @@ msgstr ""
" -I, --list-generations[=ŜABLONO]\n"
" listigi generaciojn kongruantajn al ŜABLONO"
-#: guix/scripts/package.scm:489
+#: guix/scripts/package.scm:501
msgid ""
"\n"
" -d, --delete-generations[=PATTERN]\n"
@@ -431,16 +424,15 @@ msgstr ""
" -d, --delete-generations[=ŜABLONO]\n"
" forigi generaciojn kongruantajn al ŜABLONO"
-#: guix/scripts/package.scm:492
+#: guix/scripts/package.scm:504
msgid ""
"\n"
" -p, --profile=PROFILE use PROFILE instead of the user's default profile"
msgstr ""
"\n"
-" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la "
-"uzanto"
+" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la uzanto"
-#: guix/scripts/package.scm:495
+#: guix/scripts/package.scm:507
msgid ""
"\n"
" --bootstrap use the bootstrap Guile to build the profile"
@@ -448,7 +440,7 @@ msgstr ""
"\n"
" --bootstrap uzi la praŝargilon Guile por konstrui la profilon"
-#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75
+#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75
msgid ""
"\n"
" --verbose produce verbose output"
@@ -456,7 +448,7 @@ msgstr ""
"\n"
" --verbose produkti detalplenan eligon"
-#: guix/scripts/package.scm:500
+#: guix/scripts/package.scm:512
msgid ""
"\n"
" -s, --search=REGEXP search in synopsis and description using REGEXP"
@@ -464,7 +456,7 @@ msgstr ""
"\n"
" -s, --search=REGESP serĉi en resumo kaj priskribo uzante REGESP"
-#: guix/scripts/package.scm:502
+#: guix/scripts/package.scm:514
msgid ""
"\n"
" -I, --list-installed[=REGEXP]\n"
@@ -474,7 +466,7 @@ msgstr ""
" -I, --list-installed[=REGESP]\n"
" listigi instalitajn pakojn kongruantajn al REGESP"
-#: guix/scripts/package.scm:505
+#: guix/scripts/package.scm:517
msgid ""
"\n"
" -A, --list-available[=REGEXP]\n"
@@ -484,62 +476,62 @@ msgstr ""
" -A, --list-available[=REGESP]\n"
" listigi disponeblajn pakojn kongruantajn al REGESP"
-#: guix/scripts/package.scm:748
+#: guix/scripts/package.scm:760
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr "~A: fremda argumento~%"
-#: guix/scripts/package.scm:763
+#: guix/scripts/package.scm:775
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%"
-#: guix/scripts/package.scm:785
+#: guix/scripts/package.scm:797
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "eraro: dum kreo de dosierujo '~a': ~a~%"
-#: guix/scripts/package.scm:789
+#: guix/scripts/package.scm:801
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%"
-#: guix/scripts/package.scm:796
+#: guix/scripts/package.scm:808
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%"
-#: guix/scripts/package.scm:799
+#: guix/scripts/package.scm:811
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%"
-#: guix/scripts/package.scm:822
+#: guix/scripts/package.scm:836
#, scheme-format
msgid "deleting ~a~%"
msgstr "ni forigas ~a~%"
-#: guix/scripts/package.scm:875 guix/scripts/package.scm:980
+#: guix/scripts/package.scm:889 guix/scripts/package.scm:994
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "malvalida sintakso: ~a~%"
-#: guix/scripts/package.scm:904
+#: guix/scripts/package.scm:918
#, scheme-format
msgid "nothing to be done~%"
msgstr "nenio por fari~%"
-#: guix/scripts/package.scm:927
+#: guix/scripts/package.scm:941
#, scheme-format
msgid "~a package in profile~%"
msgstr "pako ~a en profilo~%"
-#: guix/scripts/package.scm:942
+#: guix/scripts/package.scm:956
#, scheme-format
msgid "Generation ~a\t~a"
msgstr "Generacio ~a\t~a"
-#: guix/scripts/package.scm:949
+#: guix/scripts/package.scm:963
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(nuna)~%"
@@ -761,8 +753,8 @@ msgstr "subskribo en '~a' estas difektita~%"
#: guix/scripts/substitute-binary.scm:338
#, scheme-format
-msgid "narinfo for '~a' lacks a signature~%"
-msgstr "narinfo por '~a' malhavas subskribon~%"
+msgid "substitute at '~a' lacks a signature~%"
+msgstr "anstataŭigo ĉe '~a' malhavas subskribon~%"
#: guix/scripts/substitute-binary.scm:526
#, scheme-format
@@ -772,9 +764,7 @@ msgstr "Ni elŝutas, bonvolu atendi...~%"
#: guix/scripts/substitute-binary.scm:528
#, scheme-format
msgid "(Please consider upgrading Guile to get proper progress report.)~%"
-msgstr ""
-"(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-"
-"raporton.)~%"
+msgstr "(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-raporton.)~%"
#: guix/scripts/substitute-binary.scm:545
#, scheme-format
@@ -808,26 +798,19 @@ msgid ""
msgstr ""
"\n"
" --substitute KONSERV-DOSIERO CELO\n"
-" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar "
-"en la\n"
+" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar en la\n"
" dosiero CELO"
-#: guix/scripts/substitute-binary.scm:599
-msgid ""
-"ACL for archive imports seems to be uninitialized, substitutes may be "
-"unavailable\n"
-msgstr ""
-"ACL por importo de arĥivoj ŝajnas esti ne-ekigita, anstataŭoj eble ne "
-"disponeblos\n"
+#: guix/scripts/substitute-binary.scm:604
+msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
+msgstr "ACL por importo de arĥivoj ŝajnas esti ne-ekigita, anstataŭoj eble ne disponeblos\n"
-#: guix/scripts/substitute-binary.scm:619
+#: guix/scripts/substitute-binary.scm:625
#, scheme-format
msgid "failed to look up host '~a' (~a), substituter disabled~%"
-msgstr ""
-"ni malsukcesis serĉi gastiganton '~a' (~a), anstataŭiganto estas "
-"malebligata~%"
+msgstr "ni malsukcesis serĉi gastiganton '~a' (~a), anstataŭiganto estas malebligata~%"
-#: guix/scripts/substitute-binary.scm:726
+#: guix/scripts/substitute-binary.scm:732
#, scheme-format
msgid "~a: unrecognized options~%"
msgstr "~a: nerekonata modifiloj~%"
@@ -866,32 +849,52 @@ msgstr ""
msgid "wrong arguments"
msgstr "malĝustaj argumentoj"
-#: guix/scripts/system.scm:67
+#: guix/scripts/system.scm:74
#, scheme-format
msgid "failed to open operating system file '~a': ~a~%"
msgstr "fiasko dum malfermo de la operaci-sistema dosiero '~a': ~a~%"
-#: guix/scripts/system.scm:70
+#: guix/scripts/system.scm:78 guix/ui.scm:238
+#, scheme-format
+msgid "~a: ~a~%"
+msgstr "~a: ~a~%"
+
+#: guix/scripts/system.scm:81
#, scheme-format
-msgid "failed to load machine file '~a': ~s~%"
-msgstr "fiasko dum ŝargo de la maŝina dosiero '~a': ~s~%"
+msgid "failed to load operating system file '~a': ~s~%"
+msgstr "fiasko dum ŝargo je operaci-sistema dosiero '~a': ~s~%"
-#: guix/scripts/system.scm:86
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:111
+#, scheme-format
msgid "failed to register '~a' under '~a'~%"
-msgstr "fiasko dum kreo de radiko GC '~a': ~a~%"
+msgstr "fiasko dum registro de '~a' sub '~a'~%"
-#: guix/scripts/system.scm:102
+#: guix/scripts/system.scm:127
#, scheme-format
msgid "initializing the current root file system~%"
-msgstr ""
+msgstr "ekigado de la nuna radika dosiersistemo~%"
-#: guix/scripts/system.scm:113
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:151 guix/scripts/system.scm:291
+#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
-msgstr "fiasko dum instalo de lokaĵaro: ~a~%"
+msgstr "fiasko dum instalo de GRUB en la aparato '~a'~%"
+
+#: guix/scripts/system.scm:176
+#, scheme-format
+msgid "activating system...~%"
+msgstr "ni aktivas la sistemon...~%"
-#: guix/scripts/system.scm:121
+#: guix/scripts/system.scm:211
+#, scheme-format
+msgid "unrecognized boot parameters for '~a'~%"
+msgstr "nerekonataj ekŝargaj parametroj por '~a'~%"
+
+#: guix/scripts/system.scm:295
+#, scheme-format
+msgid "initializing operating system under '~a'...~%"
+msgstr "ni ekigas la operaci-sistemon sub '~a'...~%"
+
+#: guix/scripts/system.scm:311
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
@@ -899,62 +902,65 @@ msgstr ""
"Uzmaniero: guix system [MODIFILO] AGO DOSIERO\n"
"Konstrui la operaci-sistemon deklarita en DOSIERO akorde al AGO.\n"
-#: guix/scripts/system.scm:124
+#: guix/scripts/system.scm:314
msgid "The valid values for ACTION are:\n"
-msgstr ""
+msgstr "La validaj valoroj por AGO estas:\n"
-#: guix/scripts/system.scm:125
+#: guix/scripts/system.scm:315
+msgid " - 'reconfigure', switch to a new operating system configuration\n"
+msgstr " - 'reconfigure', alterni al nova operaci-sistema agordaro\n"
+
+#: guix/scripts/system.scm:317
msgid " - 'build', build the operating system without installing anything\n"
-msgstr ""
+msgstr " - 'build', konstrui la operaci-sistemon sen instali ion ajn\n"
-#: guix/scripts/system.scm:127
+#: guix/scripts/system.scm:319
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
-msgstr ""
+msgstr " - 'vm', konstrui virtual-maŝinan bildon kiu kundividas la gastigantan memoron\n"
-#: guix/scripts/system.scm:129
+#: guix/scripts/system.scm:321
msgid " - 'vm-image', build a freestanding virtual machine image\n"
-msgstr ""
+msgstr " - 'vm-image', konstrui memstaran virtual-maŝinan bildon\n"
-#: guix/scripts/system.scm:131
+#: guix/scripts/system.scm:323
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
-msgstr ""
+msgstr " - 'disk-image', konstrui disk-bildon, taŭga por USB-memoro\n"
-#: guix/scripts/system.scm:133
+#: guix/scripts/system.scm:325
msgid " - 'init', initialize a root file system to run GNU.\n"
-msgstr ""
+msgstr " - 'init', ekigi radikan dosiersistemon por lanĉi GNU-on.\n"
-#: guix/scripts/system.scm:137
+#: guix/scripts/system.scm:329
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
msgstr ""
+"\n"
+" --image-size=GRANDO por 'vm-image', produkti bildon je GRANDO"
-#: guix/scripts/system.scm:139
+#: guix/scripts/system.scm:331
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
msgstr ""
+"\n"
+" --no-grub por 'init', ne instali GRUB"
-#: guix/scripts/system.scm:198
+#: guix/scripts/system.scm:394
#, scheme-format
msgid "~a: unknown action~%"
msgstr "~a: nekonata pako~%"
-#: guix/scripts/system.scm:215
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:411
+#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
-msgstr "malĝusta nombro da argumentoj~%"
+msgstr "malĝusta nombro da argumentoj por la ago '~a'~%"
-#: guix/scripts/system.scm:234
+#: guix/scripts/system.scm:431
#, scheme-format
msgid "no configuration file specified~%"
msgstr "neniu agorda dosiero estis indikata~%"
-#: guix/scripts/system.scm:272
-#, fuzzy, scheme-format
-msgid "initializing operating system under '~a'...~%"
-msgstr "fiasko dum malfermo de la operaci-sistema dosiero '~a': ~a~%"
-
#: guix/gnu-maintenance.scm:373
#, scheme-format
msgid "signature verification failed for `~a'~%"
@@ -983,16 +989,13 @@ msgstr "fiasko dum instalo de lokaĵaro: ~a~%"
#: guix/ui.scm:150
msgid ""
"Copyright (C) 2014 the Guix authors\n"
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
"This is free software: you are free to change and redistribute it.\n"
"There is NO WARRANTY, to the extent permitted by law.\n"
msgstr ""
"Kopirajto (C) 2014 la aŭtoroj de Guix\n"
-"Permeso GPLv3+: GNU GPL versio 3 aŭ posta <http://gnu.org/licenses/gpl."
-"html>\n"
-"Tio ĉi estas libera programaro: vi estas libera por modifi kaj redisdoni "
-"ĝin.\n"
+"Permeso GPLv3+: GNU GPL versio 3 aŭ posta <http://gnu.org/licenses/gpl.html>\n"
+"Tio ĉi estas libera programaro: vi estas libera por modifi kaj redisdoni ĝin.\n"
"Estas NENIU GARANTIO, plejamplekse permesate de leĝoj.\n"
#: guix/ui.scm:158
@@ -1056,70 +1059,65 @@ msgstr "fiasko dum konekto al '~a': ~a~%"
msgid "build failed: ~a~%"
msgstr "konstruo fiakis: ~a~%"
-#: guix/ui.scm:238
-#, scheme-format
-msgid "~a: ~a~%"
-msgstr "~a: ~a~%"
-
-#: guix/ui.scm:255
+#: guix/ui.scm:257
#, scheme-format
msgid "failed to read expression ~s: ~s~%"
msgstr "fiasko dum lego de esprimo ~s: ~s~%"
-#: guix/ui.scm:261
+#: guix/ui.scm:263
#, scheme-format
msgid "failed to evaluate expression `~a': ~s~%"
msgstr "fiasko dum analizo de esprimo '~a': ~a~%"
-#: guix/ui.scm:270
+#: guix/ui.scm:272
#, scheme-format
msgid "expression ~s does not evaluate to a package~%"
msgstr "la esprimo ~s ne rezultas pakon~%"
-#: guix/ui.scm:317
+#: guix/ui.scm:319
#, scheme-format
msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo povus esti konstruata:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:322
+#: guix/ui.scm:324
#, scheme-format
msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo povus esti elŝutata:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:328
+#: guix/ui.scm:330
#, scheme-format
msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo estos esti konstruata:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:333
+#: guix/ui.scm:335
#, scheme-format
msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo estos esti elŝutata:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:350
+#: guix/ui.scm:352
msgid "<unknown location>"
msgstr "<nekonata loko>"
-#: guix/ui.scm:378
+#: guix/ui.scm:380
#, scheme-format
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%"
-#: guix/ui.scm:459 guix/ui.scm:473
+#: guix/ui.scm:461 guix/ui.scm:475
msgid "unknown"
msgstr "nekonata"
-#: guix/ui.scm:582
+#: guix/ui.scm:584
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "malvalida argumento: ~a~%"
-#: guix/ui.scm:587
+#: guix/ui.scm:589
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Provu 'guix --help' por pli da informo.~%"
-#: guix/ui.scm:617
+#: guix/ui.scm:619
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@@ -1127,21 +1125,21 @@ msgstr ""
"Uzmaniero: guix KOMANDO ARGj...\n"
"Lanĉas KOMANDOn kun ARGj.\n"
-#: guix/ui.scm:620
+#: guix/ui.scm:622
msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n"
-#: guix/ui.scm:640
+#: guix/ui.scm:642
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: komando ne trovita~%"
-#: guix/ui.scm:658
+#: guix/ui.scm:660
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: mankas komanda nomo~%"
-#: guix/ui.scm:666
+#: guix/ui.scm:668
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: nerekonata modifilo: '~a'~%"
@@ -1242,3 +1240,149 @@ msgstr "importita dosiero malhavas subskribon"
#: guix/nar.scm:487
msgid "invalid inter-file archive mark"
msgstr "malvalida inter-dosiera arĥiva marko"
+
+#~ msgid "Hello, GNU world: An example GNU package"
+#~ msgstr "Saluton, mondo GNU: ekzemplo de pako GNU"
+
+#~ msgid ""
+#~ "GNU Hello prints the message \"Hello, world!\" and then exits. It\n"
+#~ "serves as an example of standard GNU coding practices. As such, it supports\n"
+#~ "command-line arguments, multiple languages, and so on."
+#~ msgstr ""
+#~ "GNU Hello montras la mesaĝon \"Hello, world!\" kaj finiĝas. Ĝi\n"
+#~ "funkcias kiel ekzemplo de norma kodumada tradicio de GNU. Tiel, ĝi subtenas\n"
+#~ "komand-liniajn argumentojn, plurajn lingvojn, kaj tiel plu."
+
+#~ msgid "Print lines matching a pattern"
+#~ msgstr "Montri liniojn kongruajn al ŝablono"
+
+#~ msgid ""
+#~ "grep is a tool for finding text inside files. Text is found by\n"
+#~ "matching a pattern provided by the user in one or many files. The pattern\n"
+#~ "may be provided as a basic or extended regular expression, or as fixed\n"
+#~ "strings. By default, the matching text is simply printed to the screen,\n"
+#~ "however the output can be greatly customized to include, for example, line\n"
+#~ "numbers. GNU grep offers many extensions over the standard utility,\n"
+#~ "including, for example, recursive directory searching."
+#~ msgstr ""
+#~ "grep estas ilo por trovi tekstojn interne de dosieroj. Teksto estas trovita\n"
+#~ "per kongruo al ŝablono indikita de la uzanto en unu aŭ pluraj dosieroj.\n"
+#~ "La ŝablono povas esti indikata kiel bazan aŭ etenditan regul-esprimon, aŭ\n"
+#~ "kiel fiksajn ĉenojn. Apriore, la kongruita teksto estas simple montrata\n"
+#~ "en la ekrano, tamen la eligo povas esti ege personigita por inkluzivigi,\n"
+#~ "ekzemple, lini-numerojn. GNU grep oferaj multajn kromaĵojn kompare al la\n"
+#~ "originala aplikaĵo, inkluzive, ekzemple, rikuran serĉadon en dosierujoj."
+
+#~ msgid "Stream editor"
+#~ msgstr "Flu-redaktilo"
+
+#~ msgid "Managing tar archives"
+#~ msgstr "Administrado de arĥivoj tar"
+
+#~ msgid "Apply differences to originals, with optional backups"
+#~ msgstr "Apliki malsamojn al originaloj, kun nedevigaj savkopioj"
+
+#~ msgid "Comparing and merging files"
+#~ msgstr "Komparo kaj kunmikso de dosieroj"
+
+#~ msgid "Operating on files matching given criteria"
+#~ msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio"
+
+#~ msgid "Core GNU utilities (file, text, shell)"
+#~ msgstr "Nukleaj utilaĵoj GNU (file, text, shell)"
+
+#~ msgid "Remake files automatically"
+#~ msgstr "Reprocezi dosierojn aŭtomate"
+
+#~ msgid "Binary utilities: bfd gas gprof ld"
+#~ msgstr "Duumaj utilaĵoj: bfd gas gprof ld"
+
+#~ msgid "The GNU C Library"
+#~ msgstr "La Biblioteko GNU C"
+
+#~ msgid "Database of current and historical time zones"
+#~ msgstr "Datumbazo de nuna kaj pasintaj temp-zonoj"
+
+#~ msgid "GNU C++ standard library (intermediate)"
+#~ msgstr "GNU C++ norma biblioteko (intermeza)"
+
+#~ msgid "The linker wrapper"
+#~ msgstr "La ligila ĉirkaŭanto"
+
+#~ msgid "Scheme implementation intended especially for extensions"
+#~ msgstr "Realigo de Scheme celata speciale por aldonoj"
+
+#~ msgid "Framework for building readers for GNU Guile"
+#~ msgstr "Framo por konstrui legilojn por GNU Guile"
+
+#~ msgid "Guile bindings to ncurses"
+#~ msgstr "Bindoj de Guile por ncurses"
+
+#~ msgid "Run jobs at scheduled times"
+#~ msgstr "Lanĉi taskoj je antaŭplanitaj horoj"
+
+#~ msgid "Collection of useful Guile Scheme modules"
+#~ msgstr "Aro da utilaj moduloj de Guile Scheme"
+
+#~ msgid "JSON module for Guile"
+#~ msgstr "Modulo JSON por Guile"
+
+#~ msgid "Lout, a document layout system similar in style to LaTeX"
+#~ msgstr "Lout, dokument-aranĝa sistemo simila al LaTeX, laŭ stilo"
+
+#~ msgid "Manipulate plain text files as databases"
+#~ msgstr "Manipuli simplajn tekst-dosierojn kiel datumbazojn"
+
+#~ msgid "failed to load machine file '~a': ~s~%"
+#~ msgstr "fiasko dum ŝargo de la maŝina dosiero '~a': ~s~%"
+
+#~ msgid ""
+#~ "Currently the only valid value for ACTION is 'vm', which builds\n"
+#~ "a virtual machine of the given operating system.\n"
+#~ msgstr ""
+#~ "Momente la nura valida valoro por AGO estas 'vm', kio konstruas\n"
+#~ "virtualan maŝinon por la indikita operaci-sistemo.\n"
+
+#~ msgid "~a: extraneous argument~%"
+#~ msgstr "~a: fremda argumento~%"
+
+#~ msgid "Guile bindings to libssh"
+#~ msgstr "Bindoj de Guile por libssh"
+
+#~ msgid "package `~a' has no source~%"
+#~ msgstr "pako '~a' havas neniun fonton~%"
+
+#~ msgid ""
+#~ "\n"
+#~ " -n, --dry-run show what would be done without actually doing it"
+#~ msgstr ""
+#~ "\n"
+#~ " -n, --dry-run montri kion estus farita sen fakte fari ĝin"
+
+#~ msgid "Yeah..."
+#~ msgstr "Ja..."
+
+#~ 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 ""
+#~ "La komando grep serĉas en unu al pli enigaj dosieroj liniojn enhavantajn\n"
+#~ "kongruon al specifita ŝablono. Apriore, grep montras la kongruantajn\n"
+#~ "liniojn."
+
+#~ 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 ""
+#~ "Sed (flu-redaktilo) ne estas fakte vera tekst-redaktilo aŭ tekst-procezilo.\n"
+#~ "Anstataŭe, ĝi estas uzata por filtri tekston, t.e., ĝi prenas tekston kaj\n"
+#~ "aplikas iun operacion (aŭ aron) al ĝi kaj eligas la modifitan tekston.\n"
+#~ "Sed ordinare estas uzata por eltiri parton de dosiero per ŝablon-kongruon aŭ\n"
+#~ "por anstataŭigi multoblajn aperojn de ĉeno interne de dosiero."
+
+#~ msgid "profile `~a' does not exist~%"
+#~ msgstr "profilo '~a' ne ekzistas~%"
diff --git a/po/guix/vi.po b/po/guix/vi.po
index ded1283fd5..260032c9db 100644
--- a/po/guix/vi.po
+++ b/po/guix/vi.po
@@ -1,14 +1,15 @@
# Vietnamese translation for guix.
-# Copyright © 2013 Free Software Foundation, Inc.
+# Bản dịch tiếng Việt dành cho guix.
+# Copyright © 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the guix package.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2013.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2013-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: guix 0.5-pre2\n"
+"Project-Id-Version: guix 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
-"POT-Creation-Date: 2014-06-14 22:38+0200\n"
-"PO-Revision-Date: 2013-12-04 07:48+0700\n"
+"POT-Creation-Date: 2014-07-13 17:06+0200\n"
+"PO-Revision-Date: 2014-07-14 08:38+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
"Language: vi\n"
@@ -24,12 +25,12 @@ msgstr ""
msgid "cannot access `~a': ~a~%"
msgstr "không thể truy cập `~a': ~a~%"
-#: guix/scripts/build.scm:54 guix/scripts/package.scm:337
+#: guix/scripts/build.scm:54 guix/scripts/package.scm:349
#, scheme-format
msgid "ambiguous package specification `~a'~%"
msgstr "đặc tả gói chưa rõ ràng `~a'~%"
-#: guix/scripts/build.scm:55 guix/scripts/package.scm:339
+#: guix/scripts/build.scm:55 guix/scripts/package.scm:351
#, scheme-format
msgid "choosing ~a from ~a~%"
msgstr "chọn ~a từ ~a~%"
@@ -79,14 +80,15 @@ msgid ""
" --no-substitutes build instead of resorting to pre-built substitutes"
msgstr ""
"\n"
-" --no-substitutes xây dựng thay vì nhờ vào phần thay thế được dựng "
-"trước"
+" --no-substitutes xây dựng thay vì nhờ vào phần thay thế được dựng trước"
#: guix/scripts/build.scm:131
msgid ""
"\n"
" --no-build-hook do not attempt to offload builds via the build hook"
msgstr ""
+"\n"
+" --no-build-hook không cố xây dựng không tải thông qua móc xây dựng"
#: guix/scripts/build.scm:133
msgid ""
@@ -96,19 +98,15 @@ msgid ""
msgstr ""
"\n"
" --max-silent-time=GIÂY\n"
-" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY "
-"này"
+" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY này"
#: guix/scripts/build.scm:136
-#, fuzzy
msgid ""
"\n"
" --timeout=SECONDS mark the build as failed after SECONDS of activity"
msgstr ""
"\n"
-" --max-silent-time=GIÂY\n"
-" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY "
-"này"
+" --timeout=GIÂY đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY này"
#: guix/scripts/build.scm:138
msgid ""
@@ -137,8 +135,7 @@ msgid ""
"Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
msgstr ""
"Cách dùng: guix build [TÙY-CHỌN]... PACKAGE-OR-DERIVATION...\n"
-"Xây dựng PACKAGE-OR-DERIVATION đã cho và trả về đường dẫn kết xuất của "
-"chúng.\n"
+"Xây dựng PACKAGE-OR-DERIVATION đã cho và trả về đường dẫn kết xuất của chúng.\n"
#: guix/scripts/build.scm:225
msgid ""
@@ -162,7 +159,7 @@ msgid ""
" -s, --system=SYSTEM attempt to build for SYSTEM--e.g., \"i686-linux\""
msgstr ""
"\n"
-" -s, --system=HỆ-THỐNG cố xây dựng cho HỆ-THỐNG--ví dụ: \"i686-linux\""
+" -s, --system=HỆ-THỐNG cố xây dựng cho HỆ-THỐNG--ví dụ: \"i686-linux\""
#: guix/scripts/build.scm:231
msgid ""
@@ -178,6 +175,9 @@ msgid ""
" --with-source=SOURCE\n"
" use SOURCE when building the corresponding package"
msgstr ""
+"\n"
+" --with-source=MÃ_NGUỒN\n"
+" dùng mã nguồn khi xây dựng gói tương ứng"
#: guix/scripts/build.scm:236
msgid ""
@@ -194,8 +194,7 @@ msgid ""
" as a garbage collector root"
msgstr ""
"\n"
-" -r, --root=TẬP-TIN tạo TẬP-TIN một liên kết mềm đến kết quả, và đăng "
-"ký nó\n"
+" -r, --root=TẬP-TIN tạo TẬP-TIN một liên kết mềm đến kết quả, và đăng ký nó\n"
" như là bộ gom rác gốc"
#: guix/scripts/build.scm:241
@@ -207,9 +206,9 @@ msgstr ""
" --log-file trả về tên của tập-tin nhật ký cho dẫn xuất đã cho"
#: guix/scripts/build.scm:246 guix/scripts/download.scm:53
-#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58
+#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58
#: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82
-#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:142
+#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334
msgid ""
"\n"
" -h, --help display this help and exit"
@@ -218,9 +217,9 @@ msgstr ""
" -h, --help hiển thị trợ giúp này rồi thoát"
#: guix/scripts/build.scm:248 guix/scripts/download.scm:55
-#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60
+#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60
#: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84
-#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:144
+#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336
msgid ""
"\n"
" -V, --version display version information and exit"
@@ -231,11 +230,11 @@ msgstr ""
#: guix/scripts/build.scm:368
#, scheme-format
msgid "sources do not match any package:~{ ~a~}~%"
-msgstr ""
+msgstr "mã nguồn không khớp bất kỳ gói nào:~{ ~a~}~%"
#: guix/scripts/build.scm:397 guix/scripts/download.scm:96
-#: guix/scripts/package.scm:744 guix/scripts/gc.scm:122
-#: guix/scripts/pull.scm:115 guix/scripts/system.scm:190
+#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122
+#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: tùy chọn không được chấp nhận~%"
@@ -284,73 +283,73 @@ msgstr "~a: gặp lỗi khi phân tích URI~%"
msgid "~a: download failed~%"
msgstr "~a: tải về gặp lỗi~%"
-#: guix/scripts/package.scm:76
+#: guix/scripts/package.scm:88
#, scheme-format
msgid "failed to build the empty profile~%"
msgstr "gặp lỗi khi xây dựng hồ sơ trống rỗng~%"
-#: guix/scripts/package.scm:85
+#: guix/scripts/package.scm:97
#, scheme-format
msgid "switching from generation ~a to ~a~%"
msgstr "chuyển từ thế hệ ~a sang ~a~%"
-#: guix/scripts/package.scm:96 guix/scripts/package.scm:852
-#: guix/scripts/package.scm:964
+#: guix/scripts/package.scm:108 guix/scripts/package.scm:866
+#: guix/scripts/package.scm:978
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "hồ sơ `~a' không tồn tại~%"
-#: guix/scripts/package.scm:100
+#: guix/scripts/package.scm:112
#, scheme-format
msgid "nothing to do: already at the empty profile~%"
msgstr "không có gì cần làm: đã là một hồ sơ trống rỗng~%"
-#: guix/scripts/package.scm:185
+#: guix/scripts/package.scm:197
#, scheme-format
msgid "The following package would be removed:~%~{~a~%~}~%"
msgstr "Gói sau đây sẽ bị gỡ bỏ:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:190
+#: guix/scripts/package.scm:202
#, scheme-format
msgid "The following package will be removed:~%~{~a~%~}~%"
msgstr "Gói sau đây sẽ bị gỡ bỏ:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:202
+#: guix/scripts/package.scm:214
#, scheme-format
msgid "The following package would be installed:~%~{~a~%~}~%"
msgstr "Gói sau đây sẽ được cài đặt:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:207
+#: guix/scripts/package.scm:219
#, scheme-format
msgid "The following package will be installed:~%~{~a~%~}~%"
msgstr "Gói sau đây sẽ được cài đặt:~%~{~a~%~}~%"
-#: guix/scripts/package.scm:327
+#: guix/scripts/package.scm:339
#, scheme-format
msgid "package `~a' lacks output `~a'~%"
msgstr "gói `~a' thiếu kết xuất `~a'~%"
-#: guix/scripts/package.scm:344
+#: guix/scripts/package.scm:356
#, scheme-format
msgid "~a: package not found~%"
msgstr "~a: không tìm thấy gói~%"
-#: guix/scripts/package.scm:379
+#: guix/scripts/package.scm:391
#, scheme-format
msgid "looking for the latest release of GNU ~a..."
msgstr "tìm bản phát hành mới nhất ~a GNU..."
-#: guix/scripts/package.scm:383
+#: guix/scripts/package.scm:395
#, scheme-format
msgid "~a: note: using ~a but ~a is available upstream~%"
msgstr "~a: ghi chú: dùng ~a nhưng ~a thì sẵn sàng trên thượng nguồn~%"
-#: guix/scripts/package.scm:455
+#: guix/scripts/package.scm:467
#, scheme-format
msgid "The following environment variable definitions may be needed:~%"
msgstr "Những định nghĩa biến môi trường sau đây là cần thiết:~%"
-#: guix/scripts/package.scm:471
+#: guix/scripts/package.scm:483
msgid ""
"Usage: guix package [OPTION]... PACKAGES...\n"
"Install, remove, or upgrade PACKAGES in a single transaction.\n"
@@ -358,7 +357,7 @@ msgstr ""
"Cách dùng: guix package [TÙY-CHỌN]... GÓI...\n"
"Cài đặt, gỡ bỏ hay cập nhật GÓI trong một giao dịch đơn.\n"
-#: guix/scripts/package.scm:473
+#: guix/scripts/package.scm:485
msgid ""
"\n"
" -i, --install=PACKAGE install PACKAGE"
@@ -366,7 +365,7 @@ msgstr ""
"\n"
" -i, --install=GÓI cài đặt GÓI"
-#: guix/scripts/package.scm:475
+#: guix/scripts/package.scm:487
msgid ""
"\n"
" -e, --install-from-expression=EXP\n"
@@ -376,7 +375,7 @@ msgstr ""
" -e, --install-from-expression=BT\n"
" cài đặt gói được BT định giá cho"
-#: guix/scripts/package.scm:478
+#: guix/scripts/package.scm:490
msgid ""
"\n"
" -r, --remove=PACKAGE remove PACKAGE"
@@ -384,7 +383,7 @@ msgstr ""
"\n"
" -r, --remove=GÓI gỡ bỏ GÓI"
-#: guix/scripts/package.scm:480
+#: guix/scripts/package.scm:492
msgid ""
"\n"
" -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
@@ -392,7 +391,7 @@ msgstr ""
"\n"
" -u, --upgrade[=BTCQ] cập nhật tất cả các gói khớp với BTCQ"
-#: guix/scripts/package.scm:482
+#: guix/scripts/package.scm:494
msgid ""
"\n"
" --roll-back roll back to the previous generation"
@@ -400,7 +399,7 @@ msgstr ""
"\n"
" --roll-back quay lại thế hệ trước"
-#: guix/scripts/package.scm:484
+#: guix/scripts/package.scm:496
msgid ""
"\n"
" --search-paths display needed environment variable definitions"
@@ -408,7 +407,7 @@ msgstr ""
"\n"
" --search-paths hiển thị các định nghĩa biến môi trường cần thiết"
-#: guix/scripts/package.scm:486
+#: guix/scripts/package.scm:498
msgid ""
"\n"
" -l, --list-generations[=PATTERN]\n"
@@ -418,7 +417,7 @@ msgstr ""
" -l, --list-generations[=MẪU]\n"
" liệt kê các gói khớp MẪU"
-#: guix/scripts/package.scm:489
+#: guix/scripts/package.scm:501
msgid ""
"\n"
" -d, --delete-generations[=PATTERN]\n"
@@ -428,7 +427,7 @@ msgstr ""
" -d, --delete-generations[=MẪU]\n"
" xóa các bộ tạo khớp MẪU"
-#: guix/scripts/package.scm:492
+#: guix/scripts/package.scm:504
msgid ""
"\n"
" -p, --profile=PROFILE use PROFILE instead of the user's default profile"
@@ -436,7 +435,7 @@ msgstr ""
"\n"
" -p, --profile=PROFILE dùng hồ sơ đưa ra thay cho hồ sơ mặc định"
-#: guix/scripts/package.scm:495
+#: guix/scripts/package.scm:507
msgid ""
"\n"
" --bootstrap use the bootstrap Guile to build the profile"
@@ -444,7 +443,7 @@ msgstr ""
"\n"
" --bootstrap dùng chương trình mồi Guile để xây dựng hồ sơ"
-#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75
+#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75
msgid ""
"\n"
" --verbose produce verbose output"
@@ -452,7 +451,7 @@ msgstr ""
"\n"
" --verbose tạo ra kết xuất chi tiết"
-#: guix/scripts/package.scm:500
+#: guix/scripts/package.scm:512
msgid ""
"\n"
" -s, --search=REGEXP search in synopsis and description using REGEXP"
@@ -461,7 +460,7 @@ msgstr ""
" -s, --search=BTCQ tìm trong tóm lược và mô tả\n"
" sử dụng BIỂU THỨC CHÍNH QUY"
-#: guix/scripts/package.scm:502
+#: guix/scripts/package.scm:514
msgid ""
"\n"
" -I, --list-installed[=REGEXP]\n"
@@ -471,7 +470,7 @@ msgstr ""
" -I, --list-installed[=BIỂU-THỨC-CHÍNH-QUY]\n"
" kiệt kê các gói khớp BTCQ đã cài đặt"
-#: guix/scripts/package.scm:505
+#: guix/scripts/package.scm:517
msgid ""
"\n"
" -A, --list-available[=REGEXP]\n"
@@ -481,63 +480,62 @@ msgstr ""
" -A, --list-available[=BIỂU-THỨC-CHÍNH-QUY]\n"
" kiệt kê các gói khớp BTCQ"
-#: guix/scripts/package.scm:748
+#: guix/scripts/package.scm:760
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr "~A: đối số ngoại lai~%"
-#: guix/scripts/package.scm:763
+#: guix/scripts/package.scm:775
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
-msgstr ""
-"Thử chạy lệnh \"info '(guix) Invoking guix package'\" để có thêm thông tin.~%"
+msgstr "Thử chạy lệnh \"info '(guix) Invoking guix package'\" để có thêm thông tin.~%"
-#: guix/scripts/package.scm:785
+#: guix/scripts/package.scm:797
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "lỗi: trong khi tạo thư mục `~a': ~a~%"
-#: guix/scripts/package.scm:789
+#: guix/scripts/package.scm:801
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Hãy tạo thư mục `~a', với bạn là chủ sở hữu.~%"
-#: guix/scripts/package.scm:796
+#: guix/scripts/package.scm:808
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "lỗi: thư mục `~a' không được sở hữu bởi bạn~%"
-#: guix/scripts/package.scm:799
+#: guix/scripts/package.scm:811
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Vui lòng đổi chủ sở hữu của `~a' thành ~s.~%"
-#: guix/scripts/package.scm:822
+#: guix/scripts/package.scm:836
#, scheme-format
msgid "deleting ~a~%"
msgstr "đang xóa ~a~%"
-#: guix/scripts/package.scm:875 guix/scripts/package.scm:980
+#: guix/scripts/package.scm:889 guix/scripts/package.scm:994
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "cú pháp không hợp lệ: ~a~%"
-#: guix/scripts/package.scm:904
+#: guix/scripts/package.scm:918
#, scheme-format
msgid "nothing to be done~%"
msgstr "không có gì cần làm~%"
-#: guix/scripts/package.scm:927
+#: guix/scripts/package.scm:941
#, scheme-format
msgid "~a package in profile~%"
msgstr "~a gói trong hồ sơ~%"
-#: guix/scripts/package.scm:942
+#: guix/scripts/package.scm:956
#, scheme-format
msgid "Generation ~a\t~a"
msgstr "Tạo ~a\t~a"
-#: guix/scripts/package.scm:949
+#: guix/scripts/package.scm:963
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(hiện tại)~%"
@@ -547,8 +545,8 @@ msgid ""
"Usage: guix gc [OPTION]... PATHS...\n"
"Invoke the garbage collector.\n"
msgstr ""
-"Cách dùng: guix gc [TÙY-CHỌN]... ĐƯỜNG DẪN...\n"
-"Gọi bộ sưu tập rác.\n"
+"Cách dùng: guix gc [TÙY-CHỌN]... ĐƯỜNG-DẪN...\n"
+"Gọi bộ xử lý rác.\n"
#: guix/scripts/gc.scm:41
msgid ""
@@ -590,7 +588,7 @@ msgid ""
" --references list the references of PATHS"
msgstr ""
"\n"
-" --references liệt kê câs tham chiếu của ĐƯỜNG-DẪN"
+" --references liệt kê các tham chiếu của ĐƯỜNG-DẪN"
#: guix/scripts/gc.scm:53
msgid ""
@@ -614,7 +612,6 @@ msgid "invalid amount of storage: ~a~%"
msgstr "số lượng kho chứa không hợp lệ: ~a~%"
#: guix/scripts/hash.scm:45
-#, fuzzy
msgid ""
"Usage: guix hash [OPTION] FILE\n"
"Return the cryptographic hash of FILE.\n"
@@ -633,6 +630,8 @@ msgid ""
"\n"
" -r, --recursive compute the hash on FILE recursively"
msgstr ""
+"\n"
+" -r, --recursive tính mã băm trên TẬP-TIN một cách đệ quy"
#: guix/scripts/hash.scm:103
#, scheme-format
@@ -699,12 +698,12 @@ msgstr "Guix đã cập nhật rồi\n"
#: guix/scripts/substitute-binary.scm:80
#, scheme-format
msgid "authentication and authorization of substitutes disabled!~%"
-msgstr ""
+msgstr "chứng thực và ủy quyền của cái thay thế bị tắt!~%"
#: guix/scripts/substitute-binary.scm:163
-#, fuzzy, scheme-format
+#, scheme-format
msgid "download from '~a' failed: ~a, ~s~%"
-msgstr "~a: tải về gặp lỗi~%"
+msgstr "tải về từ `~a' gặp lỗi: ~a, ~s~%"
#: guix/scripts/substitute-binary.scm:178
#, scheme-format
@@ -717,49 +716,49 @@ msgid "try `--no-substitutes' if the problem persists~%"
msgstr "dùng `--no-substitutes' nếu vấn đề vẫn không được giải quyết~%"
#: guix/scripts/substitute-binary.scm:244
-#, fuzzy, scheme-format
+#, scheme-format
msgid "signature version must be a number: ~a~%"
-msgstr "việc xác minh chữ ký cho `~a'~% gặp lỗi"
+msgstr "phiên bản chữ ký phải là con số: ~a~%"
#: guix/scripts/substitute-binary.scm:248
-#, fuzzy, scheme-format
+#, scheme-format
msgid "unsupported signature version: ~a~%"
-msgstr "định dạng băm không được hỗ trợ: ~a~%"
+msgstr "phiên bản chữ ký không được hỗ trợ: ~a~%"
#: guix/scripts/substitute-binary.scm:256
-#, fuzzy, scheme-format
+#, scheme-format
msgid "signature is not a valid s-expression: ~s~%"
-msgstr "gặp lỗi khi đọc biểu thức ~s: ~s~%"
+msgstr "chữ ký không phải là một biểu thức s hợp lệ: ~s~%"
#: guix/scripts/substitute-binary.scm:260
-#, fuzzy, scheme-format
+#, scheme-format
msgid "invalid format of the signature field: ~a~%"
-msgstr "số lượng kho chứa không hợp lệ: ~a~%"
+msgstr "định dạng trường chữ ký không hợp lệ: ~a~%"
#: guix/scripts/substitute-binary.scm:295
-#, fuzzy, scheme-format
+#, scheme-format
msgid "invalid signature for '~a'~%"
-msgstr "số không hợp lệ: ~a~%"
+msgstr "chữ ký không hợp lệ cho '~a'~%"
#: guix/scripts/substitute-binary.scm:297
#, scheme-format
msgid "hash mismatch for '~a'~%"
-msgstr ""
+msgstr "mã băm không khớp nhau cho '~a'~%"
#: guix/scripts/substitute-binary.scm:299
#, scheme-format
msgid "'~a' is signed with an unauthorized key~%"
-msgstr ""
+msgstr "'~a' được ký bằng khóa không được chấp nhận~%"
#: guix/scripts/substitute-binary.scm:301
#, scheme-format
msgid "signature on '~a' is corrupt~%"
-msgstr ""
+msgstr "chữ ký trên '~a' bị hỏng~%"
#: guix/scripts/substitute-binary.scm:338
#, scheme-format
-msgid "narinfo for '~a' lacks a signature~%"
-msgstr ""
+msgid "substitute at '~a' lacks a signature~%"
+msgstr "cái thay thế tại '~a' thiếu chữ ký~%"
#: guix/scripts/substitute-binary.scm:526
#, scheme-format
@@ -769,8 +768,7 @@ msgstr "Đang tải, vui lòng chờ...~%"
#: guix/scripts/substitute-binary.scm:528
#, scheme-format
msgid "(Please consider upgrading Guile to get proper progress report.)~%"
-msgstr ""
-"(Hãy cân nhắc nâng cấp Guile để nhận được báo cáo tiến trình đúng đắn.)~%"
+msgstr "(Hãy cân nhắc nâng cấp Guile để nhận được báo cáo tiến trình đúng đắn.)~%"
#: guix/scripts/substitute-binary.scm:545
#, scheme-format
@@ -793,8 +791,7 @@ msgid ""
msgstr ""
"\n"
" --query báo cáo trên tính sẵn sàng của thay thế cho\n"
-" các tên tập-tin lưu trữ được chuyển trên đầu ra "
-"tiêu chuẩn"
+" các tên tập-tin lưu trữ được chuyển trên đầu ra tiêu chuẩn"
#: guix/scripts/substitute-binary.scm:559
msgid ""
@@ -808,18 +805,16 @@ msgstr ""
" tải về TẬP-TIN-LƯU và lưu nó trong tập tin ĐÍCH\n"
" Nar"
-#: guix/scripts/substitute-binary.scm:599
-msgid ""
-"ACL for archive imports seems to be uninitialized, substitutes may be "
-"unavailable\n"
-msgstr ""
+#: guix/scripts/substitute-binary.scm:604
+msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
+msgstr "ACL dành cho nhập kho lưu dường như là chưa được khởi tạo, việc thay thế có lẽ là không sẵn sàng\n"
-#: guix/scripts/substitute-binary.scm:619
+#: guix/scripts/substitute-binary.scm:625
#, scheme-format
msgid "failed to look up host '~a' (~a), substituter disabled~%"
-msgstr ""
+msgstr "gặp lỗi khi tìm máy '~a' (~a), bộ thay thế đã bị tắt~%"
-#: guix/scripts/substitute-binary.scm:726
+#: guix/scripts/substitute-binary.scm:732
#, scheme-format
msgid "~a: unrecognized options~%"
msgstr "~a: không chấp nhận các tùy chọn~%"
@@ -827,22 +822,22 @@ msgstr "~a: không chấp nhận các tùy chọn~%"
#: guix/scripts/authenticate.scm:58
#, scheme-format
msgid "cannot find public key for secret key '~a'~%"
-msgstr ""
+msgstr "không thể tìm thấy khóa công cho khóa bí mật '~a'~%"
#: guix/scripts/authenticate.scm:78
-#, fuzzy, scheme-format
+#, scheme-format
msgid "error: invalid signature: ~a~%"
-msgstr "cú pháp không hợp lệ: ~a~%"
+msgstr "lỗi: chữ ký không hợp lệ: ~a~%"
#: guix/scripts/authenticate.scm:80
#, scheme-format
msgid "error: unauthorized public key: ~a~%"
-msgstr ""
+msgstr "lỗi: khóa công không đúng: ~a~%"
#: guix/scripts/authenticate.scm:82
#, scheme-format
msgid "error: corrupt signature data: ~a~%"
-msgstr ""
+msgstr "lỗi: dữ liệu chữ ký bị hỏng: ~a~%"
#: guix/scripts/authenticate.scm:126
msgid ""
@@ -850,98 +845,125 @@ msgid ""
"Sign or verify the signature on the given file. This tool is meant to\n"
"be used internally by 'guix-daemon'.\n"
msgstr ""
+"Cách dùng: guix authenticate TÙY-CHỌN...\n"
+"Ký hoặc xác minh chữ ký trên tập tin đã cho. Công cụ này được dùng\n"
+"nội bộ bởi 'guix-daemon'.\n"
#: guix/scripts/authenticate.scm:132
-#, fuzzy
msgid "wrong arguments"
-msgstr "số lượng đối số không đúng~%"
+msgstr "các đối số sai"
-#: guix/scripts/system.scm:67
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:74
+#, scheme-format
msgid "failed to open operating system file '~a': ~a~%"
-msgstr "gặp lỗi khi kết nối đến `~a': ~a~%"
+msgstr "gặp lỗi khi mở tập tin hệ điều hành `~a': ~a~%"
-#: guix/scripts/system.scm:70
-#, fuzzy, scheme-format
-msgid "failed to load machine file '~a': ~s~%"
-msgstr "gặp lỗi khi kết nối đến `~a': ~a~%"
+#: guix/scripts/system.scm:78 guix/ui.scm:238
+#, scheme-format
+msgid "~a: ~a~%"
+msgstr "~a: ~a~%"
+
+#: guix/scripts/system.scm:81
+#, scheme-format
+msgid "failed to load operating system file '~a': ~s~%"
+msgstr "gặp lỗi khi tải tập tin hệ điều hành `~a': ~s~%"
-#: guix/scripts/system.scm:86
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:111
+#, scheme-format
msgid "failed to register '~a' under '~a'~%"
-msgstr "gặp lỗi khi tạo gốc GC `~a': ~a~%"
+msgstr "gặp lỗi khi đăng ký `~a' dưới ~a~%"
-#: guix/scripts/system.scm:102
+#: guix/scripts/system.scm:127
#, scheme-format
msgid "initializing the current root file system~%"
-msgstr ""
+msgstr "đang khởi tạo hệ thống tập tin gốc hiện tại~%"
-#: guix/scripts/system.scm:113
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:151 guix/scripts/system.scm:291
+#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
-msgstr "gặp lỗi khi cài đặt `locale': ~a~%"
+msgstr "gặp lỗi khi cài đặt GRUB trên thiết bị `~a'~%"
+
+#: guix/scripts/system.scm:176
+#, scheme-format
+msgid "activating system...~%"
+msgstr "đang kích hoạt hệ thống...~%"
+
+#: guix/scripts/system.scm:211
+#, scheme-format
+msgid "unrecognized boot parameters for '~a'~%"
+msgstr "tham số khởi động không được thừa nhận cho `~a'~%"
+
+#: guix/scripts/system.scm:295
+#, scheme-format
+msgid "initializing operating system under '~a'...~%"
+msgstr "đang khởi tạo hệ điều hành dưới '~a'...~%"
-#: guix/scripts/system.scm:121
+#: guix/scripts/system.scm:311
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
msgstr ""
+"Cách dùng: guix system [TÙY-CHỌN] THAO-TÁC TẬP-TIN\n"
+"Xây dựng hệ điều hành khai báo trong TẬP-TIN tuân theo THAO-TÁC.\n"
-#: guix/scripts/system.scm:124
+#: guix/scripts/system.scm:314
msgid "The valid values for ACTION are:\n"
-msgstr ""
+msgstr "Các giá trị hợp lệ cho THAO TÁC là:\n"
-#: guix/scripts/system.scm:125
+#: guix/scripts/system.scm:315
+msgid " - 'reconfigure', switch to a new operating system configuration\n"
+msgstr " - 'reconfigure', chuyển thành cấu hình hệ điều hành mới\n"
+
+#: guix/scripts/system.scm:317
msgid " - 'build', build the operating system without installing anything\n"
-msgstr ""
+msgstr " - 'build', xây dựng hệ điều hành mà không cài gì\n"
-#: guix/scripts/system.scm:127
+#: guix/scripts/system.scm:319
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
-msgstr ""
+msgstr " - 'vm', xây dựng một ảnh máy ảo kiểu mà có thể chia sẻ trên kho máy\n"
-#: guix/scripts/system.scm:129
+#: guix/scripts/system.scm:321
msgid " - 'vm-image', build a freestanding virtual machine image\n"
-msgstr ""
+msgstr " - 'vm-image', xây dựng một ảnh máy ảo đứng tự do\n"
-#: guix/scripts/system.scm:131
+#: guix/scripts/system.scm:323
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
-msgstr ""
+msgstr " - 'disk-image', xây dựng ảnh đĩa, phù hợp để dùng cho đĩa USB\n"
-#: guix/scripts/system.scm:133
+#: guix/scripts/system.scm:325
msgid " - 'init', initialize a root file system to run GNU.\n"
-msgstr ""
+msgstr " - 'init', khởi tạo một hệ thống tập tin gốc để chạy GNU.\n"
-#: guix/scripts/system.scm:137
+#: guix/scripts/system.scm:329
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
msgstr ""
+"\n"
+" --image-size=CỠ cho 'vm-image', sản sinh ảnh theo CỠ này"
-#: guix/scripts/system.scm:139
+#: guix/scripts/system.scm:331
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
msgstr ""
+"\n"
+" --no-grub dành cho 'init', đừng cài GRUB"
-#: guix/scripts/system.scm:198
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:394
+#, scheme-format
msgid "~a: unknown action~%"
-msgstr "~A: không hiểu gói ~%"
+msgstr "~a: không hiểu thao tác~%"
-#: guix/scripts/system.scm:215
-#, fuzzy, scheme-format
+#: guix/scripts/system.scm:411
+#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
-msgstr "số lượng đối số không đúng~%"
+msgstr "sai số lượng đối số cho thao tác '~a'~%"
-#: guix/scripts/system.scm:234
+#: guix/scripts/system.scm:431
#, scheme-format
msgid "no configuration file specified~%"
-msgstr ""
-
-#: guix/scripts/system.scm:272
-#, fuzzy, scheme-format
-msgid "initializing operating system under '~a'...~%"
-msgstr "gặp lỗi khi kết nối đến `~a': ~a~%"
+msgstr "chưa ghi rõ tập tin nhập cấu hình~%"
#: guix/gnu-maintenance.scm:373
#, scheme-format
@@ -951,8 +973,7 @@ msgstr "việc xác minh chữ ký cho `~a'~% gặp lỗi"
#: guix/gnu-maintenance.scm:375
#, scheme-format
msgid "(could be because the public key is not in your keyring)~%"
-msgstr ""
-"(có thể nguyên nhân là do khóa công không có trong chùm chìa khóa của bạn)~%"
+msgstr "(có thể nguyên nhân là do khóa công không có trong chùm chìa khóa của bạn)~%"
#: guix/gnu-maintenance.scm:450
#, scheme-format
@@ -970,19 +991,16 @@ msgid "failed to install locale: ~a~%"
msgstr "gặp lỗi khi cài đặt `locale': ~a~%"
#: guix/ui.scm:150
-#, fuzzy
msgid ""
"Copyright (C) 2014 the Guix authors\n"
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
"This is free software: you are free to change and redistribute it.\n"
"There is NO WARRANTY, to the extent permitted by law.\n"
msgstr ""
-"Bản quyền (C) 2013 thuộc về các tác giả Guix.\n"
-"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 hay sau <http://gnu."
-"org/licenses/gpl.html>\n"
-"Đây là phần mềm tự do: bạn có quyền sửa đổi và phát hành lại nó.KHÔNG CÓ BẢO "
-"HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n"
+"Bản quyền (C) 2014 thuộc về các tác giả Guix.\n"
+"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 hay sau <http://gnu.org/licenses/gpl.html>\n"
+"Đây là phần mềm tự do: bạn có quyền sửa đổi và phát hành lại nó.\n"
+"KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n"
#: guix/ui.scm:158
#, scheme-format
@@ -1045,70 +1063,65 @@ msgstr "gặp lỗi khi kết nối đến `~a': ~a~%"
msgid "build failed: ~a~%"
msgstr "xây dựng gặp lỗi: ~a~%"
-#: guix/ui.scm:238
-#, fuzzy, scheme-format
-msgid "~a: ~a~%"
-msgstr "~a~%"
-
-#: guix/ui.scm:255
+#: guix/ui.scm:257
#, scheme-format
msgid "failed to read expression ~s: ~s~%"
msgstr "gặp lỗi khi đọc biểu thức ~s: ~s~%"
-#: guix/ui.scm:261
+#: guix/ui.scm:263
#, scheme-format
msgid "failed to evaluate expression `~a': ~s~%"
msgstr "gặp lỗi khi định giá biểu thức `~a': ~s~%"
-#: guix/ui.scm:270
+#: guix/ui.scm:272
#, scheme-format
msgid "expression ~s does not evaluate to a package~%"
msgstr "biểu thức `~s' không được định giá cho gói~%"
-#: guix/ui.scm:317
+#: guix/ui.scm:319
#, scheme-format
msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]"
msgstr "~:[Nguồn sau đây sẽ được xây dựng:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:322
+#: guix/ui.scm:324
#, scheme-format
msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[Tập tin sau đây sẽ được tải về:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:328
+#: guix/ui.scm:330
#, scheme-format
msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]"
msgstr "~:[Nguồn sau đây sẽ được biên dịch:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:333
+#: guix/ui.scm:335
#, scheme-format
msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[Những tập tin sau đây sẽ được tải về:~%~{ ~a~%~}~;~]"
-#: guix/ui.scm:350
+#: guix/ui.scm:352
msgid "<unknown location>"
msgstr "<không hiểu vị trí>"
-#: guix/ui.scm:378
+#: guix/ui.scm:380
#, scheme-format
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "gặp lỗi khi tạo thư mục cấu hình `~a': ~a~%"
-#: guix/ui.scm:459 guix/ui.scm:473
+#: guix/ui.scm:461 guix/ui.scm:475
msgid "unknown"
msgstr "không hiểu"
-#: guix/ui.scm:582
+#: guix/ui.scm:584
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "đối số không hợp lệ: ~a~%"
-#: guix/ui.scm:587
+#: guix/ui.scm:589
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Chạy lệnh `guix --help' để biết thêm thông tin.~%"
-#: guix/ui.scm:617
+#: guix/ui.scm:619
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@@ -1116,21 +1129,21 @@ msgstr ""
"Cách dùng: guix LỆNH ĐỐI_SỐ...\n"
"Chạy LỆNH với các ĐỐI SỐ.\n"
-#: guix/ui.scm:620
+#: guix/ui.scm:622
msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "LỆNH phải là một trong số những câu lệnh con được liệt kê dưới đây:\n"
-#: guix/ui.scm:640
+#: guix/ui.scm:642
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: không tìm thấy lệnh~%"
-#: guix/ui.scm:658
+#: guix/ui.scm:660
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: thiếu tên lệnh~%"
-#: guix/ui.scm:666
+#: guix/ui.scm:668
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: tùy chọn không được thừa nhận `~a'~%"
@@ -1151,85 +1164,180 @@ msgid "following redirection to `~a'...~%"
msgstr "đang cho chuyển hướng sang `~a'...~%"
#: guix/http-client.scm:241
-#, fuzzy
msgid "download failed"
-msgstr "~a: tải về gặp lỗi~%"
+msgstr "tải về gặp lỗi"
#: guix/nar.scm:134
msgid "unexpected executable file marker"
-msgstr ""
+msgstr "gặp bộ tạo tập tin thi hành không cần"
#: guix/nar.scm:141
msgid "unsupported nar file type"
-msgstr ""
+msgstr "kiểu tập tin nar không được hỗ trợ"
#: guix/nar.scm:209
msgid "unsupported file type"
-msgstr ""
+msgstr "kiểu tập tin không được hỗ trợ"
#: guix/nar.scm:219
-#, fuzzy
msgid "invalid nar signature"
-msgstr "đối số không hợp lệ: ~a~%"
+msgstr "chữ ký `nar' không hợp lệ"
#: guix/nar.scm:230
msgid "invalid nar end-of-file marker"
-msgstr ""
+msgstr "bộ tạo cuối-tập-tin nar không hợp lệ"
#: guix/nar.scm:244
msgid "invalid symlink tokens"
-msgstr ""
+msgstr "thẻ bài liên kết mềm không hợp lệ"
#: guix/nar.scm:263
msgid "unexpected directory entry termination"
-msgstr ""
+msgstr "gặp chấm dứt đề mục thư mục bất ngờ"
#: guix/nar.scm:272
msgid "unexpected directory inter-entry marker"
-msgstr ""
+msgstr "gặp bộ tạo mục-tin-kết_thúc thư mục bất ngờ"
#: guix/nar.scm:277
msgid "unsupported nar entry type"
-msgstr ""
+msgstr "kiểu đề mục nar không được hỗ trợ"
#: guix/nar.scm:376
msgid "signature is not a valid s-expression"
-msgstr ""
+msgstr "chữ ký không phải là một biểu thức s hợp lệ"
#: guix/nar.scm:385
msgid "invalid signature"
-msgstr ""
+msgstr "chữ ký sai"
#: guix/nar.scm:389
msgid "invalid hash"
-msgstr ""
+msgstr "giá-trị băm sai"
#: guix/nar.scm:397
msgid "unauthorized public key"
-msgstr ""
+msgstr "khóa công trái phép"
#: guix/nar.scm:402
msgid "corrupt signature data"
-msgstr ""
+msgstr "dữ liệu chữ ký bị hỏng"
#: guix/nar.scm:422
msgid "corrupt file set archive"
-msgstr ""
+msgstr "tập hợp tập tin trong kho lưu bị hỏng"
#: guix/nar.scm:432
-#, fuzzy, scheme-format
+#, scheme-format
msgid "importing file or directory '~a'...~%"
-msgstr "đang cho chuyển hướng sang `~a'...~%"
+msgstr "đang nhập tập tin hay thư mục `~a'...~%"
#: guix/nar.scm:441
-#, fuzzy, scheme-format
+#, scheme-format
msgid "found valid signature for '~a'~%"
-msgstr "không có nhật ký dịch cho '~a'~%"
+msgstr "tìm thấy chữ ký cho '~a'~% không hợp lệ"
#: guix/nar.scm:448
msgid "imported file lacks a signature"
-msgstr ""
+msgstr "tập tin đã nhập vào thiết chữ ký"
#: guix/nar.scm:487
msgid "invalid inter-file archive mark"
-msgstr ""
+msgstr "dấu kết-thúc-tập-tin kho lưu không hợp lệ"
+
+#~ msgid "Hello, GNU world: An example GNU package"
+#~ msgstr "Xin chào, gia đình GNU: Một gói GNU ví dụ"
+
+#~ msgid "Print lines matching a pattern"
+#~ msgstr "In ra những dòng khớp với một mẫu"
+
+#~ msgid "Stream editor"
+#~ msgstr "Trình soạn thảo luồng dữ liệu"
+
+#~ msgid "Managing tar archives"
+#~ msgstr "Quản lý kho lưu tar"
+
+#~ msgid "Apply differences to originals, with optional backups"
+#~ msgstr "Áp dụng những khác biệt này vào bản gốc, với các sao lưu tùy chọn"
+
+#~ msgid "Comparing and merging files"
+#~ msgstr "So sánh và hòa trộn các tập tin"
+
+#~ msgid "Operating on files matching given criteria"
+#~ msgstr "Thực hiện trên những tập tin khớp với điều kiện đã cho"
+
+#~ msgid "Core GNU utilities (file, text, shell)"
+#~ msgstr "Tiện ích lõi GNU (file, text, shell)"
+
+#~ msgid "Remake files automatically"
+#~ msgstr "Tạo lại các tập tin một cách tự động"
+
+#~ msgid "Binary utilities: bfd gas gprof ld"
+#~ msgstr "Tiện ích nhị phân: bfd gas gprof ld"
+
+#~ msgid "The GNU C Library"
+#~ msgstr "Thư viện C từ GNU"
+
+#~ msgid "Database of current and historical time zones"
+#~ msgstr "Cơ sở dữ liệu của hiện tại và múi giờ lịch sử"
+
+#~ msgid "GNU C++ standard library (intermediate)"
+#~ msgstr "Thư viện GNU C++ chuẩn (khâu trung gian)"
+
+#~ msgid "The linker wrapper"
+#~ msgstr "Bộ bao liên kết"
+
+#~ msgid "Scheme implementation intended especially for extensions"
+#~ msgstr "Lược đồ thực thi có dụng ý đặc biệt cho phần mở rộng"
+
+#~ msgid "Framework for building readers for GNU Guile"
+#~ msgstr "Một framework để xây dựng bộ đọc dành cho GNU Guile"
+
+#~ msgid "Guile bindings to ncurses"
+#~ msgstr "Guile ràng buộc vào ncurses"
+
+#~ msgid "Run jobs at scheduled times"
+#~ msgstr "Chạy các công việc theo lịch biểu"
+
+#~ msgid "Collection of useful Guile Scheme modules"
+#~ msgstr "Bộ sưu tập của các mô-đun Lược đồ Guile"
+
+#~ msgid "Guile bindings to libssh"
+#~ msgstr "Guile ràng buộc vào libssh"
+
+#~ msgid "Manipulate plain text files as databases"
+#~ msgstr "Thao tác các tập tin văn bản thường như là cơ sở dữ liệu"
+
+#~ msgid "package `~a' has no source~%"
+#~ msgstr "gói `~a' không có nguồn~%"
+
+#~ msgid ""
+#~ "\n"
+#~ " -n, --dry-run show what would be done without actually doing it"
+#~ msgstr ""
+#~ "\n"
+#~ " -n, --dry-run hiển thị những gì được làm nhưng không thực hiện thật"
+
+#~ msgid "Yeah..."
+#~ msgstr "Đúng..."
+
+#~ 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 ""
+#~ "Lệnh grep tìm kiếm trong một hay nhiều tập tin đầu vào những dòng có chứa\n"
+#~ "từ khớp mẫu đã cho. Theo mặc định, lệnh grep sẽ in ra các dòng khớp mẫu."
+
+#~ 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 ""
+#~ "GNU recutils là một tập hợp công cụ và thư viện cho phép truy cập các tập tin\n"
+#~ "rec là kiểu cơ sở dữ liệu dựa trên dạng văn bản thường, con người có thể đọc được.\n"
+#~ "Dữ liệu được lưu thành các bản ghi kế tiếp nhau, mỗi bản ghi chứa các thuộc tính\n"
+#~ "của các trường đã được đặt tên"
+
+#~ msgid "profile `~a' does not exist~%"
+#~ msgstr "hồ sơ `~a' không tồn tại~%"
diff --git a/po/packages/eo.po b/po/packages/eo.po
index 152ee74385..44212fee62 100644
--- a/po/packages/eo.po
+++ b/po/packages/eo.po
@@ -5,10 +5,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: guix 0.6-pre1\n"
+"Project-Id-Version: guix-packages 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-06-25 22:55+0200\n"
-"PO-Revision-Date: 2014-06-03 09:35-0300\n"
+"PO-Revision-Date: 2014-07-14 11:28-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
@@ -50,7 +50,7 @@ msgstr ""
"La ŝablono povas esti indikata kiel bazan aŭ etenditan regul-esprimon, aŭ\n"
"kiel fiksajn ĉenojn. Apriore, la kongruita teksto estas simple montrata\n"
"en la ekrano, tamen la eligo povas esti ege personigita por inkluzivigi,\n"
-"ekzemple, lini-numerojn. GNU grep oferaj multajn kromaĵojn kompare al la\n"
+"ekzemple, lini-numerojn. GNU grep oferaj multajn aldonojn kompare al la\n"
"originala aplikaĵo, inkluzive, ekzemple, rikuran serĉadon en dosierujoj."
#: gnu/packages/base.scm:109
@@ -65,6 +65,10 @@ msgid ""
"is often used for substituting text patterns in a stream. The GNU\n"
"implementation offers several extensions over the standard utility."
msgstr ""
+"Sed estas ne-interaga, teksta flu-redaktilo. Ĝi ricevas tekstan\n"
+"enigon el dosiero aŭ el la ĉefenigujo kaj tiam ĝi aplikas serion da teksto-redaktaj komandoj al la fluo kaj montras sian eligon en la ĉefeligujo. \n"
+"Ĝi estas ofte uzata por anstataŭigi teksto-ŝablonojn en fluo. La GNU-a \n"
+"realigo oferas plurajn aldonojn kompare al la ordinara aplikaĵo."
#: gnu/packages/base.scm:144
msgid "Managing tar archives"
@@ -79,6 +83,12 @@ msgid ""
"creation/modification dates. GNU tar offers many extensions over the\n"
"standard utility."
msgstr ""
+"Tar aldonas la eblecon krei arĥivojn tar, kaj ankaŭ la eblecon\n"
+"eltiri, ĝisdatigi aŭ listigi dosierojn en ekzistanta arĥivo. Ĝi estas\n"
+"utila por kombini multajn dosierojn en unu granda dosiero, tenante\n"
+"dosierujan strukturon kaj dosierinformojn kiel permesojn kaj\n"
+"dato de kreo/modifo. GNU tar oferas multajn aldonojn kompare\n"
+"al la ordinara aplikaĵo."
#: gnu/packages/base.scm:173
msgid "Apply differences to originals, with optional backups"
@@ -108,7 +118,7 @@ msgstr ""
#: gnu/packages/base.scm:224
msgid "Operating on files matching given criteria"
-msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio"
+msgstr "Operacio sur dosieroj kongruantaj al indikita kriterio"
#: gnu/packages/base.scm:226
msgid ""
@@ -203,7 +213,7 @@ msgstr ""
#: gnu/packages/base.scm:1264
msgid "Complete GCC tool chain for C/C++ development"
-msgstr ""
+msgstr "Kompleta ilaro GCC por kodumado en C/C++"
#: gnu/packages/base.scm:1266
msgid ""
@@ -256,7 +266,7 @@ msgstr ""
#: gnu/packages/guile.scm:289
msgid "Run jobs at scheduled times"
-msgstr "Lanĉi taskoj je antaŭplanitaj horoj"
+msgstr "Lanĉi taskojn je antaŭplanitaj horoj"
#: gnu/packages/guile.scm:291
msgid ""
diff --git a/tests/gexp.scm b/tests/gexp.scm
index b0ff1019e6..6d4885e44e 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -29,6 +29,7 @@
#:use-module (srfi srfi-64)
#:use-module (rnrs io ports)
#:use-module (ice-9 match)
+ #:use-module (ice-9 regex)
#:use-module (ice-9 popen))
;; Test the (guix gexp) module.
@@ -247,6 +248,23 @@
(return (and (zero? (close-pipe pipe))
(= (expt n 2) (string->number str)))))))
+(test-assert "printer"
+ (string-match "^#<gexp \\(string-append .*#<package coreutils.*\
+ \"/bin/uname\"\\) [[:xdigit:]]+>$"
+ (with-output-to-string
+ (lambda ()
+ (write
+ (gexp (string-append (ungexp coreutils)
+ "/bin/uname")))))))
+
+(test-assert "printer vs. ungexp-splicing"
+ (string-match "^#<gexp .* [[:xdigit:]]+>$"
+ (with-output-to-string
+ (lambda ()
+ ;; #~(begin #$@#~())
+ (write
+ (gexp (begin (ungexp-splicing (gexp ())))))))))
+
(test-equal "sugar"
'(gexp (foo (ungexp bar) (ungexp baz "out")
(ungexp (chbouib 42))
diff --git a/tests/records.scm b/tests/records.scm
index 15709ac326..e90d33d15d 100644
--- a/tests/records.scm
+++ b/tests/records.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -19,8 +19,16 @@
(define-module (test-records)
#:use-module (srfi srfi-64)
#:use-module (ice-9 match)
+ #:use-module (ice-9 regex)
#:use-module (guix records))
+(define (test-module)
+ ;; A module in which to evaluate things that are known to fail.
+ (let ((module (make-fresh-user-module)))
+ (module-use! module (resolve-interface '(guix records)))
+ module))
+
+
(test-begin "records")
(test-assert "define-record-type*"
@@ -50,7 +58,7 @@
(match (bar (x 7) (z (* x 3)))
(($ <bar> 7 42 21)))
(match (bar (z 21) (x (/ z 3)))
- (($ <bar> 7 42 21))))))
+ (($ <bar> 7 42 21) #t)))))
(test-assert "define-record-type* & inherit"
(begin
@@ -131,6 +139,53 @@
(parameterize ((mark (cons 'a 'b)))
(eq? (foo-baz y) (mark))))))))
+(test-assert "define-record-type* & missing initializers"
+ (catch 'syntax-error
+ (lambda ()
+ (eval '(begin
+ (define-record-type* <foo> foo make-foo
+ foo?
+ (bar foo-bar (default 42))
+ (baz foo-baz))
+
+ (foo))
+ (test-module))
+ #f)
+ (lambda (key proc message location form . args)
+ (and (eq? proc 'foo)
+ (string-match "missing .*initialize.*baz" message)
+ (equal? form '(foo))))))
+
+(test-assert "define-record-type* & extra initializers"
+ (catch 'syntax-error
+ (lambda ()
+ (eval '(begin
+ (define-record-type* <foo> foo make-foo
+ foo?
+ (bar foo-bar (default 42)))
+
+ (foo (baz 'what?)))
+ (test-module))
+ #f)
+ (lambda (key proc message location form . args)
+ (and (string-match "extra.*initializer.*baz" message)
+ (eq? proc 'foo)))))
+
+(test-assert "define-record-type* & inherit & extra initializers"
+ (catch 'syntax-error
+ (lambda ()
+ (eval '(begin
+ (define-record-type* <foo> foo make-foo
+ foo?
+ (bar foo-bar (default 42)))
+
+ (foo (inherit (foo)) (baz 'what?)))
+ (test-module))
+ #f)
+ (lambda (key proc message location form . args)
+ (and (string-match "extra.*initializer.*baz" message)
+ (eq? proc 'foo)))))
+
(test-equal "recutils->alist"
'((("Name" . "foo")
("Version" . "0.1")