me
/
guix
Archived
1
0
Fork 0

Merge branch 'master' into core-updates

master
Ludovic Courtès 2013-09-26 00:20:11 +02:00
commit 7facbf2b58
20 changed files with 829 additions and 279 deletions

88
NEWS
View File

@ -10,6 +10,94 @@ Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
Please send Guix bug reports to bug-guix@gnu.org. Please send Guix bug reports to bug-guix@gnu.org.
* Changes in 0.4 (since 0.3)
** Package management
*** New --list-generations and --delete-generations options
The guix package command has these two new options, which make it easier to
deal with a profiles generation. See “Invoking guix package” in the manual.
*** New guix-register program
This program allows the meta-data of a new store to be initialized, by
copying info from an existing store. It is mostly an internal tool.
** Programming interfaces
*** New API to bootstrap Autotools-based packages
The (guix build-system gnu) has a new dist-package procedure that takes a
package object and source directory, and returns a new package object that
runs ./bootstrap && make dist or anything similar.
*** derivation and related procedures have a #:references-graphs parameter
This parameter instructs the build daemon to populate the derivations build
tree with files containing the list of references of the given store files.
This is useful to write code that copies a packages and all its dependencies
to another storage device, such as a QEMU disk image.
*** Extended API to build a GNU system virtual machine image
The (gnu system vm) module has been augmented in many ways: the qemu-image
procedure can now populate and initialize the images store; the new
system-qemu-image procedure returns a QEMU image that runs dmd as its init
system, has login running on several consoles, has a set of installed
packages, and where Guix can be used.
New (gnu system …) modules have been added to handle the configuration of the
various parts of a GNU/Linux system. For instance, (gnu system dmd) provides
support for instantiating dmd services; (gnu system linux) helps with Linux
PAM configuration; and so on.
*** <derivation> objects supersede .drv file names in the API
derivation and similar procedures no longer return two values (a
<derivation> and a .drv file name); they now return a single value, which is
a <derivation> object. The <derivation> object embeds the corresponding .drv
file name. See “Derivations” in the manual for details.
** GNU distribution
*** XXX new packages
*** XXX package updates
*** Fontconfig font search path made more convenient
Fontconfig, the library used by many graphical applications, such as those
based on GTK+, now knows where to find the default set of fonts. Additional
fonts installed in the user profile are automatically picked up.
*** More GUI applications
The emacs and racket packages are now linked against GTK+. New GTK+
applications have been added (see above.)
*** Packaging guidelines
The documentation of packaging guidelines has been augmented. See the manual
under “GNU Distribution”.
*** Support for Python 3 along with Python 2
Python 3 has been added to the distribution, and Python packages that support
it are now built for both Python 2 and Python 3. See the “Python Modules”
section of the manual for details.
** Internationalization
Updated translations: eo.
** Bugs fixed
*** The dependency graph image has correct size in PDF output
*** Hop 2.4 builds with newer Bigloo (http://bugs.gnu.org/15194)
*** Xorg server test suite no longer fails (http://bugs.gnu.org/15392)
*** Workarounds for Guile 2.0.5 now work on Debian derivatives
* Changes in 0.3 (since 0.2) * Changes in 0.3 (since 0.2)

View File

@ -29,6 +29,7 @@ exec guile -l "$0" \
#:use-module (guix gnu-maintenance) #:use-module (guix gnu-maintenance)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (sxml simple) #:use-module (sxml simple)
#:use-module (sxml fold)
#:use-module (web uri) #:use-module (web uri)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
@ -48,8 +49,13 @@ exec guile -l "$0" \
(equal? (gnu-package-name package) name)) (equal? (gnu-package-name package) name))
gnu)))) gnu))))
(define (package->sxml package) (define (package->sxml package previous description-ids remaining)
"Return HTML-as-SXML representing PACKAGE." "Return 3 values: the HTML-as-SXML for PACKAGE added to all previously
collected package output in PREVIOUS, a list of DESCRIPTION-IDS and the number
of packages still to be processed in REMAINING. Also Introduces a call to the
JavaScript prep_pkg_descs function as part of the output of PACKAGE, every
time the length of DESCRIPTION-IDS, increasing, is 15 or when REMAINING,
decreasing, is 1."
(define (source-url package) (define (source-url package)
(let ((loc (package-location package))) (let ((loc (package-location package)))
(and loc (and loc
@ -92,37 +98,66 @@ exec guile -l "$0" \
(and=> (lookup-gnu-package name) (and=> (lookup-gnu-package name)
gnu-package-logo)) gnu-package-logo))
(define (insert-tr description-id js?)
(define (insert-js-call description-ids)
"Return an sxml call to prep_pkg_descs, with up to 15 elements of
description-ids as formal parameters."
`(script (@ (type "text/javascript"))
,(format #f "prep_pkg_descs(~a)"
(string-append "'"
(string-join description-ids "', '")
"'"))))
(let ((description-ids (cons description-id description-ids)))
`(tr (td ,(if (gnu-package? package)
`(img (@ (src "/graphics/gnu-head-mini.png")
(alt "Part of GNU")
(title "Part of GNU")))
""))
(td (a (@ (href ,(source-url package))
(title "Link to the Guix package source code"))
,(package-name package) " "
,(package-version package)))
(td (span ,(package-synopsis package))
(div (@ (id ,description-id))
,(match (package-logo (package-name package))
((? string? url)
`(img (@ (src ,url)
(height "35")
(class "package-logo")
(alt ("Logo of " ,(package-name package))))))
(_ #f))
(p ,(package-description package))
,(license package)
(a (@ (href ,(package-home-page package))
(title "Link to the package's website"))
,(package-home-page package))
,(status package)
,(if js?
(insert-js-call description-ids)
""))))))
(let ((description-id (symbol->string (let ((description-id (symbol->string
(gensym (package-name package))))) (gensym (package-name package)))))
`(tr (td ,(if (gnu-package? package) (cond ((= remaining 1) ; Last package in packages
`(img (@ (src "/graphics/gnu-head-mini.png") (values
(alt "Part of GNU") (reverse ; Fold has reversed packages
(title "Part of GNU"))) (cons (insert-tr description-id 'js) ; Prefix final sxml
"")) previous))
(td (a (@ (href ,(source-url package)) '() ; No more work to do
(title "Link to the Guix package source code")) 0)) ; End of the line
,(package-name package) " " ((= (length description-ids) 15) ; Time for a JS call
,(package-version package))) (values
(td (a (@ (href "javascript:void(0)") (cons (insert-tr description-id 'js)
(title "show/hide package description") previous) ; Prefix new sxml
(onClick ,(format #f "javascript:show_hide('~a')" '() ; Reset description-ids
description-id))) (1- remaining))) ; Reduce remaining
,(package-synopsis package)) (else ; Insert another row, and build description-ids
(div (@ (id ,description-id) (values
(style "display: none;")) (cons (insert-tr description-id #f)
,(match (package-logo (package-name package)) previous) ; Prefix new sxml
((? string? url) (cons description-id description-ids) ; Update description-ids
`(img (@ (src ,url) (1- remaining)))))) ; Reduce remaining
(height "35")
(class "package-logo")
(alt ("Logo of " ,(package-name package))))))
(_ #f))
(p ,(package-description package))
,(license package)
(a (@ (href ,(package-home-page package))
(title "Link to the package's website"))
,(package-home-page package))
,(status package))))))
(define (packages->sxml packages) (define (packages->sxml packages)
"Return an HTML page as SXML describing PACKAGES." "Return an HTML page as SXML describing PACKAGES."
@ -145,7 +180,7 @@ exec guile -l "$0" \
(tr (th "GNU?") (tr (th "GNU?")
(th "Package version") (th "Package version")
(th "Package details")) (th "Package details"))
,@(map package->sxml packages)) ,@(fold-values package->sxml packages '() '() (length packages)))
(a (@ (href "#intro") (a (@ (href "#intro")
(title "Back to top.") (title "Back to top.")
(id "top")) (id "top"))
@ -239,14 +274,45 @@ a#top:hover, a#top:focus {
// license: CC0 // license: CC0
function show_hide(idThing) function show_hide(idThing)
{ {
if(document.getElementById && document.createTextNode) {
var thing = document.getElementById(idThing); var thing = document.getElementById(idThing);
/* Used to change the link text, depending on whether description is
collapsed or expanded */
var thingLink = thing.previousSibling.lastChild.firstChild;
if (thing) { if (thing) {
if (thing.style.display == \"none\") { if (thing.style.display == \"none\") {
thing.style.display = \"\"; thing.style.display = \"\";
thingLink.data = 'Collapse';
} else { } else {
thing.style.display = \"none\"; thing.style.display = \"none\";
thingLink.data = 'Expand';
} }
} }
}
}
/* Add controllers used for collapse/expansion of package descriptions */
function prep(idThing)
{
var tdThing = document.getElementById(idThing).parentNode;
if (tdThing) {
var aThing = tdThing.firstChild.appendChild(document.createElement('a'));
aThing.setAttribute('href', 'javascript:void(0)');
aThing.setAttribute('title', 'show/hide package description');
aThing.appendChild(document.createTextNode('Expand'));
aThing.onclick=function(){show_hide(idThing);};
/* aThing.onkeypress=function(){show_hide(idThing);}; */
}
}
/* Take n element IDs, prepare them for javascript enhanced
display and hide the IDs by default. */
function prep_pkg_descs()
{
if(document.getElementById && document.createTextNode) {
for(var i=0; i<arguments.length; i++) {
prep(arguments[i])
show_hide(arguments[i]);
}
}
} }
</script>")) </script>"))

View File

@ -583,9 +583,8 @@ When combined with options such as @code{--install}, roll back occurs
before any other actions. before any other actions.
When rolling back from the first generation that actually contains When rolling back from the first generation that actually contains
installed packages, the profile is made to point to the @dfn{empty installed packages, the profile is made to point to the @dfn{zeroth
profile}, also known as @dfn{profile zero}---i.e., it contains no files generation}, which contains no files apart from its own meta-data.
apart from its own meta-data.
Installing, removing, or upgrading packages from a generation that has Installing, removing, or upgrading packages from a generation that has
been rolled back to overwrites previous future generations. Thus, the been rolled back to overwrites previous future generations. Thus, the
@ -683,7 +682,8 @@ Multiple Outputs}), and the source location of its definition.
@itemx -l [@var{pattern}] @itemx -l [@var{pattern}]
Return a list of generations along with their creation dates; for each Return a list of generations along with their creation dates; for each
generation, show the installed packages, with the most recently generation, show the installed packages, with the most recently
installed packages shown last. installed packages shown last. Note that the zeroth generation is never
shown.
For each installed package, print the following items, separated by For each installed package, print the following items, separated by
tabs: the name of a package, its version string, the part of the package tabs: the name of a package, its version string, the part of the package

View File

@ -19,6 +19,7 @@
(define-module (gnu packages fontutils) (define-module (gnu packages fontutils)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (gnu packages compression) #:use-module (gnu packages compression)
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages pkg-config) #:use-module (gnu packages pkg-config)
#:use-module (gnu packages xml) #:use-module (gnu packages xml)
#:use-module ((guix licenses) #:renamer (symbol-prefix-proc 'license:)) #:use-module ((guix licenses) #:renamer (symbol-prefix-proc 'license:))
@ -75,11 +76,16 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
(build-system gnu-build-system) (build-system gnu-build-system)
(inputs `(("expat" ,expat) (inputs `(("expat" ,expat)
("freetype" ,freetype) ("freetype" ,freetype)
("gs-fonts" ,gs-fonts)
("pkg-config" ,pkg-config))) ("pkg-config" ,pkg-config)))
(arguments (arguments
`(#:configure-flags `(#:configure-flags
;; point to user profile instead of /usr/share/fonts in /etc/fonts.conf ;; point to user profile instead of /usr/share/fonts in /etc/fonts.conf
`("--with-default-fonts=~/.guix-profile/share/fonts"))) (list "--with-default-fonts=~/.guix-profile/share/fonts"
;; register gs-fonts
(string-append "--with-add-fonts="
(assoc-ref %build-inputs "gs-fonts")
"/share/fonts"))))
(synopsis "Fontconfig, a library for configuring and customising font access.") (synopsis "Fontconfig, a library for configuring and customising font access.")
(description (description
"Fontconfig can discover new fonts when installed automatically; "Fontconfig can discover new fonts when installed automatically;

View File

@ -57,14 +57,14 @@ Daemon and possibly more in the future.")
(define-public libgcrypt (define-public libgcrypt
(package (package
(name "libgcrypt") (name "libgcrypt")
(version "1.5.2") (version "1.5.3")
(source (origin (source (origin
(method url-fetch) (method url-fetch)
(uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-" (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
version ".tar.bz2")) version ".tar.bz2"))
(sha256 (sha256
(base32 (base32
"0gwnzqd64cpwdmk93nll54nidsr74jpimxzj4p4z7502ylwl66p4")))) "1lar8y3lh61zl5flljpz540d78g99h4d5idfwrfw8lm3gm737xdw"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(propagated-inputs (propagated-inputs
`(("libgpg-error" ,libgpg-error))) `(("libgpg-error" ,libgpg-error)))
@ -106,7 +106,7 @@ provided.")
(define-public libksba (define-public libksba
(package (package
(name "libksba") (name "libksba")
(version "1.2.0") (version "1.3.0")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
@ -115,7 +115,7 @@ provided.")
version ".tar.bz2")) version ".tar.bz2"))
(sha256 (sha256
(base32 (base32
"0jwk7hm3x3g4hd7l12z3d79dy7359x7lc88dq6z7q0ixn1jwxbq9")))) "0w8rfb6yhcwkwzvjafrashcygy4hd9xwwmvlnkfd1m2h0paywqas"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(propagated-inputs (propagated-inputs
`(("libgpg-error" ,libgpg-error))) `(("libgpg-error" ,libgpg-error)))
@ -131,7 +131,7 @@ specifications are building blocks of S/MIME and TLS.")
(define-public gnupg (define-public gnupg
(package (package
(name "gnupg") (name "gnupg")
(version "2.0.20") (version "2.0.21")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
@ -139,12 +139,10 @@ specifications are building blocks of S/MIME and TLS.")
".tar.bz2")) ".tar.bz2"))
(sha256 (sha256
(base32 (base32
"16mp0j5inrcqcb3fxbn0b3aamascy3n923wiy0y8marc0rzrp53f")))) "1xgf1q1phdawk6y66haaqcvfnlsqk12jmjin1m2d5x6fqw18kpq0"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(inputs (inputs
`(;; TODO: Add missing optional dep libusb. `(("bzip2" ,guix:bzip2)
;; ("libusb" ,libusb)
("bzip2" ,guix:bzip2)
("curl" ,curl) ("curl" ,curl)
("libassuan" ,libassuan) ("libassuan" ,libassuan)
("libgcrypt" ,libgcrypt) ("libgcrypt" ,libgcrypt)

View File

@ -19,6 +19,7 @@
(define-module (gnu packages mail) (define-module (gnu packages mail)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (gnu packages autotools) #:use-module (gnu packages autotools)
#:use-module (gnu packages cyrus-sasl)
#:use-module (gnu packages dejagnu) #:use-module (gnu packages dejagnu)
#:use-module (gnu packages gdbm) #:use-module (gnu packages gdbm)
#:use-module (gnu packages gnutls) #:use-module (gnu packages gnutls)
@ -154,7 +155,8 @@ aliasing facilities to work just as they would on normal mail.")
"1864cwz240gh0zy56fb47qqzwyf6ghg01037rb4p2kqgimpg6h91")))) "1864cwz240gh0zy56fb47qqzwyf6ghg01037rb4p2kqgimpg6h91"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(inputs (inputs
`(("ncurses" ,ncurses) `(("cyrus-sasl" ,cyrus-sasl)
("ncurses" ,ncurses)
("openssl" ,openssl) ("openssl" ,openssl)
("perl" ,perl))) ("perl" ,perl)))
(arguments (arguments
@ -162,6 +164,7 @@ aliasing facilities to work just as they would on normal mail.")
"--enable-imap" "--enable-imap"
"--enable-pop" "--enable-pop"
"--with-ssl" "--with-ssl"
"--with-sasl"
;; so that mutt does not check whether the path ;; so that mutt does not check whether the path
;; exists, which it does not in the chroot ;; exists, which it does not in the chroot
"--with-mailpath=/var/mail"))) "--with-mailpath=/var/mail")))

View File

@ -108,7 +108,7 @@ extensive test suite.")
(define-public pspp (define-public pspp
(package (package
(name "pspp") (name "pspp")
(version "0.8.0a") (version "0.8.1")
(source (source
(origin (origin
(method url-fetch) (method url-fetch)
@ -116,7 +116,7 @@ extensive test suite.")
version ".tar.gz")) version ".tar.gz"))
(sha256 (sha256
(base32 (base32
"1pgkb3z8b4wk4gymnafclhkrqq7n05wq83mra3v53jdl6bnllmyq")))) "0qhxsdbwxd3cn1shc13wxvx2lg32lp4z6sz24kv3jz7p5xfi8j7x"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(inputs (inputs
`(("gettext" ,gnu:gettext) `(("gettext" ,gnu:gettext)

View File

@ -22,7 +22,7 @@
#:use-module (guix build-system gnu) #:use-module (guix build-system gnu)
#:use-module ((guix licenses) #:select (gpl3+)) #:use-module ((guix licenses) #:select (gpl3+))
#:use-module (gnu packages guile) #:use-module (gnu packages guile)
#:use-module ((gnu packages compression) #:select (bzip2)) #:use-module ((gnu packages compression) #:select (bzip2 gzip))
#:use-module (gnu packages gnupg) #:use-module (gnu packages gnupg)
#:use-module (gnu packages sqlite) #:use-module (gnu packages sqlite)
#:use-module (gnu packages pkg-config)) #:use-module (gnu packages pkg-config))
@ -41,6 +41,7 @@
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:configure-flags (list `(#:configure-flags (list
"--localstatedir=/var"
(string-append "--with-libgcrypt-prefix=" (string-append "--with-libgcrypt-prefix="
(assoc-ref %build-inputs (assoc-ref %build-inputs
"libgcrypt"))) "libgcrypt")))
@ -70,6 +71,8 @@
"/20130105/guile-2.0.7.tar.xz")) "/20130105/guile-2.0.7.tar.xz"))
(sha256 hash))))) (sha256 hash)))))
`(("bzip2" ,bzip2) `(("bzip2" ,bzip2)
("gzip" ,gzip)
("sqlite" ,sqlite) ("sqlite" ,sqlite)
("libgcrypt" ,libgcrypt) ("libgcrypt" ,libgcrypt)
("guile" ,guile-2.0) ("guile" ,guile-2.0)
@ -100,3 +103,20 @@ A user-land free software distribution for GNU/Linux comes as part of Guix.
Guix is based on the Nix package manager.") Guix is based on the Nix package manager.")
(license gpl3+))) (license gpl3+)))
(define-public guix-0.4
;; XXX: Hack to allow the use of a 0.4ish tarball. This assumes that you
;; have run 'make dist' in your build tree. Remove when 0.4 is out.
(let* ((builddir (dirname
(canonicalize-path
(dirname (search-path %load-path
"guix/config.scm")))))
(tarball (string-append builddir "/guix-0.4.tar.gz")))
(package (inherit guix)
(version "0.4rc")
(source (if (file-exists? tarball)
tarball
(begin
(format (current-error-port)
"warning: 'guix-0.4.tar.gz' not found~%")
(package-source guix)))))))

View File

@ -32,6 +32,7 @@
#:use-module (gnu packages avahi) #:use-module (gnu packages avahi)
#:use-module (gnu packages libphidget) #:use-module (gnu packages libphidget)
#:use-module (gnu packages glib) #:use-module (gnu packages glib)
#:use-module (gnu packages gtk)
#:use-module (gnu packages libffi) #:use-module (gnu packages libffi)
#:use-module (gnu packages libjpeg) #:use-module (gnu packages libjpeg)
#:use-module ((gnu packages gtk) #:select (cairo pango)) #:use-module ((gnu packages gtk) #:select (cairo pango))
@ -358,12 +359,15 @@ implementation techniques and as an expository tool.")
'(#:phases '(#:phases
(let* ((gui-libs (let* ((gui-libs
(lambda (inputs) (lambda (inputs)
;; FIXME: Add GTK+ and GDK for DrRacket. (define (lib input)
(let ((glib (string-append (assoc-ref inputs "glib") "/lib")) (string-append (assoc-ref inputs input) "/lib"))
(cairo (string-append (assoc-ref inputs "cairo") "/lib"))
(pango (string-append (assoc-ref inputs "pango") "/lib")) (list (lib "glib")
(libjpeg (string-append (assoc-ref inputs "libjpeg") "/lib"))) (lib "cairo")
(list glib cairo pango libjpeg))))) (lib "pango")
(lib "libjpeg")
(lib "gtk")
(lib "gdk-pixbuf")))))
(alist-cons-before (alist-cons-before
'configure 'pre-configure 'configure 'pre-configure
(lambda* (#:key inputs #:allow-other-keys) (lambda* (#:key inputs #:allow-other-keys)
@ -397,7 +401,9 @@ implementation techniques and as an expository tool.")
("glib" ,glib) ; for DrRacket ("glib" ,glib) ; for DrRacket
("cairo" ,cairo) ("cairo" ,cairo)
("pango" ,pango) ("pango" ,pango)
("libjpeg" ,libjpeg-8))) ("libjpeg" ,libjpeg-8)
("gdk-pixbuf" ,gdk-pixbuf)
("gtk" ,gtk+)))
(home-page "http://racket-lang.org") (home-page "http://racket-lang.org")
(synopsis "Implementation of Scheme and related languages") (synopsis "Implementation of Scheme and related languages")
(description (description

View File

@ -29,11 +29,11 @@
#:use-module ((gnu packages gettext) #:use-module ((gnu packages gettext)
#:renamer (symbol-prefix-proc 'gnu:)) #:renamer (symbol-prefix-proc 'gnu:))
#:use-module (gnu packages glib) #:use-module (gnu packages glib)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages gperf) #:use-module (gnu packages gperf)
#:use-module (gnu packages libpng) #:use-module (gnu packages libpng)
#:use-module (gnu packages linux) #:use-module (gnu packages linux)
#:use-module (gnu packages m4) #:use-module (gnu packages m4)
#:use-module (gnu packages openssl)
#:use-module (gnu packages perl) #:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config) #:use-module (gnu packages pkg-config)
#:use-module (gnu packages python) #:use-module (gnu packages python)
@ -3114,9 +3114,9 @@ tracking.")
(license license:x11))) (license license:x11)))
(define-public xkbcomp (define xkbcomp-intermediate ; used as input for xkeyboard-config
(package (package
(name "xkbcomp") (name "xkbcomp-intermediate")
(version "1.2.4") (version "1.2.4")
(source (source
(origin (origin
@ -3139,6 +3139,18 @@ tracking.")
(description "X.org provides an implementation of the X Window System") (description "X.org provides an implementation of the X Window System")
(license license:x11))) (license license:x11)))
(define-public xkbcomp ; using xkeyboard-config as input
(package (inherit xkbcomp-intermediate)
(name "xkbcomp")
(inputs
`(,@(package-inputs xkbcomp-intermediate)
("xkeyboard-config" ,xkeyboard-config)))
(arguments
`(#:configure-flags
(list (string-append "--with-xkb-config-root="
(assoc-ref %build-inputs "xkeyboard-config")
"/share/X11/xkb"))))))
(define-public xkbevd (define-public xkbevd
(package (package
@ -3212,7 +3224,7 @@ tracking.")
("intltool" ,intltool) ("intltool" ,intltool)
("libx11" ,libx11) ("libx11" ,libx11)
("pkg-config" ,pkg-config) ("pkg-config" ,pkg-config)
("xkbcomp" ,xkbcomp))) ("xkbcomp-intermediate" ,xkbcomp-intermediate)))
(home-page "http://www.x.org/wiki/") (home-page "http://www.x.org/wiki/")
(synopsis "xorg implementation of the X Window System") (synopsis "xorg implementation of the X Window System")
(description "X.org provides an implementation of the X Window System") (description "X.org provides an implementation of the X Window System")
@ -4262,6 +4274,7 @@ emulation to complete hardware acceleration for modern GPUs.")
("dbus" ,dbus) ("dbus" ,dbus)
("dmxproto" ,dmxproto) ("dmxproto" ,dmxproto)
("libdmx" ,libdmx) ("libdmx" ,libdmx)
("libgcrypt" ,libgcrypt)
("libxau" ,libxau) ("libxau" ,libxau)
("libxaw" ,libxaw) ("libxaw" ,libxaw)
("libxdmcp" ,libxdmcp) ("libxdmcp" ,libxdmcp)
@ -4273,7 +4286,6 @@ emulation to complete hardware acceleration for modern GPUs.")
("libxt" ,libxt) ("libxt" ,libxt)
("libxv" ,libxv) ("libxv" ,libxv)
("mesa" ,mesa) ("mesa" ,mesa)
("openssl" ,openssl)
("pkg-config" ,pkg-config) ("pkg-config" ,pkg-config)
("python" ,python-wrapper) ("python" ,python-wrapper)
("recordproto" ,recordproto) ("recordproto" ,recordproto)
@ -4284,10 +4296,30 @@ emulation to complete hardware acceleration for modern GPUs.")
("xf86dgaproto" ,xf86dgaproto) ("xf86dgaproto" ,xf86dgaproto)
("xf86driproto" ,xf86driproto) ("xf86driproto" ,xf86driproto)
("xf86vidmodeproto" ,xf86vidmodeproto) ("xf86vidmodeproto" ,xf86vidmodeproto)
;; ("xkbutils" ,xkbutils) ("xkbcomp" ,xkbcomp)
;; ("xkeyboard-config" ,xkeyboard-config) ("xkeyboard-config" ,xkeyboard-config)
("xtrans" ,xtrans) ("xtrans" ,xtrans)
("zlib" ,zlib))) ("zlib" ,zlib)))
(arguments
`(#:configure-flags
(list (string-append "--with-xkb-path="
(assoc-ref %build-inputs "xkeyboard-config")
"/share/X11/xkb")
(string-append "--with-xkb-output="
"/tmp") ; FIXME: This is a bit doubtful; where should
; the compiled keyboard maps go?
(string-append "--with-xkb-bin-directory="
(assoc-ref %build-inputs "xkbcomp")
"/bin"))
#:phases
(alist-replace
'configure
(lambda* (#:key outputs #:allow-other-keys #:rest args)
(let ((configure (assoc-ref %standard-phases 'configure)))
(substitute* (find-files "." "\\.c$")
(("/bin/sh") (which "sh")))
(apply configure args)))
%standard-phases)))
(home-page "http://www.x.org/wiki/") (home-page "http://www.x.org/wiki/")
(synopsis "xorg implementation of the X Window System") (synopsis "xorg implementation of the X Window System")
(description "X.org provides an implementation of the X Window System") (description "X.org provides an implementation of the X Window System")

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -24,25 +24,37 @@
#:use-module (gnu packages bdw-gc) #:use-module (gnu packages bdw-gc)
#:use-module (gnu packages perl) #:use-module (gnu packages perl)
#:use-module (gnu packages help2man) #:use-module (gnu packages help2man)
#:use-module (gnu packages ncurses)) #:use-module (gnu packages ncurses)
#:use-module (gnu packages bash))
(define-public zile (define-public zile
(package (package
(name "zile") (name "zile")
(version "2.4.9") (version "2.4.9")
(source (source (origin
(origin (method url-fetch)
(method url-fetch) (uri (string-append "mirror://gnu/zile/zile-"
(uri (string-append "mirror://gnu/zile/zile-" version ".tar.gz"))
version ".tar.gz")) (sha256
(sha256 (base32
(base32 "0j801c28ypm924rw3lqyb6khxyslg6ycrv16wmmwcam0mk3mj6f7"))))
"0j801c28ypm924rw3lqyb6khxyslg6ycrv16wmmwcam0mk3mj6f7"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments
'(#:phases (alist-cons-before
'configure 'patch-/bin/sh
(lambda* (#:key inputs #:allow-other-keys)
(let ((bash (assoc-ref inputs "bash")))
;; Refer to the actual shell.
(substitute* '("lib/spawni.c" "src/funcs.c")
(("/bin/sh")
(string-append bash "/bin/sh")))))
%standard-phases)))
(inputs (inputs
`(("boehm-gc" ,libgc) `(("boehm-gc" ,libgc)
("ncurses" ,ncurses) ("ncurses" ,ncurses)
("perl" ,perl) ("bash" ,bash)))
(native-inputs
`(("perl" ,perl)
("help2man" ,help2man))) ("help2man" ,help2man)))
(home-page "http://www.gnu.org/software/zile/") (home-page "http://www.gnu.org/software/zile/")
(synopsis "Zile is lossy Emacs, a lightweight Emacs clone") (synopsis "Zile is lossy Emacs, a lightweight Emacs clone")

View File

@ -21,8 +21,12 @@
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix derivations) #:use-module (guix derivations)
#:use-module (guix records) #:use-module (guix records)
#:use-module ((gnu packages base)
#:select (glibc-final))
#:use-module ((gnu packages system) #:use-module ((gnu packages system)
#:select (mingetty inetutils)) #:select (mingetty inetutils))
#:use-module ((gnu packages package-management)
#:select (guix))
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:export (service? #:export (service?
@ -34,8 +38,13 @@
service-stop service-stop
service-inputs service-inputs
host-name-service
syslog-service syslog-service
mingetty-service mingetty-service
nscd-service
guix-service
static-networking-service
dmd-configuration-file)) dmd-configuration-file))
;;; Commentary: ;;; Commentary:
@ -58,6 +67,14 @@
(inputs service-inputs ; list of inputs (inputs service-inputs ; list of inputs
(default '()))) (default '())))
(define (host-name-service store name)
"Return a service that sets the host name to NAME."
(service
(provision '(host-name))
(start `(lambda _
(sethostname ,name)))
(respawn? #f)))
(define (mingetty-service store tty) (define (mingetty-service store tty)
"Return a service to run mingetty on TTY." "Return a service to run mingetty on TTY."
(let* ((mingetty-drv (package-derivation store mingetty)) (let* ((mingetty-drv (package-derivation store mingetty))
@ -65,9 +82,32 @@
"/sbin/mingetty"))) "/sbin/mingetty")))
(service (service
(provision (list (symbol-append 'term- (string->symbol tty)))) (provision (list (symbol-append 'term- (string->symbol tty))))
;; Since the login prompt shows the host name, wait for the 'host-name'
;; service to be done.
(requirement '(host-name))
(start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) (start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty))
(inputs `(("mingetty" ,mingetty)))))) (inputs `(("mingetty" ,mingetty))))))
(define* (nscd-service store
#:key (glibc glibc-final))
"Return a service that runs libc's name service cache daemon (nscd)."
(let ((nscd (string-append (package-output store glibc) "/sbin/nscd")))
(service
(provision '(nscd))
(start `(make-forkexec-constructor ,nscd "-f" "/dev/null"))
;; XXX: Local copy of 'make-kill-destructor' because the one upstream
;; uses the broken 'opt-lambda' macro.
(stop `(lambda* (#:optional (signal SIGTERM))
(lambda (pid . args)
(kill pid signal)
#f)))
(respawn? #f)
(inputs `(("glibc" ,glibc))))))
(define (syslog-service store) (define (syslog-service store)
"Return a service that runs 'syslogd' with reasonable default settings." "Return a service that runs 'syslogd' with reasonable default settings."
@ -104,6 +144,33 @@
(inputs `(("inetutils" ,inetutils) (inputs `(("inetutils" ,inetutils)
("syslog.conf" ,syslog.conf)))))) ("syslog.conf" ,syslog.conf))))))
(define* (guix-service store #:key (guix guix))
"Return a service that runs the build daemon from GUIX."
(let* ((drv (package-derivation store guix))
(daemon (string-append (derivation->output-path drv)
"/bin/guix-daemon")))
(service
(provision '(guix-daemon))
(start `(make-forkexec-constructor ,daemon))
(inputs `(("guix" ,guix))))))
(define* (static-networking-service store interface ip
#:key (inetutils inetutils))
"Return a service that starts INTERFACE with address IP."
;; TODO: Eventually we should do this using Guile's networking procedures,
;; like 'configure-qemu-networking' does, but the patch that does this is
;; not yet in stock Guile.
(let ((ifconfig (string-append (package-output store inetutils)
"/bin/ifconfig")))
(service
(provision '(networking))
(start `(make-forkexec-constructor ,ifconfig ,interface ,ip "up"))
(stop `(make-forkexec-constructor ,ifconfig ,interface "down"))
(respawn? #f)
(inputs `(("inetutils" ,inetutils))))))
(define (dmd-configuration-file store services) (define (dmd-configuration-file store services)
"Return the dmd configuration file for SERVICES." "Return the dmd configuration file for SERVICES."
(define config (define config

View File

@ -125,9 +125,10 @@
(let ((unix (pam-entry (let ((unix (pam-entry
(control "required") (control "required")
(module "pam_unix.so")))) (module "pam_unix.so"))))
(lambda* (name #:key allow-empty-passwords?) (lambda* (name #:key allow-empty-passwords? motd)
"Return a standard Unix-style PAM service for NAME. When "Return a standard Unix-style PAM service for NAME. When
ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords." ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords. When MOTD is true, it
should be the name of a file used as the message-of-the-day."
;; See <http://www.linux-pam.org/Linux-PAM-html/sag-configuration-example.html>. ;; See <http://www.linux-pam.org/Linux-PAM-html/sag-configuration-example.html>.
(let ((name* name)) (let ((name* name))
(pam-service (pam-service
@ -140,6 +141,12 @@ ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords."
(arguments '("nullok"))) (arguments '("nullok")))
unix))) unix)))
(password (list unix)) (password (list unix))
(session (list unix))))))) (session (if motd
(list unix
(pam-entry
(control "optional")
(module "pam_motd.so")
(arguments (list (string-append "motd=" motd)))))
(list unix))))))))
;;; linux.scm ends here ;;; linux.scm ends here

View File

@ -23,6 +23,8 @@
#:use-module (guix packages) #:use-module (guix packages)
#:use-module ((gnu packages base) #:select (%final-inputs #:use-module ((gnu packages base) #:select (%final-inputs
guile-final guile-final
gcc-final
glibc-final
coreutils)) coreutils))
#:use-module (gnu packages guile) #:use-module (gnu packages guile)
#:use-module (gnu packages bash) #:use-module (gnu packages bash)
@ -31,6 +33,7 @@
#:use-module (gnu packages grub) #:use-module (gnu packages grub)
#:use-module (gnu packages linux) #:use-module (gnu packages linux)
#:use-module (gnu packages linux-initrd) #:use-module (gnu packages linux-initrd)
#:use-module (gnu packages package-management)
#:use-module ((gnu packages make-bootstrap) #:use-module ((gnu packages make-bootstrap)
#:select (%guile-static-stripped)) #:select (%guile-static-stripped))
#:use-module (gnu packages system) #:use-module (gnu packages system)
@ -91,6 +94,10 @@ made available under the /xchg CIFS share."
`(,input . ,(package-output store package "out" system))) `(,input . ,(package-output store package "out" system)))
((input (? package? package) sub-drv) ((input (? package? package) sub-drv)
`(,input . ,(package-output store package sub-drv system))) `(,input . ,(package-output store package sub-drv system)))
((input (? derivation? drv))
`(,input . ,(derivation->output-path drv)))
((input (? derivation? drv) sub-drv)
`(,input . ,(derivation->output-path drv sub-drv)))
((input (and (? string?) (? store-path?) file)) ((input (and (? string?) (? store-path?) file))
`(,input . ,file))) `(,input . ,file)))
inputs)) inputs))
@ -177,7 +184,8 @@ made available under the /xchg CIFS share."
`(,name ,(->drv package) `(,name ,(->drv package)
,@sub-drv)) ,@sub-drv))
((name (? string? file)) ((name (? string? file))
`(,name ,file))) `(,name ,file))
(tuple tuple))
inputs)) inputs))
#:env-vars env-vars #:env-vars env-vars
#:modules (delete-duplicates #:modules (delete-duplicates
@ -191,6 +199,7 @@ made available under the /xchg CIFS share."
(system (%current-system)) (system (%current-system))
(disk-image-size (* 100 (expt 2 20))) (disk-image-size (* 100 (expt 2 20)))
grub-configuration grub-configuration
(initialize-store? #f)
(populate #f) (populate #f)
(inputs '()) (inputs '())
(inputs-to-copy '())) (inputs-to-copy '()))
@ -199,11 +208,13 @@ disk image, with a GRUB installation that uses GRUB-CONFIGURATION as its
configuration file. configuration file.
INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied
into the image being built. into the image being built. When INITIALIZE-STORE? is true, initialize the
store database in the image so that Guix can be used in the image.
When POPULATE is true, it must be the store file name of a Guile script to run POPULATE is a list of directives stating directories or symlinks to be created
in the disk image partition once it has been populated with INPUTS-TO-COPY. in the disk image partition. It is evaluated once the image has been
It can be used to provide additional files, such as /etc files." populated with INPUTS-TO-COPY. It can be used to provide additional files,
such as /etc files."
(define input->name+derivation (define input->name+derivation
(match-lambda (match-lambda
((name (? package? package)) ((name (? package? package))
@ -213,6 +224,10 @@ It can be used to provide additional files, such as /etc files."
`(,name . ,(derivation->output-path `(,name . ,(derivation->output-path
(package-derivation store package system) (package-derivation store package system)
sub-drv))) sub-drv)))
((name (? derivation? drv))
`(,name . ,(derivation->output-path drv)))
((name (? derivation? drv) sub-drv)
`(,name . ,(derivation->output-path drv sub-drv)))
((input (and (? string?) (? store-path?) file)) ((input (and (? string?) (? store-path?) file))
`(,input . ,file)))) `(,input . ,file))))
@ -298,6 +313,36 @@ It can be used to provide additional files, such as /etc files."
;; Populate /dev. ;; Populate /dev.
(make-essential-device-nodes #:root "/fs") (make-essential-device-nodes #:root "/fs")
;; Optionally, register the inputs in the image's store.
(let* ((guix (assoc-ref %build-inputs "guix"))
(register (string-append guix
"/sbin/guix-register")))
,@(if initialize-store?
(match inputs-to-copy
(((graph-files . _) ...)
(map (lambda (closure)
`(system* register "--prefix" "/fs"
,(string-append "/xchg/"
closure)))
graph-files)))
'(#f)))
;; Evaluate the POPULATE directives.
,@(let loop ((directives populate)
(statements '()))
(match directives
(()
(reverse statements))
((('directory name) rest ...)
(loop rest
(cons `(mkdir-p ,(string-append "/fs" name))
statements)))
(((new '-> old) rest ...)
(loop rest
(cons `(symlink ,old
,(string-append "/fs" new))
statements)))))
(and=> (assoc-ref %build-inputs "populate") (and=> (assoc-ref %build-inputs "populate")
(lambda (populate) (lambda (populate)
(chdir "/fs") (chdir "/fs")
@ -337,8 +382,8 @@ It can be used to provide additional files, such as /etc files."
("gawk" ,(car (assoc-ref %final-inputs "gawk"))) ("gawk" ,(car (assoc-ref %final-inputs "gawk")))
("util-linux" ,util-linux) ("util-linux" ,util-linux)
,@(if populate ,@(if initialize-store?
`(("populate" ,populate)) `(("guix" ,guix-0.4))
'()) '())
,@inputs-to-copy) ,@inputs-to-copy)
@ -353,19 +398,73 @@ It can be used to provide additional files, such as /etc files."
;;; Stand-alone VM image. ;;; Stand-alone VM image.
;;; ;;;
(define* (union store inputs
#:key (guile (%guile-for-build)) (system (%current-system))
(name "union"))
"Return a derivation that builds the union of INPUTS. INPUTS is a list of
input tuples."
(define builder
`(begin
(use-modules (guix build union))
(setvbuf (current-output-port) _IOLBF)
(setvbuf (current-error-port) _IOLBF)
(let ((output (assoc-ref %outputs "out"))
(inputs (map cdr %build-inputs)))
(format #t "building union `~a' with ~a packages...~%"
output (length inputs))
(union-build output inputs))))
(build-expression->derivation store name system builder
(map (match-lambda
((name (? package? p))
`(,name ,(package-derivation store p
system)))
((name (? package? p) output)
`(,name ,(package-derivation store p
system)
,output))
(x x))
inputs)
#:modules '((guix build union))
#:guile-for-build guile))
(define (system-qemu-image store) (define (system-qemu-image store)
"Return the derivation of a QEMU image of the GNU system." "Return the derivation of a QEMU image of the GNU system."
(define motd
(add-text-to-store store "motd" "
Happy birthday, GNU! http://www.gnu.org/gnu30
"))
(define %pam-services (define %pam-services
;; Services known to PAM. ;; Services known to PAM.
(list %pam-other-services (list %pam-other-services
(unix-pam-service "login" #:allow-empty-passwords? #t))) (unix-pam-service "login"
#:allow-empty-passwords? #t
#:motd motd)))
(define %dmd-services (define %dmd-services
;; Services run by dmd. ;; Services run by dmd.
(list (mingetty-service store "tty1") (list (host-name-service store "gnu")
(mingetty-service store "tty1")
(mingetty-service store "tty2") (mingetty-service store "tty2")
(mingetty-service store "tty3") (mingetty-service store "tty3")
(syslog-service store))) (mingetty-service store "tty4")
(mingetty-service store "tty5")
(mingetty-service store "tty6")
(syslog-service store)
(guix-service store #:guix guix-0.4)
(nscd-service store)
;; QEMU networking settings.
(static-networking-service store "eth0" "10.0.2.10")))
(define resolv.conf
;; Name resolution for default QEMU settings.
(add-text-to-store store "resolv.conf"
"nameserver 10.0.2.3\n"))
(parameterize ((%guile-for-build (package-derivation store guile-final))) (parameterize ((%guile-for-build (package-derivation store guile-final)))
(let* ((bash-drv (package-derivation store bash)) (let* ((bash-drv (package-derivation store bash))
@ -383,20 +482,53 @@ It can be used to provide additional files, such as /etc files."
"root:x:0:\n")) "root:x:0:\n"))
(pam.d-drv (pam-services->directory store %pam-services)) (pam.d-drv (pam-services->directory store %pam-services))
(pam.d (derivation->output-path pam.d-drv)) (pam.d (derivation->output-path pam.d-drv))
(populate
(add-text-to-store store "populate-qemu-image" (packages `(("coreutils" ,coreutils)
(object->string ("bash" ,bash)
`(begin ("guile" ,guile-2.0)
(mkdir-p "etc") ("dmd" ,dmd)
(mkdir-p "var/log") ; for dmd ("gcc" ,gcc-final)
(symlink ,shadow "etc/shadow") ("libc" ,glibc-final)
(symlink ,passwd "etc/passwd") ("inetutils" ,inetutils)
(symlink ,group "etc/group") ("guix" ,guix-0.4)))
(symlink "/dev/null"
"etc/login.defs") ;; TODO: Replace with a real profile with a manifest.
(symlink ,pam.d "etc/pam.d") ;; TODO: Generate bashrc from packages' search-paths.
(mkdir-p "var/run"))) (profile-drv (union store packages
(list passwd))) #:name "default-profile"))
(profile (derivation->output-path profile-drv))
(bashrc (add-text-to-store store "bashrc"
(string-append "
export PS1='\\u@\\h\\$ '
export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin
export CPATH=$HOME/.guix-profile/include:" profile "/include
export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib
alias ls='ls -p --color'
alias ll='ls -l'
")))
(issue (add-text-to-store store "issue" "
This is an alpha preview of the GNU system. Welcome.
This image features the GNU Guix package manager, which was used to
build it (http://www.gnu.org/software/guix/). The init system is
GNU dmd (http://www.gnu.org/software/dmd/).
You can log in as 'root' with no password.
"))
(populate `((directory "/etc")
(directory "/var/log") ; for dmd
(directory "/var/run/nscd")
("/etc/shadow" -> ,shadow)
("/etc/passwd" -> ,passwd)
("/etc/login.defs" -> "/dev/null")
("/etc/pam.d" -> ,pam.d)
("/etc/resolv.conf" -> ,resolv.conf)
("/etc/profile" -> ,bashrc)
("/etc/issue" -> ,issue)
(directory "/var/nix/gcroots")
("/var/nix/gcroots/default-profile" -> ,profile)))
(out (derivation->output-path (out (derivation->output-path
(package-derivation store mingetty))) (package-derivation store mingetty)))
(boot (add-text-to-store store "boot" (boot (add-text-to-store store "boot"
@ -405,32 +537,36 @@ It can be used to provide additional files, such as /etc files."
"--config" ,dmd-conf)) "--config" ,dmd-conf))
(list out))) (list out)))
(entries (list (menu-entry (entries (list (menu-entry
(label "Boot-to-Guile! (GNU System technology preview)") (label (string-append
"GNU System with Linux-Libre "
(package-version linux-libre)
" (technology preview)"))
(linux linux-libre) (linux linux-libre)
(linux-arguments `("--root=/dev/vda1" (linux-arguments `("--root=/dev/vda1"
,(string-append "--load=" boot))) ,(string-append "--load=" boot)))
(initrd gnu-system-initrd)))) (initrd gnu-system-initrd))))
(grub.cfg (grub-configuration-file store entries))) (grub.cfg (grub-configuration-file store entries)))
(build-derivations store (list pam.d-drv))
(qemu-image store (qemu-image store
#:grub-configuration grub.cfg #:grub-configuration grub.cfg
#:populate populate #:populate populate
#:disk-image-size (* 400 (expt 2 20)) #:disk-image-size (* 500 (expt 2 20))
#:initialize-store? #t
#:inputs-to-copy `(("boot" ,boot) #:inputs-to-copy `(("boot" ,boot)
("linux" ,linux-libre) ("linux" ,linux-libre)
("initrd" ,gnu-system-initrd) ("initrd" ,gnu-system-initrd)
("coreutils" ,coreutils) ("pam.d" ,pam.d-drv)
("bash" ,bash) ("profile" ,profile-drv)
("guile" ,guile-2.0)
("mingetty" ,mingetty)
("dmd" ,dmd)
;; Configuration. ;; Configuration.
("dmd.conf" ,dmd-conf) ("dmd.conf" ,dmd-conf)
("etc-pam.d" ,pam.d) ("etc-pam.d" ,pam.d-drv)
("etc-passwd" ,passwd) ("etc-passwd" ,passwd)
("etc-shadow" ,shadow) ("etc-shadow" ,shadow)
("etc-group" ,group) ("etc-group" ,group)
("etc-resolv.conf" ,resolv.conf)
("etc-bashrc" ,bashrc)
("etc-issue" ,issue)
("etc-motd" ,motd)
,@(append-map service-inputs ,@(append-map service-inputs
%dmd-services)))))) %dmd-services))))))

View File

@ -462,8 +462,8 @@ system identifying string)."
#:outputs outputs #:system system #:outputs outputs #:system system
(args)))))))) (args))))))))
(define* (package-output store package output (define* (package-output store package
#:optional (system (%current-system))) #:optional (output "out") (system (%current-system)))
"Return the output path of PACKAGE's OUTPUT for SYSTEM---where OUTPUT is the "Return the output path of PACKAGE's OUTPUT for SYSTEM---where OUTPUT is the
symbolic output name, such as \"out\". Note that this procedure calls symbolic output name, such as \"out\". Note that this procedure calls
`package-derivation', which is costly." `package-derivation', which is costly."

View File

@ -955,12 +955,16 @@ more information.~%"))
(match (assoc-ref opts 'query) (match (assoc-ref opts 'query)
(('list-generations pattern) (('list-generations pattern)
(define (list-generation number) (define (list-generation number)
(begin (unless (zero? number)
(format #t (_ "Generation ~a\t~a~%") number (let ((header (format #f (_ "Generation ~a\t~a") number
(date->string (date->string
(time-utc->date (time-utc->date
(generation-time profile number)) (generation-time profile number))
"~b ~d ~Y ~T")) "~b ~d ~Y ~T")))
(current (generation-number profile)))
(if (= number current)
(format #t (_ "~a\t(current)~%") header)
(format #t "~a~%" header)))
(for-each (match-lambda (for-each (match-lambda
((name version output location _) ((name version output location _)
(format #t " ~a\t~a\t~a\t~a~%" (format #t " ~a\t~a\t~a\t~a~%"
@ -977,11 +981,16 @@ more information.~%"))
(leave (_ "profile '~a' does not exist~%") (leave (_ "profile '~a' does not exist~%")
profile)) profile))
((string-null? pattern) ((string-null? pattern)
(for-each list-generation (let ((numbers (generation-numbers profile)))
(generation-numbers profile))) (if (equal? numbers '(0))
(exit 1)
(for-each list-generation numbers))))
((matching-generations pattern profile) ((matching-generations pattern profile)
=> =>
(cut for-each list-generation <>)) (lambda (numbers)
(if (null-list? numbers)
(exit 1)
(for-each list-generation numbers))))
(else (else
(leave (_ "invalid syntax: ~a~%") (leave (_ "invalid syntax: ~a~%")
pattern))) pattern)))

View File

@ -62,6 +62,10 @@ static const struct argp_option options[] =
{ 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0 }
}; };
/* Prefix of the store being populated. */
static std::string prefix;
/* Parse a single option. */ /* Parse a single option. */
static error_t static error_t
parse_opt (int key, char *arg, struct argp_state *state) parse_opt (int key, char *arg, struct argp_state *state)
@ -70,7 +74,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
{ {
case 'p': case 'p':
{ {
string prefix = canonPath (arg); prefix = canonPath (arg);
settings.nixStore = prefix + NIX_STORE_DIR; settings.nixStore = prefix + NIX_STORE_DIR;
settings.nixDataDir = prefix + NIX_DATA_DIR; settings.nixDataDir = prefix + NIX_DATA_DIR;
settings.nixLogDir = prefix + NIX_LOG_DIR; settings.nixLogDir = prefix + NIX_LOG_DIR;
@ -128,15 +132,25 @@ register_validity (LocalStore *store, std::istream &input,
ValidPathInfo info = decodeValidPathInfo (input, hashGiven); ValidPathInfo info = decodeValidPathInfo (input, hashGiven);
if (info.path == "") if (info.path == "")
break; break;
/* Rewrite the input to refer final name, as if we were in a chroot
under PREFIX. */
std::string final_prefix (NIX_STORE_DIR "/");
info.path = final_prefix + baseNameOf (info.path);
/* Keep its real path to canonicalize it and compute its hash. */
std::string real_path;
real_path = prefix + "/" + settings.nixStore + "/" + baseNameOf (info.path);
if (!store->isValidPath (info.path) || reregister) if (!store->isValidPath (info.path) || reregister)
{ {
/* !!! races */ /* !!! races */
if (canonicalise) if (canonicalise)
canonicalisePathMetaData (info.path, -1); canonicalisePathMetaData (real_path, -1);
if (!hashGiven) if (!hashGiven)
{ {
HashResult hash = hashPath (htSHA256, info.path); HashResult hash = hashPath (htSHA256, real_path);
info.hash = hash.first; info.hash = hash.first;
info.narSize = hash.second; info.narSize = hash.second;
} }
@ -155,7 +169,15 @@ main (int argc, char *argv[])
{ {
argp_parse (&argp, argc, argv, 0, 0, 0); argp_parse (&argp, argc, argv, 0, 0, 0);
/* Instantiate the store. This creates any missing directories among
'settings.nixStore', 'settings.nixDBPath', etc. */
LocalStore store; LocalStore store;
/* Under the --prefix tree, the final name of the store will be
NIX_STORE_DIR. Set it here so that the database uses file names
prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR. */
settings.nixStore = NIX_STORE_DIR;
register_validity (&store, *input); register_validity (&store, *input);
} }
catch (std::exception &e) catch (std::exception &e)

346
po/eo.po
View File

@ -5,16 +5,17 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: guix 0.3-pre3\n" "Project-Id-Version: guix 0.4-pre2\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2013-08-15 11:44+0200\n" "POT-Creation-Date: 2013-09-25 16:04+0200\n"
"PO-Revision-Date: 2013-07-25 09:25-0300\n" "PO-Revision-Date: 2013-09-25 15:53-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n" "Language: Esperanto\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
#: gnu/packages.scm:94 #: gnu/packages.scm:94
#, scheme-format #, scheme-format
@ -52,15 +53,13 @@ msgid ""
"Sed (stream editor) isn't really a true text editor or text processor.\n" "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" "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" "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 " "Sed is typically used for extracting part of a file using pattern matching or\n"
"or\n"
"substituting multiple occurrences of a string within a file." "substituting multiple occurrences of a string within a file."
msgstr "" msgstr ""
"Sed (flu-redaktilo) ne estas fakte vera tekst-redaktilo aŭ tekst-procezilo.\n" "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" "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" "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 " "Sed ordinare estas uzata por eltiri parton de dosiero per ŝablon-kongruon aŭ\n"
"aŭ\n"
"por anstataŭigi multoblajn aperojn de ĉeno interne de dosiero." "por anstataŭigi multoblajn aperojn de ĉeno interne de dosiero."
#: gnu/packages/base.scm:140 #: gnu/packages/base.scm:140
@ -77,8 +76,7 @@ msgid ""
"Initially, tar archives were used to store files conveniently on magnetic\n" "Initially, tar archives were used to store files conveniently on magnetic\n"
"tape. The name \"Tar\" comes from this use; it stands for tape archiver.\n" "tape. The name \"Tar\" comes from this use; it stands for tape archiver.\n"
"Despite the utility's name, Tar can direct its output to available devices,\n" "Despite the utility's name, Tar can direct its output to available devices,\n"
"files, or other programs (using pipes), it can even access remote devices " "files, or other programs (using pipes), it can even access remote devices or\n"
"or\n"
"files (as archives)." "files (as archives)."
msgstr "" msgstr ""
@ -89,8 +87,7 @@ msgstr "Apliki malsamojn al originaloj, kun nedevigaj savkopioj"
#: gnu/packages/base.scm:175 #: gnu/packages/base.scm:175
msgid "" msgid ""
"GNU Patch takes a patch file containing a difference listing produced by\n" "GNU Patch takes a patch file containing a difference listing produced by\n"
"the diff program and applies those differences to one or more original " "the diff program and applies those differences to one or more original files,\n"
"files,\n"
"producing patched versions." "producing patched versions."
msgstr "" msgstr ""
@ -104,25 +101,21 @@ msgid ""
"differences between files.\n" "differences between files.\n"
"\n" "\n"
"Computer users often find occasion to ask how two files differ. Perhaps one\n" "Computer users often find occasion to ask how two files differ. Perhaps one\n"
"file is a newer version of the other file. Or maybe the two files started " "file is a newer version of the other file. Or maybe the two files started out\n"
"out\n"
"as identical copies but were changed by different people.\n" "as identical copies but were changed by different people.\n"
"\n" "\n"
"You can use the diff command to show differences between two files, or each\n" "You can use the diff command to show differences between two files, or each\n"
"corresponding file in two directories. diff outputs differences between " "corresponding file in two directories. diff outputs differences between files\n"
"files\n"
"line by line in any of several formats, selectable by command line\n" "line by line in any of several formats, selectable by command line\n"
"options. This set of differences is often called a diff or patch. For\n" "options. This set of differences is often called a diff or patch. For\n"
"files that are identical, diff normally produces no output; for\n" "files that are identical, diff normally produces no output; for\n"
"binary (non-text) files, diff normally reports only that they are " "binary (non-text) files, diff normally reports only that they are different.\n"
"different.\n"
"\n" "\n"
"You can use the cmp command to show the offsets and line numbers where two\n" "You can use the cmp command to show the offsets and line numbers where two\n"
"files differ. cmp can also show all the characters that differ between the\n" "files differ. cmp can also show all the characters that differ between the\n"
"two files, side by side.\n" "two files, side by side.\n"
"\n" "\n"
"You can use the diff3 command to show differences among three files. When " "You can use the diff3 command to show differences among three files. When two\n"
"two\n"
"people have made independent changes to a common original, diff3 can report\n" "people have made independent changes to a common original, diff3 can report\n"
"the differences between the original and the two changed versions, and can\n" "the differences between the original and the two changed versions, and can\n"
"produce a merged file that contains both persons' changes together with\n" "produce a merged file that contains both persons' changes together with\n"
@ -139,8 +132,7 @@ msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio"
msgid "" msgid ""
"The GNU Find Utilities are the basic directory searching utilities of\n" "The GNU Find Utilities are the basic directory searching utilities of\n"
"the GNU operating system. These programs are typically used in conjunction\n" "the GNU operating system. These programs are typically used in conjunction\n"
"with other programs to provide modular and powerful directory search and " "with other programs to provide modular and powerful directory search and file\n"
"file\n"
"locating capabilities to other commands.\n" "locating capabilities to other commands.\n"
"\n" "\n"
"The tools supplied with this package are:\n" "The tools supplied with this package are:\n"
@ -172,10 +164,8 @@ msgid ""
"non-source files of a program from the program's source files.\n" "non-source files of a program from the program's source files.\n"
"\n" "\n"
"Make gets its knowledge of how to build your program from a file called the\n" "Make gets its knowledge of how to build your program from a file called the\n"
"makefile, which lists each of the non-source files and how to compute it " "makefile, which lists each of the non-source files and how to compute it from\n"
"from\n" "other files. When you write a program, you should write a makefile for it, so\n"
"other files. When you write a program, you should write a makefile for it, "
"so\n"
"that it is possible to use Make to build and install the program." "that it is possible to use Make to build and install the program."
msgstr "" msgstr ""
@ -197,12 +187,10 @@ msgstr "La Biblioteko GNU C"
#: gnu/packages/base.scm:502 #: gnu/packages/base.scm:502
msgid "" msgid ""
"Any Unix-like operating system needs a C library: the library which\n" "Any Unix-like operating system needs a C library: the library which\n"
"defines the \"system calls\" and other basic facilities such as open, " "defines the \"system calls\" and other basic facilities such as open, malloc,\n"
"malloc,\n"
"printf, exit...\n" "printf, exit...\n"
"\n" "\n"
"The GNU C library is used as the C library in the GNU system and most " "The GNU C library is used as the C library in the GNU system and most systems\n"
"systems\n"
"with the Linux kernel." "with the Linux kernel."
msgstr "" msgstr ""
@ -215,8 +203,7 @@ msgid ""
"The Time Zone Database (often called tz or zoneinfo)\n" "The Time Zone Database (often called tz or zoneinfo)\n"
"contains code and data that represent the history of local time for many\n" "contains code and data that represent the history of local time for many\n"
"representative locations around the globe. It is updated periodically to\n" "representative locations around the globe. It is updated periodically to\n"
"reflect changes made by political bodies to time zone boundaries, UTC " "reflect changes made by political bodies to time zone boundaries, UTC offsets,\n"
"offsets,\n"
"and daylight-saving rules." "and daylight-saving rules."
msgstr "" msgstr ""
@ -227,8 +214,7 @@ msgstr "La ligila ĉirkaŭanto"
#: gnu/packages/base.scm:992 #: gnu/packages/base.scm:992
msgid "" msgid ""
"The linker wrapper (or `ld-wrapper') wraps the linker to add any\n" "The linker wrapper (or `ld-wrapper') wraps the linker to add any\n"
"missing `-rpath' flags, and to detect any misuse of libraries outside of " "missing `-rpath' flags, and to detect any misuse of libraries outside of the\n"
"the\n"
"store." "store."
msgstr "" msgstr ""
@ -262,8 +248,7 @@ msgid ""
"Guile-Reader is a simple framework for building readers for GNU Guile.\n" "Guile-Reader is a simple framework for building readers for GNU Guile.\n"
"\n" "\n"
"The idea is to make it easy to build procedures that extend Guiles read\n" "The idea is to make it easy to build procedures that extend Guiles read\n"
"procedure. Readers supporting various syntax variants can easily be " "procedure. Readers supporting various syntax variants can easily be written,\n"
"written,\n"
"possibly by re-using existing “token readers” of a standard Scheme\n" "possibly by re-using existing “token readers” of a standard Scheme\n"
"readers. For example, it is used to implement Skribilos R5RS-derived\n" "readers. For example, it is used to implement Skribilos R5RS-derived\n"
"document syntax.\n" "document syntax.\n"
@ -280,8 +265,7 @@ msgstr "Bindoj de Guile por ncurses"
#: gnu/packages/guile.scm:268 #: gnu/packages/guile.scm:268
msgid "" msgid ""
"GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n" "GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n"
"provides functions for creating text user interfaces. The text user " "provides functions for creating text user interfaces. The text user interface\n"
"interface\n"
"functionality is built on the ncurses libraries: curses, form, panel, and\n" "functionality is built on the ncurses libraries: curses, form, panel, and\n"
"menu." "menu."
msgstr "" msgstr ""
@ -293,33 +277,39 @@ msgstr "Lanĉi taskoj je antaŭplanitaj horoj"
#: gnu/packages/guile.scm:294 #: gnu/packages/guile.scm:294
msgid "" msgid ""
"The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n" "The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n"
"for Vixie cron. It is written in pure Guile, and allows configuration " "for Vixie cron. It is written in pure Guile, and allows configuration files\n"
"files\n"
"to be written in scheme (as well as Vixie's original format) for infinite\n" "to be written in scheme (as well as Vixie's original format) for infinite\n"
"flexibility in specifying when jobs should be run. Mcron was written by " "flexibility in specifying when jobs should be run. Mcron was written by Dale\n"
"Dale\n"
"Mellor." "Mellor."
msgstr "" msgstr ""
#: gnu/packages/guile.scm:323
msgid "Collection of useful Guile Scheme modules"
msgstr "Aro da utilaj moduloj de Guile Scheme"
#: gnu/packages/guile.scm:325
msgid ""
"guile-lib is intended as an accumulation place for pure-scheme Guile\n"
"modules, allowing for people to cooperate integrating their generic Guile\n"
"modules into a coherent library. Think \"a down-scaled, limited-scope CPAN\n"
"for Guile\"."
msgstr ""
#: gnu/packages/lout.scm:109 #: gnu/packages/lout.scm:109
msgid "Lout, a document layout system similar in style to LaTeX" msgid "Lout, a document layout system similar in style to LaTeX"
msgstr "Lout, dokument-aranĝa sistemo simila al LaTeX, laŭ stilo" msgstr "Lout, dokument-aranĝa sistemo simila al LaTeX, laŭ stilo"
#: gnu/packages/lout.scm:111 #: gnu/packages/lout.scm:111
msgid "" msgid ""
"The Lout document formatting system is now reads a high-level description " "The Lout document formatting system is now reads a high-level description of\n"
"of\n" "a document similar in style to LaTeX and produces a PostScript or plain text\n"
"a document similar in style to LaTeX and produces a PostScript or plain "
"text\n"
"output file.\n" "output file.\n"
"\n" "\n"
"Lout offers an unprecedented range of advanced features, including optimal\n" "Lout offers an unprecedented range of advanced features, including optimal\n"
"paragraph and page breaking, automatic hyphenation, PostScript EPS file\n" "paragraph and page breaking, automatic hyphenation, PostScript EPS file\n"
"inclusion and generation, equation formatting, tables, diagrams, rotation " "inclusion and generation, equation formatting, tables, diagrams, rotation and\n"
"and\n"
"scaling, sorted indexes, bibliographic databases, running headers and\n" "scaling, sorted indexes, bibliographic databases, running headers and\n"
"odd-even pages, automatic cross referencing, multilingual documents " "odd-even pages, automatic cross referencing, multilingual documents including\n"
"including\n"
"hyphenation (most European languages are supported), formatting of computer\n" "hyphenation (most European languages are supported), formatting of computer\n"
"programs, and much more, all ready to use. Furthermore, Lout is easily\n" "programs, and much more, all ready to use. Furthermore, Lout is easily\n"
"extended with definitions which are very much easier to write than troff of\n" "extended with definitions which are very much easier to write than troff of\n"
@ -408,25 +398,23 @@ msgstr ""
"\n" "\n"
" -n, --dry-run ne konstrui derivaĵojn" " -n, --dry-run ne konstrui derivaĵojn"
#: guix/scripts/build.scm:84 guix/scripts/package.scm:449 #: guix/scripts/build.scm:84 guix/scripts/package.scm:519
msgid "" msgid ""
"\n" "\n"
" --fallback fall back to building when the substituter fails" " --fallback fall back to building when the substituter fails"
msgstr "" msgstr ""
"\n" "\n"
" --fallback retropaŝi al konstruado kiam la anstataŭiganto " " --fallback retropaŝi al konstruado kiam la anstataŭiganto fiaskas"
"fiaskas"
#: guix/scripts/build.scm:86 guix/scripts/package.scm:451 #: guix/scripts/build.scm:86 guix/scripts/package.scm:521
msgid "" msgid ""
"\n" "\n"
" --no-substitutes build instead of resorting to pre-built substitutes" " --no-substitutes build instead of resorting to pre-built substitutes"
msgstr "" msgstr ""
"\n" "\n"
" --no-substitutes konstrui anstataŭ provi jam-konstruitajn " " --no-substitutes konstrui anstataŭ provi jam-konstruitajn anstataŭigantojn"
"anstataŭigantojn"
#: guix/scripts/build.scm:88 guix/scripts/package.scm:453 #: guix/scripts/build.scm:88 guix/scripts/package.scm:523
msgid "" msgid ""
"\n" "\n"
" --max-silent-time=SECONDS\n" " --max-silent-time=SECONDS\n"
@ -434,8 +422,7 @@ msgid ""
msgstr "" msgstr ""
"\n" "\n"
" --max-silent-time=SEKUNDOJ\n" " --max-silent-time=SEKUNDOJ\n"
" marki la konstruo kiel fiaskinta post SEKUNDOJ da " " marki la konstruo kiel fiaskinta post SEKUNDOJ da silento"
"silento"
#: guix/scripts/build.scm:91 #: guix/scripts/build.scm:91
msgid "" msgid ""
@ -452,8 +439,7 @@ msgid ""
" as a garbage collector root" " as a garbage collector root"
msgstr "" msgstr ""
"\n" "\n"
" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj " " -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj registri\n"
"registri\n"
" ĝin kiel radikon de rubaĵ-kolektanto" " ĝin kiel radikon de rubaĵ-kolektanto"
#: guix/scripts/build.scm:96 #: guix/scripts/build.scm:96
@ -465,8 +451,9 @@ msgstr ""
" --verbosity=NIVELO uzi la indikitan detaligan NIVELOn" " --verbosity=NIVELO uzi la indikitan detaligan NIVELOn"
#: guix/scripts/build.scm:99 guix/scripts/download.scm:53 #: guix/scripts/build.scm:99 guix/scripts/download.scm:53
#: guix/scripts/package.scm:470 guix/scripts/gc.scm:58 #: guix/scripts/package.scm:540 guix/scripts/gc.scm:58
#: guix/scripts/hash.scm:51 guix/scripts/pull.scm:149 #: guix/scripts/hash.scm:51 guix/scripts/pull.scm:152
#: guix/scripts/substitute-binary.scm:463
msgid "" msgid ""
"\n" "\n"
" -h, --help display this help and exit" " -h, --help display this help and exit"
@ -475,8 +462,9 @@ msgstr ""
" -h, --help montri ĉi tiun helpon kaj eliri" " -h, --help montri ĉi tiun helpon kaj eliri"
#: guix/scripts/build.scm:101 guix/scripts/download.scm:55 #: guix/scripts/build.scm:101 guix/scripts/download.scm:55
#: guix/scripts/package.scm:472 guix/scripts/gc.scm:60 #: guix/scripts/package.scm:542 guix/scripts/gc.scm:60
#: guix/scripts/hash.scm:53 guix/scripts/pull.scm:151 #: guix/scripts/hash.scm:53 guix/scripts/pull.scm:154
#: guix/scripts/substitute-binary.scm:465
msgid "" msgid ""
"\n" "\n"
" -V, --version display version information and exit" " -V, --version display version information and exit"
@ -490,8 +478,8 @@ msgid "~a: not a number~%"
msgstr "~a: ne estas numero~%" msgstr "~a: ne estas numero~%"
#: guix/scripts/build.scm:176 guix/scripts/download.scm:96 #: guix/scripts/build.scm:176 guix/scripts/download.scm:96
#: guix/scripts/package.scm:554 guix/scripts/gc.scm:152 #: guix/scripts/package.scm:628 guix/scripts/gc.scm:152
#: guix/scripts/pull.scm:178 #: guix/scripts/pull.scm:181
#, scheme-format #, scheme-format
msgid "~A: unrecognized option~%" msgid "~A: unrecognized option~%"
msgstr "~A: nerekonata modifilo~%" msgstr "~A: nerekonata modifilo~%"
@ -501,12 +489,12 @@ msgstr "~A: nerekonata modifilo~%"
msgid "failed to create GC root `~a': ~a~%" msgid "failed to create GC root `~a': ~a~%"
msgstr "fiasko dum kreo de radiko GC '~a': ~a~%" msgstr "fiasko dum kreo de radiko GC '~a': ~a~%"
#: guix/scripts/build.scm:226 guix/scripts/package.scm:600 #: guix/scripts/build.scm:226 guix/scripts/package.scm:674
#, scheme-format #, scheme-format
msgid "ambiguous package specification `~a'~%" msgid "ambiguous package specification `~a'~%"
msgstr "plursenca pak-specifigo '~a'~%" msgstr "plursenca pak-specifigo '~a'~%"
#: guix/scripts/build.scm:227 guix/scripts/package.scm:602 #: guix/scripts/build.scm:227 guix/scripts/package.scm:676
#, scheme-format #, scheme-format
msgid "choosing ~a from ~a~%" msgid "choosing ~a from ~a~%"
msgstr "ni elektas ~a el ~a~%" msgstr "ni elektas ~a el ~a~%"
@ -560,42 +548,42 @@ msgstr "~a: analizo de URI fiaskis~%"
msgid "~a: download failed~%" msgid "~a: download failed~%"
msgstr "~a: elŝuto fiaskis~%" msgstr "~a: elŝuto fiaskis~%"
#: guix/scripts/package.scm:225 #: guix/scripts/package.scm:227
#, scheme-format #, scheme-format
msgid "switching from generation ~a to ~a~%" msgid "switching from generation ~a to ~a~%"
msgstr "alterno el generacio ~a al ~a~%" msgstr "alterno el generacio ~a al ~a~%"
#: guix/scripts/package.scm:230 #: guix/scripts/package.scm:232
#, scheme-format #, scheme-format
msgid "profile `~a' does not exist~%" msgid "profile `~a' does not exist~%"
msgstr "profilo '~a' ne ekzistas~%" msgstr "profilo '~a' ne ekzistas~%"
#: guix/scripts/package.scm:234 #: guix/scripts/package.scm:236
#, scheme-format #, scheme-format
msgid "nothing to do: already at the empty profile~%" msgid "nothing to do: already at the empty profile~%"
msgstr "nenio por fari: jam estas ĉe la malplena profilo~%" msgstr "nenio por fari: jam estas ĉe la malplena profilo~%"
#: guix/scripts/package.scm:243 #: guix/scripts/package.scm:242
#, scheme-format #, scheme-format
msgid "failed to build the empty profile~%" msgid "failed to build the empty profile~%"
msgstr "fiasko dum konstruo de malplena profilo~%" msgstr "fiasko dum konstruo de malplena profilo~%"
#: guix/scripts/package.scm:346 #: guix/scripts/package.scm:413
#, scheme-format #, scheme-format
msgid "looking for the latest release of GNU ~a..." msgid "looking for the latest release of GNU ~a..."
msgstr "ni serĉas la lastan eldonon de GNU ~a..." msgstr "ni serĉas la lastan eldonon de GNU ~a..."
#: guix/scripts/package.scm:350 #: guix/scripts/package.scm:417
#, scheme-format #, scheme-format
msgid "~a: note: using ~a but ~a is available upstream~%" msgid "~a: note: using ~a but ~a is available upstream~%"
msgstr "~a: rimarko: ni uzas ~a sed ~a disponeblas unuanivele~%" msgstr "~a: rimarko: ni uzas ~a sed ~a disponeblas unuanivele~%"
#: guix/scripts/package.scm:414 #: guix/scripts/package.scm:481
#, scheme-format #, scheme-format
msgid "The following environment variable definitions may be needed:~%" msgid "The following environment variable definitions may be needed:~%"
msgstr "La jenaj medi-variablaj difinoj povos esti necesaj:~%" msgstr "La jenaj medi-variablaj difinoj povos esti necesaj:~%"
#: guix/scripts/package.scm:429 #: guix/scripts/package.scm:496
msgid "" msgid ""
"Usage: guix package [OPTION]... PACKAGES...\n" "Usage: guix package [OPTION]... PACKAGES...\n"
"Install, remove, or upgrade PACKAGES in a single transaction.\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n"
@ -603,7 +591,7 @@ msgstr ""
"Uzmaniero: guix package [MODIFILO]... PAKOJ...\n" "Uzmaniero: guix package [MODIFILO]... PAKOJ...\n"
"Instalas, forigas, aŭ ĝisdatigas PAKOJn en ununura ago.\n" "Instalas, forigas, aŭ ĝisdatigas PAKOJn en ununura ago.\n"
#: guix/scripts/package.scm:431 #: guix/scripts/package.scm:498
msgid "" msgid ""
"\n" "\n"
" -i, --install=PACKAGE install PACKAGE" " -i, --install=PACKAGE install PACKAGE"
@ -611,7 +599,7 @@ msgstr ""
"\n" "\n"
" -i, --install=PAKO instali PAKOn" " -i, --install=PAKO instali PAKOn"
#: guix/scripts/package.scm:433 #: guix/scripts/package.scm:500
msgid "" msgid ""
"\n" "\n"
" -e, --install-from-expression=EXP\n" " -e, --install-from-expression=EXP\n"
@ -621,7 +609,7 @@ msgstr ""
" -e, --install-from-expression=ESP\n" " -e, --install-from-expression=ESP\n"
" instali la pakon ESP rezultas al" " instali la pakon ESP rezultas al"
#: guix/scripts/package.scm:436 #: guix/scripts/package.scm:503
msgid "" msgid ""
"\n" "\n"
" -r, --remove=PACKAGE remove PACKAGE" " -r, --remove=PACKAGE remove PACKAGE"
@ -629,16 +617,15 @@ msgstr ""
"\n" "\n"
" -r, --remove=PAKO forigi PAKOn" " -r, --remove=PAKO forigi PAKOn"
#: guix/scripts/package.scm:438 #: guix/scripts/package.scm:505
msgid "" msgid ""
"\n" "\n"
" -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
msgstr "" msgstr ""
"\n" "\n"
" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al " " -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al REGESP"
"REGESP"
#: guix/scripts/package.scm:440 #: guix/scripts/package.scm:507
msgid "" msgid ""
"\n" "\n"
" --roll-back roll back to the previous generation" " --roll-back roll back to the previous generation"
@ -646,7 +633,7 @@ msgstr ""
"\n" "\n"
" --roll-back retropaŝi al la antaŭa generacio" " --roll-back retropaŝi al la antaŭa generacio"
#: guix/scripts/package.scm:442 #: guix/scripts/package.scm:509
msgid "" msgid ""
"\n" "\n"
" --search-paths display needed environment variable definitions" " --search-paths display needed environment variable definitions"
@ -654,16 +641,25 @@ msgstr ""
"\n" "\n"
" --search-paths montri necesajn medi-variablajn difinojn" " --search-paths montri necesajn medi-variablajn difinojn"
#: guix/scripts/package.scm:445 #: guix/scripts/package.scm:511
msgid ""
"\n"
" -l, --list-generations[=PATTERN]\n"
" list generations matching PATTERN"
msgstr ""
"\n"
" -I, --list-generations[=ŜABLONO]\n"
" listigi generaciojn kongruantajn al ŜABLONO"
#: guix/scripts/package.scm:515
msgid "" msgid ""
"\n" "\n"
" -p, --profile=PROFILE use PROFILE instead of the user's default profile" " -p, --profile=PROFILE use PROFILE instead of the user's default profile"
msgstr "" msgstr ""
"\n" "\n"
" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la " " -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la uzanto"
"uzanto"
#: guix/scripts/package.scm:447 #: guix/scripts/package.scm:517
msgid "" msgid ""
"\n" "\n"
" -n, --dry-run show what would be done without actually doing it" " -n, --dry-run show what would be done without actually doing it"
@ -671,7 +667,7 @@ msgstr ""
"\n" "\n"
" -n, --dry-run montri kion estus farita sen fakte fari ĝin" " -n, --dry-run montri kion estus farita sen fakte fari ĝin"
#: guix/scripts/package.scm:456 #: guix/scripts/package.scm:526
msgid "" msgid ""
"\n" "\n"
" --bootstrap use the bootstrap Guile to build the profile" " --bootstrap use the bootstrap Guile to build the profile"
@ -679,7 +675,7 @@ msgstr ""
"\n" "\n"
" --bootstrap uzi la praŝargilon Guile por konstrui la profilon" " --bootstrap uzi la praŝargilon Guile por konstrui la profilon"
#: guix/scripts/package.scm:458 guix/scripts/pull.scm:144 #: guix/scripts/package.scm:528 guix/scripts/pull.scm:147
msgid "" msgid ""
"\n" "\n"
" --verbose produce verbose output" " --verbose produce verbose output"
@ -687,7 +683,7 @@ msgstr ""
"\n" "\n"
" --verbose produkti detalplenan eligon" " --verbose produkti detalplenan eligon"
#: guix/scripts/package.scm:461 #: guix/scripts/package.scm:531
msgid "" msgid ""
"\n" "\n"
" -s, --search=REGEXP search in synopsis and description using REGEXP" " -s, --search=REGEXP search in synopsis and description using REGEXP"
@ -695,7 +691,7 @@ msgstr ""
"\n" "\n"
" -s, --search=REGESP serĉi en resumo kaj priskribo uzante REGESP" " -s, --search=REGESP serĉi en resumo kaj priskribo uzante REGESP"
#: guix/scripts/package.scm:463 #: guix/scripts/package.scm:533
msgid "" msgid ""
"\n" "\n"
" -I, --list-installed[=REGEXP]\n" " -I, --list-installed[=REGEXP]\n"
@ -705,7 +701,7 @@ msgstr ""
" -I, --list-installed[=REGESP]\n" " -I, --list-installed[=REGESP]\n"
" listigi instalitajn pakojn kongruantajn al REGESP" " listigi instalitajn pakojn kongruantajn al REGESP"
#: guix/scripts/package.scm:466 #: guix/scripts/package.scm:536
msgid "" msgid ""
"\n" "\n"
" -A, --list-available[=REGEXP]\n" " -A, --list-available[=REGEXP]\n"
@ -715,76 +711,91 @@ msgstr ""
" -A, --list-available[=REGESP]\n" " -A, --list-available[=REGESP]\n"
" listigi disponeblajn pakojn kongruantajn al REGESP" " listigi disponeblajn pakojn kongruantajn al REGESP"
#: guix/scripts/package.scm:556 #: guix/scripts/package.scm:630
#, scheme-format #, scheme-format
msgid "~A: extraneous argument~%" msgid "~A: extraneous argument~%"
msgstr "~A: fremda argumento~%" msgstr "~A: fremda argumento~%"
#: guix/scripts/package.scm:584 #: guix/scripts/package.scm:658
#, scheme-format #, scheme-format
msgid "package `~a' lacks output `~a'~%" msgid "package `~a' lacks output `~a'~%"
msgstr "pako '~a' malhavas eligon '~a'~%" msgstr "pako '~a' malhavas eligon '~a'~%"
#: guix/scripts/package.scm:608 #: guix/scripts/package.scm:682
#, scheme-format #, scheme-format
msgid "~a: package not found~%" msgid "~a: package not found~%"
msgstr "~a: pako ne trovita~%" msgstr "~a: pako ne trovita~%"
#: guix/scripts/package.scm:631 #: guix/scripts/package.scm:705
#, scheme-format #, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%" msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%"
#: guix/scripts/package.scm:653 #: guix/scripts/package.scm:727
#, scheme-format #, scheme-format
msgid "error: while creating directory `~a': ~a~%" msgid "error: while creating directory `~a': ~a~%"
msgstr "eraro: dum kreo de dosierujo '~a': ~a~%" msgstr "eraro: dum kreo de dosierujo '~a': ~a~%"
#: guix/scripts/package.scm:657 #: guix/scripts/package.scm:731
#, scheme-format #, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%" msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%" msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%"
#: guix/scripts/package.scm:664 #: guix/scripts/package.scm:738
#, scheme-format #, scheme-format
msgid "error: directory `~a' is not owned by you~%" msgid "error: directory `~a' is not owned by you~%"
msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%" msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%"
#: guix/scripts/package.scm:667 #: guix/scripts/package.scm:741
#, scheme-format #, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%" msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%" msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%"
#: guix/scripts/package.scm:725 #: guix/scripts/package.scm:799
#, scheme-format #, scheme-format
msgid "The following package would be removed:~% ~{~a~%~}~%" msgid "The following package would be removed:~% ~{~a~%~}~%"
msgstr "La jena pako devos esti forigata:~% ~{~a~%~}~%" msgstr "La jena pako devos esti forigata:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:730 #: guix/scripts/package.scm:804
#, scheme-format #, scheme-format
msgid "The following package will be removed:~% ~{~a~%~}~%" msgid "The following package will be removed:~% ~{~a~%~}~%"
msgstr "La jena pako estos forigata:~% ~{~a~%~}~%" msgstr "La jena pako estos forigata:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:742 #: guix/scripts/package.scm:816
#, scheme-format #, scheme-format
msgid "The following package would be installed:~%~{~a~%~}~%" msgid "The following package would be installed:~%~{~a~%~}~%"
msgstr "La jena pako estus instalata:~% ~{~a~%~}~%" msgstr "La jena pako estus instalata:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:747 #: guix/scripts/package.scm:821
#, scheme-format #, scheme-format
msgid "The following package will be installed:~%~{~a~%~}~%" msgid "The following package will be installed:~%~{~a~%~}~%"
msgstr "La jena pako estos instalata:~% ~{~a~%~}~%" msgstr "La jena pako estos instalata:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:859 #: guix/scripts/package.scm:933
#, scheme-format #, scheme-format
msgid "nothing to be done~%" msgid "nothing to be done~%"
msgstr "nenio por fari~%" msgstr "nenio por fari~%"
#: guix/scripts/package.scm:870 #: guix/scripts/package.scm:944
#, scheme-format #, scheme-format
msgid "~a package in profile~%" msgid "~a package in profile~%"
msgstr "pako ~a en profilo~%" msgstr "pako ~a en profilo~%"
#: guix/scripts/package.scm:959
#, scheme-format
msgid "Generation ~a\t~a~%"
msgstr "Generacio ~a\t~a~%"
#: guix/scripts/package.scm:977
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "profilo '~a' ne ekzistas~%"
#: guix/scripts/package.scm:986
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "malvalida sintakso: ~a~%"
#: guix/scripts/gc.scm:39 #: guix/scripts/gc.scm:39
msgid "" msgid ""
"Usage: guix gc [OPTION]... PATHS...\n" "Usage: guix gc [OPTION]... PATHS...\n"
@ -885,7 +896,7 @@ msgstr ""
msgid "unrecognized option: ~a~%" msgid "unrecognized option: ~a~%"
msgstr "nerekonata modifilo: ~a~%" msgstr "nerekonata modifilo: ~a~%"
#: guix/scripts/hash.scm:123 guix/ui.scm:183 #: guix/scripts/hash.scm:123 guix/ui.scm:187
#, scheme-format #, scheme-format
msgid "~a~%" msgid "~a~%"
msgstr "~a~%" msgstr "~a~%"
@ -895,7 +906,7 @@ msgstr "~a~%"
msgid "wrong number of arguments~%" msgid "wrong number of arguments~%"
msgstr "malĝusta nombro da argumentoj~%" msgstr "malĝusta nombro da argumentoj~%"
#: guix/scripts/pull.scm:142 #: guix/scripts/pull.scm:145
msgid "" msgid ""
"Usage: guix pull [OPTION]...\n" "Usage: guix pull [OPTION]...\n"
"Download and deploy the latest version of Guix.\n" "Download and deploy the latest version of Guix.\n"
@ -903,7 +914,7 @@ msgstr ""
"Uzmaniero: guix pull [MODIFILO]...\n" "Uzmaniero: guix pull [MODIFILO]...\n"
"Elŝuti kaj liveri la lastan version de Guix.\n" "Elŝuti kaj liveri la lastan version de Guix.\n"
#: guix/scripts/pull.scm:146 #: guix/scripts/pull.scm:149
msgid "" msgid ""
"\n" "\n"
" --bootstrap use the bootstrap Guile to build the new Guix" " --bootstrap use the bootstrap Guile to build the new Guix"
@ -911,44 +922,89 @@ msgstr ""
"\n" "\n"
" --bootstrap uzi la 'bootstrap' Guile por konstrui novan Guix" " --bootstrap uzi la 'bootstrap' Guile por konstrui novan Guix"
#: guix/scripts/pull.scm:180 #: guix/scripts/pull.scm:183
#, scheme-format #, scheme-format
msgid "~A: unexpected argument~%" msgid "~A: unexpected argument~%"
msgstr "~A: neatendita argumento~%" msgstr "~A: neatendita argumento~%"
#: guix/scripts/pull.scm:189 #: guix/scripts/pull.scm:192
msgid "failed to download up-to-date source, exiting\n" msgid "failed to download up-to-date source, exiting\n"
msgstr "fiasko dum elŝuto de aktuala fonto, ni ĉesas\n" msgstr "fiasko dum elŝuto de aktuala fonto, ni ĉesas\n"
#: guix/scripts/pull.scm:212 #: guix/scripts/pull.scm:211
#, scheme-format #, scheme-format
msgid "updated ~a successfully deployed under `~a'~%" msgid "updated ~a successfully deployed under `~a'~%"
msgstr "ni ĝisdatigis ~a sukcese, liverita sur '~a'~%" msgstr "ni ĝisdatigis ~a sukcese, liverita sur '~a'~%"
#: guix/scripts/pull.scm:215 #: guix/scripts/pull.scm:214
#, scheme-format #, scheme-format
msgid "failed to update Guix, check the build log~%" msgid "failed to update Guix, check the build log~%"
msgstr "fiasko dum ĝisdatigo de Guix, kontrolu la konstru-protokolon~%" msgstr "fiasko dum ĝisdatigo de Guix, kontrolu la konstru-protokolon~%"
#: guix/scripts/pull.scm:217 #: guix/scripts/pull.scm:216
msgid "Guix already up to date\n" msgid "Guix already up to date\n"
msgstr "Guix jam estas ĝisdata\n" msgstr "Guix jam estas ĝisdata\n"
#: guix/scripts/substitute-binary.scm:163 #: guix/scripts/substitute-binary.scm:162
#, scheme-format #, scheme-format
msgid "while fetching ~a: server is unresponsive~%" msgid "while fetching ~a: server is unresponsive~%"
msgstr "dum havigo de ~a: servilo ne respondas~%" msgstr "dum havigo de ~a: servilo ne respondas~%"
#: guix/scripts/substitute-binary.scm:165 #: guix/scripts/substitute-binary.scm:164
#, scheme-format #, scheme-format
msgid "try `--no-substitutes' if the problem persists~%" msgid "try `--no-substitutes' if the problem persists~%"
msgstr "provu '--no-substituse' se la problemo persistos~%" msgstr "provu '--no-substituse' se la problemo persistos~%"
#: guix/scripts/substitute-binary.scm:437 #: guix/scripts/substitute-binary.scm:425
#, scheme-format
msgid "Downloading, please wait...~%"
msgstr "Ni elŝutas, bonvolu atendi...~%"
#: guix/scripts/substitute-binary.scm:427
#, scheme-format
msgid "(Please consider upgrading Guile to get proper progress report.)~%"
msgstr "(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-raporton.)~%"
#: guix/scripts/substitute-binary.scm:444
#, scheme-format #, scheme-format
msgid "host name lookup error: ~a~%" msgid "host name lookup error: ~a~%"
msgstr "eraro en serĉado de gastigant-nomo: ~a~%" msgstr "eraro en serĉado de gastigant-nomo: ~a~%"
#: guix/scripts/substitute-binary.scm:453
msgid ""
"Usage: guix substitute-binary [OPTION]...\n"
"Internal tool to substitute a pre-built binary to a local build.\n"
msgstr ""
"Uzmaniero: guix substitute-binary [MODIFILO]...\n"
"Interna ilo por anstataŭigi antaŭ-konstruitan duumaĵon al loka kompilaĵo.\n"
#: guix/scripts/substitute-binary.scm:455
msgid ""
"\n"
" --query report on the availability of substitutes for the\n"
" store file names passed on the standard input"
msgstr ""
"\n"
" --query raporti pri la disponebleco de anstataŭigoj por la\n"
" konservaj dosier-nomoj indikitaj per la ĉefenigujo"
#: guix/scripts/substitute-binary.scm:458
msgid ""
"\n"
" --substitute STORE-FILE DESTINATION\n"
" download STORE-FILE and store it as a Nar in file\n"
" DESTINATION"
msgstr ""
"\n"
" --substitute KONSERV-DOSIERO CELO\n"
" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar en la\n"
" dosiero CELO"
#: guix/scripts/substitute-binary.scm:567
#, scheme-format
msgid "~a: unrecognized options~%"
msgstr "~a: nerekonata modifiloj~%"
#: guix/gnu-maintenance.scm:344 #: guix/gnu-maintenance.scm:344
#, scheme-format #, scheme-format
msgid "signature verification failed for `~a'~%" msgid "signature verification failed for `~a'~%"
@ -969,12 +1025,12 @@ msgstr "~a: ne eblis trovi fontan dosieron"
msgid "~a: ~a: no `version' field in source; skipping~%" msgid "~a: ~a: no `version' field in source; skipping~%"
msgstr "~a: ~a: neniu kampo 'version' en la fonto; ni saltas~%" msgstr "~a: ~a: neniu kampo 'version' en la fonto; ni saltas~%"
#: guix/ui.scm:116 #: guix/ui.scm:120
#, scheme-format #, scheme-format
msgid "failed to install locale: ~a~%" msgid "failed to install locale: ~a~%"
msgstr "fiasko dum instalo de lokaĵaro: ~a~%" msgstr "fiasko dum instalo de lokaĵaro: ~a~%"
#: guix/ui.scm:138 #: guix/ui.scm:142
#, scheme-format #, scheme-format
msgid "" msgid ""
"\n" "\n"
@ -983,7 +1039,7 @@ msgstr ""
"\n" "\n"
"Raportu program-misojn al: ~a." "Raportu program-misojn al: ~a."
#: guix/ui.scm:140 #: guix/ui.scm:144
#, scheme-format #, scheme-format
msgid "" msgid ""
"\n" "\n"
@ -992,7 +1048,7 @@ msgstr ""
"\n" "\n"
"hejm-paĝo de ~a: <~a>" "hejm-paĝo de ~a: <~a>"
#: guix/ui.scm:142 #: guix/ui.scm:146
msgid "" msgid ""
"\n" "\n"
"General help using GNU software: <http://www.gnu.org/gethelp/>" "General help using GNU software: <http://www.gnu.org/gethelp/>"
@ -1000,90 +1056,90 @@ msgstr ""
"\n" "\n"
"Ĝenerala helpo por uzi programaron de GNU: <http://www.gnu.org/gethelp/>" "Ĝenerala helpo por uzi programaron de GNU: <http://www.gnu.org/gethelp/>"
#: guix/ui.scm:149 #: guix/ui.scm:153
#, scheme-format #, scheme-format
msgid "~a: invalid number~%" msgid "~a: invalid number~%"
msgstr "~a: nevalida numero~%" msgstr "~a: nevalida numero~%"
#: guix/ui.scm:160 #: guix/ui.scm:164
#, scheme-format #, scheme-format
msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%" msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
msgstr "~a:~a:~a: pako '~a' havas malvalidan enigon: ~s~%" msgstr "~a:~a:~a: pako '~a' havas malvalidan enigon: ~s~%"
#: guix/ui.scm:167 #: guix/ui.scm:171
#, scheme-format #, scheme-format
msgid "~a: ~a: build system `~a' does not support cross builds~%" msgid "~a: ~a: build system `~a' does not support cross builds~%"
msgstr "~a: ~a: konstrui sistemon '~a' ne subtenas crucajn konstruojn~%" msgstr "~a: ~a: konstrui sistemon '~a' ne subtenas crucajn konstruojn~%"
#: guix/ui.scm:172 #: guix/ui.scm:176
#, scheme-format #, scheme-format
msgid "failed to connect to `~a': ~a~%" msgid "failed to connect to `~a': ~a~%"
msgstr "fiasko dum konekto al '~a': ~a~%" msgstr "fiasko dum konekto al '~a': ~a~%"
#: guix/ui.scm:177 #: guix/ui.scm:181
#, scheme-format #, scheme-format
msgid "build failed: ~a~%" msgid "build failed: ~a~%"
msgstr "konstruo fiakis: ~a~%" msgstr "konstruo fiakis: ~a~%"
#: guix/ui.scm:193 #: guix/ui.scm:197
#, scheme-format #, scheme-format
msgid "failed to read expression ~s: ~s~%" msgid "failed to read expression ~s: ~s~%"
msgstr "fiasko dum lego de esprimo ~s: ~s~%" msgstr "fiasko dum lego de esprimo ~s: ~s~%"
#: guix/ui.scm:199 #: guix/ui.scm:203
#, scheme-format #, scheme-format
msgid "failed to evaluate expression `~a': ~s~%" msgid "failed to evaluate expression `~a': ~s~%"
msgstr "fiasko dum analizo de esprimo '~a': ~a~%" msgstr "fiasko dum analizo de esprimo '~a': ~a~%"
#: guix/ui.scm:203 #: guix/ui.scm:207
#, scheme-format #, scheme-format
msgid "expression `~s' does not evaluate to a package~%" msgid "expression `~s' does not evaluate to a package~%"
msgstr "la esprimo '~s' ne rezultas pakon~%" msgstr "la esprimo '~s' ne rezultas pakon~%"
#: guix/ui.scm:248 #: guix/ui.scm:253
#, scheme-format #, scheme-format
msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo povus esti konstruata:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti konstruata:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:253 #: guix/ui.scm:258
#, scheme-format #, scheme-format
msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo povus esti elŝutata:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti elŝutata:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:259 #: guix/ui.scm:264
#, scheme-format #, scheme-format
msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo estos esti konstruata:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti konstruata:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:264 #: guix/ui.scm:269
#, scheme-format #, scheme-format
msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[La jena derivo estos esti elŝutata:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti elŝutata:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:281 #: guix/ui.scm:286
msgid "<unknown location>" msgid "<unknown location>"
msgstr "<nekonata loko>" msgstr "<nekonata loko>"
#: guix/ui.scm:309 #: guix/ui.scm:314
#, scheme-format #, scheme-format
msgid "failed to create configuration directory `~a': ~a~%" msgid "failed to create configuration directory `~a': ~a~%"
msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%" msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%"
#: guix/ui.scm:385 guix/ui.scm:395 #: guix/ui.scm:390 guix/ui.scm:400
msgid "unknown" msgid "unknown"
msgstr "nekonata" msgstr "nekonata"
#: guix/ui.scm:415 #: guix/ui.scm:484
#, scheme-format #, scheme-format
msgid "invalid argument: ~a~%" msgid "invalid argument: ~a~%"
msgstr "malvalida argumento: ~a~%" msgstr "malvalida argumento: ~a~%"
#: guix/ui.scm:420 #: guix/ui.scm:489
#, scheme-format #, scheme-format
msgid "Try `guix --help' for more information.~%" msgid "Try `guix --help' for more information.~%"
msgstr "Provu 'guix --help' por pli da informo.~%" msgstr "Provu 'guix --help' por pli da informo.~%"
#: guix/ui.scm:447 #: guix/ui.scm:516
msgid "" msgid ""
"Usage: guix COMMAND ARGS...\n" "Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n" "Run COMMAND with ARGS.\n"
@ -1091,21 +1147,21 @@ msgstr ""
"Uzmaniero: guix KOMANDO ARGj...\n" "Uzmaniero: guix KOMANDO ARGj...\n"
"Lanĉas KOMANDOn kun ARGj.\n" "Lanĉas KOMANDOn kun ARGj.\n"
#: guix/ui.scm:450 #: guix/ui.scm:519
msgid "COMMAND must be one of the sub-commands listed below:\n" msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n" msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n"
#: guix/ui.scm:469 #: guix/ui.scm:538
#, scheme-format #, scheme-format
msgid "guix: ~a: command not found~%" msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: komando ne trovita~%" msgstr "guix: ~a: komando ne trovita~%"
#: guix/ui.scm:487 #: guix/ui.scm:556
#, scheme-format #, scheme-format
msgid "guix: missing command name~%" msgid "guix: missing command name~%"
msgstr "guix: mankas komanda nomo~%" msgstr "guix: mankas komanda nomo~%"
#: guix/ui.scm:495 #: guix/ui.scm:564
#, scheme-format #, scheme-format
msgid "guix: unrecognized option '~a'~%" msgid "guix: unrecognized option '~a'~%"
msgstr "guix: nerekonata modifilo: '~a'~%" msgstr "guix: nerekonata modifilo: '~a'~%"

View File

@ -79,12 +79,16 @@ then
# Search. # Search.
test "`guix package -s "An example GNU package" | grep ^name:`" = \ test "`guix package -s "An example GNU package" | grep ^name:`" = \
"name: hello" "name: hello"
test "`guix package -s "n0t4r341p4ck4g3"`" = "" test -z "`guix package -s "n0t4r341p4ck4g3"`"
# List generations. # List generations.
test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \ test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \
= " guile-bootstrap" = " guile-bootstrap"
# Exit with 1 when a generation does not exist.
if guix package -p "$profile" --list-generations=42;
then false; else true; fi
# Remove a package. # Remove a package.
guix package --bootstrap -p "$profile" -r "guile-bootstrap" guix package --bootstrap -p "$profile" -r "guile-bootstrap"
test -L "$profile-3-link" test -L "$profile-3-link"
@ -107,11 +111,17 @@ then
test "`readlink_base "$profile"`" = "$profile-0-link" test "`readlink_base "$profile"`" = "$profile-0-link"
done done
# Test that '--list-generations' does not output the zeroth generation.
test -z "`guix package -p "$profile" -l 0`"
# Reinstall after roll-back to the empty profile. # Reinstall after roll-back to the empty profile.
guix package --bootstrap -p "$profile" -e "$boot_make" guix package --bootstrap -p "$profile" -e "$boot_make"
test "`readlink_base "$profile"`" = "$profile-1-link" test "`readlink_base "$profile"`" = "$profile-1-link"
test -x "$profile/bin/guile" && ! test -x "$profile/bin/make" test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
# Check that the first generation is the current one.
test "`guix package -p "$profile" -l 1 | cut -f3 | head -n1`" = "(current)"
# Roll-back to generation 0, and install---all at once. # Roll-back to generation 0, and install---all at once.
guix package --bootstrap -p "$profile" --roll-back -i guile-bootstrap guix package --bootstrap -p "$profile" --roll-back -i guile-bootstrap
test "`readlink_base "$profile"`" = "$profile-1-link" test "`readlink_base "$profile"`" = "$profile-1-link"

View File

@ -38,9 +38,10 @@ cp -r "$to_copy" "$new_store_dir"
copied="$new_store_dir/`basename $to_copy`" copied="$new_store_dir/`basename $to_copy`"
# Create a file representing a closure with zero references, and with an empty # Create a file representing a closure with zero references, and with an empty
# "deriver" field. # "deriver" field. Note that we give the file name as it appears in the
# original store, and 'guix-register' translates it to match the prefix.
cat >> "$closure" <<EOF cat >> "$closure" <<EOF
$copied $to_copy
0 0
EOF EOF
@ -49,26 +50,37 @@ EOF
guix-register -p "$new_store" < "$closure" guix-register -p "$new_store" < "$closure"
# Doing it a second time shouldn't hurt. # Doing it a second time shouldn't hurt.
guix-register -p "$new_store" "$closure" guix-register --prefix "$new_store" "$closure"
# Now make sure this is recognized as valid. # Now make sure this is recognized as valid.
NIX_IGNORE_SYMLINK_STORE=1 NIX_IGNORE_SYMLINK_STORE=1
NIX_STORE_DIR="$new_store_dir" NIX_STORE_DIR="$new_store_dir"
NIX_LOCALSTATE_DIR="$new_store$localstatedir" NIX_STATE_DIR="$new_store$localstatedir"
NIX_LOG_DIR="$new_store$localstatedir/log/nix" NIX_LOG_DIR="$new_store$localstatedir/log/nix"
NIX_DB_DIR="$new_store$localstatedir/nix/db" NIX_DB_DIR="$new_store$localstatedir/nix/db"
export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR NIX_LOCALSTATE_DIR \ export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR NIX_STATE_DIR \
NIX_LOG_DIR NIX_DB_DIR NIX_LOG_DIR NIX_DB_DIR
guix-daemon --disable-chroot & guix-daemon --disable-chroot &
subdaemon_pid=$! subdaemon_pid=$!
exit_hook="kill $subdaemon_pid" exit_hook="kill $subdaemon_pid"
final_name="$storedir/`basename $to_copy`"
# At this point the copy in $new_store must be valid, and unreferenced. # At this point the copy in $new_store must be valid, and unreferenced.
# The database under $new_store uses the $final_name, but we can't use
# that name in a 'valid-path?' query because 'assertStorePath' would kill
# us because of the wrong prefix. So we just list dead paths instead.
guile -c " guile -c "
(use-modules (guix store)) (use-modules (guix store))
(define s (open-connection)) (define s (open-connection))
(exit (and (valid-path? s \"$copied\") (exit (equal? (list \"$copied\") (dead-paths s)))"
(equal? (list \"$copied\") (dead-paths s))))"
# When 'sqlite3' is available, check the name in the database.
if type -P sqlite3
then
echo "select * from ValidPaths where path=\"$final_name\";" | \
sqlite3 $NIX_DB_DIR/db.sqlite
fi