diff --git a/Makefile.am b/Makefile.am index 41e0e67120..ed11bcc7ac 100644 --- a/Makefile.am +++ b/Makefile.am @@ -253,6 +253,7 @@ guix_install_go_files = install-nobase_nodist_guilemoduleDATA $(guix_install_go_files): install-nobase_dist_guilemoduleDATA SUBDIRS = po/guix po/packages +BUILT_SOURCES = include doc.am diff --git a/NEWS b/NEWS index 2001ec12fe..76a06a7573 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,121 @@ Copyright © 2013, 2014 Ludovic Courtès Please send Guix bug reports to bug-guix@gnu.org. +* Changes in 0.7 (since 0.6) +** Package management +*** Binaries for mips64el-linux now available from hydra.gnu.org + +These come in addition to the x86_64-linux and i686-linux binaries already +provided, thanks to our generous donor and friendly admins. See +“Substitutes” in the manual. + +*** ‘guix package’ has a new ‘--show’ option +*** ‘guix refresh’ has a new ‘--list-dependent’ option + +** Programming interfaces +*** New (guix gexp) module, which implements “G-expressions” + +G-expressions are a new mechanism to embed build-side code in host-side +code. See “G-Expressions” in the manual. + +*** (gnu system) and related modules now use G-expressions + +This greatly simplifies code, and guarantees that build code carries +references to the packages or derivations it uses. + +*** ‘build-expression->derivation’ is deprecated in favor of G-expressions +*** The (gnu system) module has been largely augmented and factorized +*** New (guix build vm) module, support for virtual machine images +*** New (guix build activation) module, for “system activation” +*** New (guix build syscalls) module +*** New (guix build install) and module for whole system installation +*** New (gnu system install) module, for the installation system +*** New (gnu system file-systems) module, for ‘file-system’ declarations +*** New (gnu) module, which aggregates common (gnu …) modules +*** ‘service’ records now have an optional ‘activate’ field + +This allows services to specify code to run at system activation time. + +** GNU distribution +*** An image to install the GNU system from a USB stick is provided + +This is the first time an installation image is provided. See “System +Installation” in the manual for details. This is work in progress as noted +in “Limitations”. Your feedback and help are welcome! + +*** Support for more parameters in ‘operating-system’ declarations + +Operating system declarations can now provide a list of file systems, a list +of setuid programs, bootloader options, and more. See “System Configuration” +in the manual. + +*** ‘guix system’ supports more actions + +Newly supported actions are ‘init’, ‘build’, ‘reconfigure’, and ‘disk-image’. +See “Invoking guix system” in the manual. + +*** User accounts and groups are created at system activation time +*** Virtual machine support uses para-virtualized devices +*** GCC package now has an additional ‘lib’ output, for run-time support libs +*** GLib package now has a separate “bin” output () +*** 134 new packages + +abbaye, aegis, attica, babl, barcode, behave, btar, busybox, ccache, ccrtp, +chess, clucene, cmatrix, commoncpp, conkeror, cook, cssc, datamash, diffstat, +doxygen, dropbear, dtach, duplicity, e2fsck-static, exosip, fftw-openmpi, +fish, gconf, gegl, gimp, gmsh, gnome-mime-data, gnome-vfs, gnumeric, goffice, +gsegrafix, guile-opengl, guile-static-stripped, hdup, hwloc, inotify-tools, +jrnl, kbd, kmod, lftp, libarchive, libart-lgpl, libbonobo, libbonoboui, +libcroco, libdbusmenu-qt, libftdi, libglade, libgnome, libgnomecanvas, +libgnomeprint, libgnomeprintui, libgnomeui, libgsf, libidl, libmcrypt, +libmhash, librsvg, librsync, libsodium, libuv, libvpx, links, lzop, man-pages, +maxima, mcrypt, mosh, mpg123, mplayer, mu, ncmpcpp, node, notmuch, numactl, +offlineimap, openmpi, orbit2, osip, pangox-compat, perl-io-tty, petsc, +petsc-complex, petsc-complex-openmpi, petsc-openmpi, pingus, podofo, protobuf, +pt-scotch, python-enum34, python-keyring, python-lockfile, python-mock, +python-parse, python-parse-type, python-parsedatetime, python-pycrypto, +python-six, python-tzlocal, python2-lockfile, python2-mock, qjson, qrencode, +rasqal, rdiff-backup, rdup, redland, rottlog, scotch, sipwitch, sshfs-fuse, +strigi, sudo, superlu, superlu-dist, talkfilters, talloc, tcpdump, tinyproxy, +transmission, ucommon, udev, vlc, vtk, wakelan, wireless-tools, +wpa-supplicant, xboard, youtube-dl + +*** 87 package updates + +bitlbee-3.2.2, cursynth-1.5, ddrescue-1.18.1, dfc-3.0.4, dmd-0.2, +docbook-xml-4.3, docbook-xml-4.4, docbook-xsl-1.78.1, dvdisaster-0.72.6, +ffmpeg-2.3, fftw-3.3.4, fftwf-3.3.4, flac-1.3.0, gawk-4.1.1, gcc-4.7.4, +gcc-4.8.3, gcc-4.8.3, gcc-4.9.1, gcc-cross-mips64el-linux-gnuabi64-4.8.3, +gcc-objc++-4.8.3, gcc-objc-4.8.3, gcc-stripped-tarball-4.8.3, +gcc-toolchain-4.8.3, gcc-toolchain-4.9.1, gccgo-4.8.3, gdb-7.7.1, +gettext-0.19.2, gfortran-4.8.3, glib-2.40.0, global-6.3, gmp-6.0.0a, +gnupg-1.4.18, gnupg-2.0.25, gnutls-3.2.15, gp2c-0.0.9pl1, grep-2.20, +gst-plugins-base-1.0.10, gstreamer-0.10.36, gtk+-3.10.1, gtkmm-2.24.2, +guile-2.0.11, guile-2.0.11, guix-0.6, guix-0.6.0ae8c15, htop-1.0.3, +icu4c-53.1, imagemagick-6.8.9-0, json-c-0.12, libdrm-2.4.33, libgc-7.2e, +libgcrypt-1.5.3, libgpg-error-1.13, libjpeg-8d, libmicrohttpd-0.9.37, +libogg-1.3.2, libotr-4.0.0, libtasn1-3.6, libvorbis-1.3.4, lightning-2.0.4, +linux-libre-3.15.6, lua-5.1.5, lua-5.2.3, mcron-1.0.8, moe-1.6, nano-2.3.6, +neon-0.29.6, nettle-3.0, openssl-1.0.1h, parallel-20140722, pari-gp-2.7.1, +pspp-0.8.3, python-2.7.6, python-dateutil-2.2, python2-dateutil-2.2, +qemu-2.0.0, qemu-headless-2.0.0, qt-4.8.6, qt-5.2.1, readline-6.2, +screen-4.2.1, soprano-2.9.4, texinfo-5.2, texlive-2014, tor-0.2.4.22, +wdiff-1.2.2, xorriso-1.3.8, xterm-304 + +** Native language support +*** New translations: de (German), and hu (Hungarian) +*** Updated translations: eo, pt_BR, sr, vi +*** Package descriptions moved from the ‘guix’ text domain to ‘guix-packages’ +** Bugs fixed +*** Downloads are now faster () +*** ‘guix authenticate’ properly writes signatures to stdout + () +*** Progress report of downloads is now properly displayed +*** Error reporting of pk-crypto errors has been improved +*** The 'patches' field now works for origins with no extension +*** Synchronization and GC issues fixed in the offload hook +*** (guix ftp-client) emits USER commands suitable for all servers + * Changes in 0.6 (since 0.5) ** Package management *** Default store directory changed to /gnu/store diff --git a/THANKS b/THANKS index cb3c32c2ac..4070eea3d1 100644 --- a/THANKS +++ b/THANKS @@ -23,6 +23,7 @@ infrastructure help: Matthew Lien Niels Möller Yutaka Niibe + Adam Pribyl Cyrill Schenkel Benno Schulenberg Jason Self diff --git a/build-aux/hydra/demo-os.scm b/build-aux/hydra/demo-os.scm index 89b67aabe3..9164500d70 100644 --- a/build-aux/hydra/demo-os.scm +++ b/build-aux/hydra/demo-os.scm @@ -44,13 +44,13 @@ (file-systems ;; We provide a dummy file system for /, but that's OK because the VM build ;; code will automatically declare the / file system for us. - (list (file-system - (mount-point "/") - (device "dummy") - (type "dummy")) - ;; %fuse-control-file-system ; needs fuse.ko - ;; %binary-format-file-system ; needs binfmt.ko - )) + (cons* (file-system + (mount-point "/") + (device "dummy") + (type "dummy")) + ;; %fuse-control-file-system ; needs fuse.ko + ;; %binary-format-file-system ; needs binfmt.ko + %base-file-systems)) (users (list (user-account (name "guest") diff --git a/configure.ac b/configure.ac index eb038db253..71b3ddacaa 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.68) -AC_INIT([GNU Guix], [0.7], [bug-guix@gnu.org], [guix], +AC_INIT([GNU Guix], [0.8], [bug-guix@gnu.org], [guix], [http://www.gnu.org/software/guix/]) AC_CONFIG_AUX_DIR([build-aux]) @@ -16,7 +16,7 @@ dnl For the C++ code. This must be used early. AC_USE_SYSTEM_EXTENSIONS AM_GNU_GETTEXT([external]) -AM_GNU_GETTEXT_VERSION([0.18.3]) +AM_GNU_GETTEXT_VERSION([0.18.1]) guilemoduledir="${datarootdir}/guile/site/2.0" AC_SUBST([guilemoduledir]) diff --git a/daemon.am b/daemon.am index b0a6d48873..fb662b1b14 100644 --- a/daemon.am +++ b/daemon.am @@ -20,7 +20,7 @@ # Integration of the `guix-daemon' code taken from upstream Nix. # -BUILT_SOURCES = nix/libstore/schema.sql.hh +BUILT_SOURCES += nix/libstore/schema.sql.hh CLEANFILES += $(BUILT_SOURCES) noinst_LIBRARIES = libformat.a libutil.a libstore.a diff --git a/doc.am b/doc.am index 6cbc35a8cc..67cd739fae 100644 --- a/doc.am +++ b/doc.am @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2012, 2013 Ludovic Courtès +# Copyright © 2012, 2013, 2014 Ludovic Courtès # Copyright © 2013 Andreas Enge # # This file is part of GNU Guix. @@ -24,6 +24,15 @@ EXTRA_DIST += \ doc/images/bootstrap-graph.eps \ doc/images/bootstrap-graph.pdf +# Bundle this file so that makeinfo finds it in out-of-source-tree builds. +BUILT_SOURCES += doc/os-config.texi +EXTRA_DIST += doc/os-config.texi +MAINTAINERCLEANFILES = doc/os-config.texi + +doc/os-config.texi: gnu/system/os-config.tmpl + $(MKDIR_P) "`dirname "$@"`" + cp "$<" "$@" + infoimagedir = $(infodir)/images dist_infoimage_DATA = doc/images/bootstrap-graph.png diff --git a/doc/guix.texi b/doc/guix.texi index 5bee540460..b0f4e1ad81 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -29,6 +29,8 @@ Documentation License''. Managing packages with Guix. * guix build: (guix)Invoking guix build Building packages with Guix. +* guix system: (guix)Invoking guix system + Managing the operating system configuration. @end direntry @titlepage @@ -67,7 +69,7 @@ package management tool written for the GNU system. * Acknowledgments:: Thanks! * GNU Free Documentation License:: The license of this manual. * Concept Index:: Concepts. -* Function Index:: Functions. +* Programming Index:: Data types, functions, and variables. @end menu @c ********************************************************************* @@ -129,7 +131,7 @@ ready to use it. Note that this section is concerned with the installation of the package manager, which can be done on top of a running GNU/Linux system. If, instead, you want to install the complete GNU operating system, -@ref{System Installation}. +@pxref{System Installation}. The build procedure for Guix is the same as for other GNU software, and is not covered here. Please see the files @file{README} and @@ -844,6 +846,30 @@ name: gmp @dots{} @end example +@item --show=@var{package} +Show details about @var{package}, taken from the list of available packages, in +@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU +recutils manual}). + +@example +$ guix package --show=python | recsel -p name,version +name: python +version: 2.7.6 + +name: python +version: 3.3.5 +@end example + +You may also specify the full name of a package to only get details about a +specific version of it: +@example +$ guix package --show=python-3.3.5 | recsel -p name,version +name: python +version: 3.3.5 +@end example + + + @item --list-installed[=@var{regexp}] @itemx -I [@var{regexp}] List the currently installed packages in the specified profile, with the @@ -1792,7 +1818,7 @@ As can be guessed, this primitive is cumbersome to use directly. A better approach is to write build scripts in Scheme, of course! The best course of action for that is to write the build code as a ``G-expression'', and to pass it to @code{gexp->derivation}. For more -information, @ref{G-Expressions}. +information, @pxref{G-Expressions}. Once upon a time, @code{gexp->derivation} did not exist and constructing derivations with build code written in Scheme was achieved with @@ -1988,6 +2014,29 @@ will references @var{coreutils}, @var{grep}, and @var{sed}, thereby preventing them from being garbage-collected during its lifetime. @end deffn +@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @ + [#:recursive? #t] +Return the name of @var{file} once interned in the store. Use +@var{name} as its store name, or the basename of @var{file} if +@var{name} is omitted. + +When @var{recursive?} is true, the contents of @var{file} are added +recursively; if @var{file} designates a flat file and @var{recursive?} +is true, its contents are added, and its permission bits are kept. + +The example below adds a file to the store, under two different names: + +@example +(run-with-store (open-connection) + (mlet %store-monad ((a (interned-file "README")) + (b (interned-file "README" "LEGU-MIN"))) + (return (list a b)))) + +@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN") +@end example + +@end deffn + @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @ [#:system (%current-system)] [#:output "out"] Return as a monadic value in the absolute file name of @var{file} within the @var{output} @@ -2545,6 +2594,33 @@ The command above specifically updates the @code{emacs} and @code{idutils} packages. The @code{--select} option would have no effect in this case. +When considering whether to upgrade a package, it is sometimes +convenient to know which packages would be affected by the upgrade and +should be checked for compatibility. For this the following option may +be used when passing @command{guix refresh} one or more package names: + +@table @code + +@item --list-dependent +@itemx -l +List top-level dependent packages that would need to be rebuilt as a +result of upgrading one or more packages. + +@end table + +Be aware that the @code{--list-dependent} option only +@emph{approximates} the rebuilds that would be required as a result of +an upgrade. More rebuilds might be required under some circumstances. + +@example +$ guix refresh --list-dependent flex +Building the following 120 packages would ensure 213 dependent packages are rebuilt: +hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{} +@end example + +The command above lists a set of packages that could be built to check +for compatibility with an upgraded @code{flex} package. + The following options can be used to customize GnuPG operation: @table @code @@ -2620,14 +2696,14 @@ to join! @ref{Contributing}, for information about how you can help. This section explains how to install the complete GNU operating system on a machine. The Guix package manager can also be installed on top of -a running GNU/Linux system, @ref{Installation}. +a running GNU/Linux system, @pxref{Installation}. @ifinfo @c This paragraph is for people reading this from tty2 of the @c installation image. You're reading this documentation with an Info reader. For details on how to use it, hit the @key{RET} key (``return'' or ``enter'') on the -link that follows: @ref{Help,,, info, Info: An Introduction}. Hit +link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit @kbd{l} afterwards to come back here. @end ifinfo @@ -2658,7 +2734,7 @@ GNOME and KDE. @item Support for encrypted disks, the Logical Volume Manager (LVM), and swap -devices are missing. +devices is missing. @item Few system services are currently supported out-of-the-box @@ -2707,7 +2783,7 @@ its device name. Assuming that USB stick is known as @file{/dev/sdX}, copy the image with: @example -dd if=gnu-usb-install-20140629.x86_64 of=/dev/sdX +dd if=gnu-usb-install-@value{VERSION}.x86_64 of=/dev/sdX @end example Access to @file{/dev/sdX} usually requires root privileges. @@ -2744,13 +2820,27 @@ image does not contain all the software and tools that may be needed. Unless this has already been done, you must partition and format the target partitions. +Preferably, assign partitions a label so that you can easily and +reliably refer to them in @code{file-system} declarations (@pxref{File +Systems}). This is typically done using the @code{-L} option of +@command{mkfs.ext4} and related commands. + The installation image includes Parted (@pxref{Overview,,, parted, GNU Parted User Manual}), @command{fdisk}, and e2fsprogs, the suite of tools to manipulate ext2/ext3/ext4 file systems. +@item +Once that is done, mount the target root partition under @file{/mnt}. + +@item +Lastly, run @code{deco start cow-store /mnt}. + +This will make @file{/gnu/store} copy-on-write, such that packages added +to it during the installation phase will be written to the target disk +rather than kept in memory. + @end enumerate -Once that is done, mount the target root partition under @file{/mnt}. @subsection Proceeding with the Installation @@ -2762,28 +2852,16 @@ It is better to store that file on the target root file system, say, as @file{/mnt/etc/config.scm}. A minimal operating system configuration, with just the bare minimum and -only a root account would look like this: +only a root account would look like this (on the installation system, +this example is available as @file{/etc/configuration-template.scm}): @example -(use-modules (gnu)) - -(operating-system - (host-name "foo") - (timezone "Europe/Paris") - (locale "en_US.UTF-8") - - ;; Assuming /dev/sdX is the target hard disk, and /dev/sdX1 the - ;; target root file system. - (bootloader (grub-configuration (device "/dev/sdX"))) - (file-systems (list (file-system - (device "/dev/sdX1") - (mount-point "/") - (type "ext4"))))) +@include os-config.texi @end example @noindent For more information on @code{operating-system} declarations, -@xref{Using the Configuration System}. +@pxref{Using the Configuration System}. Once that is done, the new system must be initialized (remember that the target root file system is mounted under @file{/mnt}): @@ -2795,7 +2873,7 @@ guix system init /mnt/etc/config.scm /mnt @noindent This will copy all the necessary files, and install GRUB on @file{/dev/sdX}, unless you pass the @option{--no-grub} option. For -more information, @xref{Invoking guix system}. This command may trigger +more information, @pxref{Invoking guix system}. This command may trigger downloads or builds of missing packages, which can take some time. Once that command has completed---and hopefully succeeded!---you can @@ -2874,10 +2952,11 @@ kernel, initial RAM disk, and boot loader looks like this: (locale "fr_FR.UTF-8") (bootloader (grub-configuration (device "/dev/sda"))) - (file-systems (list (file-system + (file-systems (cons (file-system (device "/dev/sda1") ; or partition label (mount-point "/") - (type "ext3")))) + (type "ext3")) + %base-file-systems)) (users (list (user-account (name "alice") (password "") @@ -2986,7 +3065,9 @@ partitions without having to hard-code their actual device name. @item @code{flags} (default: @code{'()}) This is a list of symbols denoting mount flags. Recognized flags -include @code{read-only} and @code{bind-mount}. +include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow +access to special files), @code{no-suid} (ignore setuid and setgid +bits), and @code{no-exec} (disallow program execution.) @item @code{options} (default: @code{#f}) This is either @code{#f}, or a string denoting mount options. @@ -3001,9 +3082,52 @@ instance, for the root file system. This Boolean indicates whether the file system needs to be checked for errors before being mounted. +@item @code{create-mount-point?} (default: @code{#f}) +When true, the mount point is created if it does not exist yet. + @end table @end deftp +The @code{(gnu system file-systems)} exports the following useful +variables. + +@defvr {Scheme Variable} %base-file-systems +These are essential file systems that are required on normal systems, +such as @var{%devtmpfs-file-system} (see below.) Operating system +declarations should always contain at least these. +@end defvr + +@defvr {Scheme Variable} %devtmpfs-file-system +The @code{devtmpfs} file system to be mounted on @file{/dev}. This is a +requirement for udev (@pxref{Base Services, @code{udev-service}}). +@end defvr + +@defvr {Scheme Variable} %pseudo-terminal-file-system +This is the file system to be mounted as @file{/dev/pts}. It supports +@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar +functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference +Manual}). Pseudo-terminals are used by terminal emulators such as +@command{xterm}. +@end defvr + +@defvr {Scheme Variable} %shared-memory-file-system +This file system is mounted as @file{/dev/shm} and is used to support +memory sharing across processes (@pxref{Memory-mapped I/O, +@code{shm_open},, libc, The GNU C Library Reference Manual}). +@end defvr + +@defvr {Scheme Variable} %binary-format-file-system +The @code{binfmt_misc} file system, which allows handling of arbitrary +executable file types to be delegated to user space. This requires the +@code{binfmt.ko} kernel module to be loaded. +@end defvr + +@defvr {Scheme Variable} %fuse-control-file-system +The @code{fusectl} file system, which allows unprivileged users to mount +and unmount user-space FUSE file systems. This requires the +@code{fuse.ko} kernel module to be loaded. +@end defvr + @node User Accounts @subsection User Accounts @@ -3077,6 +3201,10 @@ The group's name. The group identifier (a number). If @code{#f}, a new number is automatically allocated when the group is created. +@item @code{system?} (default: @code{#f}) +This Boolean value indicates whether the group is a ``system'' group. +System groups have low numerical IDs. + @item @code{password} (default: @code{#f}) What, user groups can have a password? Well, apparently yes. Unless @code{#f}, this field specifies the group's password. @@ -3194,6 +3322,7 @@ passed to @command{guix-daemon}. Run @var{udev}, which populates the @file{/dev} directory dynamically. @end deffn + @node Networking Services @subsubsection Networking Services @@ -4040,8 +4169,10 @@ an inspiration for Guix. @unnumbered Concept Index @printindex cp -@node Function Index -@unnumbered Function Index +@node Programming Index +@unnumbered Programming Index +@syncodeindex tp fn +@syncodeindex vr fn @printindex fn @bye diff --git a/gnu-system.am b/gnu-system.am index 0423d1400c..6e1e8afec0 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -139,6 +139,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/libdaemon.scm \ gnu/packages/libevent.scm \ gnu/packages/libffi.scm \ + gnu/packages/libftdi.scm \ gnu/packages/libidn.scm \ gnu/packages/libphidget.scm \ gnu/packages/libsigsegv.scm \ @@ -267,6 +268,7 @@ GNU_SYSTEM_MODULES = \ gnu/system/file-systems.scm \ gnu/system/grub.scm \ gnu/system/install.scm \ + gnu/system/os-config.tmpl \ gnu/system/linux.scm \ gnu/system/linux-initrd.scm \ gnu/system/shadow.scm \ diff --git a/gnu/packages.scm b/gnu/packages.scm index 8365a00051..77d9d3ee82 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013 Ludovic Courtès ;;; Copyright © 2013 Mark H Weaver +;;; Copyright © 2014 Eric Bavier ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,10 +32,16 @@ search-bootstrap-binary %patch-directory %bootstrap-binaries-path + fold-packages + find-packages-by-name find-best-packages-by-name - find-newest-available-packages)) + find-newest-available-packages + + package-direct-dependents + package-transitive-dependents + package-covering-dependents)) ;;; Commentary: ;;; @@ -182,3 +189,60 @@ VERSION." (match (vhash-assoc name (find-newest-available-packages)) ((_ version pkgs ...) pkgs) (#f '())))) + + +(define* (vhash-refq vhash key #:optional (dflt #f)) + "Look up KEY in the vhash VHASH, and return the value (if any) associated +with it. If KEY is not found, return DFLT (or `#f' if no DFLT argument is +supplied). Uses `eq?' for equality testing." + (or (and=> (vhash-assq key vhash) cdr) + dflt)) + +(define package-dependencies + (memoize + (lambda () + "Return a vhash keyed by package, and with associated values that are a +list of packages that depend on that package." + (fold-packages + (lambda (package dag) + (fold + (lambda (in d) + ;; Insert a graph edge from each of package's inputs to package. + (vhash-consq in + (cons package (vhash-refq d in '())) + (vhash-delq in d))) + dag + (match (package-direct-inputs package) + (((labels packages . _) ...) + packages) ))) + vlist-null)))) + +(define (package-direct-dependents packages) + "Return a list of packages from the distribution that directly depend on the +packages in PACKAGES." + (delete-duplicates + (concatenate + (map (lambda (p) + (vhash-refq (package-dependencies) p '())) + packages)))) + +(define (package-transitive-dependents packages) + "Return the transitive dependent packages of the distribution packages in +PACKAGES---i.e. the dependents of those packages, plus their dependents, +recursively." + (let ((dependency-dag (package-dependencies))) + (fold-tree + cons '() + (lambda (node) (vhash-refq dependency-dag node)) + ;; Start with the dependents to avoid including PACKAGES in the result. + (package-direct-dependents packages)))) + +(define (package-covering-dependents packages) + "Return a minimal list of packages from the distribution whose dependencies +include all of PACKAGES and all packages that depend on PACKAGES." + (let ((dependency-dag (package-dependencies))) + (fold-tree-leaves + cons '() + (lambda (node) (vhash-refq dependency-dag node)) + ;; Start with the dependents to avoid including PACKAGES in the result. + (package-direct-dependents packages)))) diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 8b7a2c0303..4a88fdd76a 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -78,16 +78,16 @@ interface and is based on GNU Guile.") (define-public dfc (package (name "dfc") - (version "3.0.3") + (version "3.0.4") (source (origin (method url-fetch) (uri (string-append - "http://projects.gw-computing.net/attachments/download/78/dfc-" + "http://projects.gw-computing.net/attachments/download/79/dfc-" version ".tar.gz")) (sha256 (base32 - "1b4hfqv23l87cb37fxwzfk2sgspkyxpr3ig2hsd23hr6mm982j7z")))) + "0zk1ppx93ijimf4sbgqilxxikpsa2gmpbynknyh41xy7jbdjxp0b")))) (build-system cmake-build-system) (arguments '(#:tests? #f)) ; There are no tests. (native-inputs `(("gettext" ,gnu-gettext))) @@ -101,14 +101,14 @@ graphs and can export its output to different formats.") (define-public htop (package (name "htop") - (version "1.0.2") + (version "1.0.3") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/htop/" + (uri (string-append "http://hisham.hm/htop/releases/" version "/htop-" version ".tar.gz")) (sha256 (base32 - "18fqrhvnm7h4c3939av8lpiwrwxbyw6hcly0jvq0vkjf0ixnaq7f")))) + "0a8qbpsifzjwc4f45xfwm48jhm59g6q5hlib4bf7z13mgy95fp05")))) (build-system gnu-build-system) (inputs `(("ncurses" ,ncurses))) @@ -617,7 +617,7 @@ system administrator.") (define-public sudo (package (name "sudo") - (version "1.8.10p2") + (version "1.8.10p3") (source (origin (method url-fetch) (uri @@ -627,10 +627,10 @@ system administrator.") version ".tar.gz"))) (sha256 (base32 - "1wbrygz584abmywklq0b4xhqn3s1bjk3rrladslr5nycdpdvhv5s")))) + "002l6h27pnhb77b65frhazbhknsxvrsnkpi43j7i0qw1lrgi7nkf")))) (build-system gnu-build-system) (arguments - '(#:configure-flags '("--with-logpath=/var/log/sudo.log") + `(#:configure-flags '("--with-logpath=/var/log/sudo.log") #:phases (alist-cons-before 'configure 'pre-configure (lambda _ @@ -644,7 +644,18 @@ system administrator.") "") (("^install: (.*)install-sudoers(.*)" _ before after) ;; Don't try to create /etc/sudoers. - (string-append "install: " before after "\n")))) + (string-append "install: " before after "\n"))) + + ;; XXX FIXME sudo 1.8.10p3 was bootstrapped with a + ;; prerelease libtool, which fails on MIPS in the absence + ;; of /usr/bin/file. As a temporary workaround, we patch + ;; the configure script to hardcode use of the little + ;; endian N32 ABI on MIPS. + ,@(if (equal? "mips64el-linux" (or (%current-target-system) + (%current-system))) + '((substitute* "configure" + (("\\$emul") "elf32ltsmipn32"))) + '())) %standard-phases) ;; XXX: The 'testsudoers' test series expects user 'root' to exist, but @@ -668,7 +679,7 @@ commands and their arguments.") (define-public wpa-supplicant (package (name "wpa-supplicant") - (version "2.1") + (version "2.2") (source (origin (method url-fetch) (uri (string-append @@ -677,7 +688,7 @@ commands and their arguments.") ".tar.gz")) (sha256 (base32 - "0xxjw7lslvql1ykfbwmbhdrnjsjljf59fbwf837418s97dz2wqwi")))) + "1vf8jc4yyksbxf86narvsli3vxfbm8nbnim2mdp66nd6d3yvin70")))) (build-system gnu-build-system) (arguments '(#:phases (alist-replace @@ -762,3 +773,33 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.") "WakeLan broadcasts a properly formatted UDP packet across the local area network, which causes enabled computers to power on.") (license gpl2+))) + +(define-public dmidecode + (package + (name "dmidecode") + (version "2.12") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://savannah/dmidecode/dmidecode-" + version ".tar.bz2")) + (sha256 + (base32 + "122hgaw8mpqdfra159lfl6pyk3837giqx6vq42j64fjnbl2z6gwi")))) + (build-system gnu-build-system) + (arguments + '(#:phases (alist-delete 'configure %standard-phases) + #:tests? #f ; no 'check' target + #:make-flags (list (string-append "prefix=" + (assoc-ref %outputs "out"))))) + (home-page "http://www.nongnu.org/dmidecode/") + (synopsis "Read hardware information from the BIOS") + (description + "Dmidecode reports information about your system's hardware as described +in your system BIOS according to the SMBIOS/DMI standard. This typically +includes system manufacturer, model name, serial number, BIOS version, asset +tag as well as a lot of other details of varying level of interest and +reliability depending on the manufacturer. This will often include usage +status for the CPU sockets, expansion slots (e.g. AGP, PCI, ISA) and memory +module slots, and the list of I/O ports (e.g. serial, parallel, USB).") + (license gpl2+))) diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index 9ed978536d..8c12eb604e 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -84,14 +84,14 @@ solve the shortest vector problem.") (define-public pari-gp (package (name "pari-gp") - (version "2.7.0") + (version "2.7.1") (source (origin (method url-fetch) (uri (string-append "http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-" version ".tar.gz")) (sha256 (base32 - "1hk7lmq09crr9jvia8nxzhvbwf8mw62xk456i96jg8dljh0r9sgz")))) + "1gj1rddi22hinzwy7r6hljgbi252wwwyd6gapg4hvcn0ycc7jqyc")))) (build-system gnu-build-system) (inputs `(("gmp" ,gmp) ("perl" ,perl) diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm index 73b377e384..a77f1393d9 100644 --- a/gnu/packages/boost.scm +++ b/gnu/packages/boost.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 John Darrington +;;; Copyright © 2014 Mark H Weaver ;;; ;;; This file is part of GNU Guix. ;;; @@ -46,39 +47,48 @@ ("python" ,python-2) ("tcsh" ,tcsh))) (arguments - `(#:phases - (alist-replace - 'configure - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (substitute* '("libs/config/configure" - "libs/spirit/classic/phoenix/test/runtest.sh" - "tools/build/v2/doc/bjam.qbk" - "tools/build/v2/engine/execunix.c" - "tools/build/v2/engine/Jambase" - "tools/build/v2/engine/jambase.c") - (("/bin/sh") (which "sh"))) - - (setenv "SHELL" (which "sh")) - (setenv "CONFIG_SHELL" (which "sh")) - - (zero? (system* "./bootstrap.sh" - (string-append "--prefix=" out) - "--with-toolset=gcc")))) - (alist-replace - 'build - (lambda _ - (zero? (system* "./b2" "threading=multi" "link=shared"))) - + (let ((build-flags + `("threading=multi" "link=shared" + ;; Boost's 'context' library is not yet supported on mips64, so + ;; we disable it. The 'coroutine' library depends on 'context', + ;; so we disable that too. + ,@(if (equal? "mips64el-linux" (or (%current-target-system) + (%current-system))) + '("--without-context" "--without-coroutine") + '())))) + `(#:phases (alist-replace - 'check - (lambda _ #t) + 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* '("libs/config/configure" + "libs/spirit/classic/phoenix/test/runtest.sh" + "tools/build/v2/doc/bjam.qbk" + "tools/build/v2/engine/execunix.c" + "tools/build/v2/engine/Jambase" + "tools/build/v2/engine/jambase.c") + (("/bin/sh") (which "sh"))) + (setenv "SHELL" (which "sh")) + (setenv "CONFIG_SHELL" (which "sh")) + + (zero? (system* "./bootstrap.sh" + (string-append "--prefix=" out) + "--with-toolset=gcc")))) (alist-replace - 'install + 'build (lambda _ - (zero? (system* "./b2" "install" "threading=multi" "link=shared"))) - %standard-phases)))))) + (zero? (system* "./b2" ,@build-flags))) + + (alist-replace + 'check + (lambda _ #t) + + (alist-replace + 'install + (lambda _ + (zero? (system* "./b2" "install" ,@build-flags))) + %standard-phases))))))) (home-page "http://boost.org") (synopsis "Peer-reviewed portable C++ source libraries") diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index e520312164..518cfc3c2b 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014 Ludovic Courtès -;;; Copyright © 2013 Andreas Enge +;;; Copyright © 2013, 2014 Andreas Enge ;;; ;;; This file is part of GNU Guix. ;;; @@ -98,14 +98,14 @@ extraction from CDs.") (define-public xorriso (package (name "xorriso") - (version "1.3.6.pl01") + (version "1.3.8") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/xorriso/xorriso-" version ".tar.gz")) (sha256 (base32 - "07bm20kb4f6q5pbkxhy7w8ggw2gxkrq45cda2kbh6wgphs5z2h7q")))) + "0zhhj9lr9z7hnb2alac54mc28w1l0mbanphhpmy3ylsi8rih84lh")))) (build-system gnu-build-system) (inputs `(("acl" ,acl) @@ -173,14 +173,14 @@ reconstruction capability.") (define-public dvdisaster (package (name "dvdisaster") - (version "0.72.4") + (version "0.72.6") (source (origin (method url-fetch) (uri (string-append "http://dvdisaster.net/downloads/dvdisaster-" version ".tar.bz2")) (sha256 (base32 - "0pm039a78h7m9vvjmmjfkl05ii6qdmfhvbypxjbc7j5w82y66is4")))) + "0sqrprc5rh3shnfli25m2wy0i5f83db54iv04s5s7bxf77m7sy79")))) (build-system gnu-build-system) (inputs `(("gtk+" ,gtk+-2))) @@ -192,7 +192,14 @@ reconstruction capability.") `(;; Parallel builds appear to be unsafe, see ;; . #:parallel-build? #f - #:tests? #f)) ; no check target + #:tests? #f ; no check target + #:phases + (alist-cons-before + 'patch-source-shebangs 'sanitise + (lambda _ + ;; delete dangling symlink + (delete-file ".#GNUmakefile")) + %standard-phases))) (home-page "http://dvdisaster.net/en/index.html") (synopsis "error correcting codes for optical media images") (description "Optical media (CD,DVD,BD) keep their data only for a diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index c927e6e49c..aed2e8925e 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -272,14 +272,14 @@ Go. It also includes runtime support libraries for these languages.") (define-public gcc-4.9 (package (inherit gcc-4.7) - (version "4.9.0") + (version "4.9.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gcc/gcc-" version "/gcc-" version ".tar.bz2")) (sha256 (base32 - "0mqjxpw2klskls00lwx1k24pnyzm3whqxg3hk74c3sddgfllgc5r")))))) + "0zki3ngi0gsidnmsp88mjl2868cc7cm5wm1vwqw6znja28d7hd6k")))))) (define (custom-gcc gcc name languages) "Return a custom version of GCC that supports LANGUAGES." diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm index 9db543199c..399c99bcdf 100644 --- a/gnu/packages/gimp.scm +++ b/gnu/packages/gimp.scm @@ -101,6 +101,7 @@ provided as well as the framework to add new color models and data types.") ("libjpeg" ,libjpeg-8))) (native-inputs `(("pkg-config" ,pkg-config) + ("glib" ,glib "bin") ; for gtester ("intltool" ,intltool))) (home-page "http://gegl.org") (synopsis "Graph based image processing framework") diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 893c3e8a6b..f684d24627 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -449,6 +449,7 @@ some form of information without getting in the user's way.") ("pango" ,pango))) (native-inputs `(("pkg-config" ,pkg-config) + ("glib:bin" ,glib "bin") ("gobject-introspection" ,gobject-introspection) ("intltool" ,intltool))) (home-page "https://wiki.gnome.org/Libpeas") @@ -1138,6 +1139,7 @@ controls using the Bonobo component framework.") ("libxml2" ,libxml2))) (native-inputs `(("intltool" ,intltool) + ("glib" ,glib "bin") ("pkg-config" ,pkg-config))) (home-page "https://developer.gnome.org/goffice/") (synopsis "Document-centric objects and utilities") @@ -1187,6 +1189,7 @@ controls using the Bonobo component framework.") ("zlib" ,zlib))) (native-inputs `(("intltool" ,intltool) + ("glib:bin" ,glib "bin") ("pkg-config" ,pkg-config))) (home-page "http://www.gnumeric.org") (synopsis "Spreadsheet application") diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm new file mode 100644 index 0000000000..6e8100ce29 --- /dev/null +++ b/gnu/packages/libftdi.scm @@ -0,0 +1,48 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2014 Manolis Fragkiskos Ragkousis +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages libftdi) + #:use-module (guix licenses) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (gnu packages libusb) + #:use-module (guix build-system cmake)) + +(define-public libftdi + (package + (name "libftdi") + (version "1.1") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.intra2net.com/en/developer/libftdi/download/libftdi1-" + version ".tar.bz2")) + (sha256 + (base32 + "088yh8pxd6q53ssqndydcw1dkq51cjqyahc03lm6iip22cdazcf0")))) + (build-system cmake-build-system) + (native-inputs + `(("libusb" ,libusb))) + (home-page "http://www.intra2net.com") + (synopsis "FTDI USB driver with bitbang mode") + (description + "libFTDI is a library to talk to FTDI chips: FT232BM, +FT245BM, FT2232C, FT2232D, FT245R and FT232H including the popular +bitbangmode.") + (license lgpl2.1+))) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 09d123a08d..3ffe2a4cdd 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -1273,7 +1273,18 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.") ("zlib" ,guix:zlib))) (arguments `(#:tests? #f ; FIXME: Investigate test failures - #:configure-flags '("--with-xz" "--with-zlib"))) + #:configure-flags '("--with-xz" "--with-zlib") + #:phases (alist-cons-after + 'install 'install-modprobe&co + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (for-each (lambda (tool) + (symlink "kmod" + (string-append bin "/" tool))) + '("insmod" "rmmod" "lsmod" "modprobe" + "modinfo" "depmod")))) + %standard-phases))) (home-page "https://www.kernel.org/") (synopsis "Kernel module tools") (description "kmod is a set of tools to handle common tasks with Linux diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index d9c847d4ce..7bdd81b4c8 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -301,6 +301,7 @@ repository and Maildir/IMAP as LOCAL repository.") (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) + ("glib" ,glib "bin") ; for gtester ("texinfo" ,texinfo))) ;; TODO: Add webkit and gtk to build the mug GUI. (inputs diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm index 73053513d5..1bb6fea889 100644 --- a/gnu/packages/nano.scm +++ b/gnu/packages/nano.scm @@ -27,7 +27,7 @@ (define-public nano (package (name "nano") - (version "2.3.4") + (version "2.3.6") (source (origin (method url-fetch) @@ -35,7 +35,7 @@ version ".tar.gz")) (sha256 (base32 - "1hcqv5yam4pkqx1sviigikzvd7n1pz6lwp7lzpdzagck9fgi4x0p")))) + "0d4ml0v9yi37pjs211xs38w9whsj6530wz3kmrvwgh8jigqz6jx7")))) (build-system gnu-build-system) (inputs `(("gettext" ,gnu-gettext) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index cf808970ce..66e71df284 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -34,17 +34,17 @@ #:use-module (gnu packages gettext) #:use-module (gnu packages texinfo)) -(define-public guix-0.6 +(define guix-0.7 (package (name "guix") - (version "0.6") + (version "0.7") (source (origin (method url-fetch) (uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-" version ".tar.gz")) (sha256 (base32 - "01xw51wizhsk827w4xp79k2b6dxjaviw04r6rbrb85qdxnwg6k9n")))) + "05r7bsjgc0a4m7yy433n3c1dlv2yqlf3qpwlhayn9djhpp2q1ssb")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list @@ -109,10 +109,12 @@ upgrades and roll-backs, per-user profiles, and much more. It is based on the Nix package manager.") (license gpl3+))) -(define-public guix +(define-public guix guix-0.7) + +(define-public guix-devel ;; Development version of Guix. (let ((commit "0ae8c15")) - (package (inherit guix-0.6) + (package (inherit guix-0.7) (version (string-append "0.6." commit)) (source (origin (method git-fetch) @@ -124,7 +126,7 @@ Nix package manager.") (base32 "1y6mwzwsjdxbfibqypb55dix371rifhfz0bygfr8k868lcdsawic")))) (arguments - (substitute-keyword-arguments (package-arguments guix-0.6) + (substitute-keyword-arguments (package-arguments guix-0.7) ((#:phases phases) `(alist-cons-before 'configure 'bootstrap @@ -160,4 +162,4 @@ Nix package manager.") ("gettext" ,gnu-gettext) ("texinfo" ,texinfo) ("graphviz" ,graphviz) - ,@(package-native-inputs guix-0.6)))))) + ,@(package-native-inputs guix-0.7)))))) diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index cf160d07b6..a4755e043d 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -27,7 +27,7 @@ (define-public parallel (package (name "parallel") - (version "20140622") + (version "20140722") (source (origin (method url-fetch) @@ -35,7 +35,7 @@ version ".tar.bz2")) (sha256 (base32 - "0frlp645yghnwq8x7dk8pdm6id1mqkkh7w48mcbpd04pw225gljq")))) + "165vf8hpl47z38aswsll1284l8xa9a8jwx3a3d2rzshm9yzbiq5n")))) (build-system gnu-build-system) (inputs `(("perl" ,perl))) (home-page "http://www.gnu.org/software/parallel/") diff --git a/gnu/packages/patches/module-init-tools-moduledir.patch b/gnu/packages/patches/module-init-tools-moduledir.patch index 68d7988f53..08f03d1cc4 100644 --- a/gnu/packages/patches/module-init-tools-moduledir.patch +++ b/gnu/packages/patches/module-init-tools-moduledir.patch @@ -2,17 +2,11 @@ This patch changes 'modprobe' & co. so they honor the 'LINUX_MODULE_DIRECTORY' environment variable, rather than looking for modules exclusively in /lib/modules. -Patch by David Guibert, from Nixpkgs; adjusted to use 'LINUX_MODULE_DIRECTORY' -rather than 'MODULE_DIR' as the variable name. - -commit cf2c95edb7918bc658f6cae93793c1949fc9cb6e -Author: David Guibert -Date: Fri Aug 5 14:20:12 2011 +0200 - - introduce module-dir +Original patch by David Guibert, from Nixpkgs; adjusted to use +'LINUX_MODULE_DIRECTORY' rather than 'MODULE_DIR' as the variable name. diff --git a/depmod.c b/depmod.c -index a1d2f8c..9362a35 100644 +index a1d2f8c..ff579c7 100644 --- a/depmod.c +++ b/depmod.c @@ -48,9 +48,6 @@ @@ -38,26 +32,30 @@ index a1d2f8c..9362a35 100644 } + if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) { -+ module_dir = "/lib/modules/"; ++ module_dir = "/lib/modules"; + } + while ((line = getline_wrapped(cfile, &linenum)) != NULL) { char *ptr = line; char *cmd, *modname; -@@ -1550,7 +1552,7 @@ static int parse_config_file(const char *filename, +@@ -1549,8 +1551,8 @@ static int parse_config_file(const char *filename, + 0, *search); continue; } - nofail_asprintf(&dirname, "%s%s%s/%s", basedir, +- nofail_asprintf(&dirname, "%s%s%s/%s", basedir, - MODULE_DIR, kernelversion, search_path); ++ nofail_asprintf(&dirname, "%s%s/%s/%s", basedir, + module_dir, kernelversion, search_path); len = strlen(dirname); *search = add_search(dirname, len, *search); free(dirname); -@@ -1565,7 +1567,7 @@ static int parse_config_file(const char *filename, +@@ -1564,8 +1566,8 @@ static int parse_config_file(const char *filename, + if (!regex_match(kernelversion, (const char *)version)) continue; - nofail_asprintf(&pathname, "%s%s%s/%s/%s.ko", basedir, +- nofail_asprintf(&pathname, "%s%s%s/%s/%s.ko", basedir, - MODULE_DIR, kernelversion, subdir, modname); ++ nofail_asprintf(&pathname, "%s%s/%s/%s/%s.ko", basedir, + module_dir, kernelversion, subdir, modname); *overrides = add_override(pathname, *overrides); @@ -76,24 +74,26 @@ index a1d2f8c..9362a35 100644 - nofail_asprintf(&dirname, "%s%s%s", basedir, MODULE_DIR, version); + if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) { -+ module_dir = "/lib/modules/"; ++ module_dir = "/lib/modules"; + } + -+ nofail_asprintf(&dirname, "%s%s%s", basedir, module_dir, version); ++ nofail_asprintf(&dirname, "%s%s/%s", basedir, module_dir, version); if (maybe_all) { if (!doing_stdout && !depfile_out_of_date(dirname)) -@@ -1850,7 +1857,7 @@ int main(int argc, char *argv[]) +@@ -1849,8 +1856,8 @@ int main(int argc, char *argv[]) + char *dirname; size_t len; - nofail_asprintf(&dirname, "%s%s%s/updates", basedir, +- nofail_asprintf(&dirname, "%s%s%s/updates", basedir, - MODULE_DIR, version); ++ nofail_asprintf(&dirname, "%s%s/%s/updates", basedir, + module_dir, version); len = strlen(dirname); search = add_search(dirname, len, search); } diff --git a/modinfo.c b/modinfo.c -index 1dd8469..67b1041 100644 +index 1dd8469..6a1865b 100644 --- a/modinfo.c +++ b/modinfo.c @@ -19,9 +19,6 @@ @@ -113,7 +113,7 @@ index 1dd8469..67b1041 100644 + char *module_dir; + + if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) { -+ module_dir = "/lib/modules/"; ++ module_dir = "/lib/modules"; + } if (strchr(name, '.') || strchr(name, '/')) { @@ -131,7 +131,7 @@ index 1dd8469..67b1041 100644 /* Search for it in modules.dep. */ nofail_asprintf(&depname, "%s/%s", moddir, "modules.dep"); diff --git a/modprobe.c b/modprobe.c -index 5464f45..d9fbf9d 100644 +index 5464f45..cb57917 100644 --- a/modprobe.c +++ b/modprobe.c @@ -86,10 +86,6 @@ typedef enum diff --git a/gnu/packages/texlive.scm b/gnu/packages/texlive.scm index b136c99979..57a250cba2 100644 --- a/gnu/packages/texlive.scm +++ b/gnu/packages/texlive.scm @@ -115,6 +115,11 @@ "--with-system-xpdf" "--with-system-zlib" "--with-system-zziplib") + + ;; Disable tests on mips64 to cope with a failure of luajiterr.test. + ;; XXX FIXME fix luajit properly on mips64. + #:tests? ,(not (equal? "mips64el-linux" (or (%current-target-system) + (%current-system)))) #:phases (alist-cons-after 'install 'postinst diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 075113ca9d..8850543c1d 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -193,7 +193,6 @@ "--disable-armv6t2" "--disable-vfp" "--disable-neon" - "--disable-vis" "--disable-mips32r2" "--disable-mipsdspr1" "--disable-mipsdspr2" diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm index e8da6be5f5..48a2c75927 100644 --- a/gnu/services/avahi.scm +++ b/gnu/services/avahi.scm @@ -96,7 +96,8 @@ sockets." (mkdir-p "/var/run/avahi-daemon"))) (user-groups (list (user-group - (name "avahi")))) + (name "avahi") + (system? #t)))) (user-accounts (list (user-account (name "avahi") (group "avahi") diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 55ee5c4b08..e1d247e8d3 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -25,10 +25,12 @@ #:use-module (gnu system linux) ; 'pam-service', etc. #:use-module (gnu packages admin) #:use-module ((gnu packages linux) - #:select (udev kbd)) + #:select (udev kbd e2fsprogs)) #:use-module ((gnu packages base) #:select (glibc-final)) #:use-module (gnu packages package-management) + #:use-module ((guix build linux-initrd) + #:select (mount-flags->bit-mask)) #:use-module (guix gexp) #:use-module (guix monads) #:use-module (srfi srfi-1) @@ -96,11 +98,14 @@ This service must be the root of the service dependency graph so that its (respawn? #f))))) (define* (file-system-service device target type - #:key (check? #t) options (title 'any)) + #:key (flags '()) (check? #t) + create-mount-point? options (title 'any)) "Return a service that mounts DEVICE on TARGET as a file system TYPE with OPTIONS. TITLE is a symbol specifying what kind of name DEVICE is: 'label for a partition label, 'device for a device file name, or 'any. When CHECK? is -true, check the file system before mounting it." +true, check the file system before mounting it. When CREATE-MOUNT-POINT? is +true, create TARGET if it does not exist yet. FLAGS is a list of symbols, +such as 'read-only' etc." (with-monad %store-monad (return (service @@ -109,10 +114,22 @@ true, check the file system before mounting it." (documentation "Check, mount, and unmount the given file system.") (start #~(lambda args (let ((device (canonicalize-device-spec #$device '#$title))) - #$(if check? - #~(check-file-system device #$type) + #$(if create-mount-point? + #~(mkdir-p #$target) #~#t) - (mount device #$target #$type 0 #$options)) + #$(if check? + #~(begin + ;; Make sure fsck.ext2 & co. can be found. + (setenv "PATH" + (string-append + #$e2fsprogs "/sbin:" + "/run/current-system/profile/sbin:" + (getenv "PATH"))) + (check-file-system device #$type)) + #~#t) + (mount device #$target #$type + #$(mount-flags->bit-mask flags) + #$options)) #t)) (stop #~(lambda args ;; Normally there are no processes left at this point, so @@ -455,6 +472,7 @@ passed to @command{guix-daemon}." (user-accounts accounts) (user-groups (list (user-group (name builder-group) + (system? #t) ;; Use a fixed GID so that we can create the ;; store with the right owner. @@ -466,8 +484,13 @@ passed to @command{guix-daemon}." (with-monad %store-monad (return (service (provision '(udev)) + + ;; Udev needs /dev to be a 'devtmpfs' mount so that new device + ;; nodes can be added: see + ;; . (requirement '(root-file-system)) - (documentation "Populate the /dev directory.") + + (documentation "Populate the /dev directory, dynamically.") (start #~(lambda () (define udevd (string-append #$udev "/libexec/udev/udevd")) diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm index 6076317ee5..5da7f14605 100644 --- a/gnu/services/dbus.scm +++ b/gnu/services/dbus.scm @@ -86,7 +86,8 @@ and policy files. For example, to allow avahi-daemon to use the system bus, (string-append "--config-file=" #$conf "/system.conf")))) (stop #~(make-kill-destructor)) (user-groups (list (user-group - (name "messagebus")))) + (name "messagebus") + (system? #t)))) (user-accounts (list (user-account (name "messagebus") (group "messagebus") diff --git a/gnu/services/dmd.scm b/gnu/services/dmd.scm index 74adb27885..dfda2708f5 100644 --- a/gnu/services/dmd.scm +++ b/gnu/services/dmd.scm @@ -49,6 +49,7 @@ (use-modules (ice-9 ftw) (guix build syscalls) + (guix build utils) ((guix build linux-initrd) #:select (check-file-system canonicalize-device-spec))) diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 502b0d85f1..6a7d194659 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -107,7 +107,8 @@ policy) as the @code{tor} unprivileged user." (stop #~(make-kill-destructor)) (user-groups (list (user-group - (name "tor")))) + (name "tor") + (system? #t)))) (user-accounts (list (user-account (name "tor") (group "tor") diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 7ca0d3f7db..a34129a8ed 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -97,7 +97,12 @@ EndSection #~(begin (use-modules (ice-9 match)) - ;; TODO: Check for ~/.xsession. + ;; First, try to run ~/.xsession. + (let* ((home (getenv "HOME")) + (file (string-append home "/.xsession"))) + (false-if-exception (execl file file))) + + ;; Then try a pre-configured session type. (match (command-line) ((_ "ratpoison") (execl (string-append #$ratpoison "/bin/ratpoison"))) @@ -146,10 +151,15 @@ reboot_cmd " dmd "/sbin/reboot (provision '(xorg-server)) (requirement '(user-processes host-name udev)) (start - #~(make-forkexec-constructor - (list (string-append #$slim "/bin/slim") "-nodaemon") - #:environment-variables - (list (string-append "SLIM_CFGFILE=" #$slim.cfg)))) + #~(lambda () + ;; A stale lock file can prevent SLiM from starting, so remove it + ;; to be on the safe side. + (false-if-exception (delete-file "/var/run/slim.lock")) + + (fork+exec-command + (list (string-append #$slim "/bin/slim") "-nodaemon") + #:environment-variables + (list (string-append "SLIM_CFGFILE=" #$slim.cfg))))) (stop #~(make-kill-destructor)) (respawn? #t) (pam-services diff --git a/gnu/system.scm b/gnu/system.scm index 20942ec7f0..68f9438693 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -181,11 +181,13 @@ as 'needed-for-boot'." (sequence %store-monad (map (match-lambda (($ device title target type flags opts - #f check?) + #f check? create?) (file-system-service device target type #:title title #:check? check? - #:options opts))) + #:create-mount-point? create? + #:options opts + #:flags flags))) file-systems))) (define (essential-services os) @@ -361,7 +363,8 @@ alias ll='ls -l' 'active-groups'." #~(list #$(user-group-name group) #$(user-group-password group) - #$(user-group-id group))) + #$(user-group-id group) + #$(user-group-system? group))) (define (user-account->gexp account) "Turn ACCOUNT, a object, into a list-valued gexp suitable for diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index 7852a6ab26..48c4fc7e77 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -28,9 +28,16 @@ file-system-needed-for-boot? file-system-flags file-system-options + file-system-check? + file-system-create-mount-point? %fuse-control-file-system - %binary-format-file-system)) + %binary-format-file-system + %shared-memory-file-system + %pseudo-terminal-file-system + %devtmpfs-file-system + + %base-file-systems)) ;;; Commentary: ;;; @@ -54,7 +61,9 @@ (needed-for-boot? file-system-needed-for-boot? ; Boolean (default #f)) (check? file-system-check? ; Boolean - (default #t))) + (default #t)) + (create-mount-point? file-system-create-mount-point? ; Boolean + (default #f))) (define %fuse-control-file-system ;; Control file system for Linux' file systems in user-space (FUSE). @@ -72,4 +81,51 @@ (type "binfmt_misc") (check? #f))) +(define %devtmpfs-file-system + ;; /dev as a 'devtmpfs' file system, needed for udev. + (file-system + (device "none") + (mount-point "/dev") + (type "devtmpfs") + (check? #f) + + ;; Mount it from the initrd so /dev/pts & co. can then be mounted over it. + (needed-for-boot? #t))) + +(define %tty-gid + ;; ID of the 'tty' group. Allocate it statically to make it easy to refer + ;; to it from here and from the 'tty' group definitions. + 996) + +(define %pseudo-terminal-file-system + ;; The pseudo-terminal file system. It needs to be mounted so that + ;; statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) expects (and + ;; thus openpty(3) and its users, such as xterm.) + (file-system + (device "none") + (mount-point "/dev/pts") + (type "devpts") + (check? #f) + (needed-for-boot? #f) + (create-mount-point? #t) + (options (string-append "gid=" (number->string %tty-gid) ",mode=620")))) + +(define %shared-memory-file-system + ;; Shared memory. + (file-system + (device "tmpfs") + (mount-point "/dev/shm") + (type "tmpfs") + (check? #f) + (flags '(no-suid no-dev)) + (options "size=50%") ;TODO: make size configurable + (create-mount-point? #t))) + +(define %base-file-systems + ;; List of basic file systems to be mounted. Note that /proc and /sys are + ;; currently mounted by the initrd. + (list %devtmpfs-file-system + %pseudo-terminal-file-system + %shared-memory-file-system)) + ;;; file-systems.scm ends here diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 18fd587ead..567934e4c1 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -20,6 +20,7 @@ #:use-module (gnu) #:use-module (guix gexp) #:use-module (guix monads) + #:use-module ((guix store) #:select (%store-prefix)) #:use-module (gnu packages linux) #:use-module (gnu packages package-management) #:use-module (gnu packages disk) @@ -42,6 +43,99 @@ manual." "-f" (string-append #$guix "/share/info/guix.info") "-n" "System Installation"))) +(define %backing-directory + ;; Sub-directory used as the backing store for copy-on-write. + "/tmp/guix-inst") + +(define (make-cow-store target) + "Return a gexp that makes the store copy-on-write, using TARGET as the +backing store. This is useful when TARGET is on a hard disk, whereas the +current store is on a RAM disk." + (define (unionfs read-only read-write mount-point) + ;; Make MOUNT-POINT the union of READ-ONLY and READ-WRITE. + + ;; Note: in the command below, READ-WRITE appears before READ-ONLY so that + ;; it is considered a "higher-level branch", as per unionfs-fuse(8), + ;; thereby allowing files existing on READ-ONLY to be copied over to + ;; READ-WRITE. + #~(fork+exec-command + (list (string-append #$unionfs-fuse "/bin/unionfs") + "-o" + "cow,allow_other,use_ino,max_files=65536,nonempty" + (string-append #$read-write "=RW:" #$read-only "=RO") + #$mount-point))) + + (define (set-store-permissions directory) + ;; Set the right perms on DIRECTORY to use it as the store. + #~(begin + (chown #$directory 0 30000) ;use the fixed 'guixbuild' GID + (chmod #$directory #o1775))) + + #~(begin + (unless (file-exists? "/.ro-store") + (mkdir "/.ro-store") + (mount #$(%store-prefix) "/.ro-store" "none" + (logior MS_BIND MS_RDONLY))) + + (let ((rw-dir (string-append target #$%backing-directory))) + (mkdir-p rw-dir) + (mkdir-p "/.rw-store") + #$(set-store-permissions #~rw-dir) + #$(set-store-permissions "/.rw-store") + + ;; Mount the union, then atomically make it the store. + (and #$(unionfs "/.ro-store" #~rw-dir "/.rw-store") + (begin + (sleep 1) ;XXX: wait for unionfs to be ready + (mount "/.rw-store" #$(%store-prefix) "" MS_MOVE) + (rmdir "/.rw-store")))))) + +(define (cow-store-service) + "Return a service that makes the store copy-on-write, such that writes go to +the user's target storage device rather than on the RAM disk." + ;; See for the initial report. + (with-monad %store-monad + (return (service + (requirement '(root-file-system user-processes)) + (provision '(cow-store)) + (documentation + "Make the store copy-on-write, with writes going to \ +the given target.") + (start #~(case-lambda + ((target) + #$(make-cow-store #~target) + target) + (else + ;; Do nothing, and mark the service as stopped. + #f))) + (stop #~(lambda (target) + ;; Delete the temporary directory, but leave everything + ;; mounted as there may still be processes using it + ;; since 'user-processes' doesn't depend on us. + (delete-file-recursively + (string-append target #$%backing-directory)))))))) + +(define (configuration-template-service) + "Return a dummy service whose purpose is to install an operating system +configuration template file in the installation system." + + (define local-template + "/etc/configuration-template.scm") + (define template + (search-path %load-path "gnu/system/os-config.tmpl")) + + (mlet %store-monad ((template (interned-file template))) + (return (service + (requirement '(root-file-system)) + (provision '(os-config-template)) + (documentation + "This dummy service installs an OS configuration template.") + (start #~(const #t)) + (stop #~(const #f)) + (activate + #~(unless (file-exists? #$local-template) + (copy-file #$template #$local-template))))))) + (define (installation-services) "Return the list services for the installation image." (let ((motd (text-file "motd" " @@ -71,6 +165,9 @@ You have been warned. Thanks for being so brave. #:auto-login "guest" #:login-program (log-to-info)) + ;; Documentation add-on. + (configuration-template-service) + ;; A bunch of 'root' ttys. (normal-tty "tty3") (normal-tty "tty4") @@ -88,6 +185,10 @@ You have been warned. Thanks for being so brave. ;; Start udev so that useful device nodes are available. (udev-service) + ;; Add the 'cow-store' service, which users have to start manually + ;; since it takes the installation directory as an argument. + (cow-store-service) + ;; Install Unicode support and a suitable font. (console-font-service "tty1") (console-font-service "tty2") @@ -117,10 +218,11 @@ Use Alt-F2 for documentation. (file-systems ;; Note: the disk image build code overrides this root file system with ;; the appropriate one. - (list (file-system + (cons (file-system (mount-point "/") (device "gnu-disk-image") - (type "ext4")))) + (type "ext4")) + %base-file-systems)) (users (list (user-account (name "guest") diff --git a/gnu/system/os-config.tmpl b/gnu/system/os-config.tmpl new file mode 100644 index 0000000000..ad58606f67 --- /dev/null +++ b/gnu/system/os-config.tmpl @@ -0,0 +1,31 @@ +;; This is an operating system configuration template. + +(use-modules (gnu)) + +(operating-system + (host-name "antelope") + (timezone "Europe/Paris") + (locale "en_US.UTF-8") + + ;; Assuming /dev/sdX is the target hard disk, and "root" is + ;; the label of the target root file system. + (bootloader (grub-configuration (device "/dev/sdX"))) + (file-systems (cons (file-system + (device "root") + (title 'label) + (mount-point "/") + (type "ext4")) + %base-file-systems)) + + ;; This is where user accounts are specified. The "root" + ;; account is implicit, and is initially created with the + ;; empty password. + (users (list (user-account + (name "alice") + (comment "Bob's sister") + (group "users") + + ;; Adding the account to the "wheel" group + ;; makes it a sudoer. + (supplementary-groups '("wheel")) + (home-directory "/home/alice"))))) diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index ae6eac9a5b..5d638398d1 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -20,6 +20,8 @@ #:use-module (guix records) #:use-module (guix gexp) #:use-module (guix monads) + #:use-module ((gnu system file-systems) + #:select (%tty-gid)) #:use-module ((gnu packages admin) #:select (shadow)) #:use-module (gnu packages bash) @@ -41,6 +43,7 @@ user-group-name user-group-password user-group-id + user-group-system? default-skeletons skeleton-directory @@ -73,28 +76,33 @@ user-group? (name user-group-name) (password user-group-password (default #f)) - (id user-group-id (default #f))) + (id user-group-id (default #f)) + (system? user-group-system? ; Boolean + (default #f))) (define %base-groups ;; Default set of groups. - (list (user-group (name "root") (id 0)) - (user-group (name "wheel")) ; root-like users - (user-group (name "users")) ; normal users - (user-group (name "nogroup")) ; for daemons etc. + (let-syntax ((system-group (syntax-rules () + ((_ args ...) + (user-group (system? #t) args ...))))) + (list (system-group (name "root") (id 0)) + (system-group (name "wheel")) ; root-like users + (system-group (name "users")) ; normal users + (system-group (name "nogroup")) ; for daemons etc. - ;; The following groups are conventionally used by things like udev to - ;; control access to hardware devices. - (user-group (name "tty")) - (user-group (name "dialout")) - (user-group (name "kmem")) - (user-group (name "video")) - (user-group (name "audio")) - (user-group (name "netdev")) ; used in avahi-dbus.conf - (user-group (name "lp")) - (user-group (name "disk")) - (user-group (name "floppy")) - (user-group (name "cdrom")) - (user-group (name "tape")))) + ;; The following groups are conventionally used by things like udev to + ;; control access to hardware devices. + (system-group (name "tty") (id %tty-gid)) + (system-group (name "dialout")) + (system-group (name "kmem")) + (system-group (name "video")) + (system-group (name "audio")) + (system-group (name "netdev")) ; used in avahi-dbus.conf + (system-group (name "lp")) + (system-group (name "disk")) + (system-group (name "floppy")) + (system-group (name "cdrom")) + (system-group (name "tape"))))) (define (default-skeletons) "Return the default skeleton files for /etc/skel. These files are copied by diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index 4fa1d1683d..b2b184db34 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -250,6 +250,9 @@ derivations for SYSTEM. Include propagated inputs in the result." inputs)))) (define standard-inputs + ;; FIXME: Memoization should be associated with the open store (as for + ;; 'add-text-to-store'), otherwise we get .drv that may not be valid when + ;; switching to another store. (memoize (lambda (system) "Return the list of implicit standard inputs used with the GNU Build diff --git a/guix/build/activation.scm b/guix/build/activation.scm index 9464d2157d..b04b017881 100644 --- a/guix/build/activation.scm +++ b/guix/build/activation.scm @@ -36,13 +36,14 @@ ;;; ;;; Code: -(define* (add-group name #:key gid password +(define* (add-group name #:key gid password system? (log-port (current-error-port))) "Add NAME as a user group, with the given numeric GID if specified." ;; Use 'groupadd' from the Shadow package. (format log-port "adding group '~a'...~%" name) (let ((args `(,@(if gid `("-g" ,(number->string gid)) '()) ,@(if password `("-p" ,password) '()) + ,@(if system? `("--system") '()) ,name))) (zero? (apply system* "groupadd" args)))) @@ -128,9 +129,11 @@ numeric gid or #f." ;; Then create the groups. (for-each (match-lambda - ((name password gid) + ((name password gid system?) (unless (false-if-exception (getgrnam name)) - (add-group name #:gid gid #:password password)))) + (add-group name + #:gid gid #:password password + #:system? system?)))) groups) ;; Finally create the other user accounts. diff --git a/guix/build/linux-initrd.scm b/guix/build/linux-initrd.scm index abf86f6a77..662f7967e3 100644 --- a/guix/build/linux-initrd.scm +++ b/guix/build/linux-initrd.scm @@ -40,6 +40,7 @@ find-partition-by-label canonicalize-device-spec + mount-flags->bit-mask check-file-system mount-file-system bind-mount @@ -393,6 +394,9 @@ networking values.) Return #t if INTERFACE is up, #f otherwise." ;; Linux mount flags, from libc's . (define MS_RDONLY 1) +(define MS_NOSUID 2) +(define MS_NODEV 4) +(define MS_NOEXEC 8) (define MS_BIND 4096) (define MS_MOVE 8192) @@ -494,6 +498,24 @@ UNIONFS." fsck code device) (start-repl))))) +(define (mount-flags->bit-mask flags) + "Return the number suitable for the 'flags' argument of 'mount' that +corresponds to the symbols listed in FLAGS." + (let loop ((flags flags)) + (match flags + (('read-only rest ...) + (logior MS_RDONLY (loop rest))) + (('bind-mount rest ...) + (logior MS_BIND (loop rest))) + (('no-suid rest ...) + (logior MS_NOSUID (loop rest))) + (('no-dev rest ...) + (logior MS_NODEV (loop rest))) + (('no-exec rest ...) + (logior MS_NOEXEC (loop rest))) + (() + 0)))) + (define* (mount-file-system spec #:key (root "/root")) "Mount the file system described by SPEC under ROOT. SPEC must have the form: @@ -503,15 +525,6 @@ form: DEVICE, MOUNT-POINT, and TYPE must be strings; OPTIONS can be a string or #f; FLAGS must be a list of symbols. CHECK? is a Boolean indicating whether to run a file system check." - (define flags->bit-mask - (match-lambda - (('read-only rest ...) - (or MS_RDONLY (flags->bit-mask rest))) - (('bind-mount rest ...) - (or MS_BIND (flags->bit-mask rest))) - (() - 0))) - (match spec ((source title mount-point type (flags ...) options check?) (let ((source (canonicalize-device-spec source title)) @@ -519,7 +532,7 @@ run a file system check." (when check? (check-file-system source type)) (mkdir-p mount-point) - (mount source mount-point type (flags->bit-mask flags) + (mount source mount-point type (mount-flags->bit-mask flags) (if options (string->pointer options) %null-pointer)) @@ -528,7 +541,7 @@ run a file system check." (mkdir-p (string-append root "/etc")) (let ((port (open-file (string-append root "/etc/mtab") "a"))) (format port "~a ~a ~a ~a 0 0~%" - source mount-point type options) + source mount-point type (or options "")) (close-port port)))))) (define (switch-root root) @@ -670,11 +683,6 @@ to it are lost." (switch-root "/root") (format #t "loading '~a'...\n" to-load) - ;; Obviously this has to be done each time we boot. Do it from here - ;; so that statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) - ;; expects (and thus openpty(3) and its users, such as xterm.) - (mount "none" "/dev/pts" "devpts") - ;; TODO: Remove /lib, /share, and /loader.go. (primitive-load to-load) diff --git a/guix/monads.scm b/guix/monads.scm index c2c6f1a03d..4af2b704ab 100644 --- a/guix/monads.scm +++ b/guix/monads.scm @@ -55,6 +55,7 @@ run-with-store text-file text-file* + interned-file package-file origin->derivation package->derivation @@ -362,6 +363,18 @@ and store file names; the resulting store file holds references to all these." (derivation-expression name (builder inputs) #:inputs inputs))) +(define* (interned-file file #:optional name + #:key (recursive? #t)) + "Return the name of FILE once interned in the store. Use NAME as its store +name, or the basename of FILE if NAME is omitted. + +When RECURSIVE? is true, the contents of FILE are added recursively; if FILE +designates a flat file and RECURSIVE? is true, its contents are added, and its +permission bits are kept." + (lambda (store) + (add-to-store store (or name (basename file)) + recursive? "sha256" file))) + (define* (package-file package #:optional file #:key (system (%current-system)) (output "out")) diff --git a/guix/packages.scm b/guix/packages.scm index 985a573fd3..1939373f35 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -75,6 +75,7 @@ package-location package-field-location + package-direct-inputs package-transitive-inputs package-transitive-target-inputs package-transitive-native-inputs @@ -484,12 +485,17 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET." ((input rest ...) (loop rest (cons input result)))))) +(define (package-direct-inputs package) + "Return all the direct inputs of PACKAGE---i.e, its direct inputs along +with their propagated inputs." + (append (package-native-inputs package) + (package-inputs package) + (package-propagated-inputs package))) + (define (package-transitive-inputs package) "Return the transitive inputs of PACKAGE---i.e., its direct inputs along with their propagated inputs, recursively." - (transitive-inputs (append (package-native-inputs package) - (package-inputs package) - (package-propagated-inputs package)))) + (transitive-inputs (package-direct-inputs package))) (define (package-transitive-target-inputs package) "Return the transitive target inputs of PACKAGE---i.e., its direct inputs @@ -521,6 +527,8 @@ recursively." (define (cache package system thunk) "Memoize the return values of THUNK as the derivation of PACKAGE on SYSTEM." + ;; FIXME: This memoization should be associated with the open store, because + ;; otherwise it breaks when switching to a different store. (let ((vals (call-with-values thunk list))) ;; Use `hashq-set!' instead of `hash-set!' because `hash' returns the ;; same value for all structs (as of Guile 2.0.6), and because pointer diff --git a/guix/profiles.scm b/guix/profiles.scm index c1fa8272ba..5e69e012f9 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -22,6 +22,7 @@ #:use-module (guix records) #:use-module (guix derivations) #:use-module (guix packages) + #:use-module (guix gexp) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (ice-9 ftw) @@ -39,21 +40,18 @@ manifest-entry-name manifest-entry-version manifest-entry-output - manifest-entry-path + manifest-entry-item manifest-entry-dependencies manifest-pattern manifest-pattern? - read-manifest - write-manifest - manifest-remove manifest-installed? manifest-matching-entries - manifest=? profile-manifest + package->manifest-entry profile-derivation generation-number generation-numbers @@ -88,11 +86,9 @@ (version manifest-entry-version) ; string (output manifest-entry-output ; string (default "out")) - (path manifest-entry-path) ; store path - (dependencies manifest-entry-dependencies ; list of store paths - (default '())) - (inputs manifest-entry-inputs ; list of inputs to build - (default '()))) ; this entry + (item manifest-entry-item) ; package | store path + (dependencies manifest-entry-dependencies ; (store path | package)* + (default '()))) (define-record-type* manifest-pattern make-manifest-pattern @@ -110,17 +106,36 @@ (call-with-input-file file read-manifest) (manifest '())))) -(define (manifest->sexp manifest) - "Return a representation of MANIFEST as an sexp." - (define (entry->sexp entry) +(define* (package->manifest-entry package #:optional output) + "Return a manifest entry for the OUTPUT of package PACKAGE. When OUTPUT is +omitted or #f, use the first output of PACKAGE." + (let ((deps (map (match-lambda + ((label package) + `(,package "out")) + ((label package output) + `(,package ,output))) + (package-transitive-propagated-inputs package)))) + (manifest-entry + (name (package-name package)) + (version (package-version package)) + (output (or output (car (package-outputs package)))) + (item package) + (dependencies (delete-duplicates deps))))) + +(define (manifest->gexp manifest) + "Return a representation of MANIFEST as a gexp." + (define (entry->gexp entry) (match entry - (($ name version path output (deps ...)) - (list name version path output deps)))) + (($ name version output (? string? path) (deps ...)) + #~(#$name #$version #$output #$path #$deps)) + (($ name version output (? package? package) (deps ...)) + #~(#$name #$version #$output + (ungexp package (or output "out")) #$deps)))) (match manifest (($ (entries ...)) - `(manifest (version 1) - (packages ,(map entry->sexp entries)))))) + #~(manifest (version 1) + (packages #$(map entry->gexp entries)))))) (define (sexp->manifest sexp) "Parse SEXP as a manifest." @@ -133,7 +148,7 @@ (name name) (version version) (output output) - (path path))) + (item path))) name version output path))) ;; Version 1 adds a list of propagated inputs to the @@ -146,7 +161,7 @@ (name name) (version version) (output output) - (path path) + (item path) (dependencies deps))) name version output path deps))) @@ -157,10 +172,6 @@ "Return the packages listed in MANIFEST." (sexp->manifest (read port))) -(define (write-manifest manifest port) - "Write MANIFEST to PORT." - (write (manifest->sexp manifest) port)) - (define (entry-predicate pattern) "Return a procedure that returns #t when passed a manifest entry that matches NAME/OUTPUT/VERSION. OUTPUT and VERSION may be #f, in which case they @@ -203,62 +214,41 @@ must be a manifest-pattern." (filter matches? (manifest-entries manifest))) -(define (manifest=? m1 m2) - "Return #t if manifests M1 and M2 are equal. This differs from 'equal?' in -that the 'inputs' field is ignored for the comparison, since it is know to -have no effect on the manifest contents." - (equal? (manifest->sexp m1) - (manifest->sexp m2))) - ;;; ;;; Profiles. ;;; -(define* (lower-input store input #:optional (system (%current-system))) - "Lower INPUT so that it contains derivations instead of packages." - (match input - ((name (? package? package)) - `(,name ,(package-derivation store package system))) - ((name (? package? package) output) - `(,name ,(package-derivation store package system) - ,output)) - (_ input))) - -(define (profile-derivation store manifest) +(define (profile-derivation manifest) "Return a derivation that builds a profile (aka. 'user environment') with the given MANIFEST." + (define inputs + (append-map (match-lambda + (($ name version + output (? package? package) deps) + `((,package ,output) ,@deps)) + (($ name version output path deps) + ;; Assume PATH and DEPS are already valid. + `(,path ,@deps))) + (manifest-entries manifest))) + (define builder - `(begin - (use-modules (ice-9 pretty-print) - (guix build union)) + #~(begin + (use-modules (ice-9 pretty-print) + (guix build union)) - (setvbuf (current-output-port) _IOLBF) - (setvbuf (current-error-port) _IOLBF) + (setvbuf (current-output-port) _IOLBF) + (setvbuf (current-error-port) _IOLBF) - (let ((output (assoc-ref %outputs "out")) - (inputs (map cdr %build-inputs))) - (union-build output inputs - #:log-port (%make-void-port "w")) - (call-with-output-file (string-append output "/manifest") - (lambda (p) - (pretty-print ',(manifest->sexp manifest) p)))))) + (union-build #$output '#$inputs + #:log-port (%make-void-port "w")) + (call-with-output-file (string-append #$output "/manifest") + (lambda (p) + (pretty-print '#$(manifest->gexp manifest) p))))) - (build-expression->derivation store "profile" builder - #:inputs - (append-map (match-lambda - (($ name version - output path deps (inputs ..1)) - (map (cute lower-input store <>) - inputs)) - (($ name version - output path deps) - ;; Assume PATH and DEPS are - ;; already valid. - `((,name ,path) ,@deps))) - (manifest-entries manifest)) - #:modules '((guix build union)) - #:local-build? #t)) + (gexp->derivation "profile" builder + #:modules '((guix build union)) + #:local-build? #t)) (define (profile-regexp profile) "Return a regular expression that matches PROFILE's name and number." diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 1c3209f905..31da773a53 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -24,6 +24,7 @@ #:use-module (guix derivations) #:use-module (guix packages) #:use-module (guix profiles) + #:use-module (guix monads) #:use-module (guix utils) #:use-module (guix config) #:use-module (guix scripts build) @@ -82,7 +83,8 @@ return PROFILE unchanged. The goal is to treat '-p ~/.guix-profile' as if (define (link-to-empty-profile generation) "Link GENERATION, a string, to the empty profile." - (let* ((drv (profile-derivation (%store) (manifest '()))) + (let* ((drv (run-with-store (%store) + (profile-derivation (manifest '())))) (prof (derivation->output-path drv "out"))) (when (not (build-derivations (%store) (list drv))) (leave (_ "failed to build the empty profile~%"))) @@ -205,10 +207,14 @@ packages that will/would be installed and removed." remove)))) (_ #f)) (match install - ((($ name version output path _) ..1) + ((($ name version output item _) ..1) (let ((len (length name)) - (install (map (cut format #f " ~a-~a\t~a\t~a" <> <> <> <>) - name version output path))) + (install (map (lambda (name version output item) + (format #f " ~a-~a\t~a\t~a" name version output + (if (package? item) + (package-output (%store) item output) + item))) + name version output item))) (if dry-run? (format (current-error-port) (N_ "The following package would be installed:~%~{~a~%~}~%" @@ -253,17 +259,6 @@ RX." (package-name p2)))) same-location?)) -(define (input->name+path input) - "Convert the name/package/sub-drv tuple INPUT to a name/store-path tuple." - (let loop ((input input)) - (match input - ((name (? package? package)) - (loop `(,name ,package "out"))) - ((name (? package? package) sub-drv) - `(,name ,(package-output (%store) package sub-drv))) - (_ - input)))) - (define %sigint-prompt ;; The prompt to jump to upon SIGINT. (make-prompt-tag "interruptible")) @@ -517,6 +512,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (display (_ " -A, --list-available[=REGEXP] list available packages matching REGEXP")) + (display (_ " + --show=PACKAGE show details about PACKAGE")) (newline) (show-build-options-help) (newline) @@ -615,6 +612,11 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (values (cons `(query list-available ,(or arg "")) result) #f))) + (option '("show") #t #t + (lambda (opt name arg result arg-handler) + (values (cons `(query show ,arg) + result) + #f))) %standard-build-options)) @@ -639,22 +641,11 @@ return the new list of manifest entries." (delete-duplicates deps same?)) - (define (package->manifest-entry p output) - ;; Return a manifest entry for the OUTPUT of package P. - (check-package-freshness p) + (define (package->manifest-entry* package output) + (check-package-freshness package) ;; When given a package via `-e', install the first of its ;; outputs (XXX). - (let* ((output (or output (car (package-outputs p)))) - (path (package-output (%store) p output)) - (deps (deduplicate (package-transitive-propagated-inputs p)))) - (manifest-entry - (name (package-name p)) - (version (package-version p)) - (output output) - (path path) - (dependencies (map input->name+path deps)) - (inputs (cons (list (package-name p) p output) - deps))))) + (package->manifest-entry package output)) (define upgrade-regexps (filter-map (match-lambda @@ -685,7 +676,7 @@ return the new list of manifest entries." (define to-upgrade (map (match-lambda ((package output) - (package->manifest-entry package output))) + (package->manifest-entry* package output))) packages-to-upgrade)) (define packages-to-install @@ -703,7 +694,7 @@ return the new list of manifest entries." (define to-install (append (map (match-lambda ((package output) - (package->manifest-entry package output))) + (package->manifest-entry* package output))) packages-to-install) (filter-map (match-lambda (('install . (? package?)) @@ -716,7 +707,7 @@ return the new list of manifest entries." (name name) (version version) (output #f) - (path path)))) + (item path)))) (_ #f)) opts))) @@ -743,6 +734,16 @@ removed from MANIFEST." (unless (string=? profile %current-profile) (add-indirect-root store (canonicalize-path profile)))) +(define (readlink* file) + "Call 'readlink' until the result is not a symlink." + (catch 'system-error + (lambda () + (readlink* (readlink file))) + (lambda args + (if (= EINVAL (system-error-errno args)) + file + (apply throw args))))) + ;;; ;;; Entry point. @@ -914,36 +915,41 @@ more information.~%")) (when (equal? profile %current-profile) (ensure-default-profile)) - (if (manifest=? new manifest) - (format (current-error-port) (_ "nothing to be done~%")) - (let ((prof-drv (profile-derivation (%store) new)) - (remove (manifest-matching-entries manifest remove))) - (show-what-to-remove/install remove install dry-run?) - (show-what-to-build (%store) (list prof-drv) - #:use-substitutes? - (assoc-ref opts 'substitutes?) - #:dry-run? dry-run?) + (unless (and (null? install) (null? remove)) + (let* ((prof-drv (run-with-store (%store) + (profile-derivation new))) + (prof (derivation->output-path prof-drv)) + (remove (manifest-matching-entries manifest remove))) + (show-what-to-remove/install remove install dry-run?) + (show-what-to-build (%store) (list prof-drv) + #:use-substitutes? + (assoc-ref opts 'substitutes?) + #:dry-run? dry-run?) - (or dry-run? - (let* ((prof (derivation->output-path prof-drv)) - (number (generation-number profile)) + (cond + (dry-run? #t) + ((and (file-exists? profile) + (and=> (readlink* profile) (cut string=? prof <>))) + (format (current-error-port) (_ "nothing to be done~%"))) + (else + (let* ((number (generation-number profile)) - ;; Always use NUMBER + 1 for the new profile, - ;; possibly overwriting a "previous future - ;; generation". - (name (generation-file-name profile - (+ 1 number)))) - (and (build-derivations (%store) (list prof-drv)) - (let ((count (length entries))) - (switch-symlinks name prof) - (switch-symlinks profile name) - (maybe-register-gc-root (%store) profile) - (format #t (N_ "~a package in profile~%" - "~a packages in profile~%" - count) - count) - (display-search-paths entries - profile))))))))))) + ;; Always use NUMBER + 1 for the new profile, + ;; possibly overwriting a "previous future + ;; generation". + (name (generation-file-name profile + (+ 1 number)))) + (and (build-derivations (%store) (list prof-drv)) + (let ((count (length entries))) + (switch-symlinks name prof) + (switch-symlinks profile name) + (maybe-register-gc-root (%store) profile) + (format #t (N_ "~a package in profile~%" + "~a packages in profile~%" + count) + count) + (display-search-paths entries + profile)))))))))))) (define (process-query opts) ;; Process any query specified by OPTS. Return #t when a query was @@ -1042,6 +1048,14 @@ more information.~%")) (find-packages-by-description regexp))) #t)) + (('show requested-name) + (let-values (((name version) + (package-name->name+version requested-name))) + (leave-on-EPIPE + (for-each (cute package->recutils <> (current-output-port)) + (find-packages-by-name name version))) + #t)) + (('search-paths) (let* ((manifest (profile-manifest profile)) (entries (manifest-entries manifest)) diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index af7beb748b..a91ea69b1f 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Ludovic Courtès +;;; Copyright © 2013, 2014 Ludovic Courtès ;;; Copyright © 2013 Nikita Karetnikov +;;; Copyright © 2014 Eric Bavier ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,6 +30,8 @@ #:use-module ((gnu packages base) #:select (%final-inputs)) #:use-module (ice-9 match) #:use-module (ice-9 regex) + #:use-module (ice-9 vlist) + #:use-module (ice-9 format) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) @@ -59,6 +62,9 @@ (x (leave (_ "~a: invalid selection; expected `core' or `non-core'") arg))))) + (option '(#\l "list-dependent") #f #f + (lambda (opt name arg result) + (alist-cons 'list-dependent? #t result))) (option '("key-server") #t #f (lambda (opt name arg result) @@ -96,6 +102,9 @@ specified with `--select'.\n")) (display (_ " -s, --select=SUBSET select all the packages in SUBSET, one of `core' or `non-core'")) + (display (_ " + -l, --list-dependent list top-level dependent packages that would need to + be rebuilt as a result of upgrading PACKAGE...")) (newline) (display (_ " --key-server=HOST use HOST as the OpenPGP key server")) @@ -193,9 +202,10 @@ update would trigger a complete rebuild." ;; XXX: Fails to catch MPFR/MPC, whose *source* is used as input. (member (package-name package) names)))) - (let* ((opts (parse-options)) - (update? (assoc-ref opts 'update?)) - (key-download (assoc-ref opts 'key-download)) + (let* ((opts (parse-options)) + (update? (assoc-ref opts 'update?)) + (list-dependent? (assoc-ref opts 'list-dependent?)) + (key-download (assoc-ref opts 'key-download)) (packages (match (concatenate (filter-map (match-lambda @@ -220,26 +230,48 @@ update would trigger a complete rebuild." (some ; user-specified packages some)))) (with-error-handling - (if update? - (let ((store (open-connection))) - (parameterize ((%openpgp-key-server - (or (assoc-ref opts 'key-server) - (%openpgp-key-server))) - (%gpg-command - (or (assoc-ref opts 'gpg-command) - (%gpg-command)))) - (for-each - (cut update-package store <> #:key-download key-download) - packages))) - (for-each (lambda (package) - (match (false-if-exception (package-update-path package)) - ((new-version . directory) - (let ((loc (or (package-field-location package 'version) - (package-location package)))) - (format (current-error-port) - (_ "~a: ~a would be upgraded from ~a to ~a~%") - (location->string loc) - (package-name package) (package-version package) - new-version))) - (_ #f))) - packages))))) + (cond + (list-dependent? + (let* ((rebuilds (map package-full-name + (package-covering-dependents packages))) + (total-dependents + (length (package-transitive-dependents packages)))) + (if (= total-dependents 0) + (format (current-output-port) + (N_ "No dependents other than itself: ~{~a~}~%" + "No dependents other than themselves: ~{~a~^ ~}~%" + (length packages)) + (map package-full-name packages)) + (format (current-output-port) + (N_ (N_ "A single dependent package: ~2*~{~a~}~%" + "Building the following package would ensure ~d \ +dependent packages are rebuilt; ~*~{~a~^ ~}~%" + total-dependents) + "Building the following ~d packages would ensure ~d \ +dependent packages are rebuilt: ~{~a~^ ~}~%" + (length rebuilds)) + (length rebuilds) total-dependents rebuilds)))) + (update? + (let ((store (open-connection))) + (parameterize ((%openpgp-key-server + (or (assoc-ref opts 'key-server) + (%openpgp-key-server))) + (%gpg-command + (or (assoc-ref opts 'gpg-command) + (%gpg-command)))) + (for-each + (cut update-package store <> #:key-download key-download) + packages)))) + (else + (for-each (lambda (package) + (match (false-if-exception (package-update-path package)) + ((new-version . directory) + (let ((loc (or (package-field-location package 'version) + (package-location package)))) + (format (current-error-port) + (_ "~a: ~a would be upgraded from ~a to ~a~%") + (location->string loc) + (package-name package) (package-version package) + new-version))) + (_ #f))) + packages)))))) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 66ad9192c1..4f1869af38 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -95,8 +95,8 @@ (store-lift show-what-to-build)) -(define* (copy-closure item target - #:key (log-port (current-error-port))) +(define* (copy-item item target + #:key (log-port (current-error-port))) "Copy ITEM to the store under root directory TARGET and register it." (mlet* %store-monad ((refs (references* item))) (let ((dest (string-append target item)) @@ -118,6 +118,18 @@ (return #t)))) +(define* (copy-closure item target + #:key (log-port (current-error-port))) + "Copy ITEM and all its dependencies to the store under root directory +TARGET, and register them." + (mlet* %store-monad ((refs (references* item)) + (to-copy (topologically-sorted* + (delete-duplicates (cons item refs) + string=?)))) + (sequence %store-monad + (map (cut copy-item <> target #:log-port log-port) + to-copy)))) + (define* (install os-drv target #:key (log-port (current-output-port)) grub? grub.cfg device) @@ -136,16 +148,10 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG." (mkdir-p (string-append target (%store-prefix))) ;; Copy items to the new store. - (sequence %store-monad - (map (cut copy-closure <> target #:log-port log-port) - to-copy)))))) + (copy-closure to-copy target #:log-port log-port))))) (mlet* %store-monad ((os-dir -> (derivation->output-path os-drv)) - (refs (references* os-dir)) - (lst -> (delete-duplicates (cons os-dir refs) - string=?)) - (to-copy (topologically-sorted* lst)) - (% (maybe-copy to-copy))) + (% (maybe-copy os-dir))) ;; Create a bunch of additional files. (format log-port "populating '~a'...~%" target) @@ -166,6 +172,16 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG." ;; The system profile. (string-append %state-directory "/profiles/system")) +(define-syntax-rule (save-environment-excursion body ...) + "Save the current environment variables, run BODY..., and restore them." + (let ((env (environ))) + (dynamic-wind + (const #t) + (lambda () + body ...) + (lambda () + (environ env))))) + (define* (switch-to-system os #:optional (profile %system-profile)) "Make a new generation of PROFILE pointing to the directory of OS, switch to @@ -179,7 +195,11 @@ it atomically, and then run OS's activation script." (switch-symlinks profile generation) (format #t (_ "activating system...~%")) - (return (primitive-load (derivation->output-path script))) + + ;; The activation script may change $PATH, among others, so protect + ;; against that. + (return (save-environment-excursion + (primitive-load (derivation->output-path script)))) ;; TODO: Run 'deco reload ...'. ))) @@ -293,7 +313,8 @@ actions." (mlet %store-monad ((% (switch-to-system os))) (when grub? (unless (false-if-exception - (install-grub grub.cfg device "/")) + (install-grub (derivation->output-path grub.cfg) + device "/")) (leave (_ "failed to install GRUB on device '~a'~%") device))) (return #t))) diff --git a/guix/ui.scm b/guix/ui.scm index 7338b82401..9112d55daf 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -453,9 +453,23 @@ WIDTH columns." (fill-paragraph str width (string-length "description: "))))) + (define (dependencies->recutils packages) + (let ((list (string-join (map package-full-name + (sort packages packagerecutils + (fill-paragraph list width + (string-length "dependencies: "))))) + + (define (packagerecutils (filter package? inputs))))) (format port "location: ~a~%" (or (and=> (package-location p) location->string) (_ "unknown"))) diff --git a/guix/utils.scm b/guix/utils.scm index 700a191d71..b61ff2477d 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès ;;; Copyright © 2013 Mark H Weaver +;;; Copyright © 2014 Eric Bavier ;;; ;;; This file is part of GNU Guix. ;;; @@ -72,6 +73,8 @@ call-with-temporary-output-file with-atomic-file-output fold2 + fold-tree + fold-tree-leaves filtered-port compressed-port @@ -649,6 +652,36 @@ output port, and PROC's result is returned." (lambda (result1 result2) (fold2 proc result1 result2 (cdr lst1) (cdr lst2))))))))) +(define (fold-tree proc init children roots) + "Call (PROC NODE RESULT) for each node in the tree that is reachable from +ROOTS, using INIT as the initial value of RESULT. The order in which nodes +are traversed is not specified, however, each node is visited only once, based +on an eq? check. Children of a node to be visited are generated by +calling (CHILDREN NODE), the result of which should be a list of nodes that +are connected to NODE in the tree, or '() or #f if NODE is a leaf node." + (let loop ((result init) + (seen vlist-null) + (lst roots)) + (match lst + (() result) + ((head . tail) + (if (not (vhash-assq head seen)) + (loop (proc head result) + (vhash-consq head #t seen) + (match (children head) + ((or () #f) tail) + (children (append tail children)))) + (loop result seen tail)))))) + +(define (fold-tree-leaves proc init children roots) + "Like fold-tree, but call (PROC NODE RESULT) only for leaf nodes." + (fold-tree + (lambda (node result) + (match (children node) + ((or () #f) (proc node result)) + (else result))) + init children roots)) + ;;; ;;; Source location. diff --git a/po/guix/LINGUAS b/po/guix/LINGUAS index 74504b6f07..6ba2fe22cc 100644 --- a/po/guix/LINGUAS +++ b/po/guix/LINGUAS @@ -4,6 +4,7 @@ de en@boldquot en@quot eo +hu pt_BR sr vi diff --git a/po/guix/de.po b/po/guix/de.po index 4b24391c5b..185cb0d9e7 100644 --- a/po/guix/de.po +++ b/po/guix/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-07-13 17:06+0200\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" "PO-Revision-Date: 2014-07-13 20:38+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" -#: gnu/packages.scm:95 +#: gnu/packages.scm:102 #, scheme-format msgid "cannot access `~a': ~a~%" msgstr "Zugriff auf »~a« nicht möglich: ~a~%" @@ -165,9 +165,9 @@ msgid "" msgstr "" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 msgid "" "\n" " -h, --help display this help and exit" @@ -176,9 +176,9 @@ msgstr "" " -h, --help diese Hilfe anzeigen und beenden" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 msgid "" "\n" " -V, --version display version information and exit" @@ -192,8 +192,8 @@ msgid "sources do not match any package:~{ ~a~}~%" msgstr "" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: nicht erkannte Option~%" @@ -244,8 +244,8 @@ msgstr "Leeres Profil konnte nicht erstellt werden~%" msgid "switching from generation ~a to ~a~%" msgstr "" -#: guix/scripts/package.scm:108 guix/scripts/package.scm:866 -#: guix/scripts/package.scm:978 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "Profil »~a« existiert nicht~%" @@ -399,62 +399,71 @@ msgid "" " list available packages matching REGEXP" msgstr "" -#: guix/scripts/package.scm:760 +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=PAKET PAKET installieren" + +#: guix/scripts/package.scm:767 #, scheme-format msgid "~A: extraneous argument~%" msgstr "" -#: guix/scripts/package.scm:775 +#: guix/scripts/package.scm:782 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "" -#: guix/scripts/package.scm:797 +#: guix/scripts/package.scm:804 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "" -#: guix/scripts/package.scm:801 +#: guix/scripts/package.scm:808 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "" -#: guix/scripts/package.scm:808 +#: guix/scripts/package.scm:815 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "" -#: guix/scripts/package.scm:811 +#: guix/scripts/package.scm:818 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "" -#: guix/scripts/package.scm:836 +#: guix/scripts/package.scm:843 #, scheme-format msgid "deleting ~a~%" msgstr "" -#: guix/scripts/package.scm:889 guix/scripts/package.scm:994 +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "Unzulässige Syntax: ~a~%" -#: guix/scripts/package.scm:918 +#: guix/scripts/package.scm:925 #, scheme-format msgid "nothing to be done~%" msgstr "Nichts zu tun~%" -#: guix/scripts/package.scm:941 +#: guix/scripts/package.scm:948 #, scheme-format msgid "~a package in profile~%" msgstr "~a-Paket im Profil~%" -#: guix/scripts/package.scm:956 +#: guix/scripts/package.scm:963 #, scheme-format msgid "Generation ~a\t~a" msgstr "" -#: guix/scripts/package.scm:963 +#: guix/scripts/package.scm:970 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(aktuell)~%" @@ -747,93 +756,93 @@ msgstr "~a: ~a~%" msgid "failed to load operating system file '~a': ~s~%" msgstr "" -#: guix/scripts/system.scm:111 +#: guix/scripts/system.scm:116 #, scheme-format msgid "failed to register '~a' under '~a'~%" msgstr "" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:144 #, scheme-format msgid "initializing the current root file system~%" msgstr "" -#: guix/scripts/system.scm:151 guix/scripts/system.scm:291 +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 #, scheme-format msgid "failed to install GRUB on device '~a'~%" msgstr "" -#: guix/scripts/system.scm:176 +#: guix/scripts/system.scm:197 #, scheme-format msgid "activating system...~%" msgstr "System wird aktiviert …~%" -#: guix/scripts/system.scm:211 +#: guix/scripts/system.scm:236 #, scheme-format msgid "unrecognized boot parameters for '~a'~%" msgstr "Nicht erkannte Startparameter für »~a«~%" -#: guix/scripts/system.scm:295 +#: guix/scripts/system.scm:323 #, scheme-format msgid "initializing operating system under '~a'...~%" msgstr "" -#: guix/scripts/system.scm:311 +#: guix/scripts/system.scm:339 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" msgstr "" -#: guix/scripts/system.scm:314 +#: guix/scripts/system.scm:342 msgid "The valid values for ACTION are:\n" msgstr "Die gültigen Werte für AKTION sind:\n" -#: guix/scripts/system.scm:315 +#: guix/scripts/system.scm:343 msgid " - 'reconfigure', switch to a new operating system configuration\n" msgstr "" -#: guix/scripts/system.scm:317 +#: guix/scripts/system.scm:345 msgid " - 'build', build the operating system without installing anything\n" msgstr "" -#: guix/scripts/system.scm:319 +#: guix/scripts/system.scm:347 msgid " - 'vm', build a virtual machine image that shares the host's store\n" msgstr "" -#: guix/scripts/system.scm:321 +#: guix/scripts/system.scm:349 msgid " - 'vm-image', build a freestanding virtual machine image\n" msgstr "" -#: guix/scripts/system.scm:323 +#: guix/scripts/system.scm:351 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" msgstr "" -#: guix/scripts/system.scm:325 +#: guix/scripts/system.scm:353 msgid " - 'init', initialize a root file system to run GNU.\n" msgstr "" -#: guix/scripts/system.scm:329 +#: guix/scripts/system.scm:357 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" msgstr "" -#: guix/scripts/system.scm:331 +#: guix/scripts/system.scm:359 msgid "" "\n" " --no-grub for 'init', do not install GRUB" msgstr "" -#: guix/scripts/system.scm:394 +#: guix/scripts/system.scm:422 #, scheme-format msgid "~a: unknown action~%" msgstr "~a: unbekannte Aktion~%" -#: guix/scripts/system.scm:411 +#: guix/scripts/system.scm:439 #, scheme-format msgid "wrong number of arguments for action '~a'~%" msgstr "Falsche Anzahl an Argumenten für Aktion »~a«~%" -#: guix/scripts/system.scm:431 +#: guix/scripts/system.scm:459 #, scheme-format msgid "no configuration file specified~%" msgstr "Keine Konfigurationsdatei angegeben~%" @@ -976,21 +985,21 @@ msgstr "" msgid "failed to create configuration directory `~a': ~a~%" msgstr "Konfigurationsverzeichnis »~a« konnte nicht angelegt werden: ~a~%" -#: guix/ui.scm:461 guix/ui.scm:475 +#: guix/ui.scm:475 guix/ui.scm:489 msgid "unknown" msgstr "unbekannt" -#: guix/ui.scm:584 +#: guix/ui.scm:598 #, scheme-format msgid "invalid argument: ~a~%" msgstr "Ungültiges Argument: ~a~%" -#: guix/ui.scm:589 +#: guix/ui.scm:603 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Rufen Sie »guix --help« auf, um weitere Informationen zu erhalten.~%" -#: guix/ui.scm:619 +#: guix/ui.scm:633 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -998,21 +1007,21 @@ msgstr "" "Aufruf: guix BEFEHL ARGUMENTE …\n" "BEFEHL mit ARGUMENTEN ausführen.\n" -#: guix/ui.scm:622 +#: guix/ui.scm:636 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "BEFEHL muss einer der unten aufgelisteten Unterbefehle sein:\n" -#: guix/ui.scm:642 +#: guix/ui.scm:656 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: Befehl nicht gefunden~%" -#: guix/ui.scm:660 +#: guix/ui.scm:674 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: Befehlsname fehlt~%" -#: guix/ui.scm:668 +#: guix/ui.scm:682 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: nicht erkannte Option »~a«~%" diff --git a/po/guix/eo.po b/po/guix/eo.po index ec64cc8ef1..cffc546dc1 100644 --- a/po/guix/eo.po +++ b/po/guix/eo.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-07-13 17:06+0200\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" "PO-Revision-Date: 2014-07-14 11:29-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" -"Language: Esperanto\n" +"Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: gnu/packages.scm:95 +#: gnu/packages.scm:102 #, scheme-format msgid "cannot access `~a': ~a~%" msgstr "ne eblas atingi '~a': ~a~%" @@ -203,9 +203,9 @@ msgstr "" " --log-file liveri la protokol-dosierajn nomojn por la indikitaj derivaĵoj" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 msgid "" "\n" " -h, --help display this help and exit" @@ -214,9 +214,9 @@ msgstr "" " -h, --help montri ĉi tiun helpon kaj eliri" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 msgid "" "\n" " -V, --version display version information and exit" @@ -230,8 +230,8 @@ msgid "sources do not match any package:~{ ~a~}~%" msgstr "fontoj ne kongruas al iu ajn pako:~{ ~a~}~%" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: nerekonata modifilo~%" @@ -290,8 +290,8 @@ msgstr "fiasko dum konstruo de malplena profilo~%" msgid "switching from generation ~a to ~a~%" msgstr "alterno el generacio ~a al ~a~%" -#: guix/scripts/package.scm:108 guix/scripts/package.scm:866 -#: guix/scripts/package.scm:978 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "profilo '~a' ne ekzistas~%" @@ -476,62 +476,71 @@ msgstr "" " -A, --list-available[=REGESP]\n" " listigi disponeblajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:760 +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=PAKO instali PAKOn" + +#: guix/scripts/package.scm:767 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: fremda argumento~%" -#: guix/scripts/package.scm:775 +#: guix/scripts/package.scm:782 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%" -#: guix/scripts/package.scm:797 +#: guix/scripts/package.scm:804 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "eraro: dum kreo de dosierujo '~a': ~a~%" -#: guix/scripts/package.scm:801 +#: guix/scripts/package.scm:808 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%" -#: guix/scripts/package.scm:808 +#: guix/scripts/package.scm:815 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%" -#: guix/scripts/package.scm:811 +#: guix/scripts/package.scm:818 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%" -#: guix/scripts/package.scm:836 +#: guix/scripts/package.scm:843 #, scheme-format msgid "deleting ~a~%" msgstr "ni forigas ~a~%" -#: guix/scripts/package.scm:889 guix/scripts/package.scm:994 +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "malvalida sintakso: ~a~%" -#: guix/scripts/package.scm:918 +#: guix/scripts/package.scm:925 #, scheme-format msgid "nothing to be done~%" msgstr "nenio por fari~%" -#: guix/scripts/package.scm:941 +#: guix/scripts/package.scm:948 #, scheme-format msgid "~a package in profile~%" msgstr "pako ~a en profilo~%" -#: guix/scripts/package.scm:956 +#: guix/scripts/package.scm:963 #, scheme-format msgid "Generation ~a\t~a" msgstr "Generacio ~a\t~a" -#: guix/scripts/package.scm:963 +#: guix/scripts/package.scm:970 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(nuna)~%" @@ -864,37 +873,37 @@ msgstr "~a: ~a~%" msgid "failed to load operating system file '~a': ~s~%" msgstr "fiasko dum ŝargo je operaci-sistema dosiero '~a': ~s~%" -#: guix/scripts/system.scm:111 +#: guix/scripts/system.scm:116 #, scheme-format msgid "failed to register '~a' under '~a'~%" msgstr "fiasko dum registro de '~a' sub '~a'~%" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:144 #, scheme-format msgid "initializing the current root file system~%" msgstr "ekigado de la nuna radika dosiersistemo~%" -#: guix/scripts/system.scm:151 guix/scripts/system.scm:291 +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 #, scheme-format msgid "failed to install GRUB on device '~a'~%" msgstr "fiasko dum instalo de GRUB en la aparato '~a'~%" -#: guix/scripts/system.scm:176 +#: guix/scripts/system.scm:197 #, scheme-format msgid "activating system...~%" msgstr "ni aktivas la sistemon...~%" -#: guix/scripts/system.scm:211 +#: guix/scripts/system.scm:236 #, scheme-format msgid "unrecognized boot parameters for '~a'~%" msgstr "nerekonataj ekŝargaj parametroj por '~a'~%" -#: guix/scripts/system.scm:295 +#: guix/scripts/system.scm:323 #, scheme-format msgid "initializing operating system under '~a'...~%" msgstr "ni ekigas la operaci-sistemon sub '~a'...~%" -#: guix/scripts/system.scm:311 +#: guix/scripts/system.scm:339 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" @@ -902,35 +911,35 @@ msgstr "" "Uzmaniero: guix system [MODIFILO] AGO DOSIERO\n" "Konstrui la operaci-sistemon deklarita en DOSIERO akorde al AGO.\n" -#: guix/scripts/system.scm:314 +#: guix/scripts/system.scm:342 msgid "The valid values for ACTION are:\n" msgstr "La validaj valoroj por AGO estas:\n" -#: guix/scripts/system.scm:315 +#: guix/scripts/system.scm:343 msgid " - 'reconfigure', switch to a new operating system configuration\n" msgstr " - 'reconfigure', alterni al nova operaci-sistema agordaro\n" -#: guix/scripts/system.scm:317 +#: guix/scripts/system.scm:345 msgid " - 'build', build the operating system without installing anything\n" msgstr " - 'build', konstrui la operaci-sistemon sen instali ion ajn\n" -#: guix/scripts/system.scm:319 +#: guix/scripts/system.scm:347 msgid " - 'vm', build a virtual machine image that shares the host's store\n" msgstr " - 'vm', konstrui virtual-maŝinan bildon kiu kundividas la gastigantan memoron\n" -#: guix/scripts/system.scm:321 +#: guix/scripts/system.scm:349 msgid " - 'vm-image', build a freestanding virtual machine image\n" msgstr " - 'vm-image', konstrui memstaran virtual-maŝinan bildon\n" -#: guix/scripts/system.scm:323 +#: guix/scripts/system.scm:351 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" msgstr " - 'disk-image', konstrui disk-bildon, taŭga por USB-memoro\n" -#: guix/scripts/system.scm:325 +#: guix/scripts/system.scm:353 msgid " - 'init', initialize a root file system to run GNU.\n" msgstr " - 'init', ekigi radikan dosiersistemon por lanĉi GNU-on.\n" -#: guix/scripts/system.scm:329 +#: guix/scripts/system.scm:357 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" @@ -938,7 +947,7 @@ msgstr "" "\n" " --image-size=GRANDO por 'vm-image', produkti bildon je GRANDO" -#: guix/scripts/system.scm:331 +#: guix/scripts/system.scm:359 msgid "" "\n" " --no-grub for 'init', do not install GRUB" @@ -946,17 +955,17 @@ msgstr "" "\n" " --no-grub por 'init', ne instali GRUB" -#: guix/scripts/system.scm:394 +#: guix/scripts/system.scm:422 #, scheme-format msgid "~a: unknown action~%" msgstr "~a: nekonata pako~%" -#: guix/scripts/system.scm:411 +#: guix/scripts/system.scm:439 #, scheme-format msgid "wrong number of arguments for action '~a'~%" msgstr "malĝusta nombro da argumentoj por la ago '~a'~%" -#: guix/scripts/system.scm:431 +#: guix/scripts/system.scm:459 #, scheme-format msgid "no configuration file specified~%" msgstr "neniu agorda dosiero estis indikata~%" @@ -1103,21 +1112,21 @@ msgstr "" msgid "failed to create configuration directory `~a': ~a~%" msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%" -#: guix/ui.scm:461 guix/ui.scm:475 +#: guix/ui.scm:475 guix/ui.scm:489 msgid "unknown" msgstr "nekonata" -#: guix/ui.scm:584 +#: guix/ui.scm:598 #, scheme-format msgid "invalid argument: ~a~%" msgstr "malvalida argumento: ~a~%" -#: guix/ui.scm:589 +#: guix/ui.scm:603 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Provu 'guix --help' por pli da informo.~%" -#: guix/ui.scm:619 +#: guix/ui.scm:633 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1125,21 +1134,21 @@ msgstr "" "Uzmaniero: guix KOMANDO ARGj...\n" "Lanĉas KOMANDOn kun ARGj.\n" -#: guix/ui.scm:622 +#: guix/ui.scm:636 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n" -#: guix/ui.scm:642 +#: guix/ui.scm:656 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: komando ne trovita~%" -#: guix/ui.scm:660 +#: guix/ui.scm:674 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: mankas komanda nomo~%" -#: guix/ui.scm:668 +#: guix/ui.scm:682 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: nerekonata modifilo: '~a'~%" diff --git a/po/guix/hu.po b/po/guix/hu.po new file mode 100644 index 0000000000..33b42f71dc --- /dev/null +++ b/po/guix/hu.po @@ -0,0 +1,1277 @@ +# Hungarian translation for guix. +# Copyright (C) 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the guix package. +# +# Balázs Úr , 2014. +msgid "" +msgstr "" +"Project-Id-Version: guix 0.7-pre1\n" +"Report-Msgid-Bugs-To: ludo@gnu.org\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" +"PO-Revision-Date: 2014-07-18 17:37+0200\n" +"Last-Translator: Balázs Úr \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#: gnu/packages.scm:102 +#, scheme-format +msgid "cannot access `~a': ~a~%" +msgstr "nem sikerült elérni: „~a”: ~a~%" + +#: guix/scripts/build.scm:54 guix/scripts/package.scm:349 +#, scheme-format +msgid "ambiguous package specification `~a'~%" +msgstr "nem egyértelmű csomag specifikáció: „~a”~%" + +#: guix/scripts/build.scm:55 guix/scripts/package.scm:351 +#, scheme-format +msgid "choosing ~a from ~a~%" +msgstr "~a választása innen: ~a~%" + +#: guix/scripts/build.scm:61 +#, scheme-format +msgid "~A: package not found for version ~a~%" +msgstr "~A: nem található csomag ehhez a verzióhoz: ~a~%" + +#: guix/scripts/build.scm:63 +#, scheme-format +msgid "~A: unknown package~%" +msgstr "~A: ismeretlen csomag~%" + +#: guix/scripts/build.scm:86 +#, scheme-format +msgid "failed to create GC root `~a': ~a~%" +msgstr "nem sikerült a GC gyökér létrehozása: „~a”: ~a~%" + +#: guix/scripts/build.scm:123 +msgid "" +"\n" +" -K, --keep-failed keep build tree of failed builds" +msgstr "" +"\n" +" -K, --keep-failed sikertelen összeállítások összeállítási fájának\n" +" megtartása" + +#: guix/scripts/build.scm:125 +msgid "" +"\n" +" -n, --dry-run do not build the derivations" +msgstr "" +"\n" +" -n, --dry-run ne állítsa össze a származékokat" + +#: guix/scripts/build.scm:127 +msgid "" +"\n" +" --fallback fall back to building when the substituter fails" +msgstr "" +"\n" +" --fallback térjen vissza az összeállításra, ha a helyettesítő\n" +" sikertelen" + +#: guix/scripts/build.scm:129 +msgid "" +"\n" +" --no-substitutes build instead of resorting to pre-built substitutes" +msgstr "" +"\n" +" --no-substitutes összeállítás az előre összeállított helyettesítők\n" +" felhasználása helyett" + +#: guix/scripts/build.scm:131 +msgid "" +"\n" +" --no-build-hook do not attempt to offload builds via the build hook" +msgstr "" +"\n" +" --no-build-hook ne próbáljon meg összeállításokat tehermentesíteni\n" +" az összeállítási hurkon keresztül" + +#: guix/scripts/build.scm:133 +msgid "" +"\n" +" --max-silent-time=SECONDS\n" +" mark the build as failed after SECONDS of silence" +msgstr "" +"\n" +" --max-silent-time=MÁSODPERC\n" +" az összeállítás sikertelennek jelölése MÁSODPERC\n" +" hallgatás után" + +#: guix/scripts/build.scm:136 +msgid "" +"\n" +" --timeout=SECONDS mark the build as failed after SECONDS of activity" +msgstr "" +"\n" +" --timeout=MÁSODPERC az összeállítás sikertelennek jelölése MÁSODPERC\n" +" aktivitás után" + +#: guix/scripts/build.scm:138 +msgid "" +"\n" +" --verbosity=LEVEL use the given verbosity LEVEL" +msgstr "" +"\n" +" --verbosity=SZINT a megadott bőbeszédűségi SZINT használata" + +#: guix/scripts/build.scm:140 +msgid "" +"\n" +" -c, --cores=N allow the use of up to N CPU cores for the build" +msgstr "" +"\n" +" -c, --cores=N legfeljebb N CPU-mag használatának engedélyezése\n" +" az összeállításhoz" + +#: guix/scripts/build.scm:206 +#, scheme-format +msgid "~a: not a number~%" +msgstr "~a: nem szám~%" + +#: guix/scripts/build.scm:223 +msgid "" +"Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n" +"Build the given PACKAGE-OR-DERIVATION and return their output paths.\n" +msgstr "" +"Használat: guix build [KAPCSOLÓ]… CSOMAG-VAGY-SZÁRMAZTATOTT…\n" +"A megadott CSOMAG-VAGY-SZÁRMAZTATOTT összeállítása, és a kimeneti elérési\n" +"útjaik visszaadása.\n" + +#: guix/scripts/build.scm:225 +msgid "" +"\n" +" -e, --expression=EXPR build the package or derivation EXPR evaluates to" +msgstr "" +"\n" +" -e, --expression=KIF a csomag vagy a kiértékelt származtatott KIF\n" +" összeállítása" + +#: guix/scripts/build.scm:227 +msgid "" +"\n" +" -S, --source build the packages' source derivations" +msgstr "" +"\n" +" -S, --source a csomagok forrásszármazékainak összeállítása" + +#: guix/scripts/build.scm:229 +msgid "" +"\n" +" -s, --system=SYSTEM attempt to build for SYSTEM--e.g., \"i686-linux\"" +msgstr "" +"\n" +" -s, --system=RENDSZER kísérlet a RENDSZERRE történő összeállításra,\n" +" például „i686-linux”" + +#: guix/scripts/build.scm:231 +msgid "" +"\n" +" --target=TRIPLET cross-build for TRIPLET--e.g., \"armel-linux-gnu\"" +msgstr "" +"\n" +" --target=HÁRMAS kereszt összeállítás a HÁRMASRA, például\n" +" „armel-linux-gnu”" + +#: guix/scripts/build.scm:233 +msgid "" +"\n" +" --with-source=SOURCE\n" +" use SOURCE when building the corresponding package" +msgstr "" +"\n" +" --with-source=FORRÁS\n" +" FORRÁS használata a megfelelő csomag összeállításakor" + +#: guix/scripts/build.scm:236 +msgid "" +"\n" +" -d, --derivations return the derivation paths of the given packages" +msgstr "" +"\n" +" -d, --derivations a megadott csomagok származék-útvonalának visszaadása" + +#: guix/scripts/build.scm:238 +msgid "" +"\n" +" -r, --root=FILE make FILE a symlink to the result, and register it\n" +" as a garbage collector root" +msgstr "" +"\n" +" -r, --root=FÁJL a FÁJL az eredmény egy szimbolikus linkje legyen,\n" +" és regisztrálja gyökér szemétgyűjtőként" + +#: guix/scripts/build.scm:241 +msgid "" +"\n" +" --log-file return the log file names for the given derivations" +msgstr "" +"\n" +" --log-file a megadott származékok naplófájl-neveinek visszaadása" + +#: guix/scripts/build.scm:246 guix/scripts/download.scm:53 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 +#: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 +msgid "" +"\n" +" -h, --help display this help and exit" +msgstr "" +"\n" +" -h, --help ezen súgó megjelenítése és kilépés" + +#: guix/scripts/build.scm:248 guix/scripts/download.scm:55 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 +#: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 +msgid "" +"\n" +" -V, --version display version information and exit" +msgstr "" +"\n" +" -V, --version verzióinformációk megjelenítése és kilépés" + +#: guix/scripts/build.scm:368 +#, scheme-format +msgid "sources do not match any package:~{ ~a~}~%" +msgstr "a források nem illeszkednek semmilyen csomagra:~{ ~a~}~%" + +#: guix/scripts/build.scm:397 guix/scripts/download.scm:96 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 +#, scheme-format +msgid "~A: unrecognized option~%" +msgstr "~A: ismeretlen kapcsoló~%" + +#: guix/scripts/build.scm:425 +#, scheme-format +msgid "no build log for '~a'~%" +msgstr "nincs összeállítási napló ehhez: „~a”~%" + +#: guix/scripts/download.scm:44 +msgid "" +"Usage: guix download [OPTION] URL\n" +"Download the file at URL, add it to the store, and print its store path\n" +"and the hash of its contents.\n" +"\n" +"Supported formats: 'nix-base32' (default), 'base32', and 'base16'\n" +"('hex' and 'hexadecimal' can be used as well).\n" +msgstr "" +"Használat: guix download [KAPCSOLÓ] URL\n" +"A fájl letöltése az URL-ről, hozzáadás a tárolóhoz, és a tárolója\n" +"útvonalának és a tartalma hash-ének kiírása.\n" +"\n" +"Támogatott formátumok: „nix-base32” (alapértelmezett), „base32” és „base16”\n" +"(„hex” és „hexadecimal” is használható).\n" + +#: guix/scripts/download.scm:50 guix/scripts/hash.scm:50 +msgid "" +"\n" +" -f, --format=FMT write the hash in the given format" +msgstr "" +"\n" +" -f, --format=FMT a hash kiírása a megadott formátumban" + +#: guix/scripts/download.scm:73 guix/scripts/hash.scm:75 +#, scheme-format +msgid "unsupported hash format: ~a~%" +msgstr "nem támogatott hash-formátum: ~a~%" + +#: guix/scripts/download.scm:106 +#, scheme-format +msgid "~a: failed to parse URI~%" +msgstr "~a: az URI feldolgozása sikertelen~%" + +#: guix/scripts/download.scm:117 +#, scheme-format +msgid "~a: download failed~%" +msgstr "~a: letöltés sikertelen~%" + +#: guix/scripts/package.scm:88 +#, scheme-format +msgid "failed to build the empty profile~%" +msgstr "az üres profil összeállítása sikertelen~%" + +#: guix/scripts/package.scm:97 +#, scheme-format +msgid "switching from generation ~a to ~a~%" +msgstr "átváltás a(z) ~a generációról erre: ~a~%" + +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 +#, scheme-format +msgid "profile '~a' does not exist~%" +msgstr "a(z) „~a” profil nem létezik~%" + +#: guix/scripts/package.scm:112 +#, scheme-format +msgid "nothing to do: already at the empty profile~%" +msgstr "nincs mit tenni: már az üres profilnál van~%" + +#: guix/scripts/package.scm:197 +#, scheme-format +msgid "The following package would be removed:~%~{~a~%~}~%" +msgstr "A következő csomagot el kellene távolítani:~%~{~a~%~}~%" + +#: guix/scripts/package.scm:202 +#, scheme-format +msgid "The following package will be removed:~%~{~a~%~}~%" +msgstr "A következő csomag el lesz távolítva:~%~{~a~%~}~%" + +#: guix/scripts/package.scm:214 +#, scheme-format +msgid "The following package would be installed:~%~{~a~%~}~%" +msgstr "A következő csomagot telepíteni kellene:~%~{~a~%~}~%" + +#: guix/scripts/package.scm:219 +#, scheme-format +msgid "The following package will be installed:~%~{~a~%~}~%" +msgstr "A következő csomag telepítve lesz:~%~{~a~%~}~%" + +#: guix/scripts/package.scm:339 +#, scheme-format +msgid "package `~a' lacks output `~a'~%" +msgstr "a(z) „~a” csomag hiányolja a kimenetet: „~a”~%" + +#: guix/scripts/package.scm:356 +#, scheme-format +msgid "~a: package not found~%" +msgstr "~a: a csomag nem található~%" + +#: guix/scripts/package.scm:391 +#, scheme-format +msgid "looking for the latest release of GNU ~a..." +msgstr "a GNU ~a legutóbbi kiadásának keresése…" + +#: guix/scripts/package.scm:395 +#, scheme-format +msgid "~a: note: using ~a but ~a is available upstream~%" +msgstr "~a: megjegyzés: ~a használata, de ~a elérhető a tárolóban~%" + +#: guix/scripts/package.scm:467 +#, scheme-format +msgid "The following environment variable definitions may be needed:~%" +msgstr "A következő környezeti változó meghatározások lehetnek szükségesek:~%" + +#: guix/scripts/package.scm:483 +msgid "" +"Usage: guix package [OPTION]... PACKAGES...\n" +"Install, remove, or upgrade PACKAGES in a single transaction.\n" +msgstr "" +"Használat: guix package [KAPCSOLÓ]… CSOMAGOK…\n" +"CSOMAGOK telepítése, eltávolítása vagy frissítése egyetlen tranzakcióban.\n" + +#: guix/scripts/package.scm:485 +msgid "" +"\n" +" -i, --install=PACKAGE install PACKAGE" +msgstr "" +"\n" +" -i, --install=CSOMAG CSOMAG telepítése" + +#: guix/scripts/package.scm:487 +msgid "" +"\n" +" -e, --install-from-expression=EXP\n" +" install the package EXP evaluates to" +msgstr "" +"\n" +" -e, --install-from-expression=KIF\n" +" a kiértékelt KIF csomag telepítése" + +#: guix/scripts/package.scm:490 +msgid "" +"\n" +" -r, --remove=PACKAGE remove PACKAGE" +msgstr "" +"\n" +" -r, --remove=CSOMAG CSOMAG eltávolítása" + +#: guix/scripts/package.scm:492 +msgid "" +"\n" +" -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" +msgstr "" +"\n" +" -u, --upgrade[=REGKIF] az összes REGKIF-re illeszkedő telepített csomag\n" +" frissítése" + +#: guix/scripts/package.scm:494 +msgid "" +"\n" +" --roll-back roll back to the previous generation" +msgstr "" +"\n" +" --roll-back visszagörgetés az előző generációra" + +#: guix/scripts/package.scm:496 +msgid "" +"\n" +" --search-paths display needed environment variable definitions" +msgstr "" +"\n" +" --search-paths a szükséges környezeti változó meghatározások\n" +" megjelenítése" + +#: guix/scripts/package.scm:498 +msgid "" +"\n" +" -l, --list-generations[=PATTERN]\n" +" list generations matching PATTERN" +msgstr "" +"\n" +" -l, --list-generations[=MINTA]\n" +" a MINTÁRA illeszkedő generációk listázása" + +#: guix/scripts/package.scm:501 +msgid "" +"\n" +" -d, --delete-generations[=PATTERN]\n" +" delete generations matching PATTERN" +msgstr "" +"\n" +" -d, --delete-generations[=MINTA]\n" +" a MINTÁRA illeszkedő generációk törlése" + +#: guix/scripts/package.scm:504 +msgid "" +"\n" +" -p, --profile=PROFILE use PROFILE instead of the user's default profile" +msgstr "" +"\n" +" -p, --profile=PROFIL a PROFIL használata a felhasználó alapértelmezett\n" +" profilja helyett" + +#: guix/scripts/package.scm:507 +msgid "" +"\n" +" --bootstrap use the bootstrap Guile to build the profile" +msgstr "" +"\n" +" --bootstrap a Guile rendszertöltő használata a profil\n" +" összeállításához" + +#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75 +msgid "" +"\n" +" --verbose produce verbose output" +msgstr "" +"\n" +" --verbose bőbeszédű kimenet előállítása" + +#: guix/scripts/package.scm:512 +msgid "" +"\n" +" -s, --search=REGEXP search in synopsis and description using REGEXP" +msgstr "" +"\n" +" -s, --search=REGKIF keresés az összegzésben és a leírásban REGKIF\n" +" használatával" + +#: guix/scripts/package.scm:514 +msgid "" +"\n" +" -I, --list-installed[=REGEXP]\n" +" list installed packages matching REGEXP" +msgstr "" +"\n" +" -I, --list-installed[=REGKIF]\n" +" a REGKIF-re illeszkedő telepített csomagok listázása" + +#: guix/scripts/package.scm:517 +msgid "" +"\n" +" -A, --list-available[=REGEXP]\n" +" list available packages matching REGEXP" +msgstr "" +"\n" +" -A, --list-available[=REGKIF]\n" +" a REGKIF-re illeszkedő elérhető csomagok listázása" + +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=CSOMAG CSOMAG telepítése" + +#: guix/scripts/package.scm:767 +#, scheme-format +msgid "~A: extraneous argument~%" +msgstr "~A: nem odatartozó argumentum~%" + +#: guix/scripts/package.scm:782 +#, scheme-format +msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" +msgstr "" +"További információkért próbálja az „info '(guix) Invoking guix package'”\n" +"parancsot.~%" + +#: guix/scripts/package.scm:804 +#, scheme-format +msgid "error: while creating directory `~a': ~a~%" +msgstr "hiba: a(z) „~a” könyvtár létrehozása közben: ~a~%" + +#: guix/scripts/package.scm:808 +#, scheme-format +msgid "Please create the `~a' directory, with you as the owner.~%" +msgstr "Hozza létre a(z) „~a” könyvtárat az ön nevében, tulajdonosként.~%" + +#: guix/scripts/package.scm:815 +#, scheme-format +msgid "error: directory `~a' is not owned by you~%" +msgstr "hiba: a(z) „~a” könyvtárnak nem ön a tulajdonosa~%" + +#: guix/scripts/package.scm:818 +#, scheme-format +msgid "Please change the owner of `~a' to user ~s.~%" +msgstr "Változtassa meg a(z) „~a” tulajdonosát erre a felhasználóra: ~s.~%" + +#: guix/scripts/package.scm:843 +#, scheme-format +msgid "deleting ~a~%" +msgstr "~a törlése~%" + +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 +#, scheme-format +msgid "invalid syntax: ~a~%" +msgstr "érvénytelen szintaxis: ~a~%" + +#: guix/scripts/package.scm:925 +#, scheme-format +msgid "nothing to be done~%" +msgstr "nincs mit tenni~%" + +#: guix/scripts/package.scm:948 +#, scheme-format +msgid "~a package in profile~%" +msgstr "~a csomag a profilban~%" + +#: guix/scripts/package.scm:963 +#, scheme-format +msgid "Generation ~a\t~a" +msgstr "~a generáció\t~a" + +#: guix/scripts/package.scm:970 +#, scheme-format +msgid "~a\t(current)~%" +msgstr "~a\t(jelenlegi)~%" + +#: guix/scripts/gc.scm:39 +msgid "" +"Usage: guix gc [OPTION]... PATHS...\n" +"Invoke the garbage collector.\n" +msgstr "" +"Használat: guix gc [KAPCSOLÓ]… ÚTVONALAK…\n" +"A szemétgyűjtő meghívása.\n" + +#: guix/scripts/gc.scm:41 +msgid "" +"\n" +" -C, --collect-garbage[=MIN]\n" +" collect at least MIN bytes of garbage" +msgstr "" +"\n" +" -C, --collect-garbage[=MIN]\n" +" legalább MIN bájt szemét összegyűjtése" + +#: guix/scripts/gc.scm:44 +msgid "" +"\n" +" -d, --delete attempt to delete PATHS" +msgstr "" +"\n" +" -d, --delete ÚTVONALAK törlésének kísérlete" + +#: guix/scripts/gc.scm:46 +msgid "" +"\n" +" --list-dead list dead paths" +msgstr "" +"\n" +" --list-dead halott útvonalak listázása" + +#: guix/scripts/gc.scm:48 +msgid "" +"\n" +" --list-live list live paths" +msgstr "" +"\n" +" --list-live élő útvonalak listázása" + +#: guix/scripts/gc.scm:51 +msgid "" +"\n" +" --references list the references of PATHS" +msgstr "" +"\n" +" --references az ÚTVONALAK hivatkozásainak listázása" + +#: guix/scripts/gc.scm:53 +msgid "" +"\n" +" -R, --requisites list the requisites of PATHS" +msgstr "" +"\n" +" -R, --requisites az ÚTVONALAK követelményeinek listázása" + +#: guix/scripts/gc.scm:55 +msgid "" +"\n" +" --referrers list the referrers of PATHS" +msgstr "" +"\n" +" --referrers az ÚTVONALAK ajánlóinak listázása" + +#: guix/scripts/gc.scm:84 +#, scheme-format +msgid "invalid amount of storage: ~a~%" +msgstr "érvénytelen tárolómennyiség: ~a~%" + +#: guix/scripts/hash.scm:45 +msgid "" +"Usage: guix hash [OPTION] FILE\n" +"Return the cryptographic hash of FILE.\n" +"\n" +"Supported formats: 'nix-base32' (default), 'base32', and 'base16' ('hex'\n" +"and 'hexadecimal' can be used as well).\n" +msgstr "" +"Használat: guix hash [KAPCSOLÓ] FÁJL\n" +"A FÁJL kriptográfiai hash-ének visszaadása.\n" +"\n" +"Támogatott formátumok: „nix-base32” (alapértelmezett), „base32” és „base16”\n" +"(„hex” és „hexadecimal” is használható).\n" + +#: guix/scripts/hash.scm:52 +msgid "" +"\n" +" -r, --recursive compute the hash on FILE recursively" +msgstr "" +"\n" +" -r, --recursive a FILE hash-ének rekurzív számítása" + +#: guix/scripts/hash.scm:103 +#, scheme-format +msgid "unrecognized option: ~a~%" +msgstr "ismeretlen kapcsoló: ~a~%" + +#: guix/scripts/hash.scm:134 guix/ui.scm:233 +#, scheme-format +msgid "~a~%" +msgstr "~a~%" + +#: guix/scripts/hash.scm:137 +#, scheme-format +msgid "wrong number of arguments~%" +msgstr "nem megfelelő számú argumentum~%" + +#: guix/scripts/pull.scm:73 +msgid "" +"Usage: guix pull [OPTION]...\n" +"Download and deploy the latest version of Guix.\n" +msgstr "" +"Használat: guix pull [KAPCSOLÓ]…\n" +"A Guix legújabb verziójának letöltése és telepítése.\n" + +#: guix/scripts/pull.scm:77 +msgid "" +"\n" +" --url=URL download the Guix tarball from URL" +msgstr "" +"\n" +" --url=URL a Guix tarball letöltése az URL-ről" + +#: guix/scripts/pull.scm:79 +msgid "" +"\n" +" --bootstrap use the bootstrap Guile to build the new Guix" +msgstr "" +"\n" +" --bootstrap a Guile rendszertöltő használata az új Guix\n" +" összeállításához" + +#: guix/scripts/pull.scm:117 +#, scheme-format +msgid "~A: unexpected argument~%" +msgstr "~A: nem várt argumentum~%" + +#: guix/scripts/pull.scm:126 +msgid "failed to download up-to-date source, exiting\n" +msgstr "a legfrissebb forrás letöltése sikertelen, kilépés\n" + +#: guix/scripts/pull.scm:145 +#, scheme-format +msgid "updated ~a successfully deployed under `~a'~%" +msgstr "a(z) ~a frissítése sikeresen telepítve ez alá: „~a”~%" + +#: guix/scripts/pull.scm:148 +#, scheme-format +msgid "failed to update Guix, check the build log~%" +msgstr "a Guix frissítése sikertelen, nézze meg az összeállítási naplót~%" + +#: guix/scripts/pull.scm:150 +msgid "Guix already up to date\n" +msgstr "A Guix már naprakész\n" + +#: guix/scripts/substitute-binary.scm:80 +#, scheme-format +msgid "authentication and authorization of substitutes disabled!~%" +msgstr "a helyettesítők hitelesítése és felhatalmazása letiltva!~%" + +#: guix/scripts/substitute-binary.scm:163 +#, scheme-format +msgid "download from '~a' failed: ~a, ~s~%" +msgstr "a letöltés sikertelen innen: „~a”: ~a, ~s~%" + +#: guix/scripts/substitute-binary.scm:178 +#, scheme-format +msgid "while fetching ~a: server is unresponsive~%" +msgstr "~a lekérése közben: a kiszolgáló nem válaszol~%" + +#: guix/scripts/substitute-binary.scm:180 +#, scheme-format +msgid "try `--no-substitutes' if the problem persists~%" +msgstr "próbálja a „--no-substitutes” kapcsolót, ha a probléma továbbra is fennáll~%" + +#: guix/scripts/substitute-binary.scm:244 +#, scheme-format +msgid "signature version must be a number: ~a~%" +msgstr "az aláírás verziójának számnak kell lennie: ~a~%" + +#: guix/scripts/substitute-binary.scm:248 +#, scheme-format +msgid "unsupported signature version: ~a~%" +msgstr "nem támogatott aláírás verzió: ~a~%" + +#: guix/scripts/substitute-binary.scm:256 +#, scheme-format +msgid "signature is not a valid s-expression: ~s~%" +msgstr "az aláírás nem érvényes s-kifejezés: ~s~%" + +#: guix/scripts/substitute-binary.scm:260 +#, scheme-format +msgid "invalid format of the signature field: ~a~%" +msgstr "az aláírásmező formátuma érvénytelen: ~a~%" + +#: guix/scripts/substitute-binary.scm:295 +#, scheme-format +msgid "invalid signature for '~a'~%" +msgstr "érvénytelen aláírás ehhez: „~a”~%" + +#: guix/scripts/substitute-binary.scm:297 +#, scheme-format +msgid "hash mismatch for '~a'~%" +msgstr "hash eltérés ennél: „~a”~%" + +#: guix/scripts/substitute-binary.scm:299 +#, scheme-format +msgid "'~a' is signed with an unauthorized key~%" +msgstr "a(z) „~a” egy jogosulatlan kulccsal van aláírva~%" + +#: guix/scripts/substitute-binary.scm:301 +#, scheme-format +msgid "signature on '~a' is corrupt~%" +msgstr "a(z) „~a” aláírása sérült~%" + +#: guix/scripts/substitute-binary.scm:338 +#, scheme-format +msgid "substitute at '~a' lacks a signature~%" +msgstr "a helyettesítő ennél: „~a” hiányol egy aláírást~%" + +#: guix/scripts/substitute-binary.scm:526 +#, scheme-format +msgid "Downloading, please wait...~%" +msgstr "Letöltés, kérem várjon…~%" + +#: guix/scripts/substitute-binary.scm:528 +#, scheme-format +msgid "(Please consider upgrading Guile to get proper progress report.)~%" +msgstr "(Fontolja meg a Guile frissítését a megfelelő állapotjelentés beszerzéséhez.)~%" + +#: guix/scripts/substitute-binary.scm:545 +#, scheme-format +msgid "host name lookup error: ~a~%" +msgstr "gépnév keresési hiba: ~a~%" + +#: guix/scripts/substitute-binary.scm:554 +msgid "" +"Usage: guix substitute-binary [OPTION]...\n" +"Internal tool to substitute a pre-built binary to a local build.\n" +msgstr "" +"Használat: guix substitute-binary [KAPCSOLÓ]…\n" +"Belső eszköz egy előre összeállított binárisnak egy helyi összeállítással\n" +"való helyettesítéséhez.\n" + +#: guix/scripts/substitute-binary.scm:556 +msgid "" +"\n" +" --query report on the availability of substitutes for the\n" +" store file names passed on the standard input" +msgstr "" +"\n" +" --query a helyettesítők elérhetőségének jelentése a\n" +" szabványos bemeneten átadott tároló fájlnevekhez" + +#: guix/scripts/substitute-binary.scm:559 +msgid "" +"\n" +" --substitute STORE-FILE DESTINATION\n" +" download STORE-FILE and store it as a Nar in file\n" +" DESTINATION" +msgstr "" +"\n" +" --substitute TÁROLÓ-FÁJL CÉL\n" +" TÁROLÓ-FÁJL letöltése és eltárolása Nar formátumban\n" +" a CÉL fájlban" + +#: guix/scripts/substitute-binary.scm:604 +msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n" +msgstr "" +"Az ACL előkészítetlennek tűnik az archívum importokhoz, a helyettesítők\n" +"elérhetetlenek lehetnek\n" + +#: guix/scripts/substitute-binary.scm:625 +#, scheme-format +msgid "failed to look up host '~a' (~a), substituter disabled~%" +msgstr "a(z) „~a” (~a) gép keresése sikertelen, a helyettesítő letiltva~%" + +#: guix/scripts/substitute-binary.scm:732 +#, scheme-format +msgid "~a: unrecognized options~%" +msgstr "~a: ismeretlen kapcsolók~%" + +#: guix/scripts/authenticate.scm:58 +#, scheme-format +msgid "cannot find public key for secret key '~a'~%" +msgstr "nem található nyilvános kulcs a(z) „~a” titkos kulcshoz~%" + +#: guix/scripts/authenticate.scm:78 +#, scheme-format +msgid "error: invalid signature: ~a~%" +msgstr "hiba: érvénytelen aláírás: ~a~%" + +#: guix/scripts/authenticate.scm:80 +#, scheme-format +msgid "error: unauthorized public key: ~a~%" +msgstr "hiba: jogosulatlan nyilvános kulcs: ~a~%" + +#: guix/scripts/authenticate.scm:82 +#, scheme-format +msgid "error: corrupt signature data: ~a~%" +msgstr "hiba: sérült aláírás adatok: ~a~%" + +#: guix/scripts/authenticate.scm:126 +msgid "" +"Usage: guix authenticate OPTION...\n" +"Sign or verify the signature on the given file. This tool is meant to\n" +"be used internally by 'guix-daemon'.\n" +msgstr "" +"Használat: guix authenticate KAPCSOLÓ…\n" +"Aláírás vagy a megadott fájl aláírásának ellenőrzése. Az eszköz célja, hogy\n" +"a „guix-daemon” belsőleg felhasználja.\n" + +#: guix/scripts/authenticate.scm:132 +msgid "wrong arguments" +msgstr "hibás argumentumok" + +#: guix/scripts/system.scm:74 +#, scheme-format +msgid "failed to open operating system file '~a': ~a~%" +msgstr "a(z) „~a” operációs rendszer fájl megnyitása sikertelen: ~a~%" + +#: guix/scripts/system.scm:78 guix/ui.scm:238 +#, scheme-format +msgid "~a: ~a~%" +msgstr "~a: ~a~%" + +#: guix/scripts/system.scm:81 +#, scheme-format +msgid "failed to load operating system file '~a': ~s~%" +msgstr "a(z) „~a” operációs rendszer fájl betöltése sikertelen: ~s~%" + +#: guix/scripts/system.scm:116 +#, scheme-format +msgid "failed to register '~a' under '~a'~%" +msgstr "a(z) „~a” regisztrálása sikertelen ez alá: „~a”~%" + +#: guix/scripts/system.scm:144 +#, scheme-format +msgid "initializing the current root file system~%" +msgstr "a jelenlegi gyökér fájlrendszer előkészítése~%" + +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 +#, scheme-format +msgid "failed to install GRUB on device '~a'~%" +msgstr "a GRUB telepítése sikertelen a(z) „~a” eszközre~%" + +#: guix/scripts/system.scm:197 +#, scheme-format +msgid "activating system...~%" +msgstr "a rendszer aktiválása…~%" + +#: guix/scripts/system.scm:236 +#, scheme-format +msgid "unrecognized boot parameters for '~a'~%" +msgstr "azonosítatlan indítási paraméterek ehhez: „~a”~%" + +#: guix/scripts/system.scm:323 +#, scheme-format +msgid "initializing operating system under '~a'...~%" +msgstr "az operációs rendszer előkészítése „~a” alá…~%" + +#: guix/scripts/system.scm:339 +msgid "" +"Usage: guix system [OPTION] ACTION FILE\n" +"Build the operating system declared in FILE according to ACTION.\n" +msgstr "" +"Használat: guix system [KAPCSOLÓ] MŰVELET FÁJL\n" +"A FÁJLBAN meghatározott operációs rendszer összeállítása a MŰVELET szerint.\n" + +#: guix/scripts/system.scm:342 +msgid "The valid values for ACTION are:\n" +msgstr "A MŰVELET érvényes értékei a következők:\n" + +#: guix/scripts/system.scm:343 +msgid " - 'reconfigure', switch to a new operating system configuration\n" +msgstr " - „reconfigure”, átváltás egy új operációs rendszer beállításra\n" + +#: guix/scripts/system.scm:345 +msgid " - 'build', build the operating system without installing anything\n" +msgstr " - „build”, az operációs rendszer összeállítása bármi telepítése nélkül\n" + +#: guix/scripts/system.scm:347 +msgid " - 'vm', build a virtual machine image that shares the host's store\n" +msgstr "" +" - „vm”, egy virtuális gép lemezkép összeállítása, amely megosztja a gazda\n" +" tárolóját\n" + +#: guix/scripts/system.scm:349 +msgid " - 'vm-image', build a freestanding virtual machine image\n" +msgstr " - „vm-image”, egy szabadon álló virtuális gép lemezkép összeállítása\n" + +#: guix/scripts/system.scm:351 +msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" +msgstr " - „disk-image”, egy USB-meghajtóhoz megfelelő lemezkép összeállítása\n" + +#: guix/scripts/system.scm:353 +msgid " - 'init', initialize a root file system to run GNU.\n" +msgstr " - „init”, a gyökér fájlrendszer előkészítése a GNU futtatásához.\n" + +#: guix/scripts/system.scm:357 +msgid "" +"\n" +" --image-size=SIZE for 'vm-image', produce an image of SIZE" +msgstr "" +"\n" +" --image-size=MÉRET a „vm-image”-hez, adott MÉRETŰ lemezkép előállítása" + +#: guix/scripts/system.scm:359 +msgid "" +"\n" +" --no-grub for 'init', do not install GRUB" +msgstr "" +"\n" +" --no-grub az „init”-hez, ne telepítse a GRUB rendszerbetöltőt" + +#: guix/scripts/system.scm:422 +#, scheme-format +msgid "~a: unknown action~%" +msgstr "~a: ismeretlen művelet~%" + +#: guix/scripts/system.scm:439 +#, scheme-format +msgid "wrong number of arguments for action '~a'~%" +msgstr "nem megfelelő számú argumentum a(z) „~a” művelethez~%" + +#: guix/scripts/system.scm:459 +#, scheme-format +msgid "no configuration file specified~%" +msgstr "nincs beállítófájl megadva~%" + +#: guix/gnu-maintenance.scm:373 +#, scheme-format +msgid "signature verification failed for `~a'~%" +msgstr "az aláírás-ellenőrzés sikertelen ennél: „~a”~%" + +#: guix/gnu-maintenance.scm:375 +#, scheme-format +msgid "(could be because the public key is not in your keyring)~%" +msgstr "(azért lehet, mert a nyilvános kulcs nincs a kulcstartón)~%" + +#: guix/gnu-maintenance.scm:450 +#, scheme-format +msgid "~a: could not locate source file" +msgstr "~a: nem található a forrásfájl" + +#: guix/gnu-maintenance.scm:455 +#, scheme-format +msgid "~a: ~a: no `version' field in source; skipping~%" +msgstr "~a: ~a: nincs „version” mező a forrásban; kihagyás~%" + +#: guix/ui.scm:131 +#, scheme-format +msgid "failed to install locale: ~a~%" +msgstr "a területi beállítás telepítése sikertelen: ~a~%" + +#: guix/ui.scm:150 +msgid "" +"Copyright (C) 2014 the Guix authors\n" +"License GPLv3+: GNU GPL version 3 or later \n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright © 2014 a Guix szerzői\n" +"Licenc GPLv3+: GNU GPL 3. vagy újabb verzió \n" +"\n" +"Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.\n" +"NINCS GARANCIA, a törvény által engedélyezett mértékig.\n" + +#: guix/ui.scm:158 +#, scheme-format +msgid "" +"\n" +"Report bugs to: ~a." +msgstr "" +"\n" +"A hibákat ide jelentse: ~a." + +#: guix/ui.scm:160 +#, scheme-format +msgid "" +"\n" +"~a home page: <~a>" +msgstr "" +"\n" +"~a honlap: <~a>" + +#: guix/ui.scm:162 +msgid "" +"\n" +"General help using GNU software: " +msgstr "" +"\n" +"Általános segítség a GNU szoftverek használatához: " + +#: guix/ui.scm:169 +#, scheme-format +msgid "~a: invalid number~%" +msgstr "~a: érvénytelen szám~%" + +#: guix/ui.scm:186 +#, scheme-format +msgid "invalid number: ~a~%" +msgstr "érvénytelen szám: ~a~%" + +#: guix/ui.scm:201 +#, scheme-format +msgid "unknown unit: ~a~%" +msgstr "ismeretlen egység: ~a~%" + +#: guix/ui.scm:212 +#, scheme-format +msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%" +msgstr "~a:~a:~a: a(z) „~a” csomagnak érvénytelen bemenete van: ~s~%" + +#: guix/ui.scm:219 +#, scheme-format +msgid "~a: ~a: build system `~a' does not support cross builds~%" +msgstr "~a: ~a: a(z) „~a” összeállítási rendszer nem támogatja a kereszt összeállításokat~%" + +#: guix/ui.scm:224 +#, scheme-format +msgid "failed to connect to `~a': ~a~%" +msgstr "sikertelen csatlakozás ehhez: „~a”: ~a~%" + +#: guix/ui.scm:229 +#, scheme-format +msgid "build failed: ~a~%" +msgstr "az összeállítás sikertelen: ~a~%" + +#: guix/ui.scm:257 +#, scheme-format +msgid "failed to read expression ~s: ~s~%" +msgstr "a(z) ~s kifejezés olvasása sikertelen: ~s~%" + +#: guix/ui.scm:263 +#, scheme-format +msgid "failed to evaluate expression `~a': ~s~%" +msgstr "a(z) „~a” kifejezés kiértékelése sikertelen: ~s~%" + +#: guix/ui.scm:272 +#, scheme-format +msgid "expression ~s does not evaluate to a package~%" +msgstr "a(z) ~s kifejezés nem értékelhető ki a csomaghoz~%" + +#: guix/ui.scm:319 +#, scheme-format +msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" +msgstr "~:[A következő származékot kellene összeállítani:~%~{ ~a~%~}~;~]" + +#: guix/ui.scm:324 +#, scheme-format +msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" +msgstr "~:[A következő fájlt kellene letölteni:~%~{ ~a~%~}~;~]" + +#: guix/ui.scm:330 +#, scheme-format +msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" +msgstr "~:[A következő származék lesz összeállítva:~%~{ ~a~%~}~;~]" + +#: guix/ui.scm:335 +#, scheme-format +msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" +msgstr "~:[A következő fájl lesz letöltve:~%~{ ~a~%~}~;~]" + +#: guix/ui.scm:352 +msgid "" +msgstr "" + +#: guix/ui.scm:380 +#, scheme-format +msgid "failed to create configuration directory `~a': ~a~%" +msgstr "a(z) „~a” beállítási könyvtár létrehozása sikertelen: ~a~%" + +#: guix/ui.scm:475 guix/ui.scm:489 +msgid "unknown" +msgstr "ismeretlen" + +#: guix/ui.scm:598 +#, scheme-format +msgid "invalid argument: ~a~%" +msgstr "érvénytelen argumentum: ~a~%" + +#: guix/ui.scm:603 +#, scheme-format +msgid "Try `guix --help' for more information.~%" +msgstr "További információkért próbálja a „guix --help” parancsot.~%" + +#: guix/ui.scm:633 +msgid "" +"Usage: guix COMMAND ARGS...\n" +"Run COMMAND with ARGS.\n" +msgstr "" +"Használat: guix PARANCS ARGUMENTUMOK…\n" +"A PARANCS futtatása ARGUMENTUMOKKAL.\n" + +#: guix/ui.scm:636 +msgid "COMMAND must be one of the sub-commands listed below:\n" +msgstr "A PARANCSNAK a lenti listában lévő alparancsok egyikének kell lennie:\n" + +#: guix/ui.scm:656 +#, scheme-format +msgid "guix: ~a: command not found~%" +msgstr "guix: ~a: a parancs nem található~%" + +#: guix/ui.scm:674 +#, scheme-format +msgid "guix: missing command name~%" +msgstr "guix: hiányzó parancsnév~%" + +#: guix/ui.scm:682 +#, scheme-format +msgid "guix: unrecognized option '~a'~%" +msgstr "guix: ismeretlen kapcsoló: „~a”~%" + +#: guix/http-client.scm:217 +#, scheme-format +msgid "using Guile ~a, which does not support ~s encoding~%" +msgstr "a Guile ~a használata, amely nem támogatja a(z) ~s kódolást~%" + +#: guix/http-client.scm:220 +#, scheme-format +msgid "download failed; use a newer Guile~%" +msgstr "letöltés sikertelen; használja a Guile újabb verzióját~%" + +#: guix/http-client.scm:232 +#, scheme-format +msgid "following redirection to `~a'...~%" +msgstr "átirányítás követése ide: „~a”…~%" + +#: guix/http-client.scm:241 +msgid "download failed" +msgstr "letöltés sikertelen" + +#: guix/nar.scm:134 +msgid "unexpected executable file marker" +msgstr "nem várt végrehajtható fájljelölő" + +#: guix/nar.scm:141 +msgid "unsupported nar file type" +msgstr "nem támogatott nar fájltípus" + +#: guix/nar.scm:209 +msgid "unsupported file type" +msgstr "nem támogatott fájltípus" + +#: guix/nar.scm:219 +msgid "invalid nar signature" +msgstr "érvénytelen nar aláírás" + +#: guix/nar.scm:230 +msgid "invalid nar end-of-file marker" +msgstr "érvénytelen nar fájlvége jelölő" + +#: guix/nar.scm:244 +msgid "invalid symlink tokens" +msgstr "érvénytelen szimbolikus link jelsorok" + +#: guix/nar.scm:263 +msgid "unexpected directory entry termination" +msgstr "nem várt könyvtárbejegyzés végződés" + +#: guix/nar.scm:272 +msgid "unexpected directory inter-entry marker" +msgstr "nem várt könyvtár belső-bejegyzés jelölő" + +#: guix/nar.scm:277 +msgid "unsupported nar entry type" +msgstr "nem támogatott nar bejegyzéstípus" + +#: guix/nar.scm:376 +msgid "signature is not a valid s-expression" +msgstr "az aláírás nem érvényes s-kifejezés" + +#: guix/nar.scm:385 +msgid "invalid signature" +msgstr "érvénytelen aláírás" + +#: guix/nar.scm:389 +msgid "invalid hash" +msgstr "érvénytelen hash" + +#: guix/nar.scm:397 +msgid "unauthorized public key" +msgstr "jogosulatlan nyilvános kulcs" + +#: guix/nar.scm:402 +msgid "corrupt signature data" +msgstr "sérült aláírás adatok" + +#: guix/nar.scm:422 +msgid "corrupt file set archive" +msgstr "sérült fájlhalmaz archívum" + +#: guix/nar.scm:432 +#, scheme-format +msgid "importing file or directory '~a'...~%" +msgstr "fájl vagy könyvtár importálása: „~a”…~%" + +#: guix/nar.scm:441 +#, scheme-format +msgid "found valid signature for '~a'~%" +msgstr "érvényes aláírás található ehhez: „~a”~%" + +#: guix/nar.scm:448 +msgid "imported file lacks a signature" +msgstr "az importált fájl egy aláírást hiányol" + +#: guix/nar.scm:487 +msgid "invalid inter-file archive mark" +msgstr "érvénytelen belső-fájl archívum jelölő" diff --git a/po/guix/pt_BR.po b/po/guix/pt_BR.po index 5b41026db6..664cf249ad 100644 --- a/po/guix/pt_BR.po +++ b/po/guix/pt_BR.po @@ -8,11 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.4-pre2\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-14 22:38+0200\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" "PO-Revision-Date: 2013-09-28 21:29-0300\n" "Last-Translator: Rafael Ferreira \n" -"Language-Team: Brazilian Portuguese \n" +"Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,17 +19,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.5.7\n" -#: gnu/packages.scm:95 +#: gnu/packages.scm:102 #, scheme-format msgid "cannot access `~a': ~a~%" msgstr "não foi possível acessar \"~a\": ~a~%" -#: guix/scripts/build.scm:54 guix/scripts/package.scm:337 +#: guix/scripts/build.scm:54 guix/scripts/package.scm:349 #, scheme-format msgid "ambiguous package specification `~a'~%" msgstr "especificação ambígua de pacote \"~a\"~%" -#: guix/scripts/build.scm:55 guix/scripts/package.scm:339 +#: guix/scripts/build.scm:55 guix/scripts/package.scm:351 #, scheme-format msgid "choosing ~a from ~a~%" msgstr "escolhendo ~a de ~a~%" @@ -97,8 +96,7 @@ msgid "" msgstr "" "\n" " --max-silent-time=SEGUNDOS\n" -" marca compilação como falha após SEGUNDOS de " -"silêncio" +" marca compilação como falha após SEGUNDOS de silêncio" #: guix/scripts/build.scm:136 #, fuzzy @@ -108,8 +106,7 @@ msgid "" msgstr "" "\n" " --max-silent-time=SEGUNDOS\n" -" marca compilação como falha após SEGUNDOS de " -"silêncio" +" marca compilação como falha após SEGUNDOS de silêncio" #: guix/scripts/build.scm:138 msgid "" @@ -125,8 +122,7 @@ msgid "" " -c, --cores=N allow the use of up to N CPU cores for the build" msgstr "" "\n" -" -c, --cores=N permite o uso de até N núcleos de CPU para " -"compilação" +" -c, --cores=N permite o uso de até N núcleos de CPU para compilação" #: guix/scripts/build.scm:206 #, scheme-format @@ -172,8 +168,7 @@ msgid "" " --target=TRIPLET cross-build for TRIPLET--e.g., \"armel-linux-gnu\"" msgstr "" "\n" -" --target=TRIO compilação cruzada para TRIO. ex.: \"armel-linux-gnu" -"\"" +" --target=TRIO compilação cruzada para TRIO. ex.: \"armel-linux-gnu\"" #: guix/scripts/build.scm:233 msgid "" @@ -197,8 +192,7 @@ msgid "" " as a garbage collector root" msgstr "" "\n" -" -r, --root=ARQUIVO faz do ARQUIVO um link simbólico para o resultado " -"e\n" +" -r, --root=ARQUIVO faz do ARQUIVO um link simbólico para o resultado e\n" " registra-o, como um coletor de lixo" #: guix/scripts/build.scm:241 @@ -208,9 +202,9 @@ msgid "" msgstr "" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:142 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 msgid "" "\n" " -h, --help display this help and exit" @@ -219,9 +213,9 @@ msgstr "" " -h, --help exibe esta ajuda e sai" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:144 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 msgid "" "\n" " -V, --version display version information and exit" @@ -235,8 +229,8 @@ msgid "sources do not match any package:~{ ~a~}~%" msgstr "" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:744 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:190 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: opção desconhecida~%" @@ -285,75 +279,74 @@ msgstr "~a: falha ao analisar URI~%" msgid "~a: download failed~%" msgstr "~a: falha no download~%" -#: guix/scripts/package.scm:76 +#: guix/scripts/package.scm:88 #, scheme-format msgid "failed to build the empty profile~%" msgstr "falha ao compilar o perfil vazio~%" # geração, criação? -#: guix/scripts/package.scm:85 +#: guix/scripts/package.scm:97 #, scheme-format msgid "switching from generation ~a to ~a~%" msgstr "trocando para geração de ~a para ~a~%" -#: guix/scripts/package.scm:96 guix/scripts/package.scm:852 -#: guix/scripts/package.scm:964 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "perfil \"~a\" não existe~%" -#: guix/scripts/package.scm:100 +#: guix/scripts/package.scm:112 #, scheme-format msgid "nothing to do: already at the empty profile~%" msgstr "nada a ser feito: já está no perfil vazio~%" -#: guix/scripts/package.scm:185 +#: guix/scripts/package.scm:197 #, fuzzy, scheme-format msgid "The following package would be removed:~%~{~a~%~}~%" msgstr "O seguinte pacote seria removido:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:190 +#: guix/scripts/package.scm:202 #, fuzzy, scheme-format msgid "The following package will be removed:~%~{~a~%~}~%" msgstr "O seguinte pacote será removido:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:202 +#: guix/scripts/package.scm:214 #, scheme-format msgid "The following package would be installed:~%~{~a~%~}~%" msgstr "O seguinte pacote seria instalado:~%~{~a~%~}~%" -#: guix/scripts/package.scm:207 +#: guix/scripts/package.scm:219 #, scheme-format msgid "The following package will be installed:~%~{~a~%~}~%" msgstr "O seguinte pacote será instalado:~%~{~a~%~}~%" -#: guix/scripts/package.scm:327 +#: guix/scripts/package.scm:339 #, scheme-format msgid "package `~a' lacks output `~a'~%" msgstr "pacote \"~a\" carece de mensagem de saída \"~a\"~%" -#: guix/scripts/package.scm:344 +#: guix/scripts/package.scm:356 #, scheme-format msgid "~a: package not found~%" msgstr "~a: pacote não encontrado~%" -#: guix/scripts/package.scm:379 +#: guix/scripts/package.scm:391 #, scheme-format msgid "looking for the latest release of GNU ~a..." msgstr "procurando pelo último lançamento do GNU ~a..." -#: guix/scripts/package.scm:383 +#: guix/scripts/package.scm:395 #, scheme-format msgid "~a: note: using ~a but ~a is available upstream~%" msgstr "~a: nota: usando ~a, mas ~a está disponível no upstream~%" -#: guix/scripts/package.scm:455 +#: guix/scripts/package.scm:467 #, scheme-format msgid "The following environment variable definitions may be needed:~%" -msgstr "" -"As seguintes definições de variável de ambiente podem ser necessárias:~%" +msgstr "As seguintes definições de variável de ambiente podem ser necessárias:~%" -#: guix/scripts/package.scm:471 +#: guix/scripts/package.scm:483 msgid "" "Usage: guix package [OPTION]... PACKAGES...\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n" @@ -361,7 +354,7 @@ msgstr "" "Uso: guix package [OPÇÃO]... PACOTES...\n" "Instala, remove ou atualiza PACOTES em uma única transação.\n" -#: guix/scripts/package.scm:473 +#: guix/scripts/package.scm:485 msgid "" "\n" " -i, --install=PACKAGE install PACKAGE" @@ -369,7 +362,7 @@ msgstr "" "\n" " -i, --install=PACOTE instala PACOTE" -#: guix/scripts/package.scm:475 +#: guix/scripts/package.scm:487 msgid "" "\n" " -e, --install-from-expression=EXP\n" @@ -379,7 +372,7 @@ msgstr "" " -e, --install-from-expression=EXP\n" " instala o pacote que EXPR corresponder" -#: guix/scripts/package.scm:478 +#: guix/scripts/package.scm:490 msgid "" "\n" " -r, --remove=PACKAGE remove PACKAGE" @@ -387,17 +380,16 @@ msgstr "" "\n" " -r, --remove=PACOTE remove PACOTE" -#: guix/scripts/package.scm:480 +#: guix/scripts/package.scm:492 msgid "" "\n" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" msgstr "" "\n" -" -u, --upgrade[=REGEXP] atualiza todos os pacotes instalados " -"correspondendo\n" +" -u, --upgrade[=REGEXP] atualiza todos os pacotes instalados correspondendo\n" " à REGEXP" -#: guix/scripts/package.scm:482 +#: guix/scripts/package.scm:494 msgid "" "\n" " --roll-back roll back to the previous generation" @@ -405,7 +397,7 @@ msgstr "" "\n" " --roll-back Reverte para a geração anterior" -#: guix/scripts/package.scm:484 +#: guix/scripts/package.scm:496 msgid "" "\n" " --search-paths display needed environment variable definitions" @@ -413,7 +405,7 @@ msgstr "" "\n" " --search-paths exibe definições necessárias de variável de ambiente" -#: guix/scripts/package.scm:486 +#: guix/scripts/package.scm:498 msgid "" "\n" " -l, --list-generations[=PATTERN]\n" @@ -423,7 +415,7 @@ msgstr "" " -I, --list-generations[=PADRÃO]\n" " lista criações correspondendo ao PADRÃO" -#: guix/scripts/package.scm:489 +#: guix/scripts/package.scm:501 #, fuzzy msgid "" "\n" @@ -434,7 +426,7 @@ msgstr "" " -I, --list-generations[=PADRÃO]\n" " lista criações correspondendo ao PADRÃO" -#: guix/scripts/package.scm:492 +#: guix/scripts/package.scm:504 msgid "" "\n" " -p, --profile=PROFILE use PROFILE instead of the user's default profile" @@ -442,7 +434,7 @@ msgstr "" "\n" " -p, --profile=PERFIL usa PERFIL em vez do perfil padrão do usuário" -#: guix/scripts/package.scm:495 +#: guix/scripts/package.scm:507 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the profile" @@ -450,7 +442,7 @@ msgstr "" "\n" " --bootstrap usa a inicialização do Guile para compilar o perfil" -#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75 +#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75 msgid "" "\n" " --verbose produce verbose output" @@ -458,7 +450,7 @@ msgstr "" "\n" " --verbose produz uma saída mais detalhada" -#: guix/scripts/package.scm:500 +#: guix/scripts/package.scm:512 msgid "" "\n" " -s, --search=REGEXP search in synopsis and description using REGEXP" @@ -466,7 +458,7 @@ msgstr "" "\n" " -s, --search=REGEXP pesquisa na sinopse e descrição usando REGEXP" -#: guix/scripts/package.scm:502 +#: guix/scripts/package.scm:514 msgid "" "\n" " -I, --list-installed[=REGEXP]\n" @@ -476,7 +468,7 @@ msgstr "" " -I, --list-installed[=REGEXP]\n" " lista pacotes instalados correspondentes a REGEXP" -#: guix/scripts/package.scm:505 +#: guix/scripts/package.scm:517 msgid "" "\n" " -A, --list-available[=REGEXP]\n" @@ -486,62 +478,71 @@ msgstr "" " -A, --list-available[=REGEXP]\n" " lista pacotes disponíveis correspondentes a REGEXP" -#: guix/scripts/package.scm:748 +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=PACOTE instala PACOTE" + +#: guix/scripts/package.scm:767 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: argumento estranho~%" -#: guix/scripts/package.scm:763 +#: guix/scripts/package.scm:782 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Tente \"info '(guix) Invoking guix package'\" para mais informações.~%" -#: guix/scripts/package.scm:785 +#: guix/scripts/package.scm:804 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "erro: ao criar diretório \"~a\": ~a~%" -#: guix/scripts/package.scm:789 +#: guix/scripts/package.scm:808 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Por favor, crie o diretório \"~a\", com você sendo o proprietário.~%" -#: guix/scripts/package.scm:796 +#: guix/scripts/package.scm:815 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "erro: diretório \"~a\" não tem você como proprietário~%" -#: guix/scripts/package.scm:799 +#: guix/scripts/package.scm:818 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Por favor, altere o proprietário d \"~a\" para o usuário ~s.~%" -#: guix/scripts/package.scm:822 +#: guix/scripts/package.scm:843 #, fuzzy, scheme-format msgid "deleting ~a~%" msgstr "Criação ~a\t~a~%" -#: guix/scripts/package.scm:875 guix/scripts/package.scm:980 +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "sintaxe inválida: ~a~%" -#: guix/scripts/package.scm:904 +#: guix/scripts/package.scm:925 #, scheme-format msgid "nothing to be done~%" msgstr "nada para ser feito~%" -#: guix/scripts/package.scm:927 +#: guix/scripts/package.scm:948 #, scheme-format msgid "~a package in profile~%" msgstr "pacote ~a no perfil~%" -#: guix/scripts/package.scm:942 +#: guix/scripts/package.scm:963 #, fuzzy, scheme-format msgid "Generation ~a\t~a" msgstr "Criação ~a\t~a~%" -#: guix/scripts/package.scm:949 +#: guix/scripts/package.scm:970 #, scheme-format msgid "~a\t(current)~%" msgstr "" @@ -675,8 +676,7 @@ msgid "" " --bootstrap use the bootstrap Guile to build the new Guix" msgstr "" "\n" -" --bootstrap usa a inicialização do Guile para compilar o novo " -"Guix" +" --bootstrap usa a inicialização do Guile para compilar o novo Guix" #: guix/scripts/pull.scm:117 #, scheme-format @@ -763,7 +763,7 @@ msgstr "" #: guix/scripts/substitute-binary.scm:338 #, scheme-format -msgid "narinfo for '~a' lacks a signature~%" +msgid "substitute at '~a' lacks a signature~%" msgstr "" #: guix/scripts/substitute-binary.scm:526 @@ -774,9 +774,7 @@ msgstr "Baixando, por favor aguarde...~%" #: guix/scripts/substitute-binary.scm:528 #, scheme-format msgid "(Please consider upgrading Guile to get proper progress report.)~%" -msgstr "" -"(Por favor, considere atualizar o Guile para obter o relatório adequado do " -"progresso.)~%" +msgstr "(Por favor, considere atualizar o Guile para obter o relatório adequado do progresso.)~%" #: guix/scripts/substitute-binary.scm:545 #, scheme-format @@ -789,8 +787,7 @@ msgid "" "Internal tool to substitute a pre-built binary to a local build.\n" msgstr "" "Uso: guix substitute-binary [OPÇÃO]...\n" -"Ferramenta interna para substituir um binário pré-compilado para uma " -"compilação local.\n" +"Ferramenta interna para substituir um binário pré-compilado para uma compilação local.\n" #: guix/scripts/substitute-binary.scm:556 msgid "" @@ -799,8 +796,7 @@ msgid "" " store file names passed on the standard input" msgstr "" "\n" -" --query relata a disponibilidade de substitutos para os " -"nomes\n" +" --query relata a disponibilidade de substitutos para os nomes\n" " de arquivos de armazenamento passados na entrada\n" " padrão" @@ -813,22 +809,19 @@ msgid "" msgstr "" "\n" " --substitute ARQUIVO-ARMAZENAMENTO DESTINO\n" -" baixa ARQUIVO-ARMAZENAMENTO e armazena-o como um " -"Nar\n" +" baixa ARQUIVO-ARMAZENAMENTO e armazena-o como um Nar\n" " no arquivo DESTINO" -#: guix/scripts/substitute-binary.scm:599 -msgid "" -"ACL for archive imports seems to be uninitialized, substitutes may be " -"unavailable\n" +#: guix/scripts/substitute-binary.scm:604 +msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n" msgstr "" -#: guix/scripts/substitute-binary.scm:619 +#: guix/scripts/substitute-binary.scm:625 #, scheme-format msgid "failed to look up host '~a' (~a), substituter disabled~%" msgstr "" -#: guix/scripts/substitute-binary.scm:726 +#: guix/scripts/substitute-binary.scm:732 #, scheme-format msgid "~a: unrecognized options~%" msgstr "~a: opções desconhecidas~%" @@ -865,93 +858,112 @@ msgstr "" msgid "wrong arguments" msgstr "número errado de argumentos~%" -#: guix/scripts/system.scm:67 +#: guix/scripts/system.scm:74 #, fuzzy, scheme-format msgid "failed to open operating system file '~a': ~a~%" msgstr "falha ao conectar em \"~a\": ~a~%" -#: guix/scripts/system.scm:70 +#: guix/scripts/system.scm:78 guix/ui.scm:238 #, fuzzy, scheme-format -msgid "failed to load machine file '~a': ~s~%" +msgid "~a: ~a~%" +msgstr "~a~%" + +#: guix/scripts/system.scm:81 +#, fuzzy, scheme-format +msgid "failed to load operating system file '~a': ~s~%" msgstr "falha ao conectar em \"~a\": ~a~%" -#: guix/scripts/system.scm:86 +#: guix/scripts/system.scm:116 #, fuzzy, scheme-format msgid "failed to register '~a' under '~a'~%" msgstr "falha ao criar raiz de GC \"~a\": ~a~%" -#: guix/scripts/system.scm:102 +#: guix/scripts/system.scm:144 #, scheme-format msgid "initializing the current root file system~%" msgstr "" -#: guix/scripts/system.scm:113 +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 #, fuzzy, scheme-format msgid "failed to install GRUB on device '~a'~%" msgstr "falha ao instalar local: ~a~%" -#: guix/scripts/system.scm:121 +#: guix/scripts/system.scm:197 +#, scheme-format +msgid "activating system...~%" +msgstr "" + +#: guix/scripts/system.scm:236 +#, fuzzy, scheme-format +msgid "unrecognized boot parameters for '~a'~%" +msgstr "opção desconhecida: ~a~%" + +#: guix/scripts/system.scm:323 +#, fuzzy, scheme-format +msgid "initializing operating system under '~a'...~%" +msgstr "falha ao conectar em \"~a\": ~a~%" + +#: guix/scripts/system.scm:339 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" msgstr "" -#: guix/scripts/system.scm:124 +#: guix/scripts/system.scm:342 msgid "The valid values for ACTION are:\n" msgstr "" -#: guix/scripts/system.scm:125 +#: guix/scripts/system.scm:343 +msgid " - 'reconfigure', switch to a new operating system configuration\n" +msgstr "" + +#: guix/scripts/system.scm:345 msgid " - 'build', build the operating system without installing anything\n" msgstr "" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:347 msgid " - 'vm', build a virtual machine image that shares the host's store\n" msgstr "" -#: guix/scripts/system.scm:129 +#: guix/scripts/system.scm:349 msgid " - 'vm-image', build a freestanding virtual machine image\n" msgstr "" -#: guix/scripts/system.scm:131 +#: guix/scripts/system.scm:351 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" msgstr "" -#: guix/scripts/system.scm:133 +#: guix/scripts/system.scm:353 msgid " - 'init', initialize a root file system to run GNU.\n" msgstr "" -#: guix/scripts/system.scm:137 +#: guix/scripts/system.scm:357 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" msgstr "" -#: guix/scripts/system.scm:139 +#: guix/scripts/system.scm:359 msgid "" "\n" " --no-grub for 'init', do not install GRUB" msgstr "" -#: guix/scripts/system.scm:198 +#: guix/scripts/system.scm:422 #, fuzzy, scheme-format msgid "~a: unknown action~%" msgstr "~A: pacote desconhecido~%" -#: guix/scripts/system.scm:215 +#: guix/scripts/system.scm:439 #, fuzzy, scheme-format msgid "wrong number of arguments for action '~a'~%" msgstr "número errado de argumentos~%" -#: guix/scripts/system.scm:234 +#: guix/scripts/system.scm:459 #, scheme-format msgid "no configuration file specified~%" msgstr "" -#: guix/scripts/system.scm:272 -#, fuzzy, scheme-format -msgid "initializing operating system under '~a'...~%" -msgstr "falha ao conectar em \"~a\": ~a~%" - #: guix/gnu-maintenance.scm:373 #, scheme-format msgid "signature verification failed for `~a'~%" @@ -980,8 +992,7 @@ msgstr "falha ao instalar local: ~a~%" #: guix/ui.scm:150 msgid "" "Copyright (C) 2014 the Guix authors\n" -"License GPLv3+: GNU GPL version 3 or later \n" +"License GPLv3+: GNU GPL version 3 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" @@ -1035,9 +1046,7 @@ msgstr "~a:~a:~a: pacote \"~a\" tem uma entrada inválida: ~s~%" #: guix/ui.scm:219 #, scheme-format msgid "~a: ~a: build system `~a' does not support cross builds~%" -msgstr "" -"~a: ~a: sistema de compilação de \"~a\" não tem suporte a compilações " -"cruzadas~%" +msgstr "~a: ~a: sistema de compilação de \"~a\" não tem suporte a compilações cruzadas~%" #: guix/ui.scm:224 #, scheme-format @@ -1049,70 +1058,65 @@ msgstr "falha ao conectar em \"~a\": ~a~%" msgid "build failed: ~a~%" msgstr "compilação falhou: ~a~%" -#: guix/ui.scm:238 -#, fuzzy, scheme-format -msgid "~a: ~a~%" -msgstr "~a~%" - -#: guix/ui.scm:255 +#: guix/ui.scm:257 #, scheme-format msgid "failed to read expression ~s: ~s~%" msgstr "falha ao ler a expressão ~s: ~s~%" -#: guix/ui.scm:261 +#: guix/ui.scm:263 #, scheme-format msgid "failed to evaluate expression `~a': ~s~%" msgstr "falha ao avaliar a expressão \"~a\": ~s~%" -#: guix/ui.scm:270 +#: guix/ui.scm:272 #, fuzzy, scheme-format msgid "expression ~s does not evaluate to a package~%" msgstr "expressão \"~s\" não corresponde a um pacote~%" -#: guix/ui.scm:317 +#: guix/ui.scm:319 #, scheme-format msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgstr "~:[A seguinte derivação será compilada:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:322 +#: guix/ui.scm:324 #, scheme-format msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[O seguinte arquivo será baixado:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:328 +#: guix/ui.scm:330 #, scheme-format msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgstr "~:[A seguinte derivação será compilada:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:333 +#: guix/ui.scm:335 #, scheme-format msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[O seguinte arquivo será baixado:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:350 +#: guix/ui.scm:352 msgid "" msgstr "" -#: guix/ui.scm:378 +#: guix/ui.scm:380 #, scheme-format msgid "failed to create configuration directory `~a': ~a~%" msgstr "falha ao criar o diretório de compilação \"~a\": ~a~%" -#: guix/ui.scm:459 guix/ui.scm:473 +#: guix/ui.scm:475 guix/ui.scm:489 msgid "unknown" msgstr "desconhecido" -#: guix/ui.scm:582 +#: guix/ui.scm:598 #, scheme-format msgid "invalid argument: ~a~%" msgstr "argumento inválido: ~a~%" -#: guix/ui.scm:587 +#: guix/ui.scm:603 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Tente \"guix --help\" para mais informações.~%" -#: guix/ui.scm:617 +#: guix/ui.scm:633 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1120,21 +1124,21 @@ msgstr "" "Uso: guix COMANDO ARGUMENTOS...\n" "Executa COMANDO com ARGUMENTOS.\n" -#: guix/ui.scm:620 +#: guix/ui.scm:636 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "COMANDO deve ser um dos subcomandos listados abaixo:\n" -#: guix/ui.scm:640 +#: guix/ui.scm:656 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: comando não encontrado~%" -#: guix/ui.scm:658 +#: guix/ui.scm:674 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: faltando um nome de comando~%" -#: guix/ui.scm:666 +#: guix/ui.scm:682 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: opção \"~a\" desconhecida~%" @@ -1237,3 +1241,7 @@ msgstr "" #: guix/nar.scm:487 msgid "invalid inter-file archive mark" msgstr "" + +#, fuzzy +#~ msgid "failed to load machine file '~a': ~s~%" +#~ msgstr "falha ao conectar em \"~a\": ~a~%" diff --git a/po/guix/sr.po b/po/guix/sr.po index c1b10cea73..28bdc170ae 100644 --- a/po/guix/sr.po +++ b/po/guix/sr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: guix-0.6-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-04-05 12:37+0200\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" "PO-Revision-Date: 2014-06-19 08:51+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" @@ -14,41 +14,39 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: gnu/packages.scm:95 +#: gnu/packages.scm:102 #, scheme-format msgid "cannot access `~a': ~a~%" msgstr "не могу да приступим „~a“: ~a~%" -#: guix/scripts/build.scm:54 guix/scripts/package.scm:337 -#: guix/scripts/build.scm:53 guix/scripts/package.scm:337 +#: guix/scripts/build.scm:54 guix/scripts/package.scm:349 #, scheme-format msgid "ambiguous package specification `~a'~%" msgstr "нејасна одредница пакета „~a“~%" -#: guix/scripts/build.scm:54 guix/scripts/package.scm:339 +#: guix/scripts/build.scm:55 guix/scripts/package.scm:351 #, scheme-format msgid "choosing ~a from ~a~%" msgstr "бирам ~a из ~a~%" -#: guix/scripts/build.scm:60 +#: guix/scripts/build.scm:61 #, scheme-format msgid "~A: package not found for version ~a~%" msgstr "~A: нисам пронашао пакет за издање ~a~%" -#: guix/scripts/build.scm:62 +#: guix/scripts/build.scm:63 #, scheme-format msgid "~A: unknown package~%" msgstr "~A: непознат пакет~%" -#: guix/scripts/build.scm:85 +#: guix/scripts/build.scm:86 #, scheme-format msgid "failed to create GC root `~a': ~a~%" msgstr "нисам успео да направим ГЦ корен „~a“: ~a~%" -#: guix/scripts/build.scm:122 +#: guix/scripts/build.scm:123 msgid "" "\n" " -K, --keep-failed keep build tree of failed builds" @@ -56,7 +54,7 @@ msgstr "" "\n" " -K, --keep-failed задржава стабло изградње неуспелих изградњи" -#: guix/scripts/build.scm:124 +#: guix/scripts/build.scm:125 msgid "" "\n" " -n, --dry-run do not build the derivations" @@ -64,7 +62,7 @@ msgstr "" "\n" " -n, --dry-run не изграђује изведенице" -#: guix/scripts/build.scm:126 +#: guix/scripts/build.scm:127 msgid "" "\n" " --fallback fall back to building when the substituter fails" @@ -72,25 +70,23 @@ msgstr "" "\n" " --fallback враћа се на изградњу када заменик не успе" -#: guix/scripts/build.scm:128 +#: guix/scripts/build.scm:129 msgid "" "\n" " --no-substitutes build instead of resorting to pre-built substitutes" msgstr "" "\n" -" --no-substitutes изграђује уместо да поново ређа заменике " -"предизградње" +" --no-substitutes изграђује уместо да поново ређа заменике предизградње" -#: guix/scripts/build.scm:130 +#: guix/scripts/build.scm:131 msgid "" "\n" " --no-build-hook do not attempt to offload builds via the build hook" msgstr "" "\n" -" --no-build-hook не покушава да растерети изградњу путем предворја " -"изградње" +" --no-build-hook не покушава да растерети изградњу путем предворја изградње" -#: guix/scripts/build.scm:132 +#: guix/scripts/build.scm:133 msgid "" "\n" " --max-silent-time=SECONDS\n" @@ -100,7 +96,7 @@ msgstr "" " --max-silent-time=СЕКУНДЕ\n" " означава изградњу неупелом након СЕКУНДЕ мировања" -#: guix/scripts/build.scm:135 +#: guix/scripts/build.scm:136 msgid "" "\n" " --timeout=SECONDS mark the build as failed after SECONDS of activity" @@ -109,7 +105,7 @@ msgstr "" " --timeout=СЕКУНДЕ\n" " означава изградњу неуспелом након СЕКУНДЕ рада" -#: guix/scripts/build.scm:137 +#: guix/scripts/build.scm:138 msgid "" "\n" " --verbosity=LEVEL use the given verbosity LEVEL" @@ -117,21 +113,20 @@ msgstr "" "\n" " --verbosity=НИВО користи дати НИВО опширности" -#: guix/scripts/build.scm:139 +#: guix/scripts/build.scm:140 msgid "" "\n" " -c, --cores=N allow the use of up to N CPU cores for the build" msgstr "" "\n" -" -c, --cores=N омогућава коришћење до N језгра процесора за " -"изградњу" +" -c, --cores=N омогућава коришћење до N језгра процесора за изградњу" -#: guix/scripts/build.scm:204 +#: guix/scripts/build.scm:206 #, scheme-format msgid "~a: not a number~%" msgstr "~a: није број~%" -#: guix/scripts/build.scm:220 +#: guix/scripts/build.scm:223 msgid "" "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n" "Build the given PACKAGE-OR-DERIVATION and return their output paths.\n" @@ -139,7 +134,7 @@ msgstr "" "Употреба: guix build [ОПЦИЈА]... ПАКЕТ-ИЛИ-ИЗВЕДНИЦА...\n" "Изграђује дати ПАКЕТ-ИЛИ-ИЗВЕДНИЦУ и исписује њихове путање излаза.\n" -#: guix/scripts/build.scm:222 +#: guix/scripts/build.scm:225 msgid "" "\n" " -e, --expression=EXPR build the package or derivation EXPR evaluates to" @@ -147,7 +142,7 @@ msgstr "" "\n" " -e, --expression=ИЗРАЗ изграђује процене ИЗРАЗА пакета или изведенице на" -#: guix/scripts/build.scm:224 +#: guix/scripts/build.scm:227 msgid "" "\n" " -S, --source build the packages' source derivations" @@ -155,7 +150,7 @@ msgstr "" "\n" " -S, --source изграђује изведенице извора пакета" -#: guix/scripts/build.scm:226 +#: guix/scripts/build.scm:229 msgid "" "\n" " -s, --system=SYSTEM attempt to build for SYSTEM--e.g., \"i686-linux\"" @@ -163,7 +158,7 @@ msgstr "" "\n" " -s, --system=СИСТЕМ покушава да изгради за СИСТЕМ--e.g., „i686-linux“" -#: guix/scripts/build.scm:228 +#: guix/scripts/build.scm:231 msgid "" "\n" " --target=TRIPLET cross-build for TRIPLET--e.g., \"armel-linux-gnu\"" @@ -171,7 +166,7 @@ msgstr "" "\n" " --target=ТРОЈКА унакрсно изграђује за ТРОЈКУ--e.g., „armel-linux-gnu“" -#: guix/scripts/build.scm:230 +#: guix/scripts/build.scm:233 msgid "" "\n" " --with-source=SOURCE\n" @@ -181,7 +176,7 @@ msgstr "" " --with-source=ИЗВОР\n" " користи ИЗВОР приликом изградње одговарајућег пакета" -#: guix/scripts/build.scm:233 +#: guix/scripts/build.scm:236 msgid "" "\n" " -d, --derivations return the derivation paths of the given packages" @@ -189,18 +184,17 @@ msgstr "" "\n" " -d, --derivations исписује путање изведенице датог пакета" -#: guix/scripts/build.scm:235 +#: guix/scripts/build.scm:238 msgid "" "\n" " -r, --root=FILE make FILE a symlink to the result, and register it\n" " as a garbage collector root" msgstr "" "\n" -" -r, --root=ДАТОТЕКА чини ДАТОТЕКУ симболичком везом ка резултату, и " -"бележи је\n" +" -r, --root=ДАТОТЕКА чини ДАТОТЕКУ симболичком везом ка резултату, и бележи је\n" " као корен скупљача ђубра" -#: guix/scripts/build.scm:238 +#: guix/scripts/build.scm:241 msgid "" "\n" " --log-file return the log file names for the given derivations" @@ -208,10 +202,10 @@ msgstr "" "\n" " --log-file исписује називе датотеке дневника за дате изведенице" -#: guix/scripts/build.scm:243 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58 +#: guix/scripts/build.scm:246 guix/scripts/download.scm:53 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:77 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 msgid "" "\n" " -h, --help display this help and exit" @@ -219,10 +213,10 @@ msgstr "" "\n" " -h, --help приказује ову помоћ и излази" -#: guix/scripts/build.scm:245 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60 +#: guix/scripts/build.scm:248 guix/scripts/download.scm:55 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:79 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 msgid "" "\n" " -V, --version display version information and exit" @@ -230,19 +224,19 @@ msgstr "" "\n" " -V, --version приказује податке о издању и излази" -#: guix/scripts/build.scm:360 +#: guix/scripts/build.scm:368 #, scheme-format msgid "sources do not match any package:~{ ~a~}~%" msgstr "извори не одговарају ниједном пакету:~{ ~a~}~%" -#: guix/scripts/build.scm:389 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:744 guix/scripts/gc.scm:152 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:116 +#: guix/scripts/build.scm:397 guix/scripts/download.scm:96 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: непозната опција~%" -#: guix/scripts/build.scm:417 +#: guix/scripts/build.scm:425 #, scheme-format msgid "no build log for '~a'~%" msgstr "нема дневника изградње за „~a“~%" @@ -286,73 +280,73 @@ msgstr "~a: нисам успео да обрадим путању~%" msgid "~a: download failed~%" msgstr "~a: преузимање није успело~%" -#: guix/scripts/package.scm:76 +#: guix/scripts/package.scm:88 #, scheme-format msgid "failed to build the empty profile~%" msgstr "нисам успео да изградим празан профил~%" -#: guix/scripts/package.scm:85 +#: guix/scripts/package.scm:97 #, scheme-format msgid "switching from generation ~a to ~a~%" msgstr "пребацујем се са генерације ~a на ~a~%" -#: guix/scripts/package.scm:96 guix/scripts/package.scm:852 -#: guix/scripts/package.scm:964 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "профил „~a“ не постоји~%" -#: guix/scripts/package.scm:100 +#: guix/scripts/package.scm:112 #, scheme-format msgid "nothing to do: already at the empty profile~%" msgstr "ништа за урадити: већ сам у празном профилу~%" -#: guix/scripts/package.scm:185 +#: guix/scripts/package.scm:197 #, scheme-format msgid "The following package would be removed:~%~{~a~%~}~%" msgstr "Следећи пакети би требали бити уклоњени:~%~{~a~%~}~%" -#: guix/scripts/package.scm:190 +#: guix/scripts/package.scm:202 #, scheme-format msgid "The following package will be removed:~%~{~a~%~}~%" msgstr "Следећи пакети ће бити уклоњени:~%~{~a~%~}~%" -#: guix/scripts/package.scm:202 +#: guix/scripts/package.scm:214 #, scheme-format msgid "The following package would be installed:~%~{~a~%~}~%" msgstr "Следећи пакети би требали бити инсталирани:~%~{~a~%~}~%" -#: guix/scripts/package.scm:207 +#: guix/scripts/package.scm:219 #, scheme-format msgid "The following package will be installed:~%~{~a~%~}~%" msgstr "Следећи пакети ће бити инсталирани:~%~{~a~%~}~%" -#: guix/scripts/package.scm:327 +#: guix/scripts/package.scm:339 #, scheme-format msgid "package `~a' lacks output `~a'~%" msgstr "пакету „~a“ недостаје излаз „~a“~%" -#: guix/scripts/package.scm:344 +#: guix/scripts/package.scm:356 #, scheme-format msgid "~a: package not found~%" msgstr "~a: нисам пронашао пакет~%" -#: guix/scripts/package.scm:379 +#: guix/scripts/package.scm:391 #, scheme-format msgid "looking for the latest release of GNU ~a..." msgstr "тражим последње издање Гнуа ~a..." -#: guix/scripts/package.scm:383 +#: guix/scripts/package.scm:395 #, scheme-format msgid "~a: note: using ~a but ~a is available upstream~%" msgstr "~a: напомена: користим ~a али ~a је доступно узводно~%" -#: guix/scripts/package.scm:455 +#: guix/scripts/package.scm:467 #, scheme-format msgid "The following environment variable definitions may be needed:~%" msgstr "Следеће одреднице променљиве окружења могу бити потребне:~%" -#: guix/scripts/package.scm:471 +#: guix/scripts/package.scm:483 msgid "" "Usage: guix package [OPTION]... PACKAGES...\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n" @@ -360,7 +354,7 @@ msgstr "" "Употреба: guix package [ОПЦИЈА]... ПАКЕТИ...\n" "Инсталирајте, уклоните, или доградите ПАКЕТЕ у једном прелазу.\n" -#: guix/scripts/package.scm:473 +#: guix/scripts/package.scm:485 msgid "" "\n" " -i, --install=PACKAGE install PACKAGE" @@ -368,7 +362,7 @@ msgstr "" "\n" " -i, --install=ПАКЕТ инсталира ПАКЕТ" -#: guix/scripts/package.scm:475 +#: guix/scripts/package.scm:487 msgid "" "\n" " -e, --install-from-expression=EXP\n" @@ -378,7 +372,7 @@ msgstr "" " -e, --install-from-expression=ИЗР\n" " инсталира процене ИЗР пакета у" -#: guix/scripts/package.scm:478 +#: guix/scripts/package.scm:490 msgid "" "\n" " -r, --remove=PACKAGE remove PACKAGE" @@ -386,16 +380,15 @@ msgstr "" "\n" " -r, --remove=ПАКЕТ уклања ПАКЕТ" -#: guix/scripts/package.scm:480 +#: guix/scripts/package.scm:492 msgid "" "\n" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" msgstr "" "\n" -" -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају " -"РЕГИЗРАЗУ" +" -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају РЕГИЗРАЗУ" -#: guix/scripts/package.scm:482 +#: guix/scripts/package.scm:494 msgid "" "\n" " --roll-back roll back to the previous generation" @@ -403,7 +396,7 @@ msgstr "" "\n" " --roll-back враћа се на претходну генерацију" -#: guix/scripts/package.scm:484 +#: guix/scripts/package.scm:496 msgid "" "\n" " --search-paths display needed environment variable definitions" @@ -411,7 +404,7 @@ msgstr "" "\n" " --search-paths приказује потребне одреднице променљиве окружења" -#: guix/scripts/package.scm:486 +#: guix/scripts/package.scm:498 msgid "" "\n" " -l, --list-generations[=PATTERN]\n" @@ -421,7 +414,7 @@ msgstr "" " -l, --list-generations[=ШАБЛОН]\n" " исписује генерације које одговарају ШАБЛОНУ" -#: guix/scripts/package.scm:489 +#: guix/scripts/package.scm:501 msgid "" "\n" " -d, --delete-generations[=PATTERN]\n" @@ -431,7 +424,7 @@ msgstr "" " -d, --delete-generations[=ШАБЛОН]\n" " брише генерације које одговарају ШАБЛОНУ" -#: guix/scripts/package.scm:492 +#: guix/scripts/package.scm:504 msgid "" "\n" " -p, --profile=PROFILE use PROFILE instead of the user's default profile" @@ -439,7 +432,7 @@ msgstr "" "\n" " -p, --profile=ПРОФИЛ користи ПРОФИЛ уместо корисничког подразумеваног" -#: guix/scripts/package.scm:495 +#: guix/scripts/package.scm:507 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the profile" @@ -447,7 +440,7 @@ msgstr "" "\n" " --bootstrap користи Гуиле почетног учитавања да изгради профил" -#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75 +#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75 msgid "" "\n" " --verbose produce verbose output" @@ -455,7 +448,7 @@ msgstr "" "\n" " --verbose ствара опширан излаз" -#: guix/scripts/package.scm:500 +#: guix/scripts/package.scm:512 msgid "" "\n" " -s, --search=REGEXP search in synopsis and description using REGEXP" @@ -463,7 +456,7 @@ msgstr "" "\n" " -s, --search=РЕГИЗР тражи у скици и опису користећи РЕГИЗР" -#: guix/scripts/package.scm:502 +#: guix/scripts/package.scm:514 msgid "" "\n" " -I, --list-installed[=REGEXP]\n" @@ -471,10 +464,9 @@ msgid "" msgstr "" "\n" " -I, --list-installed[=РЕГИЗР]\n" -" исписује инсталиране пакете који одговарају " -"РЕГИЗРАЗУ" +" исписује инсталиране пакете који одговарају РЕГИЗРАЗУ" -#: guix/scripts/package.scm:505 +#: guix/scripts/package.scm:517 msgid "" "\n" " -A, --list-available[=REGEXP]\n" @@ -484,62 +476,71 @@ msgstr "" " -A, --list-available[=РЕГИЗР]\n" " исписује доступне пакете који одговарају РЕГИЗРАЗУ" -#: guix/scripts/package.scm:748 +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=ПАКЕТ инсталира ПАКЕТ" + +#: guix/scripts/package.scm:767 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: страни аргумент~%" -#: guix/scripts/package.scm:763 +#: guix/scripts/package.scm:782 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Покушајте „info '(guix) Invoking guix package'“ за више података.~%" -#: guix/scripts/package.scm:785 +#: guix/scripts/package.scm:804 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "грешка: приликом стварања директоријума „~a“: ~a~%" -#: guix/scripts/package.scm:789 +#: guix/scripts/package.scm:808 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Направите директоријум „~a“, у вашем власништву.~%" -#: guix/scripts/package.scm:796 +#: guix/scripts/package.scm:815 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "грешка: директоријум „~a“ није у вашем власништву~%" -#: guix/scripts/package.scm:799 +#: guix/scripts/package.scm:818 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Поставите као власника ~s над „~a“.~%" -#: guix/scripts/package.scm:822 +#: guix/scripts/package.scm:843 #, scheme-format msgid "deleting ~a~%" msgstr "бришем ~a~%" -#: guix/scripts/package.scm:875 guix/scripts/package.scm:980 +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "неисправна синтакса: ~a~%" -#: guix/scripts/package.scm:904 +#: guix/scripts/package.scm:925 #, scheme-format msgid "nothing to be done~%" msgstr "ништа неће бити урађено~%" -#: guix/scripts/package.scm:927 +#: guix/scripts/package.scm:948 #, scheme-format msgid "~a package in profile~%" msgstr "~a пакет у профилу~%" -#: guix/scripts/package.scm:942 +#: guix/scripts/package.scm:963 #, scheme-format msgid "Generation ~a\t~a" msgstr "Генерација ~a\t~a" -#: guix/scripts/package.scm:949 +#: guix/scripts/package.scm:970 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(текуће)~%" @@ -610,17 +611,7 @@ msgstr "" "\n" " --referrers исписује убрајаче ПУТАЊА" -#: guix/scripts/gc.scm:92 -#, scheme-format -msgid "unknown unit: ~a~%" -msgstr "непозната јединица: ~a~%" - -#: guix/scripts/gc.scm:93 -#, scheme-format -msgid "invalid number: ~a~%" -msgstr "неисправан број: ~a~%" - -#: guix/scripts/gc.scm:114 +#: guix/scripts/gc.scm:84 #, scheme-format msgid "invalid amount of storage: ~a~%" msgstr "неисправан износ складишта: ~a~%" @@ -652,7 +643,7 @@ msgstr "" msgid "unrecognized option: ~a~%" msgstr "непозната опција: ~a~%" -#: guix/scripts/hash.scm:134 guix/ui.scm:193 +#: guix/scripts/hash.scm:134 guix/ui.scm:233 #, scheme-format msgid "~a~%" msgstr "~a~%" @@ -684,8 +675,7 @@ msgid "" " --bootstrap use the bootstrap Guile to build the new Guix" msgstr "" "\n" -" --bootstrap користи Гуиле почетног учитавања да изгради нови " -"Гуикс" +" --bootstrap користи Гуиле почетног учитавања да изгради нови Гуикс" #: guix/scripts/pull.scm:117 #, scheme-format @@ -771,8 +761,8 @@ msgid "signature on '~a' is corrupt~%" msgstr "потпис на „~a“ је оштећен~%" #: guix/scripts/substitute-binary.scm:338 -#, scheme-format -msgid "narinfo for '~a' lacks a signature~%" +#, fuzzy, scheme-format +msgid "substitute at '~a' lacks a signature~%" msgstr "нарподацима за „~a“ недостаје потпис~%" #: guix/scripts/substitute-binary.scm:526 @@ -783,8 +773,7 @@ msgstr "Преузима, молим сачекајте...~%" #: guix/scripts/substitute-binary.scm:528 #, scheme-format msgid "(Please consider upgrading Guile to get proper progress report.)~%" -msgstr "" -"(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" +msgstr "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" #: guix/scripts/substitute-binary.scm:545 #, scheme-format @@ -806,8 +795,7 @@ msgid "" " store file names passed on the standard input" msgstr "" "\n" -" --query извештава о доступности заменика за називе " -"датотека\n" +" --query извештава о доступности заменика за називе датотека\n" " складишта прослеђених на стандардном улазу" #: guix/scripts/substitute-binary.scm:559 @@ -819,23 +807,19 @@ msgid "" msgstr "" "\n" " --substitute ОДРЕДИШТЕ СКЛАДИШНЕ-ДАТОТЕКЕ\n" -" преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар " -"удатотеци\n" +" преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар удатотеци\n" " ОДРЕДИШТЕ" -#: guix/scripts/substitute-binary.scm:599 -msgid "" -"ACL for archive imports seems to be uninitialized, substitutes may be " -"unavailable\n" -msgstr "" -"АЦЛ за увоз архиве изгледа да је неупотребљив, замене могу бити недоступне\n" +#: guix/scripts/substitute-binary.scm:604 +msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n" +msgstr "АЦЛ за увоз архиве изгледа да је неупотребљив, замене могу бити недоступне\n" -#: guix/scripts/substitute-binary.scm:619 +#: guix/scripts/substitute-binary.scm:625 #, scheme-format msgid "failed to look up host '~a' (~a), substituter disabled~%" msgstr "нисам успео да потражим домаћина „~a“ (~a), замењивач је искључен~%" -#: guix/scripts/substitute-binary.scm:726 +#: guix/scripts/substitute-binary.scm:732 #, scheme-format msgid "~a: unrecognized options~%" msgstr "~a: непозната опција~%" @@ -860,7 +844,7 @@ msgstr "грешка: неовлашћени јавни кључ: ~a~%" msgid "error: corrupt signature data: ~a~%" msgstr "грешка: оштећени подаци потписа: ~a~%" -#: guix/scripts/authenticate.scm:110 +#: guix/scripts/authenticate.scm:126 msgid "" "Usage: guix authenticate OPTION...\n" "Sign or verify the signature on the given file. This tool is meant to\n" @@ -870,21 +854,56 @@ msgstr "" "Потпишите или проверите потпис на датој датотеци. Овај алат је замишљен\n" "за унутрашњу употребу гуих-демоном.\n" -#: guix/scripts/authenticate.scm:116 +#: guix/scripts/authenticate.scm:132 msgid "wrong arguments" msgstr "погрешни аргуменати" -#: guix/scripts/system.scm:59 +#: guix/scripts/system.scm:74 #, scheme-format msgid "failed to open operating system file '~a': ~a~%" msgstr "нисам успео да отворим датотеку оперативног система „~a“: ~a~%" -#: guix/scripts/system.scm:62 +#: guix/scripts/system.scm:78 guix/ui.scm:238 #, scheme-format -msgid "failed to load machine file '~a': ~s~%" -msgstr "нисам успео да учитам датотеку машине „~a“: ~s~%" +msgid "~a: ~a~%" +msgstr "~a: ~a~%" -#: guix/scripts/system.scm:71 +#: guix/scripts/system.scm:81 +#, fuzzy, scheme-format +msgid "failed to load operating system file '~a': ~s~%" +msgstr "нисам успео да отворим датотеку оперативног система „~a“: ~a~%" + +#: guix/scripts/system.scm:116 +#, fuzzy, scheme-format +msgid "failed to register '~a' under '~a'~%" +msgstr "нисам успео да направим ГЦ корен „~a“: ~a~%" + +#: guix/scripts/system.scm:144 +#, scheme-format +msgid "initializing the current root file system~%" +msgstr "" + +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 +#, fuzzy, scheme-format +msgid "failed to install GRUB on device '~a'~%" +msgstr "нисам успео да инсталирам локалитет: ~a~%" + +#: guix/scripts/system.scm:197 +#, scheme-format +msgid "activating system...~%" +msgstr "" + +#: guix/scripts/system.scm:236 +#, fuzzy, scheme-format +msgid "unrecognized boot parameters for '~a'~%" +msgstr "непозната опција: ~a~%" + +#: guix/scripts/system.scm:323 +#, fuzzy, scheme-format +msgid "initializing operating system under '~a'...~%" +msgstr "нисам успео да отворим датотеку оперативног система „~a“: ~a~%" + +#: guix/scripts/system.scm:339 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" @@ -892,69 +911,99 @@ msgstr "" "Употреба: guix system [ОПЦИЈА] РАДЊА ДАТОТЕКА\n" "Изграђује оперативни систем објављен у ДАТОТЕЦИ у складу са РАДЊОМ.\n" -#: guix/scripts/system.scm:73 -msgid "" -"Currently the only valid value for ACTION is 'vm', which builds\n" -"a virtual machine of the given operating system.\n" +#: guix/scripts/system.scm:342 +msgid "The valid values for ACTION are:\n" msgstr "" -"Тренутно једина исправна вредност за РАДЊУ је „vm“, која гради\n" -"виртуелну машину датог оперативног система.\n" -#: guix/scripts/system.scm:121 -#, scheme-format -msgid "~a: extraneous argument~%" -msgstr "~a: страни аргумент~%" +#: guix/scripts/system.scm:343 +msgid " - 'reconfigure', switch to a new operating system configuration\n" +msgstr "" -#: guix/scripts/system.scm:126 +#: guix/scripts/system.scm:345 +msgid " - 'build', build the operating system without installing anything\n" +msgstr "" + +#: guix/scripts/system.scm:347 +msgid " - 'vm', build a virtual machine image that shares the host's store\n" +msgstr "" + +#: guix/scripts/system.scm:349 +msgid " - 'vm-image', build a freestanding virtual machine image\n" +msgstr "" + +#: guix/scripts/system.scm:351 +msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" +msgstr "" + +#: guix/scripts/system.scm:353 +msgid " - 'init', initialize a root file system to run GNU.\n" +msgstr "" + +#: guix/scripts/system.scm:357 +msgid "" +"\n" +" --image-size=SIZE for 'vm-image', produce an image of SIZE" +msgstr "" + +#: guix/scripts/system.scm:359 +msgid "" +"\n" +" --no-grub for 'init', do not install GRUB" +msgstr "" + +#: guix/scripts/system.scm:422 #, scheme-format msgid "~a: unknown action~%" msgstr "~a: непозната радња~%" -#: guix/scripts/system.scm:135 +#: guix/scripts/system.scm:439 +#, fuzzy, scheme-format +msgid "wrong number of arguments for action '~a'~%" +msgstr "погрешан број аргумената~%" + +#: guix/scripts/system.scm:459 #, scheme-format msgid "no configuration file specified~%" msgstr "није наведена датотека подешавања~%" -#: guix/gnu-maintenance.scm:364 +#: guix/gnu-maintenance.scm:373 #, scheme-format msgid "signature verification failed for `~a'~%" msgstr "није успела провера потписа за „~a“~%" -#: guix/gnu-maintenance.scm:366 +#: guix/gnu-maintenance.scm:375 #, scheme-format msgid "(could be because the public key is not in your keyring)~%" msgstr "(може бити зато што јавни кључ није у вашем привеску)~%" -#: guix/gnu-maintenance.scm:441 +#: guix/gnu-maintenance.scm:450 #, scheme-format msgid "~a: could not locate source file" msgstr "~a: не могу да пронађем изворну датотеку" -#: guix/gnu-maintenance.scm:446 +#: guix/gnu-maintenance.scm:455 #, scheme-format msgid "~a: ~a: no `version' field in source; skipping~%" msgstr "~a: ~a: нема поља „version“ у извору; прескачем~%" -#: guix/ui.scm:123 +#: guix/ui.scm:131 #, scheme-format msgid "failed to install locale: ~a~%" msgstr "нисам успео да инсталирам локалитет: ~a~%" -#: guix/ui.scm:142 +#: guix/ui.scm:150 msgid "" "Copyright (C) 2014 the Guix authors\n" -"License GPLv3+: GNU GPL version 3 or later \n" +"License GPLv3+: GNU GPL version 3 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Ауторска права (C) 2014 аутори Гуикса\n" -"Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или касније \n" +"Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или касније \n" "Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n" "Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\n" -#: guix/ui.scm:150 +#: guix/ui.scm:158 #, scheme-format msgid "" "\n" @@ -963,7 +1012,7 @@ msgstr "" "\n" "Грешке пријавите на: ~a." -#: guix/ui.scm:152 +#: guix/ui.scm:160 #, scheme-format msgid "" "\n" @@ -972,7 +1021,7 @@ msgstr "" "\n" "~a матична страница: <~a>" -#: guix/ui.scm:154 +#: guix/ui.scm:162 msgid "" "\n" "General help using GNU software: " @@ -980,95 +1029,100 @@ msgstr "" "\n" "Општа помоћ користећи ГНУ софтвер: " -#: guix/ui.scm:161 +#: guix/ui.scm:169 #, scheme-format msgid "~a: invalid number~%" msgstr "~a: неисправан број~%" -#: guix/ui.scm:172 +#: guix/ui.scm:186 +#, scheme-format +msgid "invalid number: ~a~%" +msgstr "неисправан број: ~a~%" + +#: guix/ui.scm:201 +#, scheme-format +msgid "unknown unit: ~a~%" +msgstr "непозната јединица: ~a~%" + +#: guix/ui.scm:212 #, scheme-format msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%" msgstr "~a:~a:~a: пакет „~a“ садржи неисправан улаз: ~s~%" -#: guix/ui.scm:179 +#: guix/ui.scm:219 #, scheme-format msgid "~a: ~a: build system `~a' does not support cross builds~%" msgstr "~a: ~a: систем изградње „~a“ не садржи унакрсне изградње~%" -#: guix/ui.scm:184 +#: guix/ui.scm:224 #, scheme-format msgid "failed to connect to `~a': ~a~%" msgstr "нисам успео да се повежем на „~a“: ~a~%" -#: guix/ui.scm:189 +#: guix/ui.scm:229 #, scheme-format msgid "build failed: ~a~%" msgstr "изградња није успела: ~a~%" -#: guix/ui.scm:198 -#, scheme-format -msgid "~a: ~a~%" -msgstr "~a: ~a~%" - -#: guix/ui.scm:207 +#: guix/ui.scm:257 #, scheme-format msgid "failed to read expression ~s: ~s~%" msgstr "нисам успео да прочитам израз ~s: ~s~%" -#: guix/ui.scm:213 +#: guix/ui.scm:263 #, scheme-format msgid "failed to evaluate expression `~a': ~s~%" msgstr "нисам успео да проценим израз „~a“: ~s~%" -#: guix/ui.scm:222 +#: guix/ui.scm:272 #, scheme-format msgid "expression ~s does not evaluate to a package~%" msgstr "израз „~s“ се не процењује на пакет~%" -#: guix/ui.scm:268 +#: guix/ui.scm:319 #, scheme-format msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgstr "~:[Следећа изводница би требала бити изграђена:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:273 +#: guix/ui.scm:324 #, scheme-format msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[Следећа датотека би требала бити преузета:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:279 +#: guix/ui.scm:330 #, scheme-format msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgstr "~:[Следећа изводница ће бити изграђена:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:284 +#: guix/ui.scm:335 #, scheme-format msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[Следећа датотека ће бити преузета:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:301 +#: guix/ui.scm:352 msgid "" msgstr "<непознато место>" -#: guix/ui.scm:329 +#: guix/ui.scm:380 #, scheme-format msgid "failed to create configuration directory `~a': ~a~%" msgstr "нисам успео да направим директоријум подешавања „~a“: ~a~%" -#: guix/ui.scm:410 guix/ui.scm:424 +#: guix/ui.scm:475 guix/ui.scm:489 msgid "unknown" msgstr "непознато" -#: guix/ui.scm:533 +#: guix/ui.scm:598 #, scheme-format msgid "invalid argument: ~a~%" msgstr "неисправан аргумент: ~a~%" -#: guix/ui.scm:538 +#: guix/ui.scm:603 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Пробајте „guix --help“ за више података.~%" -#: guix/ui.scm:568 +#: guix/ui.scm:633 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1076,118 +1130,131 @@ msgstr "" "Употреба: guix НАРЕДБА АРГУМЕНТИ...\n" "Покрените НАРЕДБУ са АРГУМЕНТИМА.\n" -#: guix/ui.scm:571 +#: guix/ui.scm:636 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "НАРЕДБА мора бити једна од подкоманди наведених испод:\n" -#: guix/ui.scm:591 +#: guix/ui.scm:656 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: нисам пронашао наредбу~%" -#: guix/ui.scm:609 +#: guix/ui.scm:674 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: недостаје назив наредбе~%" -#: guix/ui.scm:617 +#: guix/ui.scm:682 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: непозната опција „~a“~%" -#: guix/http-client.scm:205 +#: guix/http-client.scm:217 #, scheme-format msgid "using Guile ~a, which does not support ~s encoding~%" msgstr "користим Гуиле ~a, који не подржава ~s кодирање~%" -#: guix/http-client.scm:208 +#: guix/http-client.scm:220 #, scheme-format msgid "download failed; use a newer Guile~%" msgstr "преузимање није успело; користите новији Гуиле~%" -#: guix/http-client.scm:220 +#: guix/http-client.scm:232 #, scheme-format msgid "following redirection to `~a'...~%" msgstr "пратим преусмеравање на „~a“...~%" -#: guix/http-client.scm:229 +#: guix/http-client.scm:241 msgid "download failed" msgstr "преузимање није успело" -#: guix/nar.scm:133 +#: guix/nar.scm:134 msgid "unexpected executable file marker" msgstr "неочекивани означавач извршне датотеке" -#: guix/nar.scm:140 +#: guix/nar.scm:141 msgid "unsupported nar file type" msgstr "неподржана врста нар датотеке" -#: guix/nar.scm:203 +#: guix/nar.scm:209 msgid "unsupported file type" msgstr "неподржана врста датотеке" -#: guix/nar.scm:213 +#: guix/nar.scm:219 msgid "invalid nar signature" msgstr "неисправан нар потпис" -#: guix/nar.scm:224 +#: guix/nar.scm:230 msgid "invalid nar end-of-file marker" msgstr "неисправан нар означавач краја датотеке" -#: guix/nar.scm:238 +#: guix/nar.scm:244 msgid "invalid symlink tokens" msgstr "неисправна обележја симболичке везе" -#: guix/nar.scm:257 +#: guix/nar.scm:263 msgid "unexpected directory entry termination" msgstr "неочекивано окончање уноса директоријума" -#: guix/nar.scm:266 +#: guix/nar.scm:272 msgid "unexpected directory inter-entry marker" msgstr "неочекивани означавач унутрашњег уноса директоријума " -#: guix/nar.scm:271 +#: guix/nar.scm:277 msgid "unsupported nar entry type" msgstr "неподржана врста нар уноса" -#: guix/nar.scm:381 +#: guix/nar.scm:376 msgid "signature is not a valid s-expression" msgstr "потпис није исправан с-израз" -#: guix/nar.scm:390 +#: guix/nar.scm:385 msgid "invalid signature" msgstr "неисправан потпис" -#: guix/nar.scm:394 +#: guix/nar.scm:389 msgid "invalid hash" msgstr "неисправан хеш" -#: guix/nar.scm:402 +#: guix/nar.scm:397 msgid "unauthorized public key" msgstr "неовлашћени јавни кључ" -#: guix/nar.scm:407 +#: guix/nar.scm:402 msgid "corrupt signature data" msgstr "оштећени подаци потписа" -#: guix/nar.scm:424 +#: guix/nar.scm:422 msgid "corrupt file set archive" msgstr "оштећена датотека скупа архиве" -#: guix/nar.scm:434 +#: guix/nar.scm:432 #, scheme-format msgid "importing file or directory '~a'...~%" msgstr "увозим датотеку или директоријум „~a“...~%" -#: guix/nar.scm:443 +#: guix/nar.scm:441 #, scheme-format msgid "found valid signature for '~a'~%" msgstr "нађох исправан потпис за „~a“~%" -#: guix/nar.scm:452 +#: guix/nar.scm:448 msgid "imported file lacks a signature" msgstr "увезеној датотеци недостаје потпис" -#: guix/nar.scm:459 +#: guix/nar.scm:487 msgid "invalid inter-file archive mark" msgstr "неисправан знак архиве унутрашње датотеке" + +#~ msgid "failed to load machine file '~a': ~s~%" +#~ msgstr "нисам успео да учитам датотеку машине „~a“: ~s~%" + +#~ msgid "" +#~ "Currently the only valid value for ACTION is 'vm', which builds\n" +#~ "a virtual machine of the given operating system.\n" +#~ msgstr "" +#~ "Тренутно једина исправна вредност за РАДЊУ је „vm“, која гради\n" +#~ "виртуелну машину датог оперативног система.\n" + +#~ msgid "~a: extraneous argument~%" +#~ msgstr "~a: страни аргумент~%" diff --git a/po/guix/vi.po b/po/guix/vi.po index 260032c9db..9bd407f2a2 100644 --- a/po/guix/vi.po +++ b/po/guix/vi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-07-13 17:06+0200\n" +"POT-Creation-Date: 2014-07-25 00:55+0200\n" "PO-Revision-Date: 2014-07-14 08:38+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" @@ -20,7 +20,7 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "X-Generator: Poedit 1.5.5\n" -#: gnu/packages.scm:95 +#: gnu/packages.scm:102 #, scheme-format msgid "cannot access `~a': ~a~%" msgstr "không thể truy cập `~a': ~a~%" @@ -206,9 +206,9 @@ msgstr "" " --log-file trả về tên của tập-tin nhật ký cho dẫn xuất đã cho" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362 msgid "" "\n" " -h, --help display this help and exit" @@ -217,9 +217,9 @@ msgstr "" " -h, --help hiển thị trợ giúp này rồi thoát" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:527 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364 msgid "" "\n" " -V, --version display version information and exit" @@ -233,8 +233,8 @@ msgid "sources do not match any package:~{ ~a~}~%" msgstr "mã nguồn không khớp bất kỳ gói nào:~{ ~a~}~%" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386 +#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: tùy chọn không được chấp nhận~%" @@ -293,8 +293,8 @@ msgstr "gặp lỗi khi xây dựng hồ sơ trống rỗng~%" msgid "switching from generation ~a to ~a~%" msgstr "chuyển từ thế hệ ~a sang ~a~%" -#: guix/scripts/package.scm:108 guix/scripts/package.scm:866 -#: guix/scripts/package.scm:978 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:873 +#: guix/scripts/package.scm:985 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "hồ sơ `~a' không tồn tại~%" @@ -480,62 +480,71 @@ msgstr "" " -A, --list-available[=BIỂU-THỨC-CHÍNH-QUY]\n" " kiệt kê các gói khớp BTCQ" -#: guix/scripts/package.scm:760 +#: guix/scripts/package.scm:520 +#, fuzzy +msgid "" +"\n" +" --show=PACKAGE show details about PACKAGE" +msgstr "" +"\n" +" -i, --install=GÓI cài đặt GÓI" + +#: guix/scripts/package.scm:767 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: đối số ngoại lai~%" -#: guix/scripts/package.scm:775 +#: guix/scripts/package.scm:782 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Thử chạy lệnh \"info '(guix) Invoking guix package'\" để có thêm thông tin.~%" -#: guix/scripts/package.scm:797 +#: guix/scripts/package.scm:804 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "lỗi: trong khi tạo thư mục `~a': ~a~%" -#: guix/scripts/package.scm:801 +#: guix/scripts/package.scm:808 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Hãy tạo thư mục `~a', với bạn là chủ sở hữu.~%" -#: guix/scripts/package.scm:808 +#: guix/scripts/package.scm:815 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "lỗi: thư mục `~a' không được sở hữu bởi bạn~%" -#: guix/scripts/package.scm:811 +#: guix/scripts/package.scm:818 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Vui lòng đổi chủ sở hữu của `~a' thành ~s.~%" -#: guix/scripts/package.scm:836 +#: guix/scripts/package.scm:843 #, scheme-format msgid "deleting ~a~%" msgstr "đang xóa ~a~%" -#: guix/scripts/package.scm:889 guix/scripts/package.scm:994 +#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "cú pháp không hợp lệ: ~a~%" -#: guix/scripts/package.scm:918 +#: guix/scripts/package.scm:925 #, scheme-format msgid "nothing to be done~%" msgstr "không có gì cần làm~%" -#: guix/scripts/package.scm:941 +#: guix/scripts/package.scm:948 #, scheme-format msgid "~a package in profile~%" msgstr "~a gói trong hồ sơ~%" -#: guix/scripts/package.scm:956 +#: guix/scripts/package.scm:963 #, scheme-format msgid "Generation ~a\t~a" msgstr "Tạo ~a\t~a" -#: guix/scripts/package.scm:963 +#: guix/scripts/package.scm:970 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(hiện tại)~%" @@ -868,37 +877,37 @@ msgstr "~a: ~a~%" msgid "failed to load operating system file '~a': ~s~%" msgstr "gặp lỗi khi tải tập tin hệ điều hành `~a': ~s~%" -#: guix/scripts/system.scm:111 +#: guix/scripts/system.scm:116 #, scheme-format msgid "failed to register '~a' under '~a'~%" msgstr "gặp lỗi khi đăng ký `~a' dưới ~a~%" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:144 #, scheme-format msgid "initializing the current root file system~%" msgstr "đang khởi tạo hệ thống tập tin gốc hiện tại~%" -#: guix/scripts/system.scm:151 guix/scripts/system.scm:291 +#: guix/scripts/system.scm:162 guix/scripts/system.scm:318 #, scheme-format msgid "failed to install GRUB on device '~a'~%" msgstr "gặp lỗi khi cài đặt GRUB trên thiết bị `~a'~%" -#: guix/scripts/system.scm:176 +#: guix/scripts/system.scm:197 #, scheme-format msgid "activating system...~%" msgstr "đang kích hoạt hệ thống...~%" -#: guix/scripts/system.scm:211 +#: guix/scripts/system.scm:236 #, scheme-format msgid "unrecognized boot parameters for '~a'~%" msgstr "tham số khởi động không được thừa nhận cho `~a'~%" -#: guix/scripts/system.scm:295 +#: guix/scripts/system.scm:323 #, scheme-format msgid "initializing operating system under '~a'...~%" msgstr "đang khởi tạo hệ điều hành dưới '~a'...~%" -#: guix/scripts/system.scm:311 +#: guix/scripts/system.scm:339 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" @@ -906,35 +915,35 @@ msgstr "" "Cách dùng: guix system [TÙY-CHỌN] THAO-TÁC TẬP-TIN\n" "Xây dựng hệ điều hành khai báo trong TẬP-TIN tuân theo THAO-TÁC.\n" -#: guix/scripts/system.scm:314 +#: guix/scripts/system.scm:342 msgid "The valid values for ACTION are:\n" msgstr "Các giá trị hợp lệ cho THAO TÁC là:\n" -#: guix/scripts/system.scm:315 +#: guix/scripts/system.scm:343 msgid " - 'reconfigure', switch to a new operating system configuration\n" msgstr " - 'reconfigure', chuyển thành cấu hình hệ điều hành mới\n" -#: guix/scripts/system.scm:317 +#: guix/scripts/system.scm:345 msgid " - 'build', build the operating system without installing anything\n" msgstr " - 'build', xây dựng hệ điều hành mà không cài gì\n" -#: guix/scripts/system.scm:319 +#: guix/scripts/system.scm:347 msgid " - 'vm', build a virtual machine image that shares the host's store\n" msgstr " - 'vm', xây dựng một ảnh máy ảo kiểu mà có thể chia sẻ trên kho máy\n" -#: guix/scripts/system.scm:321 +#: guix/scripts/system.scm:349 msgid " - 'vm-image', build a freestanding virtual machine image\n" msgstr " - 'vm-image', xây dựng một ảnh máy ảo đứng tự do\n" -#: guix/scripts/system.scm:323 +#: guix/scripts/system.scm:351 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" msgstr " - 'disk-image', xây dựng ảnh đĩa, phù hợp để dùng cho đĩa USB\n" -#: guix/scripts/system.scm:325 +#: guix/scripts/system.scm:353 msgid " - 'init', initialize a root file system to run GNU.\n" msgstr " - 'init', khởi tạo một hệ thống tập tin gốc để chạy GNU.\n" -#: guix/scripts/system.scm:329 +#: guix/scripts/system.scm:357 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" @@ -942,7 +951,7 @@ msgstr "" "\n" " --image-size=CỠ cho 'vm-image', sản sinh ảnh theo CỠ này" -#: guix/scripts/system.scm:331 +#: guix/scripts/system.scm:359 msgid "" "\n" " --no-grub for 'init', do not install GRUB" @@ -950,17 +959,17 @@ msgstr "" "\n" " --no-grub dành cho 'init', đừng cài GRUB" -#: guix/scripts/system.scm:394 +#: guix/scripts/system.scm:422 #, scheme-format msgid "~a: unknown action~%" msgstr "~a: không hiểu thao tác~%" -#: guix/scripts/system.scm:411 +#: guix/scripts/system.scm:439 #, scheme-format msgid "wrong number of arguments for action '~a'~%" msgstr "sai số lượng đối số cho thao tác '~a'~%" -#: guix/scripts/system.scm:431 +#: guix/scripts/system.scm:459 #, scheme-format msgid "no configuration file specified~%" msgstr "chưa ghi rõ tập tin nhập cấu hình~%" @@ -1107,21 +1116,21 @@ msgstr "" msgid "failed to create configuration directory `~a': ~a~%" msgstr "gặp lỗi khi tạo thư mục cấu hình `~a': ~a~%" -#: guix/ui.scm:461 guix/ui.scm:475 +#: guix/ui.scm:475 guix/ui.scm:489 msgid "unknown" msgstr "không hiểu" -#: guix/ui.scm:584 +#: guix/ui.scm:598 #, scheme-format msgid "invalid argument: ~a~%" msgstr "đối số không hợp lệ: ~a~%" -#: guix/ui.scm:589 +#: guix/ui.scm:603 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Chạy lệnh `guix --help' để biết thêm thông tin.~%" -#: guix/ui.scm:619 +#: guix/ui.scm:633 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1129,21 +1138,21 @@ msgstr "" "Cách dùng: guix LỆNH ĐỐI_SỐ...\n" "Chạy LỆNH với các ĐỐI SỐ.\n" -#: guix/ui.scm:622 +#: guix/ui.scm:636 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "LỆNH phải là một trong số những câu lệnh con được liệt kê dưới đây:\n" -#: guix/ui.scm:642 +#: guix/ui.scm:656 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: không tìm thấy lệnh~%" -#: guix/ui.scm:660 +#: guix/ui.scm:674 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: thiếu tên lệnh~%" -#: guix/ui.scm:668 +#: guix/ui.scm:682 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: tùy chọn không được thừa nhận `~a'~%" diff --git a/po/packages/de.po b/po/packages/de.po index 01542d4597..32e38705c2 100644 --- a/po/packages/de.po +++ b/po/packages/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: guix-packages 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-25 22:55+0200\n" +"POT-Creation-Date: 2014-07-14 11:59+0200\n" "PO-Revision-Date: 2014-07-13 20:23+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" diff --git a/po/packages/eo.po b/po/packages/eo.po index 44212fee62..2e48d61064 100644 --- a/po/packages/eo.po +++ b/po/packages/eo.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: guix-packages 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-25 22:55+0200\n" +"POT-Creation-Date: 2014-07-14 11:59+0200\n" "PO-Revision-Date: 2014-07-14 11:28-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" diff --git a/po/packages/pt_BR.po b/po/packages/pt_BR.po index 8c56c982ab..47d8fc2fe0 100644 --- a/po/packages/pt_BR.po +++ b/po/packages/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.4-pre2\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-25 22:55+0200\n" +"POT-Creation-Date: 2014-07-14 11:59+0200\n" "PO-Revision-Date: 2013-09-28 21:29-0300\n" "Last-Translator: Rafael Ferreira \n" "Language-Team: Brazilian Portuguese \n" diff --git a/po/packages/sr.po b/po/packages/sr.po index 2fc7f43181..c49787a5b6 100644 --- a/po/packages/sr.po +++ b/po/packages/sr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: guix-0.6-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-25 22:55+0200\n" +"POT-Creation-Date: 2014-07-14 11:59+0200\n" "PO-Revision-Date: 2014-06-19 08:51+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" diff --git a/po/packages/vi.po b/po/packages/vi.po index 6c8f74f179..cc55fd591a 100644 --- a/po/packages/vi.po +++ b/po/packages/vi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: guix 0.5-pre2\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-25 22:55+0200\n" +"POT-Creation-Date: 2014-07-14 11:59+0200\n" "PO-Revision-Date: 2013-12-04 07:48+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" diff --git a/tests/gexp.scm b/tests/gexp.scm index 6d4885e44e..bdea4b8563 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -224,7 +224,7 @@ (return (string=? system (derivation-system drv)))))) (define shebang - (string-append (derivation->output-path guile-for-build) + (string-append "#!" (derivation->output-path guile-for-build) "/bin/guile --no-auto-compile")) ;; If we're going to hit the silly shebang limit (128 chars on Linux-based diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 4d75955411..ce123105bf 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -79,13 +79,6 @@ then test "`guix package -p "$profile" -I 'g.*e' | cut -f1`" = "guile-bootstrap" - # Search. - LC_MESSAGES=C - export LC_MESSAGES - test "`guix package -s "An example GNU package" | grep ^name:`" = \ - "name: hello" - test -z "`guix package -s "n0t4r341p4ck4g3"`" - # List generations. test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \ = " guile-bootstrap" @@ -176,6 +169,22 @@ then false; else true; fi # Check whether `--list-available' returns something sensible. guix package -p "$profile" -A 'gui.*e' | grep guile +# Check whether `--show' returns something sensible. +guix package --show=guile | grep "^name: guile" + +# Ensure `--show' doesn't fail for packages with non-package inputs. +guix package --show=texlive + +# Search. +LC_MESSAGES=C +export LC_MESSAGES +test "`guix package -s "An example GNU package" | grep ^name:`" = \ + "name: hello" +test -z "`guix package -s "n0t4r341p4ck4g3"`" + +# Make sure `--search' can display all the packages. +guix package --search="" > /dev/null + # There's no generation older than 12 months, so the following command should # have no effect. generation="`readlink_base "$profile"`" diff --git a/tests/guix-register.sh b/tests/guix-register.sh index e258ec1244..3f261d7bef 100644 --- a/tests/guix-register.sh +++ b/tests/guix-register.sh @@ -86,7 +86,7 @@ guix-register -p "$new_store" \ # Now make sure this is recognized as valid. ls -R "$new_store" -for state_dir in "$new_store$localstatedir/guix" "$new_store/chbouib" +for state_dir in "$localstatedir/guix" "/chbouib" do NIX_STORE_DIR="$new_store_dir" NIX_STATE_DIR="$new_store$state_dir" diff --git a/tests/monads.scm b/tests/monads.scm index ac19d33f93..ea3e4006ab 100644 --- a/tests/monads.scm +++ b/tests/monads.scm @@ -108,6 +108,16 @@ guile))) #:guile-for-build (package-derivation %store %bootstrap-guile))) +(test-assert "interned-file" + (run-with-store %store + (mlet* %store-monad ((file -> (search-path %load-path "guix.scm")) + (a (interned-file file)) + (b (interned-file file "b"))) + (return (equal? (call-with-input-file file get-string-all) + (call-with-input-file a get-string-all) + (call-with-input-file b get-string-all)))) + #:guile-for-build (package-derivation %store %bootstrap-guile))) + (define derivation-expression (@@ (guix monads) derivation-expression)) diff --git a/tests/profiles.scm b/tests/profiles.scm index 8ead6e6968..d405f6453e 100644 --- a/tests/profiles.scm +++ b/tests/profiles.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Ludovic Courtès +;;; Copyright © 2013, 2014 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,11 +18,25 @@ (define-module (test-profiles) #:use-module (guix profiles) + #:use-module (guix store) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix derivations) + #:use-module (gnu packages bootstrap) #:use-module (ice-9 match) #:use-module (srfi srfi-64)) ;; Test the (guix profile) module. +(define %store + (open-connection)) + +(define guile-for-build + (package-derivation %store %bootstrap-guile)) + +;; Make it the default. +(%guile-for-build guile-for-build) + ;; Example manifest entries. @@ -30,7 +44,7 @@ (manifest-entry (name "guile") (version "2.0.9") - (path "/gnu/store/...") + (item "/gnu/store/...") (output "out"))) (define guile-2.0.9:debug @@ -87,6 +101,19 @@ (null? (manifest-entries m3)) (null? (manifest-entries m4))))))) +(test-assert "profile-derivation" + (run-with-store %store + (mlet* %store-monad + ((entry -> (package->manifest-entry %bootstrap-guile)) + (guile (package->derivation %bootstrap-guile)) + (drv (profile-derivation (manifest (list entry)))) + (profile -> (derivation->output-path drv)) + (bindir -> (string-append profile "/bin")) + (_ (built-derivations (list drv)))) + (return (and (file-exists? (string-append bindir "/guile")) + (string=? (dirname (readlink bindir)) + (derivation->output-path guile))))))) + (test-end "profiles") diff --git a/tests/utils.scm b/tests/utils.scm index 8ad399f75c..611867ca09 100644 --- a/tests/utils.scm +++ b/tests/utils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès +;;; Copyright © 2014 Eric Bavier ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,7 +26,8 @@ #:use-module (srfi srfi-64) #:use-module (rnrs bytevectors) #:use-module (rnrs io ports) - #:use-module (ice-9 match)) + #:use-module (ice-9 match) + #:use-module (ice-9 vlist)) (define temp-file (string-append "t-utils-" (number->string (getpid)))) @@ -118,6 +120,37 @@ '(0 1 2 3))) list)) +(let* ((tree (alist->vhash + '((0 2 3) (1 3 4) (2) (3 5 6) (4 6) (5) (6)) + hashq)) + (add-one (lambda (_ r) (1+ r))) + (tree-lookup (lambda (n) (cdr (vhash-assq n tree))))) + (test-equal "fold-tree, single root" + 5 (fold-tree add-one 0 tree-lookup '(0))) + (test-equal "fold-tree, two roots" + 7 (fold-tree add-one 0 tree-lookup '(0 1))) + (test-equal "fold-tree, sum" + 16 (fold-tree + 0 tree-lookup '(0))) + (test-equal "fold-tree, internal" + 18 (fold-tree + 0 tree-lookup '(3 4))) + (test-equal "fold-tree, cons" + '(1 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(1)) <)) + (test-equal "fold-tree, overlapping paths" + '(1 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(1 4)) <)) + (test-equal "fold-tree, cons, two roots" + '(0 2 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(0 4)) <)) + (test-equal "fold-tree-leaves, single root" + 2 (fold-tree-leaves add-one 0 tree-lookup '(1))) + (test-equal "fold-tree-leaves, single root, sum" + 11 (fold-tree-leaves + 0 tree-lookup '(1))) + (test-equal "fold-tree-leaves, two roots" + 3 (fold-tree-leaves add-one 0 tree-lookup '(0 1))) + (test-equal "fold-tree-leaves, two roots, sum" + 13 (fold-tree-leaves + 0 tree-lookup '(0 1)))) + (test-assert "filtered-port, file" (let* ((file (search-path %load-path "guix.scm")) (input (open-file file "r0b")))