Merge branch 'master' into core-updates
This commit is contained in:
		
						commit
						200a97e64f
					
				
					 77 changed files with 2806 additions and 482 deletions
				
			
		|  | @ -18,6 +18,7 @@ | |||
|    (eval . (put 'manifest-entry 'scheme-indent-function 0)) | ||||
|    (eval . (put 'manifest-pattern 'scheme-indent-function 0)) | ||||
|    (eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1)) | ||||
|    (eval . (put 'with-store 'scheme-indent-function 1)) | ||||
|    (eval . (put 'with-error-handling 'scheme-indent-function 0)) | ||||
|    (eval . (put 'with-mutex 'scheme-indent-function 1)) | ||||
|    (eval . (put 'with-atomic-file-output 'scheme-indent-function 1)) | ||||
|  |  | |||
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -85,3 +85,4 @@ GRTAGS | |||
| GTAGS | ||||
| /nix-setuid-helper | ||||
| /nix/scripts/guix-authenticate | ||||
| /nix/scripts/offload | ||||
|  |  | |||
							
								
								
									
										1
									
								
								AUTHORS
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
										
									
									
									
								
							|  | @ -17,5 +17,6 @@ alphabetical order): | |||
|         Aljosha Papsch <misc@rpapsch.de> | ||||
|           Cyril Roelandt <tipecaml@gmail.com> | ||||
|            Alex Sassmannshausen <alex.sassmannshausen@gmail.com> | ||||
|     Sree Harsha Totakura <sreeharsha@totakura.in> | ||||
|           David Thompson <dthompson2@worcester.edu> | ||||
|         Mark H. Weaver <mhw@netris.org> | ||||
|  |  | |||
							
								
								
									
										17
									
								
								Makefile.am
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								Makefile.am
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
|  | @ -80,6 +80,13 @@ MODULES =					\ | |||
|   guix.scm					\ | ||||
|   $(GNU_SYSTEM_MODULES) | ||||
| 
 | ||||
| if BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| MODULES +=					\ | ||||
|   guix/scripts/offload.scm | ||||
| 
 | ||||
| endif BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| # Because of the autoload hack in (guix build download), we must build it | ||||
| # first to avoid errors on systems where (gnutls) is unavailable. | ||||
| guix/scripts/download.go: guix/build/download.go | ||||
|  | @ -185,6 +192,14 @@ EXTRA_DIST =					\ | |||
|   release.nix					\ | ||||
|   $(TESTS) | ||||
| 
 | ||||
| if !BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| EXTRA_DIST +=					\ | ||||
|   guix/scripts/offload.scm | ||||
| 
 | ||||
| endif !BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| 
 | ||||
| CLEANFILES =					\ | ||||
|   $(GOBJECTS)					\ | ||||
|   $(SCM_TESTS:tests/%.scm=%.log) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -29,6 +29,9 @@ | |||
|   ;; newer, even though they may not correspond. | ||||
|   (set! %fresh-auto-compile #t) | ||||
| 
 | ||||
|   ;; Display which files are loaded. | ||||
|   (set! %load-verbosely #t) | ||||
| 
 | ||||
|   (and=> (assoc-ref (current-source-location) 'filename) | ||||
|          (lambda (file) | ||||
|            (let ((dir (string-append (dirname file) "/../.."))) | ||||
|  |  | |||
|  | @ -95,6 +95,17 @@ if test "x$guix_build_daemon" = "xyes"; then | |||
|   dnl Check for <linux/fs.h> (for immutable file support). | ||||
|   AC_CHECK_HEADERS([linux/fs.h]) | ||||
| 
 | ||||
|   dnl Check whether the 'offload' build hook can be built (uses | ||||
|   dnl 'restore-file-set', which requires unbuffered custom binary input | ||||
|   dnl ports from Guile >= 2.0.10.) | ||||
|   GUIX_CHECK_UNBUFFERED_CBIP | ||||
|   guix_build_daemon_offload="$ac_cv_guix_cbips_support_setvbuf" | ||||
| 
 | ||||
|   if test "x$guix_build_daemon_offload" = "xyes"; then | ||||
|     AC_DEFINE([HAVE_DAEMON_OFFLOAD_HOOK], [1], | ||||
|       [Define if the daemon's 'offload' build hook is being built.]) | ||||
|   fi | ||||
| 
 | ||||
|   dnl Temporary directory used to store the daemon's data. | ||||
|   AC_MSG_CHECKING([for unit test root]) | ||||
|   GUIX_TEST_ROOT="`pwd`/test-tmp" | ||||
|  | @ -107,6 +118,11 @@ if test "x$guix_build_daemon" = "xyes"; then | |||
|     [chmod +x nix/scripts/substitute-binary]) | ||||
|   AC_CONFIG_FILES([nix/scripts/guix-authenticate], | ||||
|     [chmod +x nix/scripts/guix-authenticate]) | ||||
|   AC_CONFIG_FILES([nix/scripts/offload], | ||||
|     [chmod +x nix/scripts/offload]) | ||||
| fi | ||||
| 
 | ||||
| AM_CONDITIONAL([BUILD_DAEMON], [test "x$guix_build_daemon" = "xyes"]) | ||||
| AM_CONDITIONAL([BUILD_DAEMON_OFFLOAD],			\ | ||||
|   [test "x$guix_build_daemon" = "xyes"			\ | ||||
|    && test "x$guix_build_daemon_offload" = "xyes"]) | ||||
|  |  | |||
|  | @ -38,10 +38,13 @@ AC_ARG_ENABLE([daemon], | |||
| 
 | ||||
| # Prepare a version of $localstatedir & co. that does not contain references | ||||
| # to shell variables. | ||||
| guix_localstatedir="`eval echo $localstatedir | sed -e "s|NONE|/usr/local|g"`" | ||||
| guix_sysconfdir="`eval echo $sysconfdir | sed -e "s|NONE|/usr/local|g"`" | ||||
| guix_prefix="`eval echo $prefix | sed -e"s|NONE|/usr/local|g"`" | ||||
| guix_localstatedir="`eval echo $localstatedir | sed -e "s|NONE|$guix_prefix|g"`" | ||||
| guix_sysconfdir="`eval echo $sysconfdir | sed -e "s|NONE|$guix_prefix|g"`" | ||||
| guix_sbindir="`eval echo $sbindir | sed -e "s|NONE|$guix_prefix|g"`" | ||||
| AC_SUBST([guix_localstatedir]) | ||||
| AC_SUBST([guix_sysconfdir]) | ||||
| AC_SUBST([guix_sbindir]) | ||||
| 
 | ||||
| dnl We require the pkg.m4 set of macros from pkg-config. | ||||
| dnl Make sure it's available. | ||||
|  |  | |||
							
								
								
									
										22
									
								
								daemon.am
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								daemon.am
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
| # | ||||
|  | @ -56,6 +56,7 @@ libformat_a_CPPFLAGS =				\ | |||
| 
 | ||||
| libutil_a_SOURCES =				\ | ||||
|   nix/libutil/archive.cc			\ | ||||
|   nix/libutil/affinity.cc			\ | ||||
|   nix/libutil/serialise.cc			\ | ||||
|   nix/libutil/util.cc				\ | ||||
|   nix/libutil/xml-writer.cc			\ | ||||
|  | @ -63,6 +64,7 @@ libutil_a_SOURCES =				\ | |||
|   nix/libutil/gcrypt-hash.cc | ||||
| 
 | ||||
| libutil_headers =				\ | ||||
|   nix/libutil/affinity.hh			\ | ||||
|   nix/libutil/hash.hh				\ | ||||
|   nix/libutil/serialise.hh			\ | ||||
|   nix/libutil/xml-writer.hh			\ | ||||
|  | @ -153,16 +155,6 @@ guix_register_LDADD =				\ | |||
|   $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) | ||||
| 
 | ||||
| 
 | ||||
| libexec_PROGRAMS = nix-setuid-helper | ||||
| nix_setuid_helper_SOURCES =			\ | ||||
|   nix/nix-setuid-helper/nix-setuid-helper.cc | ||||
| 
 | ||||
| nix_setuid_helper_CPPFLAGS =			\ | ||||
|   $(libutil_a_CPPFLAGS) | ||||
| 
 | ||||
| nix_setuid_helper_LDADD =			\ | ||||
|   libutil.a libformat.a | ||||
| 
 | ||||
| noinst_HEADERS =						\ | ||||
|   $(libformat_headers) $(libutil_headers) $(libstore_headers)	\ | ||||
|   $(guix_daemon_headers) | ||||
|  | @ -180,6 +172,14 @@ nodist_pkglibexec_SCRIPTS =			\ | |||
|   nix/scripts/list-runtime-roots		\ | ||||
|   nix/scripts/substitute-binary | ||||
| 
 | ||||
| if BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| nodist_pkglibexec_SCRIPTS +=			\ | ||||
|   nix/scripts/offload | ||||
| 
 | ||||
| endif BUILD_DAEMON_OFFLOAD | ||||
| 
 | ||||
| 
 | ||||
| # XXX: It'd be better to hide it in $(pkglibexecdir). | ||||
| nodist_libexec_SCRIPTS =			\ | ||||
|   nix/scripts/guix-authenticate | ||||
|  |  | |||
							
								
								
									
										214
									
								
								doc/guix.texi
									
										
									
									
									
								
							
							
						
						
									
										214
									
								
								doc/guix.texi
									
										
									
									
									
								
							|  | @ -175,13 +175,24 @@ your goal is to share the store with Nix. | |||
| 
 | ||||
| @cindex daemon | ||||
| Operations such as building a package or running the garbage collector | ||||
| are all performed by a specialized process, the @dfn{Guix daemon}, on | ||||
| are all performed by a specialized process, the @dfn{build daemon}, on | ||||
| behalf of clients.  Only the daemon may access the store and its | ||||
| associated database.  Thus, any operation that manipulates the store | ||||
| goes through the daemon.  For instance, command-line tools such as | ||||
| @command{guix package} and @command{guix build} communicate with the | ||||
| daemon (@i{via} remote procedure calls) to instruct it what to do. | ||||
| 
 | ||||
| The following sections explain how to prepare the build daemon's | ||||
| environment. | ||||
| 
 | ||||
| @menu | ||||
| * Build Environment Setup::     Preparing the isolated build environment. | ||||
| * Daemon Offload Setup::        Offloading builds to remote machines. | ||||
| @end menu | ||||
| 
 | ||||
| @node Build Environment Setup | ||||
| @subsection Build Environment Setup | ||||
| 
 | ||||
| In a standard multi-user setup, Guix and its daemon---the | ||||
| @command{guix-daemon} program---are installed by the system | ||||
| administrator; @file{/nix/store} is owned by @code{root} and | ||||
|  | @ -229,43 +240,150 @@ The @code{guix-daemon} program may then be run as @code{root} with: | |||
| @noindent | ||||
| This way, the daemon starts build processes in a chroot, under one of | ||||
| the @code{guix-builder} users.  On GNU/Linux, by default, the chroot | ||||
| environment contains nothing but the @code{/dev} and @code{/proc} | ||||
| directories@footnote{On some systems @code{/dev/shm}, which supports | ||||
| shared memory, is a symlink to another directory such as | ||||
| @code{/run/shm}, that is @emph{not} is the chroot.  When that is the | ||||
| case, shared memory support is unavailable in the chroot environment. | ||||
| The workaround is to make sure that @file{/dev/shm} is directly a | ||||
| @code{tmpfs} mount point.}. | ||||
| environment contains nothing but: | ||||
| 
 | ||||
| Finally, you may want to generate a key pair to allow the daemon to | ||||
| export signed archives of files from the store (@pxref{Invoking guix | ||||
| archive}): | ||||
| @c Keep this list in sync with libstore/build.cc! ----------------------- | ||||
| @itemize | ||||
| @item | ||||
| the @code{/dev} and @code{/proc} directories@footnote{On some systems | ||||
| @code{/dev/shm}, which supports shared memory, is a symlink to another | ||||
| directory such as @code{/run/shm}, that is @emph{not} is the chroot. | ||||
| When that is the case, shared memory support is unavailable in the | ||||
| chroot environment.  The workaround is to make sure that @file{/dev/shm} | ||||
| is directly a @code{tmpfs} mount point.}; | ||||
| 
 | ||||
| @example | ||||
| # guix archive --generate-key | ||||
| @end example | ||||
| @item | ||||
| @file{/etc/passwd} with an entry for the current user and an entry for | ||||
| user @file{nobody}; | ||||
| 
 | ||||
| Guix may also be used in a single-user setup, with @command{guix-daemon} | ||||
| running as an unprivileged user.  However, to maximize non-interference | ||||
| of build processes, the daemon still needs to perform certain operations | ||||
| that are restricted to @code{root} on GNU/Linux: it should be able to | ||||
| run build processes in a chroot, and to run them under different UIDs. | ||||
| To that end, the @command{nix-setuid-helper} program is provided; it is | ||||
| a small C program (less than 300 lines) that, if it is made setuid | ||||
| @code{root}, can be executed by the daemon to perform these operations | ||||
| on its behalf.  The @code{root}-owned @file{/etc/nix-setuid.conf} file | ||||
| is read by @command{nix-setuid-helper}; it should contain exactly two | ||||
| words: the user name under which the authorized @command{guix-daemon} | ||||
| runs, and the name of the build users group. | ||||
| @item | ||||
| @file{/etc/group} with an entry for the user's group; | ||||
| 
 | ||||
| If you are installing Guix as an unprivileged user and do not have the | ||||
| ability to make @file{nix-setuid-helper} setuid-@code{root}, it is still | ||||
| @item | ||||
| @file{/etc/hosts} with an entry that maps @code{localhost} to | ||||
| @code{127.0.0.1}; | ||||
| 
 | ||||
| @item | ||||
| a writable @file{/tmp} directory. | ||||
| @end itemize | ||||
| 
 | ||||
| If you are installing Guix as an unprivileged user, it is still | ||||
| possible to run @command{guix-daemon}.  However, build processes will | ||||
| not be isolated from one another, and not from the rest of the system. | ||||
| Thus, build processes may interfere with each other, and may access | ||||
| programs, libraries, and other files available on the system---making it | ||||
| much harder to view them as @emph{pure} functions. | ||||
| 
 | ||||
| 
 | ||||
| @node Daemon Offload Setup | ||||
| @subsection Using the Offload Facility | ||||
| 
 | ||||
| @cindex offloading | ||||
| @cindex build hook | ||||
| When desired, the build daemon can @dfn{offload} | ||||
| derivation builds to other machines | ||||
| running Guix, using the @code{offload} @dfn{build hook}.  When that | ||||
| feature is enabled, a list of user-specified build machines is read from | ||||
| @file{/etc/guix/machines.scm}; anytime a build is requested, for | ||||
| instance via @code{guix build}, the daemon attempts to offload it to one | ||||
| of the machines that satisfies the derivation's constraints, in | ||||
| particular its system type---e.g., @file{x86_64-linux}.  Missing | ||||
| prerequisites for the build are copied over SSH to the target machine, | ||||
| which then proceeds with the build; upon success the output(s) of the | ||||
| build are copied back to the initial machine. | ||||
| 
 | ||||
| The @file{/etc/guix/machines.scm} file typically looks like this: | ||||
| 
 | ||||
| @example | ||||
| (list (build-machine | ||||
|         (name "eightysix.example.org") | ||||
|         (system "x86_64-linux") | ||||
|         (user "bob") | ||||
|         (speed 2.))    ; incredibly fast! | ||||
| 
 | ||||
|       (build-machine | ||||
|         (name "meeps.example.org") | ||||
|         (system "mips64el-linux") | ||||
|         (user "alice") | ||||
|         (private-key | ||||
|          (string-append (getenv "HOME") | ||||
|                         "/.ssh/id-rsa-for-guix")))) | ||||
| @end example | ||||
| 
 | ||||
| @noindent | ||||
| In the example above we specify a list of two build machines, one for | ||||
| the @code{x86_64} architecture and one for the @code{mips64el} | ||||
| architecture. | ||||
| 
 | ||||
| In fact, this file is---not surprisingly!---a Scheme file that is | ||||
| evaluated when the @code{offload} hook is started.  Its return value | ||||
| must be a list of @code{build-machine} objects.  While this example | ||||
| shows a fixed list of build machines, one could imagine, say, using | ||||
| DNS-SD to return a list of potential build machines discovered in the | ||||
| local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using | ||||
| Avahi in Guile Scheme Programs}). | ||||
| 
 | ||||
| The compulsory fields for a @code{build-machine} declaration are: | ||||
| 
 | ||||
| @table @code | ||||
| 
 | ||||
| @item name | ||||
| The remote machine's host name. | ||||
| 
 | ||||
| @item system | ||||
| The remote machine's system type. | ||||
| 
 | ||||
| @item user | ||||
| The user account to use when connecting to the remote machine over SSH. | ||||
| Note that the SSH key pair must @emph{not} be passphrase-protected, to | ||||
| allow non-interactive logins. | ||||
| 
 | ||||
| @end table | ||||
| 
 | ||||
| @noindent | ||||
| A number of optional fields may be specified: | ||||
| 
 | ||||
| @table @code | ||||
| 
 | ||||
| @item private-key | ||||
| The SSH private key file to use when connecting to the machine. | ||||
| 
 | ||||
| @item parallel-builds | ||||
| The number of builds that may run in parallel on the machine (1 by | ||||
| default.) | ||||
| 
 | ||||
| @item speed | ||||
| A ``relative speed factor''.  The offload scheduler will tend to prefer | ||||
| machines with a higher speed factor. | ||||
| 
 | ||||
| @item features | ||||
| A list of strings denoting specific features supported by the machine. | ||||
| An example is @code{"kvm"} for machines that have the KVM Linux modules | ||||
| and corresponding hardware support.  Derivations can request features by | ||||
| name, and they will be scheduled on matching build machines. | ||||
| 
 | ||||
| @end table | ||||
| 
 | ||||
| The @code{guix} command must be in the search path on the build | ||||
| machines, since offloading works by invoking the @code{guix archive} and | ||||
| @code{guix build} commands. | ||||
| 
 | ||||
| There's one last thing to do once @file{machines.scm} is in place.  As | ||||
| explained above, when offloading, files are transferred back and forth | ||||
| between the machine stores.  For this to work, you need to generate a | ||||
| key pair to allow the daemon to export signed archives of files from the | ||||
| store (@pxref{Invoking guix archive}): | ||||
| 
 | ||||
| @example | ||||
| # guix archive --generate-key | ||||
| @end example | ||||
| 
 | ||||
| @noindent | ||||
| Thus, when receiving files, a machine's build daemon can make sure they | ||||
| are genuine, have not been tampered with, and that they are signed by an | ||||
| authorized key. | ||||
| 
 | ||||
| 
 | ||||
| @node Invoking guix-daemon | ||||
| @section Invoking @command{guix-daemon} | ||||
| 
 | ||||
|  | @ -317,6 +435,14 @@ When the daemon runs with @code{--no-substitutes}, clients can still | |||
| explicitly enable substitution @i{via} the @code{set-build-options} | ||||
| remote procedure call (@pxref{The Store}). | ||||
| 
 | ||||
| @cindex build hook | ||||
| @item --no-build-hook | ||||
| Do not use the @dfn{build hook}. | ||||
| 
 | ||||
| The build hook is a helper program that the daemon can start and to | ||||
| which it submits build requests.  This mechanism is used to offload | ||||
| builds to other machines (@pxref{Daemon Offload Setup}). | ||||
| 
 | ||||
| @item --cache-failures | ||||
| Cache build failures.  By default, only successful builds are cached. | ||||
| 
 | ||||
|  | @ -1326,7 +1452,11 @@ derivations as Scheme objects, along with procedures to create and | |||
| otherwise manipulate derivations.  The lowest-level primitive to create | ||||
| a derivation is the @code{derivation} procedure: | ||||
| 
 | ||||
| @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] [#:hash-mode #f] [#:inputs '()] [#:env-vars '()] [#:system (%current-system)] [#:references-graphs #f] | ||||
| @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @ | ||||
|   @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @ | ||||
|   [#:hash-mode #f] [#:inputs '()] [#:env-vars '()] @ | ||||
|   [#:system (%current-system)] [#:references-graphs #f] @ | ||||
|   [#:local-build? #f] | ||||
| Build a derivation with the given arguments, and return the resulting | ||||
| @code{<derivation>} object. | ||||
| 
 | ||||
|  | @ -1338,6 +1468,11 @@ When @var{references-graphs} is true, it must be a list of file | |||
| name/store path pairs.  In that case, the reference graph of each store | ||||
| path is exported in the build environment in the corresponding file, in | ||||
| a simple text format. | ||||
| 
 | ||||
| When @var{local-build?} is true, declare that the derivation is not a | ||||
| good candidate for offloading and should rather be built locally | ||||
| (@pxref{Daemon Offload Setup}).  This is the case for small derivations | ||||
| where the costs of data transfers would outweigh the benefits. | ||||
| @end deffn | ||||
| 
 | ||||
| @noindent | ||||
|  | @ -1368,7 +1503,7 @@ the caller to directly pass a Guile expression as the build script: | |||
|        [#:system (%current-system)] [#:inputs '()] @ | ||||
|        [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @ | ||||
|        [#:env-vars '()] [#:modules '()] @ | ||||
|        [#:references-graphs #f] [#:guile-for-build #f] | ||||
|        [#:references-graphs #f] [#:local-build? #f] [#:guile-for-build #f] | ||||
| Return a derivation that executes Scheme expression @var{exp} as a | ||||
| builder for derivation @var{name}.  @var{inputs} must be a list of | ||||
| @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted, | ||||
|  | @ -1390,7 +1525,8 @@ terminates by passing the result of @var{exp} to @code{exit}; thus, when | |||
| @var{guile-for-build} is omitted or is @code{#f}, the value of the | ||||
| @code{%guile-for-build} fluid is used instead. | ||||
| 
 | ||||
| See the @code{derivation} procedure for the meaning of @var{references-graphs}. | ||||
| See the @code{derivation} procedure for the meaning of @var{references-graphs} | ||||
| and @var{local-build?}. | ||||
| @end deffn | ||||
| 
 | ||||
| @noindent | ||||
|  | @ -1667,10 +1803,9 @@ Do not use substitutes for build products.  That is, always build things | |||
| locally instead of allowing downloads of pre-built binaries. | ||||
| 
 | ||||
| @item --no-build-hook | ||||
| Do not attempt to offload builds @i{via} the daemon's ``build hook''. | ||||
| That is, always build things locally instead of offloading builds to | ||||
| remote machines. | ||||
| @c TODO: Add xref to build hook doc. | ||||
| Do not attempt to offload builds @i{via} the daemon's ``build hook'' | ||||
| (@pxref{Daemon Offload Setup}).  That is, always build things locally | ||||
| instead of offloading builds to remote machines. | ||||
| 
 | ||||
| @item --max-silent-time=@var{seconds} | ||||
| When the build or substitution process remains silent for more than | ||||
|  | @ -1978,7 +2113,12 @@ the load.  To check whether a package has a @code{debug} output, use | |||
| 
 | ||||
| From a programming viewpoint, the package definitions of the | ||||
| distribution are provided by Guile modules in the @code{(gnu packages | ||||
| ...)} name space (@pxref{Modules, Guile modules,, guile, GNU Guile | ||||
| @dots{})} name space@footnote{Note that packages under the @code{(gnu | ||||
| packages @dots{})} module name space are not necessarily ``GNU | ||||
| packages''.  This module naming scheme follows the usual Guile module | ||||
| naming convention: @code{gnu} means that these modules are distributed | ||||
| as part of the GNU system, and @code{packages} identifies modules that | ||||
| define packages.}  (@pxref{Modules, Guile modules,, guile, GNU Guile | ||||
| Reference Manual}).  For instance, the @code{(gnu packages emacs)} | ||||
| module exports a variable named @code{emacs}, which is bound to a | ||||
| @code{<package>} object (@pxref{Defining Packages}).  The @code{(gnu | ||||
|  | @ -2378,7 +2518,7 @@ Linux-Libre kernel, initial RAM disk, and boot loader looks like this: | |||
|              (gnu system service)  ; for 'lsh-service' | ||||
|              (gnu packages base)   ; Coreutils, grep, etc. | ||||
|              (gnu packages bash)   ; Bash | ||||
|              (gnu packages system) ; dmd, Inetutils | ||||
|              (gnu packages admin)  ; dmd, Inetutils | ||||
|              (gnu packages zile)   ; Zile | ||||
|              (gnu packages less)   ; less | ||||
|              (gnu packages guile)  ; Guile | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages.scm				\ | ||||
|   gnu/packages/acct.scm				\ | ||||
|   gnu/packages/acl.scm				\ | ||||
|   gnu/packages/admin.scm			\ | ||||
|   gnu/packages/algebra.scm			\ | ||||
|   gnu/packages/apl.scm				\ | ||||
|   gnu/packages/apr.scm				\ | ||||
|  | @ -51,8 +52,11 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/cryptsetup.scm			\ | ||||
|   gnu/packages/curl.scm				\ | ||||
|   gnu/packages/cyrus-sasl.scm			\ | ||||
|   gnu/packages/dc.scm				\ | ||||
|   gnu/packages/dejagnu.scm			\ | ||||
|   gnu/packages/ddrescue.scm			\ | ||||
|   gnu/packages/dictionaries.scm			\ | ||||
|   gnu/packages/docbook.scm			\ | ||||
|   gnu/packages/dwm.scm				\ | ||||
|   gnu/packages/ed.scm				\ | ||||
|   gnu/packages/elf.scm				\ | ||||
|  | @ -60,6 +64,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/fdisk.scm			\ | ||||
|   gnu/packages/file.scm				\ | ||||
|   gnu/packages/flex.scm				\ | ||||
|   gnu/packages/fltk.scm				\ | ||||
|   gnu/packages/fonts.scm			\ | ||||
|   gnu/packages/fontutils.scm			\ | ||||
|   gnu/packages/freeipmi.scm			\ | ||||
|  | @ -138,13 +143,14 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/mtools.scm			\ | ||||
|   gnu/packages/mysql.scm			\ | ||||
|   gnu/packages/nano.scm				\ | ||||
|   gnu/packages/ncdu.scm				\ | ||||
|   gnu/packages/ncurses.scm			\ | ||||
|   gnu/packages/netpbm.scm			\ | ||||
|   gnu/packages/nettle.scm			\ | ||||
|   gnu/packages/noweb.scm			\ | ||||
|   gnu/packages/ocaml.scm			\ | ||||
|   gnu/packages/ocrad.scm			\ | ||||
|   gnu/packages/oggvorbis.scm			\ | ||||
|   gnu/packages/onc-rpc.scm			\ | ||||
|   gnu/packages/openldap.scm			\ | ||||
|   gnu/packages/openssl.scm			\ | ||||
|   gnu/packages/package-management.scm		\ | ||||
|  | @ -154,6 +160,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/pdf.scm				\ | ||||
|   gnu/packages/pem.scm				\ | ||||
|   gnu/packages/perl.scm				\ | ||||
|   gnu/packages/photo.scm			\ | ||||
|   gnu/packages/pkg-config.scm			\ | ||||
|   gnu/packages/plotutils.scm			\ | ||||
|   gnu/packages/popt.scm				\ | ||||
|  | @ -180,7 +187,6 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/sqlite.scm			\ | ||||
|   gnu/packages/ssh.scm				\ | ||||
|   gnu/packages/swig.scm				\ | ||||
|   gnu/packages/system.scm			\ | ||||
|   gnu/packages/tcl.scm				\ | ||||
|   gnu/packages/tcsh.scm				\ | ||||
|   gnu/packages/texinfo.scm			\ | ||||
|  | @ -188,6 +194,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/time.scm				\ | ||||
|   gnu/packages/tmux.scm				\ | ||||
|   gnu/packages/tor.scm				\ | ||||
|   gnu/packages/uucp.scm				\ | ||||
|   gnu/packages/unrtf.scm			\ | ||||
|   gnu/packages/valgrind.scm			\ | ||||
|   gnu/packages/version-control.scm		\ | ||||
|  | @ -200,6 +207,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/wget.scm				\ | ||||
|   gnu/packages/which.scm			\ | ||||
|   gnu/packages/wordnet.scm			\ | ||||
|   gnu/packages/xiph.scm				\ | ||||
|   gnu/packages/xlockmore.scm			\ | ||||
|   gnu/packages/xml.scm				\ | ||||
|   gnu/packages/xnee.scm				\ | ||||
|  | @ -273,7 +281,6 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/perl-no-sys-dirs.patch			\ | ||||
|   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ | ||||
|   gnu/packages/patches/procps-make-3.82.patch			\ | ||||
|   gnu/packages/patches/pspp-tests.patch				\ | ||||
|   gnu/packages/patches/pulseaudio-test-timeouts.patch		\ | ||||
|   gnu/packages/patches/pulseaudio-volume-test.patch		\ | ||||
|   gnu/packages/patches/python-fix-dbm.patch			\ | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -17,7 +17,7 @@ | |||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages system) | ||||
| (define-module (gnu packages admin) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|  | @ -25,10 +25,13 @@ | |||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system trivial) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages guile) | ||||
|   #:use-module (gnu packages gettext) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module ((gnu packages base) | ||||
|                 #:select (tar)) | ||||
|   #:use-module ((gnu packages compression) | ||||
|  | @ -130,21 +133,20 @@ re-executing them as necessary.") | |||
| (define-public inetutils | ||||
|   (package | ||||
|     (name "inetutils") | ||||
|     (version "1.9.1") | ||||
|     (version "1.9.2") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/inetutils/inetutils-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0azzg6njgq79byl6960kb0wihfhhzf49snslhxgvi30ribgfpa82")) | ||||
|              (patches | ||||
|               (list (search-patch "diffutils-gets-undeclared.patch"))))) | ||||
|                "04wrm0v7l4890mmbaawd6wjwdv08bkglgqhpz0q4dkb0l50fl8q4")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments `(;; FIXME: `tftp.sh' relies on `netstat' from utils-linux, | ||||
|                  ;; which is currently missing. | ||||
|                  #:tests? #f)) | ||||
|     (inputs `(("ncurses" ,ncurses))) | ||||
|     (inputs `(("ncurses" ,ncurses) | ||||
|               ("readline" ,readline)))            ; for 'ftp' | ||||
|     (home-page "http://www.gnu.org/software/inetutils/") | ||||
|     (synopsis "Basic networking utilities") | ||||
|     (description | ||||
|  | @ -343,3 +345,86 @@ would need and has several interesting built-in capabilities.") | |||
|      "GNU Alive sends periodic pings to a server, generally to keep a | ||||
| connection alive.") | ||||
|     (license gpl3+))) | ||||
| 
 | ||||
| (define-public isc-dhcp | ||||
|   (package | ||||
|     (name "isc-dhcp") | ||||
|     (version "4.3.0a1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://ftp.isc.org/isc/dhcp/" | ||||
|                                   version "/dhcp-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0001n26m4488nl95h53wg60sywbli4d246vz2h8lpv70jlrq9q1p")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-after | ||||
|                  'configure 'post-configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; Point to the right client script, which will be | ||||
|                    ;; installed in a later phase. | ||||
|                    (substitute* "includes/dhcpd.h" | ||||
|                      (("#define[[:blank:]]+_PATH_DHCLIENT_SCRIPT.*") | ||||
|                       (let ((out (assoc-ref outputs "out"))) | ||||
|                         (string-append "#define _PATH_DHCLIENT_SCRIPT \"" | ||||
|                                        out "/libexec/dhclient-script" | ||||
|                                        "\"\n")))) | ||||
| 
 | ||||
|                    ;; During the 'build' phase, 'bind.tar.gz' is extracted, so | ||||
|                    ;; we must patch shebangs in there and make sure the right | ||||
|                    ;; shell is used. | ||||
|                    (with-directory-excursion "bind" | ||||
|                      (substitute* "Makefile" | ||||
|                        (("\\./configure") | ||||
|                         (let ((sh (which "sh"))) | ||||
|                           (string-append "./configure CONFIG_SHELL=" | ||||
|                                          sh " SHELL=" sh)))) | ||||
| 
 | ||||
|                      (system* "tar" "xf" "bind.tar.gz") | ||||
|                      (for-each patch-shebang | ||||
|                                (find-files "bind-9.9.5b1" ".*")) | ||||
|                      (zero? (system* "tar" "cf" "bind.tar.gz" | ||||
|                                      "bind-9.9.5b1")))) | ||||
|                  (alist-cons-after | ||||
|                   'install 'post-install | ||||
|                   (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|                     ;; Install the dhclient script for GNU/Linux and make sure | ||||
|                     ;; if finds all the programs it needs. | ||||
|                     (let* ((out       (assoc-ref outputs "out")) | ||||
|                            (libexec   (string-append out "/libexec")) | ||||
|                            (coreutils (assoc-ref inputs "coreutils")) | ||||
|                            (net-tools (assoc-ref inputs "net-tools")) | ||||
|                            (sed       (assoc-ref inputs "sed"))) | ||||
|                       (substitute* "client/scripts/linux" | ||||
|                         (("/sbin/ip") | ||||
|                          (string-append (assoc-ref inputs "iproute") | ||||
|                                         "/sbin/ip"))) | ||||
| 
 | ||||
|                       (mkdir-p libexec) | ||||
|                       (copy-file "client/scripts/linux" | ||||
|                                  (string-append libexec "/dhclient-script")) | ||||
| 
 | ||||
|                       (wrap-program (string-append libexec "/dhclient-script") | ||||
|                                     `("PATH" ":" prefix | ||||
|                                       ,(map (lambda (dir) | ||||
|                                               (string-append dir "/bin:" | ||||
|                                                              dir "/sbin")) | ||||
|                                             (list net-tools coreutils sed)))))) | ||||
|                   %standard-phases)))) | ||||
| 
 | ||||
|     (native-inputs `(("perl" ,perl))) | ||||
| 
 | ||||
|     ;; Even Coreutils and sed are needed here in case we're cross-compiling. | ||||
|     (inputs `(("coreutils" ,coreutils) | ||||
|               ("sed" ,sed) | ||||
|               ("net-tools" ,net-tools) | ||||
|               ("iproute" ,iproute))) | ||||
| 
 | ||||
|     (home-page "http://www.isc.org/products/DHCP/") | ||||
|     (synopsis "Dynamic Host Configuration Protocol (DHCP) tools") | ||||
|     (description | ||||
|      "ISC's Dynamic Host Configuration Protocol (DHCP) distribution provides a | ||||
| reference implementation of all aspects of DHCP, through a suite of DHCP | ||||
| tools: server, client, and relay agent.") | ||||
|     (license isc))) | ||||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -21,7 +21,8 @@ | |||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (gnu packages perl)) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages which)) | ||||
| 
 | ||||
| (define-public aspell | ||||
|   (package | ||||
|  | @ -45,3 +46,71 @@ a standalone program.  Notable features of Aspell include its full support of | |||
| documents written in the UTF-8 encoding and its ability to use multiple | ||||
| dictionaries, including personal ones.") | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Dictionaries. | ||||
| ;;; | ||||
| ;;; Use 'export ASPELL_CONF="dict-dir $HOME/.guix-profile/lib/aspell"' to use them. | ||||
| ;;; | ||||
| 
 | ||||
| (define* (aspell-dictionary dict-name full-name | ||||
|                             #:key version sha256 (prefix "aspell6-")) | ||||
|   (package | ||||
|     (name (string-append "aspell-dict-" dict-name)) | ||||
|     (version version) | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnu/aspell/dict/" dict-name | ||||
|                                   "/" prefix dict-name "-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 sha256))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    (let ((out (assoc-ref outputs "out"))) | ||||
|                      (zero? (system* "./configure")))) | ||||
|                  %standard-phases) | ||||
|                 #:make-flags (let ((out (assoc-ref %outputs "out"))) | ||||
|                                (list (string-append "dictdir=" out "/lib/aspell") | ||||
|                                      (string-append "datadir=" out "/lib/aspell"))) | ||||
|                 #:tests? #f)) | ||||
|     (native-inputs `(("aspell" ,aspell) | ||||
|                      ("which" ,which))) | ||||
|     (synopsis (string-append full-name " dictionary for GNU Aspell")) ; XXX: i18n | ||||
|     (description | ||||
|      "This package provides a dictionary for the GNU Aspell spell checker.") | ||||
|     (license gpl2+) | ||||
|     (home-page "http://aspell.net/"))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public aspell-dict-en | ||||
|   (aspell-dictionary "en" "English" | ||||
|                      #:version "7.1-0" | ||||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "02ldfiny4iakgfgy4sdrzjqdzi7l1rmb6y30lv31kfy5x31g77gz"))) | ||||
| 
 | ||||
| (define-public aspell-dict-eo | ||||
|   (aspell-dictionary "eo" "Esperanto" | ||||
|                      #:version "2.1.20000225a-2" | ||||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "09vf0mbiicbmyb4bwb7v7lgpabnylg0wy7m3hlhl5rjdda6x3lj1"))) | ||||
| 
 | ||||
| (define-public aspell-dict-es | ||||
|   (aspell-dictionary "es" "Spanish" | ||||
|                      #:version "1.11-2" | ||||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "1k5g328ac1hdpp6fsg57d8md6i0aqcwlszp3gbmp5706wyhpydmd"))) | ||||
| 
 | ||||
| (define-public aspell-dict-fr | ||||
|   (aspell-dictionary "fr" "French" | ||||
|                      #:version "0.50-3" | ||||
|                      #:prefix "aspell-" | ||||
|                      #:sha256 | ||||
|                      (base32 | ||||
|                       "14ffy9mn5jqqpp437kannc3559bfdrpk7r36ljkzjalxa53i0hpr"))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -20,7 +20,8 @@ | |||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages pkg-config)) | ||||
| 
 | ||||
| (define-public libgc | ||||
|   (package | ||||
|  | @ -59,6 +60,49 @@ Alternatively, the garbage collector may be used as a leak detector for | |||
| C or C++ programs, though that is not its primary goal.") | ||||
|    (home-page "http://www.hpl.hp.com/personal/Hans_Boehm/gc/") | ||||
| 
 | ||||
|    ;; permissive X11-style license: | ||||
|    ;; http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt | ||||
|    (license x11))) | ||||
|    (license | ||||
|     (x11-style "http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt")))) | ||||
| 
 | ||||
| (define-public libatomic-ops | ||||
|   (package | ||||
|     (name "libatomic-ops") | ||||
|     (version "7.4.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/libatomic_ops-" | ||||
|                     version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0njv3n63zw6v45k68z6dz14g2hpk5p230ncwmdfkglsljb1cqx98")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (outputs '("out" "debug")) | ||||
|     (synopsis "Accessing hardware atomic memory update operations") | ||||
|     (description | ||||
|      "This C library provides semi-portable access to hardware-provided atomic | ||||
| memory update operations on a number architectures.  These might allow you to | ||||
| write code that does more interesting things in signal handlers, write | ||||
| lock-free code, experiment with thread programming paradigms, etc.") | ||||
|     (home-page "http://www.hpl.hp.com/research/linux/atomic_ops/") | ||||
| 
 | ||||
|     ;; Some source files are X11-style, others are GPLv2+. | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public libgc-7.4 | ||||
|   (package (inherit libgc) | ||||
|     (version "7.4.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-" | ||||
|                     version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "10z2nph62ilab063wygg2lv0jxlsbcf2az9w1lx01jzqj5lzry31")))) | ||||
| 
 | ||||
|     ;; New dependencies. | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("libatomic-ops" ,libatomic-ops))) | ||||
| 
 | ||||
|     ;; 'USE_LIBC_PRIVATES' is now the default. | ||||
|     (arguments '()))) | ||||
|  |  | |||
							
								
								
									
										60
									
								
								gnu/packages/dc.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								gnu/packages/dc.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages dc) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gnutls) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages sqlite) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module ((guix licenses) | ||||
| 		#:renamer (symbol-prefix-proc 'license:))) | ||||
| 
 | ||||
| (define-public ncdc | ||||
|   (package | ||||
|     (name "ncdc") | ||||
|     (version "1.18.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://dev.yorhel.nl/download/ncdc-" version | ||||
| 			   ".tar.gz")) | ||||
|        (sha256 (base32 | ||||
| 		"11c6z9c3vv2vg01q02r53m28q3cx6x66j1l63f1mbk1crlqpf9fc")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("bzip2" ,bzip2) | ||||
|        ("glib" ,glib) | ||||
|        ("gnutls" ,gnutls) | ||||
|        ("ncurses" ,ncurses) | ||||
|        ("sqlite" ,sqlite) | ||||
|        ("zlib" ,zlib))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://dev.yorhel.nl/ncdc") | ||||
|     (synopsis | ||||
|      "Lightweight direct connect client with a friendly ncurses interface") | ||||
|     (description | ||||
|      "Ncdc is a client for the Direct Connect peer-to-peer protocol implemented | ||||
| using ncurses.  It is known for its smaller footprint and ease of use.") | ||||
|     (license license:x11))) | ||||
							
								
								
									
										78
									
								
								gnu/packages/dictionaries.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								gnu/packages/dictionaries.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages dictionaries) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system trivial) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module ((gnu packages compression) | ||||
|                 #:select (gzip))) | ||||
| 
 | ||||
| (define-public vera | ||||
|   (package | ||||
|     (name "vera") | ||||
|     (version "1.21a") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnu/vera/vera-" version | ||||
|                                   ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "09qz1g8js8qw735wmd8kraqbk1d1997v3px2lcc58frf1r66bp8f")))) | ||||
|     (build-system trivial-build-system) | ||||
|     (arguments | ||||
|      `(#:builder (begin | ||||
|                    (use-modules (guix build utils)) | ||||
| 
 | ||||
|                    (let* ((out    (assoc-ref %outputs "out")) | ||||
|                           (info   (string-append out "/share/info")) | ||||
|                           (html   (string-append out "/share/html")) | ||||
|                           (source (assoc-ref %build-inputs "source")) | ||||
|                           (tar    (assoc-ref %build-inputs "tar")) | ||||
|                           (gz     (assoc-ref %build-inputs "gzip")) | ||||
|                           (texi   (assoc-ref %build-inputs "texinfo"))) | ||||
|                      (setenv "PATH" (string-append gz "/bin")) | ||||
|                      (system* (string-append tar "/bin/tar") "xvf" source) | ||||
| 
 | ||||
|                      (chdir (string-append "vera-" ,version)) | ||||
|                      (mkdir-p info) | ||||
|                      (mkdir-p html) | ||||
| 
 | ||||
|                      ;; XXX: Use '--force' because the document is unhappy | ||||
|                      ;; with Texinfo 5 (yes, documents can be unhappy.) | ||||
|                      (and (zero? | ||||
|                            (system* (string-append texi "/bin/makeinfo") | ||||
|                                     "vera.texi" "--force" "-o" | ||||
|                                     (string-append info "/vera.info"))) | ||||
|                           (zero? | ||||
|                            (system* (string-append texi "/bin/makeinfo") | ||||
|                                     "vera.texi" "--force" "--html" "-o" | ||||
|                                     (string-append html "/vera.html")))))) | ||||
|       #:modules ((guix build utils)))) | ||||
|     (native-inputs `(("texinfo" ,texinfo) | ||||
|                      ("tar" ,tar) | ||||
|                      ("gzip" ,gzip))) | ||||
|     (home-page "http://savannah.gnu.org/projects/vera/") | ||||
|     (synopsis "List of acronyms") | ||||
|     (description | ||||
|      "V.E.R.A. (Virtual Entity of Relevant Acronyms) is a list of computing | ||||
| acronyms distributed as an info document.") | ||||
|     (license fdl1.3+))) | ||||
							
								
								
									
										100
									
								
								gnu/packages/docbook.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								gnu/packages/docbook.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,100 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages docbook) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module ((gnu packages base) | ||||
|                 #:select (tar)) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system trivial) | ||||
|   #:autoload   (gnu packages zip) (unzip)) | ||||
| 
 | ||||
| (define-public docbook-xml | ||||
|   (package | ||||
|     (name "docbook-xml") | ||||
|     (version "4.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://www.docbook.org/xml/" version | ||||
|                                   "/docbook-xml-" version ".zip")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1d671lcjckjri28xfbf6dq7y3xnkppa910w1jin8rjc35dx06kjf")))) | ||||
|     (build-system trivial-build-system) | ||||
|     (arguments | ||||
|      '(#:builder (begin | ||||
|                    (use-modules (guix build utils)) | ||||
| 
 | ||||
|                    (let* ((unzip | ||||
|                            (string-append (assoc-ref %build-inputs "unzip") | ||||
|                                           "/bin/unzip")) | ||||
|                           (source (assoc-ref %build-inputs "source")) | ||||
|                           (out    (assoc-ref %outputs "out")) | ||||
|                           (dtd    (string-append out "/xml/dtd/docbook"))) | ||||
|                      (mkdir-p dtd) | ||||
|                      (with-directory-excursion dtd | ||||
|                        (system* unzip source)))) | ||||
|        #:modules ((guix build utils)))) | ||||
|     (native-inputs `(("unzip" ,unzip))) | ||||
|     (home-page "http://docbook.org") | ||||
|     (synopsis "DocBook XML DTDs for document authoring") | ||||
|     (description | ||||
|      "DocBook is general purpose XML and SGML document type particularly well | ||||
| suited to books and papers about computer hardware and software (though it is | ||||
| by no means limited to these applications.)  This package provides XML DTDs.") | ||||
|     (license (x11-style "" "See file headers.")))) | ||||
| 
 | ||||
| (define-public docbook-xsl | ||||
|   (package | ||||
|     (name "docbook-xsl") | ||||
|     (version "1.72.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/docbook/docbook-xsl-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1cnrfgqz8pc9wnlgqjch2338ad7jki6d4h6b2fhaxn1a2201df5k")))) | ||||
|     (build-system trivial-build-system) | ||||
|     (arguments | ||||
|      `(#:builder (begin | ||||
|                    (use-modules (guix build utils)) | ||||
| 
 | ||||
|                    (let* ((bzip2  (assoc-ref %build-inputs "bzip2")) | ||||
|                           (tar    (assoc-ref %build-inputs "tar")) | ||||
|                           (source (assoc-ref %build-inputs "source")) | ||||
|                           (out    (assoc-ref %outputs "out")) | ||||
|                           (xsl    (string-append out "/xml/xsl"))) | ||||
|                      (setenv "PATH" (string-append bzip2 "/bin")) | ||||
|                      (system* (string-append tar "/bin/tar") "xvf" source) | ||||
| 
 | ||||
|                      (mkdir-p xsl) | ||||
|                      (copy-recursively (string-append ,name "-" ,version) | ||||
|                                        (string-append xsl "/" ,name | ||||
|                                                       "-" ,version)))) | ||||
|        #:modules ((guix build utils)))) | ||||
|     (native-inputs `(("bzip2" ,bzip2) | ||||
|                      ("tar" ,tar))) | ||||
|     (home-page "http://docbook.org") | ||||
|     (synopsis "DocBook XSL style sheets for document authoring") | ||||
|     (description | ||||
|      "This package provides XSL style sheets for DocBook.") | ||||
|     (license (x11-style "" "See 'COPYING' file.")))) | ||||
							
								
								
									
										63
									
								
								gnu/packages/fltk.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								gnu/packages/fltk.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 John Darrington <jmd@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages fltk) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
| 
 | ||||
| (define-public fltk | ||||
|   (package | ||||
|     (name "fltk") | ||||
|     (version "1.3.2") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "http://fltk.org/pub/fltk/" version "/fltk-" version "-source.tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1974brlk723095vf8z72kazq1cbqr9a51kq6b0xda6zkjkgl8q0p")))) | ||||
|    (build-system gnu-build-system) | ||||
|     (inputs | ||||
|       `(("libx11" ,libx11) | ||||
|         ("mesa" ,mesa))) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (alist-replace | ||||
|         'check | ||||
|         (lambda* (#:key inputs #:allow-other-keys) #t) ;; fltk does not have a | ||||
|                                                        ;; check target | ||||
|         (alist-replace | ||||
|          'configure | ||||
|          (lambda* (#:key outputs #:allow-other-keys #:rest args) | ||||
|            (let ((configure (assoc-ref %standard-phases 'configure))) | ||||
|              (substitute* "makeinclude.in" | ||||
|                (("/bin/sh") (which "sh"))) | ||||
|              (apply configure args))) | ||||
|          %standard-phases)))) | ||||
|     (home-page "https://www.fltk.org") | ||||
|     (synopsis "3D C++ GUI library") | ||||
|     (description "FLTK is a C++ GUI toolkit providing modern GUI functionality without the | ||||
| bloat. It supports 3D graphics via OpenGL and its built-in GLUT emulation. | ||||
| FLTK is designed to be small and modular enough to be statically linked, but | ||||
| works fine as a shared library. FLTK also includes an excellent UI builder | ||||
| called FLUID that can be used to create applications in minutes.") | ||||
|     (license lgpl2.0))) ; plus certain additional permissions | ||||
|  | @ -86,10 +86,11 @@ representation of the playing board.") | |||
|     (native-inputs `(("gettext" ,gnu-gettext) | ||||
|                      ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://www.gnu.org/software/gnubik/") | ||||
|     (synopsis "3d Rubik's cube game.") | ||||
|     (description "GNUbik is a puzzle game in which you must manipulate a cube to make | ||||
|     (synopsis "3d Rubik's cube game") | ||||
|     (description | ||||
|      "GNUbik is a puzzle game in which you must manipulate a cube to make | ||||
| each of its faces have a uniform color.  The game is customizable, allowing | ||||
| you to set the size of the cube (the default is 3x3) or to change the colors. | ||||
| You may even apply photos to the faces instead of colors.  The game is | ||||
|  You may even apply photos to the faces instead of colors.  The game is | ||||
| scriptable with Guile.") | ||||
|     (license gpl3+))) | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Guy Grant <gzg@riseup.net> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -138,12 +139,12 @@ Polygon meshes, and Extruded polygon meshes") | |||
|     (propagated-inputs | ||||
|       `(("glproto" ,glproto) | ||||
|         ("libdrm" ,libdrm-2.4.33) | ||||
|         ("libx11" ,libx11) | ||||
|         ("libxdamage" ,libxdamage) | ||||
|         ("libxxf86vm" ,libxxf86vm))) | ||||
|     (inputs | ||||
|       `(("dri2proto" ,dri2proto) | ||||
|         ("expat" ,expat) | ||||
|         ("libx11" ,libx11) | ||||
|         ("libxfixes" ,libxfixes) | ||||
|         ("libxml2" ,libxml2) | ||||
|         ("makedepend" ,makedepend))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; | ||||
|  | @ -106,14 +106,14 @@ shared NFS home directories.") | |||
| (define glib | ||||
|   (package | ||||
|    (name "glib") | ||||
|    (version "2.38.0") | ||||
|    (version "2.39.1") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|             (uri (string-append "mirror://gnome/sources/" | ||||
|                                 name "/" (string-take version 4) "/" | ||||
|                                 name "-" version ".tar.xz")) | ||||
|             (sha256 | ||||
|              (base32 "0cpzqadqk6z6bmb79p04pykxc8x57rvshh33414cnk41bvgaf4vm")) | ||||
|              (base32 "0lqi6z47068vgh91fm59jn0kq969wf3g2q8k4m33jsb0amprg36h")) | ||||
|             (patches (list (search-patch "glib-tests-homedir.patch") | ||||
|                            (search-patch "glib-tests-desktop.patch") | ||||
|                            (search-patch "glib-tests-prlimit.patch") | ||||
|  | @ -155,7 +155,11 @@ shared NFS home directories.") | |||
|       ;; Note: `--docdir' and `--htmldir' are not honored, so work around it. | ||||
|       #:configure-flags (list (string-append "--with-html-dir=" | ||||
|                                              (assoc-ref %outputs "doc") | ||||
|                                              "/share/gtk-doc")))) | ||||
|                                              "/share/gtk-doc")) | ||||
| 
 | ||||
|       ;; In 'gio/tests', 'gdbus-test-codegen-generated.h' is #included in a | ||||
|       ;; file that gets compiled possibly before it has been fully generated. | ||||
|       #:parallel-tests? #f)) | ||||
|    (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME") | ||||
|    (description | ||||
|     "GLib provides data structure handling for C, portability wrappers, | ||||
|  |  | |||
|  | @ -28,10 +28,10 @@ | |||
|   #:use-module (gnu packages gstreamer) | ||||
|   #:use-module (gnu packages libjpeg) | ||||
|   #:use-module (gnu packages libtiff) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages openssl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages video) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:renamer (symbol-prefix-proc 'license:)) | ||||
|   #:use-module (guix packages) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -27,6 +27,10 @@ | |||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module ((gnu packages compression) | ||||
|                 #:renamer (symbol-prefix-proc 'guix:)) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
|  | @ -389,3 +393,28 @@ including tools for signing keys, keyring analysis, and party preparation. | |||
|    ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright | ||||
|    (license gpl2) | ||||
|    (home-page "http://pgp-tools.alioth.debian.org/"))) | ||||
| 
 | ||||
| (define-public pinentry | ||||
|   (package | ||||
|     (name "pinentry") | ||||
|     (version "0.8.3") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnupg/pinentry/pinentry-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1bd047crf7xb8g61mval8v6qww98rddlsw2dz6j8h8qbnl4hp2sn")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("ncurses" ,ncurses) | ||||
|        ("gtk+" ,gtk+-2) | ||||
|        ("glib" ,glib))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://gnupg.org/aegypten2/") | ||||
|     (synopsis "GnuPG's interface to passphrase input") | ||||
|     (description | ||||
|      "Pinentry provides a console and a GTK+ GUI that allows users to | ||||
| enter a passphrase when `gpg' or `gpg2' is run and needs it.") | ||||
|     (license gpl2+))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -35,7 +35,9 @@ | |||
|   #:use-module (gnu packages which) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (ice-9 match)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -134,7 +136,7 @@ without requiring the source code to be rewritten.") | |||
| 
 | ||||
|       ;; The headers and/or `guile-2.0.pc' refer to these packages, so they | ||||
|       ;; must be propagated. | ||||
|       ("bdw-gc" ,libgc) | ||||
|       ("bdw-gc" ,libgc-7.4) | ||||
|       ("gmp" ,gmp))) | ||||
| 
 | ||||
|    (self-native-input? #t) | ||||
|  | @ -173,7 +175,15 @@ without requiring the source code to be rewritten.") | |||
| (define-public guile-2.0/fixed | ||||
|   ;; A package of Guile 2.0 that's rarely changed.  It is the one used | ||||
|   ;; in the `base' module, and thus changing it entails a full rebuild. | ||||
|   guile-2.0) | ||||
|   (package (inherit guile-2.0) | ||||
|     (location (source-properties->location (current-source-location))) | ||||
| 
 | ||||
|     ;; Keep using the stable libgc. | ||||
|     (propagated-inputs (map (match-lambda | ||||
|                              (("bdw-gc" _) | ||||
|                               `("bdw-gc" ,libgc)) | ||||
|                              (x x)) | ||||
|                             (package-propagated-inputs guile-2.0))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
|  |  | |||
|  | @ -25,8 +25,8 @@ | |||
|   #:use-module (gnu packages gstreamer) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages pkg-config)) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages xiph)) | ||||
| 
 | ||||
| (define-public libcanberra | ||||
|   (package | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -819,3 +819,24 @@ an interactive mode where the user can experiment various power management | |||
| settings for cases where the operating system has not enabled these | ||||
| settings.") | ||||
|     (license gpl2))) | ||||
| 
 | ||||
| (define-public aumix | ||||
|   (package | ||||
|     (name "aumix") | ||||
|     (version "2.9.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://www.jpj.net/~trevor/aumix/releases/aumix-" | ||||
|                     version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("ncurses" ,ncurses))) | ||||
|     (home-page "http://www.jpj.net/~trevor/aumix.html") | ||||
|     (synopsis "Audio mixer for X and the console") | ||||
|     (description | ||||
|      "Aumix adjusts an audio mixer from X, the console, a terminal, | ||||
| the command line or a script.") | ||||
|     (license gpl2+))) | ||||
|  |  | |||
|  | @ -125,7 +125,7 @@ LP/MIP solver is included in the package.") | |||
| (define-public pspp | ||||
|   (package | ||||
|     (name "pspp") | ||||
|     (version "0.8.1") | ||||
|     (version "0.8.2") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -133,8 +133,7 @@ LP/MIP solver is included in the package.") | |||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0qhxsdbwxd3cn1shc13wxvx2lg32lp4z6sz24kv3jz7p5xfi8j7x")) | ||||
|       (patches (list (search-patch "pspp-tests.patch"))))) | ||||
|         "1w7h3dglgx0jlq1wb605b8pgfsk2vr1q2q2rj7bsajh9ihbcsixr")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("cairo" ,cairo) | ||||
|  |  | |||
|  | @ -23,12 +23,13 @@ | |||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages cdrom) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages gettext) | ||||
|   #:use-module (gnu packages ghostscript) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
|  | @ -266,3 +267,64 @@ a few mouse clicks to convert an entire album. It supports CDDB lookups | |||
| for album and track information.") | ||||
|    (license license:gpl2) | ||||
|    (home-page "http://sourceforge.net/projects/ripperx/"))) | ||||
| 
 | ||||
| (define-public libmpcdec | ||||
|   (package | ||||
|     (name "libmpcdec") | ||||
|     (version "1.2.6") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://files.musepack.net/source/libmpcdec-" | ||||
|                     version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1a0jdyga1zfi4wgkg3905y6inghy3s4xfs5m4x7pal08m0llkmab")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (synopsis "Decoding library for the Musepack audio format") | ||||
|     (description | ||||
|      "This library supports decoding of the Musepack (MPC) audio compression | ||||
| format.") | ||||
|     (license license:bsd-3) | ||||
|     (home-page "http://musepack.net"))) | ||||
| 
 | ||||
| (define-public mpc123 | ||||
|   (package | ||||
|     (name "mpc123") | ||||
|     (version "0.2.4") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/mpc123/version%20" | ||||
|                                   version "/mpc123-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0sf4pns0245009z6mbxpx7kqy4kwl69bc95wz9v23wgappsvxgy1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda _ | ||||
|                    (substitute* "Makefile" | ||||
|                      (("CC[[:blank:]]*:=.*") | ||||
|                       "CC := gcc\n"))) | ||||
|                  (alist-replace | ||||
|                   'install | ||||
|                   (lambda* (#:key outputs #:allow-other-keys) | ||||
|                     (let* ((out (assoc-ref outputs "out")) | ||||
|                            (bin (string-append out "/bin"))) | ||||
|                       (mkdir-p bin) | ||||
|                       (copy-file "mpc123" (string-append bin "/mpc123")))) | ||||
|                   %standard-phases)) | ||||
|        #:tests? #f)) | ||||
| 
 | ||||
|     (native-inputs | ||||
|      `(("gettext" ,gnu-gettext))) | ||||
|     (inputs | ||||
|      `(("libao" ,ao) | ||||
|        ("libmpcdec" ,libmpcdec))) | ||||
|     (home-page "http://mpc123.sourceforge.net/") | ||||
|     (synopsis "Audio player for Musepack-formatted files") | ||||
|     (description | ||||
|      "mpc123 is a command-line player for files in the Musepack audio | ||||
| compression format (.mpc files.)") | ||||
|     (license license:gpl2+))) | ||||
|  |  | |||
							
								
								
									
										48
									
								
								gnu/packages/ncdu.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								gnu/packages/ncdu.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014  John Darrington <jmd@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages ncdu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
| 
 | ||||
| (define-public ncdu | ||||
|   (package | ||||
|    (name "ncdu") | ||||
|    (version "1.10") | ||||
|    (source (origin | ||||
| 	    (method url-fetch) | ||||
| 	    (uri (string-append "http://dev.yorhel.nl/download/ncdu-" | ||||
| 				version ".tar.gz")) | ||||
| 	    (sha256 | ||||
| 	     (base32 | ||||
| 	      "0rqc5wpqcbfqpcwxgh3jxwa0yw2py0hv0acpsf0a9g6v9144m6gm")))) | ||||
|    (inputs | ||||
|     `(("ncurses" ,ncurses))) | ||||
|    (build-system gnu-build-system) | ||||
|    (synopsis "Ncurses based disk usage analyzer") | ||||
|    (description "A disk usage analyzer with an ncurses interface, aimed to be | ||||
| run on a remote server where you don't have an entire gaphical setup, but have | ||||
| to do with a simple SSH connection. ncdu aims to be fast, simple and easy to | ||||
| use, and should be able to run in any minimal POSIX-like environment with | ||||
| ncurses installed.") | ||||
|    (license (x11-style "http://g.blicky.net/ncdu.git/plain/COPYING?id=v1.10")) | ||||
|    (home-page "http://dev.yorhel.nl/ncdu"))) | ||||
							
								
								
									
										55
									
								
								gnu/packages/onc-rpc.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								gnu/packages/onc-rpc.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages onc-rpc) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
| 
 | ||||
| (define-public libtirpc | ||||
|   (package | ||||
|     (name "libtirpc") | ||||
|     (version "0.2.4") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/libtirpc/" | ||||
|                                   version "/libtirpc-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "18a337wa4amf0k21wnimp3yzs5l3cxqndz4x3x8bm993zhfy5hs5")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(;; Doesn't work with GNU GSS. | ||||
|        #:configure-flags '("--disable-gssapi") | ||||
| 
 | ||||
|        #:phases (alist-cons-after | ||||
|                  'unpack 'remote-dangling-symlink | ||||
|                  (lambda _ | ||||
|                    ;; Remote the dangling symlinks since it breaks the | ||||
|                    ;; 'patch-source-shebangs' file tree traversal. | ||||
|                    (delete-file "INSTALL")) | ||||
|                  %standard-phases))) | ||||
|     (home-page "http://sourceforge.net/projects/libtirpc/") | ||||
|     (synopsis "Transport-independent Sun/ONC RPC implementation") | ||||
|     (description | ||||
|      "This package provides a library that implements the Sun/ONC RPC (remote | ||||
| procedure calls) protocol in a transport-independent manner.  It supports both | ||||
| IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).") | ||||
|     (license bsd-3))) | ||||
|  | @ -38,9 +38,10 @@ database, the `update-desktop-database' program, which we don't provide. | |||
|    return g_test_run (); | ||||
|  } | ||||
| 
 | ||||
| --- glib-2.37.1/gio/tests/desktop-app-info.c	2013-06-07 23:46:28.000000000 +0200
 | ||||
| +++ glib-2.37.1/gio/tests/desktop-app-info.c	2013-06-07 23:46:32.000000000 +0200
 | ||||
| @@ -385,6 +385,7 @@ main (int   argc,
 | ||||
| 
 | ||||
| --- glib-2.39.1/gio/tests/desktop-app-info.c	2013-06-07 23:46:28.000000000 +0200
 | ||||
| +++ glib-2.39.1/gio/tests/desktop-app-info.c	2013-06-07 23:46:32.000000000 +0200
 | ||||
| @@ -699,6 +699,7 @@ main (int   argc,
 | ||||
|    g_setenv ("XDG_DATA_HOME", basedir, TRUE); | ||||
|    cleanup_subdirs (basedir); | ||||
|   | ||||
|  | @ -54,9 +55,9 @@ database, the `update-desktop-database' program, which we don't provide. | |||
| The hunk below removes tests that depend on `gdbus-testserver.py', | ||||
| because that script depends on python-gobject. | ||||
|   | ||||
| --- glib-2.38.0.orig/gio/tests/Makefile.in	2013-09-23 23:07:46.000000000 +0200
 | ||||
| +++ glib-2.38.0/gio/tests/Makefile.in	2013-09-30 21:55:35.000000000 +0200
 | ||||
| @@ -172,19 +172,12 @@
 | ||||
| --- glib-2.39.1/gio/tests/Makefile.in	2014-01-20 00:18:16.000000000 +0100
 | ||||
| +++ glib-2.39.1/gio/tests/Makefile.in	2014-01-20 00:18:47.000000000 +0100
 | ||||
| @@ -171,20 +171,13 @@ check_PROGRAMS = $(am__EXEEXT_14)
 | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-auth				\ | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-bz627724				\ | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-close-pending			\ | ||||
|  | @ -72,6 +73,7 @@ because that script depends on python-gobject. | |||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-proxy-threads			\ | ||||
| -@HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-proxy-well-known-name		\
 | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-test-codegen			\ | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-test-codegen-old			\ | ||||
| -@HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-threading				\
 | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gmenumodel				\ | ||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	$(NULL) | ||||
|  | @ -105,3 +107,17 @@ The test dbus-appinfo is dropped as it hangs indefinitely since 2.37.5, see | |||
|   | ||||
|    session_bus_up (); | ||||
| 
 | ||||
| 
 | ||||
| The test below fails for unknown reasons (!). | ||||
| 
 | ||||
| --- glib-2.39.1/gio/tests/gsettings.c.orig	2014-01-20 00:45:04.000000000 +0100
 | ||||
| +++ glib-2.39.1/gio/tests/gsettings.c	2014-01-20 00:45:10.000000000 +0100
 | ||||
| @@ -2489,7 +2489,6 @@ main (int argc, char *argv[])
 | ||||
|    g_test_add_func ("/gsettings/range/subprocess/high", test_range_high); | ||||
|    g_test_add_func ("/gsettings/range/subprocess/low", test_range_low); | ||||
|    g_test_add_func ("/gsettings/list-items", test_list_items); | ||||
| -  g_test_add_func ("/gsettings/list-schemas", test_list_schemas);
 | ||||
|    g_test_add_func ("/gsettings/mapped", test_get_mapped); | ||||
|    g_test_add_func ("/gsettings/get-range", test_get_range); | ||||
|    g_test_add_func ("/gsettings/schema-source", test_schema_source); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,13 +0,0 @@ | |||
| diff --git a/tests/output/render-test.c b/tests/output/render-test.c
 | ||||
| index 5f4c1da..e9df96c 100644
 | ||||
| --- a/tests/output/render-test.c
 | ||||
| +++ b/tests/output/render-test.c
 | ||||
| @@ -142,7 +142,7 @@ configure_drivers (int width, int length)
 | ||||
|    string_map_insert (&options, "left-margin", "0"); | ||||
|    string_map_insert (&options, "right-margin", "0"); | ||||
|    string_map_insert_nocopy (&options, xstrdup ("paper-size"), | ||||
| -                            xasprintf ("%dx%dpt", width * 5, length * 8));
 | ||||
| +                            xasprintf ("%dx%dpt", width * 5, length * 16));
 | ||||
|    driver = output_driver_create (&options); | ||||
|    if (driver == NULL) | ||||
|      exit (EXIT_FAILURE); | ||||
							
								
								
									
										121
									
								
								gnu/packages/photo.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								gnu/packages/photo.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,121 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages photo) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages libusb) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages popt) | ||||
|   #:use-module ((gnu packages base) #:select (tzdata))) | ||||
| 
 | ||||
| (define-public libexif | ||||
|   (package | ||||
|     (name "libexif") | ||||
|     (version "0.6.21") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/libexif/libexif-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "06nlsibr3ylfwp28w8f5466l6drgrnydgxrm4jmxzrmk5svaxk8n")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://libexif.sourceforge.net/") | ||||
|     (synopsis "Read and manipulate EXIF data in digital photographs") | ||||
|     (description | ||||
|      "The libexif C library allows applications to read, edit, and save EXIF | ||||
| data as produced by digital cameras.") | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
| (define-public libgphoto2 | ||||
|   (package | ||||
|     (name "libgphoto2") | ||||
|     (version "2.5.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/gphoto/libgphoto2-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0f1818l1vs5fbmrihzyv3qasddbqi3r01jik5crrxddwalsi2bd3")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(;; ("libjpeg-turbo" ,libjpeg-turbo) | ||||
|        ("libtool" ,libtool) | ||||
|        ("libusb" ,libusb))) | ||||
|     (propagated-inputs | ||||
|      `(;; The .pc refers to libexif. | ||||
|        ("libexif" ,libexif))) | ||||
|     (home-page "http://www.gphoto.org/proj/libgphoto2/") | ||||
|     (synopsis "Accessing digital cameras") | ||||
|     (description | ||||
|      "This is the library backend for gphoto2.  It contains the code for PTP, | ||||
| MTP, and other vendor specific protocols for controlling and transferring data | ||||
| from digital cameras.") | ||||
| 
 | ||||
|     ;; 'COPYING' says LGPLv2.1+, but in practices files are under LGPLv2+. | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
| (define-public gphoto2 | ||||
|   (package | ||||
|     (name "gphoto2") | ||||
|     (version "2.5.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/gphoto/gphoto2-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "16c8k1cxfypg7v5h8xi87grclw7a5ayaamn548ys3zkj727r5fcf")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("readline" ,readline) | ||||
|        ;; ("libjpeg-turbo" ,libjpeg-turbo) | ||||
|        ("popt" ,popt) | ||||
|        ("libexif" ,libexif) | ||||
|        ("libgphoto2" ,libgphoto2))) | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'check 'pre-check | ||||
|                  (lambda* (#:key inputs #:allow-other-keys) | ||||
|                    (substitute* (find-files "tests/data" "\\.param$") | ||||
|                      (("/usr/bin/env") | ||||
|                       (which "env")))) | ||||
|                  %standard-phases) | ||||
| 
 | ||||
|        ;; FIXME: There are 2 test failures, most likely related to the build | ||||
|        ;; environment. | ||||
|        #:tests? #f)) | ||||
| 
 | ||||
|     (home-page "http://www.gphoto.org/") | ||||
|     (synopsis "Command-line tools to access digital cameras") | ||||
|     (description | ||||
|      "Gphoto2 is a set of command line utilities for manipulating a large | ||||
| number of different digital cameras.  Through libgphoto2, it supports PTP, | ||||
| MTP, and much more.") | ||||
| 
 | ||||
|     ;; Files are typically under LGPLv2+, but 'COPYING' says GPLv2+. | ||||
|     (license gpl2+))) | ||||
|  | @ -23,18 +23,18 @@ | |||
|                 #:renamer (symbol-prefix-proc 'l:)) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module ((gnu packages autotools) #:select (libtool)) | ||||
|   #:use-module (gnu packages avahi) | ||||
|   #:use-module (gnu packages check) | ||||
|   #:use-module (gnu packages gdbm) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages libcanberra) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module ((gnu packages autotools) #:select (libtool)) | ||||
|   #:use-module (gnu packages gdbm) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages m4) | ||||
|   #:use-module (gnu packages check) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:export (libsndfile | ||||
|             libsamplerate | ||||
|             json-c | ||||
|  |  | |||
|  | @ -28,10 +28,10 @@ | |||
|   #:use-module (gnu packages libtiff) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages mp3) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages pulseaudio) | ||||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:export (sdl | ||||
|             sdl2 | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
| (define-public sqlite | ||||
|   (package | ||||
|    (name "sqlite") | ||||
|    (version "3.7.15.2") | ||||
|    (version "3.8.2") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|             ;; TODO: Download from sqlite.org once this bug : | ||||
|  | @ -34,10 +34,10 @@ | |||
|             ;; has been fixed. | ||||
|             (uri (string-append | ||||
|                   "mirror://sourceforge/sqlite.mirror/SQLite%20" | ||||
|                   version "/sqlite-autoconf-3071502.tar.gz")) | ||||
|                   version "/sqlite-autoconf-3080200.tar.gz")) | ||||
|             (sha256 | ||||
|              (base32 | ||||
|               "135s6r5z12q56brywpxnraqbqm7bdkxs76v7dygqgjpnjyvicbbq")))) | ||||
|               "14pg9zlwbwsj5w7f3qr25d3nniyv82gmczwlvpj0i0ic1431v1d0")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (home-page "http://www.sqlite.org/") | ||||
|    (synopsis "The SQLite database management system") | ||||
|  |  | |||
|  | @ -199,12 +199,6 @@ Additionally, various channel-specific options can be negotiated.") | |||
|      '(#:phases (alist-cons-before | ||||
|                  'configure 'autoreconf | ||||
|                  (lambda* (#:key inputs #:allow-other-keys) | ||||
|                    ;; The 'configure' script would want libssh 0.5.4, but that | ||||
|                    ;; doesn't exist. | ||||
|                    (substitute* "configure.ac" | ||||
|                      (("0\\.5\\.4") | ||||
|                       "0.5.3")) | ||||
| 
 | ||||
|                    (substitute* "src/Makefile.am" | ||||
|                      (("-lssh_threads" match) | ||||
|                       (string-append "-L" (assoc-ref inputs "libssh") | ||||
|  | @ -244,3 +238,46 @@ programs written in GNU Guile interpreter.  It is a wrapper to the underlying | |||
| libssh library.") | ||||
|     (home-page "https://github.com/artyom-poptsov/libguile-ssh") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public corkscrew | ||||
|   (package | ||||
|     (name "corkscrew") | ||||
|     (version "2.0") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://www.agroman.net/corkscrew/corkscrew-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 (base32 | ||||
|                 "1gmhas4va6gd70i2x2mpxpwpgww6413mji29mg282jms3jscn3qd")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; Replace configure phase as the ./configure script does not link | ||||
|      ;; CONFIG_SHELL and SHELL passed as parameters | ||||
|      '(#:phases | ||||
|        (alist-replace | ||||
|         'configure | ||||
|         (lambda* (#:key outputs inputs system target | ||||
|                         #:allow-other-keys #:rest args) | ||||
|           (let* ((configure (assoc-ref %standard-phases 'configure)) | ||||
|                  (prefix (assoc-ref outputs "out")) | ||||
|                  (bash   (which "bash")) | ||||
|                  ;; Set --build and --host flags as the provided config.guess | ||||
|                  ;; is not able to detect them | ||||
|                  (flags `(,(string-append "--prefix=" prefix) | ||||
|                           ,(string-append "--build=" system) | ||||
|                           ,(string-append "--host=" | ||||
|                                           (or target system))))) | ||||
|             (setenv "CONFIG_SHELL" bash) | ||||
|             (zero? (apply system* bash | ||||
|                           (string-append "." "/configure") | ||||
|                           flags)))) | ||||
|         %standard-phases))) | ||||
|     (home-page "http://www.agroman.net/corkscrew") | ||||
|     (synopsis "A tool for tunneling SSH through HTTP proxies") | ||||
|     (description | ||||
|      "Corkscrew allows creating TCP tunnels through HTTP proxies.  WARNING: | ||||
| At the moment only plain text authentication is supported, should you require | ||||
| to use it with your HTTP proxy.  Digest based authentication may be supported | ||||
| in future and NTLM based authentication is most likey never be supported.") | ||||
|     (license license:gpl2+))) | ||||
|  |  | |||
							
								
								
									
										56
									
								
								gnu/packages/uucp.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								gnu/packages/uucp.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages uucp) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
| 
 | ||||
| (define-public uucp | ||||
|   (package | ||||
|     (name "uucp") | ||||
|     (version "1.07") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnu/uucp/uucp-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0b5nhl9vvif1w3wdipjsk8ckw49jj1w85xw1mmqi3zbcpazia306")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; The old 'configure' script doesn't support the arguments | ||||
|                    ;; that we pass by default. | ||||
|                    (setenv "CONFIG_SHELL" (which "sh")) | ||||
|                    (let ((out (assoc-ref outputs "out"))) | ||||
|                      (zero? (system* "./configure" | ||||
|                                      (string-append "--prefix=" out) | ||||
|                                      (string-append "--infodir=" out | ||||
|                                                     "/share/info"))))) | ||||
|                  %standard-phases))) | ||||
|     (home-page "http://www.gnu.org/software/uucp/uucp.html") | ||||
|     (synopsis "UUCP protocol implementation") | ||||
|     (description | ||||
|      "Taylor UUCP is the GNU implementation of UUCP (Unix-to-Unix Copy), a | ||||
| set of utilities for remotely transferring files, email and net news | ||||
| between computers.") | ||||
|     (license gpl2+))) | ||||
|  | @ -28,14 +28,14 @@ | |||
| (define-public valgrind | ||||
|   (package | ||||
|     (name "valgrind") | ||||
|     (version "3.8.1") | ||||
|     (version "3.9.0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://valgrind.org/downloads/valgrind-" | ||||
|                                  version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1nsqk70ry3221sd62s4f0njcrncppszs4xxjcak13lxyfq2y0fs7")) | ||||
|                "1w6n5qvxy2ssbczcl1c2yd2ggjn3ipay2hvpn10laly2dfh73bz6")) | ||||
|              (patches (list (search-patch "valgrind-glibc.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -35,7 +35,7 @@ | |||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages sqlite) | ||||
|   #:use-module (gnu packages system) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages emacs) | ||||
|   #:use-module (gnu packages compression) | ||||
|  | @ -83,10 +83,12 @@ as well as the classic centralized workflow.") | |||
|              (base32 | ||||
|               "156bwqqgaw65rsvbb4wih5jfg94bxyf6p16mdwf0ky3f4ln55s2i")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (native-inputs | ||||
|     `(("native-perl" ,perl) | ||||
|       ("gettext" ,gnu-gettext))) | ||||
|    (inputs | ||||
|     `(("curl" ,curl) | ||||
|       ("expat" ,expat) | ||||
|       ("gettext" ,gnu-gettext) | ||||
|       ("openssl" ,openssl) | ||||
|       ("perl" ,perl) | ||||
|       ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL | ||||
|  | @ -136,7 +138,9 @@ as well as the classic centralized workflow.") | |||
|                   (git-cit  (string-append out "/libexec/git-core/git-citool")) | ||||
|                   (git-cit* (string-append gui "/libexec/git-core/git-citool")) | ||||
|                   (git-svn  (string-append out "/libexec/git-core/git-svn")) | ||||
|                   (git-svn* (string-append svn "/libexec/git-core/git-svn"))) | ||||
|                   (git-svn* (string-append svn "/libexec/git-core/git-svn")) | ||||
|                   (git-sm   (string-append out | ||||
|                                            "/libexec/git-core/git-submodule"))) | ||||
|              (mkdir-p (string-append gui "/bin")) | ||||
|              (mkdir-p (string-append gui "/libexec/git-core")) | ||||
|              (mkdir-p (string-append svn "/libexec/git-core")) | ||||
|  | @ -163,6 +167,12 @@ as well as the classic centralized workflow.") | |||
|                              (,(string-append (assoc-ref inputs "subversion") | ||||
|                                               "/lib")))) | ||||
| 
 | ||||
|              ;; Tell 'git-submodule' where Perl is. | ||||
|              (wrap-program git-sm | ||||
|                            `("PATH" ":" prefix | ||||
|                              (,(string-append (assoc-ref inputs "perl") | ||||
|                                               "/bin")))) | ||||
| 
 | ||||
|              ;; Tell 'git' to look for core programs in the user's profile. | ||||
|              ;; This allows user to install other outputs of this package and | ||||
|              ;; have them transparently taken into account.  There's a | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -25,28 +25,29 @@ | |||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages elf) | ||||
|   #:use-module (gnu packages fontutils) | ||||
|   #:use-module (gnu packages oggvorbis) | ||||
|   #:use-module (gnu packages openssl) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages yasm)) | ||||
| 
 | ||||
| (define-public ffmpeg | ||||
|   (package | ||||
|     (name "ffmpeg") | ||||
|     (version "2.1.1") | ||||
|     (version "2.1.3") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-" | ||||
|                                  version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1qnspbpwa6cflsb6mkm84ay4nfx60ism6d7lgvnasidck9dmxydy")))) | ||||
|                "18qkdpka94rp44x17q7d2bvmw26spxf41c69nvzy31szsdzjwcqx")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("fontconfig" ,fontconfig) | ||||
|        ("freetype" ,freetype) | ||||
|        ("opus" ,opus) | ||||
|        ("libtheora" ,libtheora) | ||||
|        ("libvorbis" ,libvorbis) | ||||
|        ("patchelf" ,patchelf) | ||||
|  | @ -107,7 +108,6 @@ | |||
| ;;   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] | ||||
| ;;   --enable-libopencv       enable video filtering via libopencv [no] | ||||
| ;;   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no] | ||||
| ;;   --enable-libopus         enable Opus decoding via libopus [no] | ||||
| ;;   --enable-libpulse        enable Pulseaudio input via libpulse [no] | ||||
| ;;   --enable-libquvi         enable quvi input via libquvi [no] | ||||
| ;;   --enable-librtmp         enable RTMP[E] support via librtmp [no] | ||||
|  | @ -142,6 +142,7 @@ | |||
|                       "--enable-fontconfig" | ||||
|                       ;; "--enable-gnutls" ; causes test failures | ||||
|                       "--enable-libfreetype" | ||||
|                       "--enable-libopus" | ||||
|                       "--enable-libspeex" | ||||
|                       "--enable-libtheora" | ||||
|                       "--enable-libvorbis" | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ | |||
|   #:use-module (gnu packages gawk) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages system) ; For GNU hostname | ||||
|   #:use-module (gnu packages admin) ; For GNU hostname | ||||
|   #:use-module (gnu packages tcsh)) | ||||
| 
 | ||||
| (define-public vim | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -18,7 +19,6 @@ | |||
| 
 | ||||
| (define-module (gnu packages wget) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (gnu packages gettext) | ||||
|   #:use-module (gnu packages gnutls) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (guix packages) | ||||
|  | @ -28,7 +28,7 @@ | |||
| (define-public wget | ||||
|   (package | ||||
|     (name "wget") | ||||
|     (version "1.14") | ||||
|     (version "1.15") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -36,12 +36,12 @@ | |||
|                           version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0yqllj3nv9p3vqbdm6j4nvpjcwf1y19rq8sd966nrbd2qvvxfq8p")))) | ||||
|         "1yw0sk4mrs7bvga3c79rkbhxivmw8cs3b5wq3cglp1f9ai1mz2ni")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("gnutls" ,gnutls) | ||||
|        ("perl" ,perl) | ||||
|        ("gettext" ,gnu-gettext))) | ||||
|      `(("gnutls" ,gnutls))) | ||||
|     (native-inputs | ||||
|      `(("perl" ,perl))) | ||||
|     (home-page "http://www.gnu.org/software/wget/") | ||||
|     (synopsis "Non-interactive command-line utility for downloading files") | ||||
|     (description | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu> | ||||
| ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -18,7 +19,7 @@ | |||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages oggvorbis) | ||||
| (define-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages compression) | ||||
|  | @ -40,7 +41,8 @@ | |||
|             ao | ||||
|             flac | ||||
|             libkate | ||||
|             vorbis-tools)) | ||||
|             vorbis-tools | ||||
|             opus)) | ||||
| 
 | ||||
| (define libogg | ||||
|   (package | ||||
|  | @ -155,7 +157,7 @@ stereo encoding, and voice activity detection.") | |||
|     ;; FIXME: Add further backends, see the summary printed after configure. | ||||
|     ;; XXX: Should back-ends be pushed to different outputs?  For instance, | ||||
|     ;; "out" would include only the ALSA back-end, while "pulse" would | ||||
|     ;; contains 'lib/ao/plugins-4/libpulse.*'. | ||||
|     ;; contain 'lib/ao/plugins-4/libpulse.*'. | ||||
|     (inputs `(("pkg-config" ,pkg-config) | ||||
|               ("alsa-lib" ,alsa-lib) | ||||
|               ("pulseaudio" ,pulseaudio))) | ||||
|  | @ -278,3 +280,26 @@ ogginfo, to obtain information (tags, bitrate, length, etc.) about | |||
|          an ogg vorbis file.") | ||||
|    (license license:gpl2) | ||||
|    (home-page "http://xiph.org/vorbis/"))) | ||||
| 
 | ||||
| (define opus | ||||
|   (package | ||||
|     (name "opus") | ||||
|     (version "1.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://downloads.xiph.org/releases/opus/opus-" version | ||||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "158xprn2086arvdib3vbbygz7z6jqkw2nci7nlywzzwallap0wmr")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (synopsis "highly versatile audio codec") | ||||
|     (description | ||||
|      "Opus is a totally open, royalty-free, highly versatile audio codec. Opus | ||||
| is unmatched for interactive speech and music transmission over the Internet, | ||||
| but is also intended for storage and streaming applications. It is | ||||
| standardized by the Internet Engineering Task Force (IETF) as RFC 6716 which | ||||
| incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.") | ||||
|     (license license:bsd-3) | ||||
|     (home-page "http://www.opus-codec.org/"))) | ||||
|  | @ -1257,10 +1257,12 @@ tracking.") | |||
|           (base32 | ||||
|             "1gdv6559cdz1lfw73x7wsvax1fkvphmayrymprljhyyb5nwk5kkz")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (propagated-inputs | ||||
|      ;; xft.pc refers to 'xrender'. | ||||
|       `(("libxrender" ,libxrender))) | ||||
|     (inputs | ||||
|       `(("libx11" ,libx11) | ||||
|         ("xproto" ,xproto) | ||||
|         ("libxrender" ,libxrender) | ||||
|         ("freetype" ,freetype) | ||||
|         ("fontconfig" ,fontconfig))) | ||||
|     (native-inputs | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ | |||
|   #:use-module (gnu packages linux-initrd) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages bash) | ||||
|   #:use-module (gnu packages system) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (gnu packages package-management) | ||||
|   #:use-module (gnu system dmd) | ||||
|   #:use-module (gnu system grub) | ||||
|  | @ -288,7 +288,7 @@ alias ll='ls -l' | |||
|                             (append-map service-pam-services services)))) | ||||
| 
 | ||||
|        (bash-file (package-file bash "bin/bash")) | ||||
|        (dmd-file  (package-file (@ (gnu packages system) dmd) "bin/dmd")) | ||||
|        (dmd-file  (package-file (@ (gnu packages admin) dmd) "bin/dmd")) | ||||
|        (accounts -> (cons (user-account | ||||
|                             (name "root") | ||||
|                             (password "") | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ | |||
|   #:use-module (guix records) | ||||
|   #:use-module ((gnu packages base) | ||||
|                 #:select (glibc-final)) | ||||
|   #:use-module ((gnu packages system) | ||||
|   #:use-module ((gnu packages admin) | ||||
|                 #:select (mingetty inetutils shadow)) | ||||
|   #:use-module ((gnu packages package-management) | ||||
|                 #:select (guix)) | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ | |||
|   #:use-module (guix records) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module ((gnu packages system) | ||||
|   #:use-module ((gnu packages admin) | ||||
|                 #:select (shadow)) | ||||
|   #:use-module (gnu packages bash) | ||||
|   #:use-module (srfi srfi-1) | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ | |||
|   #:use-module (gnu packages package-management) | ||||
|   #:use-module ((gnu packages make-bootstrap) | ||||
|                 #:select (%guile-static-stripped)) | ||||
|   #:use-module (gnu packages system) | ||||
|   #:use-module (gnu packages admin) | ||||
| 
 | ||||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module (gnu system linux) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -95,7 +95,9 @@ | |||
| 
 | ||||
|   ;; Other useful nodes. | ||||
|   (mknod (scope "dev/null") 'char-special #o666 (device-number 1 3)) | ||||
|   (mknod (scope "dev/zero") 'char-special #o666 (device-number 1 5))) | ||||
|   (mknod (scope "dev/zero") 'char-special #o666 (device-number 1 5)) | ||||
|   (chmod (scope "dev/null") #o666) | ||||
|   (chmod (scope "dev/zero") #o666)) | ||||
| 
 | ||||
| (define %host-qemu-ipv4-address | ||||
|   (inet-pton AF_INET "10.0.2.10")) | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ | |||
|             %store-directory | ||||
|             %state-directory | ||||
|             %config-directory | ||||
|             %guix-register-program | ||||
|             %system | ||||
|             %libgcrypt | ||||
|             %nixpkgs | ||||
|  | @ -62,6 +63,10 @@ | |||
|   ;; This must match `NIX_CONF_DIR' as defined in `daemon.am'. | ||||
|   (or (getenv "NIX_CONF_DIR") "@guix_sysconfdir@/guix")) | ||||
| 
 | ||||
| (define %guix-register-program | ||||
|   ;; The 'guix-register' program. | ||||
|   (or (getenv "GUIX_REGISTER") "@guix_sbindir@/guix-register")) | ||||
| 
 | ||||
| (define %system | ||||
|   "@guix_system@") | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -532,7 +532,8 @@ the derivation called NAME with hash HASH." | |||
|                      (system (%current-system)) (env-vars '()) | ||||
|                      (inputs '()) (outputs '("out")) | ||||
|                      hash hash-algo hash-mode | ||||
|                      references-graphs) | ||||
|                      references-graphs | ||||
|                      local-build?) | ||||
|   "Build a derivation with the given arguments, and return the resulting | ||||
| <derivation> object.  When HASH, HASH-ALGO, and HASH-MODE are given, a | ||||
| fixed-output derivation is created---i.e., one whose result is known in | ||||
|  | @ -540,7 +541,11 @@ advance, such as a file download. | |||
| 
 | ||||
| When REFERENCES-GRAPHS is true, it must be a list of file name/store path | ||||
| pairs.  In that case, the reference graph of each store path is exported in | ||||
| the build environment in the corresponding file, in a simple text format." | ||||
| the build environment in the corresponding file, in a simple text format. | ||||
| 
 | ||||
| When LOCAL-BUILD? is true, declare that the derivation is not a good candidate | ||||
| for offloading and should rather be built locally.  This is the case for small | ||||
| derivations where the costs of data transfers would outweigh the benefits." | ||||
|   (define (add-output-paths drv) | ||||
|     ;; Return DRV with an actual store path for each of its output and the | ||||
|     ;; corresponding environment variable. | ||||
|  | @ -571,16 +576,20 @@ the build environment in the corresponding file, in a simple text format." | |||
|     ;; Some options are passed to the build daemon via the env. vars of | ||||
|     ;; derivations (urgh!).  We hide that from our API, but here is the place | ||||
|     ;; where we kludgify those options. | ||||
|     (match references-graphs | ||||
|       (((file . path) ...) | ||||
|        (let ((value (map (cut string-append <> " " <>) | ||||
|                          file path))) | ||||
|          ;; XXX: This all breaks down if an element of FILE or PATH contains | ||||
|          ;; white space. | ||||
|          `(("exportReferencesGraph" . ,(string-join value " ")) | ||||
|            ,@env-vars))) | ||||
|       (#f | ||||
|        env-vars))) | ||||
|     (let ((env-vars (if local-build? | ||||
|                         `(("preferLocalBuild" . "1") | ||||
|                           ,@env-vars) | ||||
|                         env-vars))) | ||||
|       (match references-graphs | ||||
|         (((file . path) ...) | ||||
|          (let ((value (map (cut string-append <> " " <>) | ||||
|                            file path))) | ||||
|            ;; XXX: This all breaks down if an element of FILE or PATH contains | ||||
|            ;; white space. | ||||
|            `(("exportReferencesGraph" . ,(string-join value " ")) | ||||
|              ,@env-vars))) | ||||
|         (#f | ||||
|          env-vars)))) | ||||
| 
 | ||||
|   (define (env-vars-with-empty-outputs env-vars) | ||||
|     ;; Return a variant of ENV-VARS where each OUTPUTS is associated with an | ||||
|  | @ -904,7 +913,8 @@ they can refer to each other." | |||
|                                        (env-vars '()) | ||||
|                                        (modules '()) | ||||
|                                        guile-for-build | ||||
|                                        references-graphs) | ||||
|                                        references-graphs | ||||
|                                        local-build?) | ||||
|   "Return a derivation that executes Scheme expression EXP as a builder | ||||
| for derivation NAME.  INPUTS must be a list of (NAME DRV-PATH SUB-DRV) | ||||
| tuples; when SUB-DRV is omitted, \"out\" is assumed.  MODULES is a list | ||||
|  | @ -923,7 +933,8 @@ EXP returns #f, the build is considered to have failed. | |||
| EXP is built using GUILE-FOR-BUILD (a derivation).  When GUILE-FOR-BUILD is | ||||
| omitted or is #f, the value of the `%guile-for-build' fluid is used instead. | ||||
| 
 | ||||
| See the `derivation' procedure for the meaning of REFERENCES-GRAPHS." | ||||
| See the `derivation' procedure for the meaning of REFERENCES-GRAPHS and | ||||
| LOCAL-BUILD?." | ||||
|   (define guile-drv | ||||
|     (or guile-for-build (%guile-for-build))) | ||||
| 
 | ||||
|  | @ -1046,4 +1057,5 @@ See the `derivation' procedure for the meaning of REFERENCES-GRAPHS." | |||
| 
 | ||||
|                 #:hash hash #:hash-algo hash-algo | ||||
|                 #:outputs outputs | ||||
|                 #:references-graphs references-graphs))) | ||||
|                 #:references-graphs references-graphs | ||||
|                 #:local-build? local-build?))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -25,7 +25,8 @@ | |||
|   #:use-module (srfi srfi-11) | ||||
|   #:export (sha256 | ||||
|             open-sha256-port | ||||
|             port-sha256)) | ||||
|             port-sha256 | ||||
|             open-sha256-input-port)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -128,4 +129,41 @@ output port." | |||
|     (close-port out) | ||||
|     (get))) | ||||
| 
 | ||||
| (define (open-sha256-input-port port) | ||||
|   "Return an input port that wraps PORT and a thunk to get the hash of all the | ||||
| data read from PORT.  The thunk always returns the same value." | ||||
|   (define md | ||||
|     (open-sha256-md)) | ||||
| 
 | ||||
|   (define (read! bv start count) | ||||
|     (let ((n (get-bytevector-n! port bv start count))) | ||||
|       (if (eof-object? n) | ||||
|           0 | ||||
|           (begin | ||||
|             (unless digest | ||||
|               (let ((ptr (bytevector->pointer bv start))) | ||||
|                 (md-write md ptr n))) | ||||
|             n)))) | ||||
| 
 | ||||
|   (define digest #f) | ||||
| 
 | ||||
|   (define (finalize!) | ||||
|     (let ((ptr (md-read md 0))) | ||||
|       (set! digest (bytevector-copy (pointer->bytevector ptr 32))) | ||||
|       (md-close md))) | ||||
| 
 | ||||
|   (define (get-hash) | ||||
|     (unless digest | ||||
|       (finalize!)) | ||||
|     digest) | ||||
| 
 | ||||
|   (define (unbuffered port) | ||||
|     ;; Guile <= 2.0.9 does not support 'setvbuf' on custom binary input ports. | ||||
|     ;; If you get a wrong-type-arg error here, the fix is to upgrade Guile.  :-) | ||||
|     (setvbuf port _IONBF) | ||||
|     port) | ||||
| 
 | ||||
|   (values (unbuffered (make-custom-binary-input-port "sha256" read! #f #f #f)) | ||||
|           get-hash)) | ||||
| 
 | ||||
| ;;; hash.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; | ||||
|  | @ -31,6 +31,7 @@ | |||
|             expat | ||||
|             freetype | ||||
|             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+ | ||||
|             fdl1.3+ | ||||
|             isc | ||||
|             ijg | ||||
|             ibmpl1.0 | ||||
|  | @ -161,6 +162,11 @@ which may be a file:// URI pointing the package's tree." | |||
|            "https://www.gnu.org/licenses/gpl.html" | ||||
|            "https://www.gnu.org/licenses/license-list#GNUGPLv3")) | ||||
| 
 | ||||
| (define fdl1.3+ | ||||
|   (license "FDL 1.3+" | ||||
|            "https://www.gnu.org/licenses/fdl.html" | ||||
|            "https://www.gnu.org/licenses/license-list#FDL")) | ||||
| 
 | ||||
| (define isc | ||||
|   (license "ISC" | ||||
|            "http://directory.fsf.org/wiki/License:ISC" | ||||
|  |  | |||
							
								
								
									
										229
									
								
								guix/nar.scm
									
										
									
									
									
								
							
							
						
						
									
										229
									
								
								guix/nar.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -19,23 +19,40 @@ | |||
| (define-module (guix nar) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix serialization) | ||||
|   #:use-module ((guix build utils) #:select (with-directory-excursion)) | ||||
|   #:use-module ((guix build utils) | ||||
|                 #:select (delete-file-recursively with-directory-excursion)) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix ui)                          ; for '_' | ||||
|   #:use-module (guix hash) | ||||
|   #:use-module (guix pki) | ||||
|   #:use-module (guix pk-crypto) | ||||
|   #:use-module (rnrs bytevectors) | ||||
|   #:use-module (rnrs io ports) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-11) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (srfi srfi-34) | ||||
|   #:use-module (srfi srfi-35) | ||||
|   #:use-module (ice-9 ftw) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:export (nar-error? | ||||
|             nar-error-port | ||||
|             nar-error-file | ||||
| 
 | ||||
|             nar-read-error? | ||||
|             nar-read-error-file | ||||
|             nar-read-error-port | ||||
|             nar-read-error-token | ||||
| 
 | ||||
|             nar-invalid-hash-error? | ||||
|             nar-invalid-hash-error-expected | ||||
|             nar-invalid-hash-error-actual | ||||
| 
 | ||||
|             nar-signature-error? | ||||
|             nar-signature-error-signature | ||||
| 
 | ||||
|             write-file | ||||
|             restore-file)) | ||||
|             restore-file | ||||
| 
 | ||||
|             restore-file-set)) | ||||
| 
 | ||||
| ;;; Comment: | ||||
| ;;; | ||||
|  | @ -44,15 +61,24 @@ | |||
| ;;; Code: | ||||
| 
 | ||||
| (define-condition-type &nar-error &error      ; XXX: inherit from &nix-error ? | ||||
|   nar-error?) | ||||
|   nar-error? | ||||
|   (file  nar-error-file)                       ; file we were restoring, or #f | ||||
|   (port  nar-error-port))                      ; port from which we read | ||||
| 
 | ||||
| (define-condition-type &nar-read-error &nar-error | ||||
|   nar-read-error? | ||||
|   (port  nar-read-error-port)                   ; port from which we read | ||||
|   (file  nar-read-error-file)                   ; file we were restoring, or #f | ||||
|   (token nar-read-error-token))                 ; faulty token, or #f | ||||
| 
 | ||||
| (define-condition-type &nar-signature-error &nar-error | ||||
|   nar-signature-error? | ||||
|   (signature nar-signature-error-signature))      ; faulty signature or #f | ||||
| 
 | ||||
| (define-condition-type &nar-invalid-hash-error &nar-signature-error | ||||
|   nar-invalid-hash-error? | ||||
|   (expected  nar-invalid-hash-error-expected)     ; expected hash (a bytevector) | ||||
|   (actual    nar-invalid-hash-error-actual))      ; actual hash | ||||
| 
 | ||||
|  | ||||
| (define (dump in out size) | ||||
|   "Copy SIZE bytes from IN to OUT." | ||||
|   (define buf-size 65536) | ||||
|  | @ -239,4 +265,191 @@ Restore it as FILE." | |||
|          (&message (message "unsupported nar entry type")) | ||||
|          (&nar-read-error (port port) (file file) (token x)))))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Restoring a file set into the store. | ||||
| ;;; | ||||
| 
 | ||||
| ;; The code below accesses the store directly and is meant to be run from | ||||
| ;; "build hooks", which cannot invoke the daemon's 'import-paths' RPC since | ||||
| ;; (1) the locks on the files to be restored as already held, and (2) the | ||||
| ;; $NIX_HELD_LOCKS hackish environment variable cannot be set. | ||||
| ;; | ||||
| ;; So we're really duplicating that functionality of the daemon (well, until | ||||
| ;; most of the daemon is in Scheme :-)).  But note that we do use a couple of | ||||
| ;; RPCs for functionality not available otherwise, like 'valid-path?'. | ||||
| 
 | ||||
| (define (lock-store-file file) | ||||
|   "Acquire exclusive access to FILE, a store file." | ||||
|   (call-with-output-file (string-append file ".lock") | ||||
|     (cut fcntl-flock <> 'write-lock))) | ||||
| 
 | ||||
| (define (unlock-store-file file) | ||||
|   "Release access to FILE." | ||||
|   (call-with-input-file (string-append file ".lock") | ||||
|     (cut fcntl-flock <> 'unlock))) | ||||
| 
 | ||||
| (define* (finalize-store-file source target | ||||
|                               #:key (references '()) deriver (lock? #t)) | ||||
|   "Rename SOURCE to TARGET and register TARGET as a valid store item, with | ||||
| REFERENCES and DERIVER.  When LOCK? is true, acquire exclusive locks on TARGET | ||||
| before attempting to register it; otherwise, assume TARGET's locks are already | ||||
| held." | ||||
| 
 | ||||
|   ;; XXX: Currently we have to call out to the daemon to check whether TARGET | ||||
|   ;; is valid. | ||||
|   (with-store store | ||||
|     (unless (valid-path? store target) | ||||
|       (when lock? | ||||
|         (lock-store-file target)) | ||||
| 
 | ||||
|       (unless (valid-path? store target) | ||||
|         ;; If FILE already exists, delete it (it's invalid anyway.) | ||||
|         (when (file-exists? target) | ||||
|           (delete-file-recursively target)) | ||||
| 
 | ||||
|         ;; Install the new TARGET. | ||||
|         (rename-file source target) | ||||
| 
 | ||||
|         ;; Register TARGET.  As a side effect, it resets the timestamps of all | ||||
|         ;; its files, recursively.  However, it doesn't attempt to deduplicate | ||||
|         ;; its files like 'importPaths' does (FIXME). | ||||
|         (register-path target | ||||
|                        #:references references | ||||
|                        #:deriver deriver)) | ||||
| 
 | ||||
|       (when lock? | ||||
|         (unlock-store-file target))))) | ||||
| 
 | ||||
| (define (temporary-store-directory) | ||||
|   "Return the file name of a temporary directory created in the store that is | ||||
| protected from garbage collection." | ||||
|   (let* ((template (string-append (%store-prefix) "/guix-XXXXXX")) | ||||
|          (port     (mkstemp! template))) | ||||
|     (close-port port) | ||||
|     (with-store store | ||||
|       (add-temp-root store template)) | ||||
| 
 | ||||
|     ;; There's a small window during which the GC could delete the file.  Try | ||||
|     ;; again if that happens. | ||||
|     (if (file-exists? template) | ||||
|         (begin | ||||
|           ;; It's up to the caller to create that file or directory. | ||||
|           (delete-file template) | ||||
|           template) | ||||
|         (temporary-store-directory)))) | ||||
| 
 | ||||
| (define* (restore-file-set port | ||||
|                            #:key (verify-signature? #t) (lock? #t) | ||||
|                            (log-port (current-error-port))) | ||||
|   "Restore the file set read from PORT to the store.  The format of the data | ||||
| on PORT must be as created by 'export-paths'---i.e., a series of Nar-formatted | ||||
| archives with interspersed meta-data joining them together, possibly with a | ||||
| digital signature at the end.  Log progress to LOG-PORT.  Return the list of | ||||
| files restored. | ||||
| 
 | ||||
| When LOCK? is #f, assume locks for the files to be restored are already held. | ||||
| This is the case when the daemon calls a build hook. | ||||
| 
 | ||||
| Note that this procedure accesses the store directly, so it's only meant to be | ||||
| used by the daemon's build hooks since they cannot call back to the daemon | ||||
| while the locks are held." | ||||
|   (define %export-magic | ||||
|     ;; Number used to identify genuine file set archives. | ||||
|     #x4558494e) | ||||
| 
 | ||||
|   (define port* | ||||
|     ;; Keep that one around, for error conditions. | ||||
|     port) | ||||
| 
 | ||||
|   (define (assert-valid-signature signature hash file) | ||||
|     ;; Bail out if SIGNATURE, an sexp, doesn't match HASH, a bytevector | ||||
|     ;; containing the expected hash for FILE. | ||||
|     (let* ((signature (catch 'gcry-error | ||||
|                         (lambda () | ||||
|                           (string->canonical-sexp signature)) | ||||
|                         (lambda (err . _) | ||||
|                           (raise (condition | ||||
|                                   (&message | ||||
|                                    (message "signature is not a valid \ | ||||
| s-expression")) | ||||
|                                   (&nar-signature-error | ||||
|                                    (file file) | ||||
|                                    (signature signature) (port port))))))) | ||||
|            (subject   (signature-subject signature)) | ||||
|            (data      (signature-signed-data signature))) | ||||
|       (if (and data subject) | ||||
|           (if (authorized-key? subject) | ||||
|               (if (equal? (hash-data->bytevector data) hash) | ||||
|                   (unless (valid-signature? signature) | ||||
|                     (raise (condition | ||||
|                             (&message (message "invalid signature")) | ||||
|                             (&nar-signature-error | ||||
|                              (file file) (signature signature) (port port))))) | ||||
|                   (raise (condition (&message (message "invalid hash")) | ||||
|                                     (&nar-invalid-hash-error | ||||
|                                      (port port) (file file) | ||||
|                                      (signature signature) | ||||
|                                      (expected (hash-data->bytevector data)) | ||||
|                                      (actual hash))))) | ||||
|               (raise (condition (&message (message "unauthorized public key")) | ||||
|                                 (&nar-signature-error | ||||
|                                  (signature signature) (file file) (port port))))) | ||||
|           (raise (condition | ||||
|                   (&message (message "corrupt signature data")) | ||||
|                   (&nar-signature-error | ||||
|                    (signature signature) (file file) (port port))))))) | ||||
| 
 | ||||
|   (let loop ((n     (read-long-long port)) | ||||
|              (files '())) | ||||
|     (case n | ||||
|       ((0) | ||||
|        (reverse files)) | ||||
|       ((1) | ||||
|        (let-values (((port get-hash) | ||||
|                      (open-sha256-input-port port))) | ||||
|          (let ((temp (temporary-store-directory))) | ||||
|            (restore-file port temp) | ||||
|            (let ((magic (read-int port))) | ||||
|              (unless (= magic %export-magic) | ||||
|                (raise (condition | ||||
|                        (&message (message "corrupt file set archive")) | ||||
|                        (&nar-read-error | ||||
|                         (port port*) (file #f) (token #f)))))) | ||||
| 
 | ||||
|            (let ((file     (read-store-path port)) | ||||
|                  (refs     (read-store-path-list port)) | ||||
|                  (deriver  (read-string port)) | ||||
|                  (hash     (get-hash)) | ||||
|                  (has-sig? (= 1 (read-int port)))) | ||||
|              (format log-port | ||||
|                      (_ "importing file or directory '~a'...~%") | ||||
|                      file) | ||||
| 
 | ||||
|              (let ((sig (and has-sig? (read-string port)))) | ||||
|                (when verify-signature? | ||||
|                  (if sig | ||||
|                      (begin | ||||
|                        (assert-valid-signature sig hash file) | ||||
|                        (format log-port | ||||
|                                (_ "found valid signature for '~a'~%") | ||||
|                                file) | ||||
|                        (finalize-store-file temp file | ||||
|                                             #:references refs | ||||
|                                             #:deriver deriver | ||||
|                                             #:lock? lock?) | ||||
|                        (loop (read-long-long port) | ||||
|                              (cons file files))) | ||||
|                      (raise (condition | ||||
|                              (&message (message "imported file lacks \ | ||||
| a signature")) | ||||
|                              (&nar-signature-error | ||||
|                               (port port*) (file file) (signature #f))))))))))) | ||||
|       (else | ||||
|        ;; Neither 0 nor 1. | ||||
|        (raise (condition | ||||
|                (&message (message "invalid inter-file archive mark")) | ||||
|                (&nar-read-error | ||||
|                 (port port) (file #f) (token #f)))))))) | ||||
| 
 | ||||
| ;;; nar.scm ends here | ||||
|  |  | |||
							
								
								
									
										23
									
								
								guix/pki.scm
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								guix/pki.scm
									
										
									
									
									
								
							|  | @ -29,8 +29,12 @@ | |||
|             current-acl | ||||
|             public-keys->acl | ||||
|             acl->public-keys | ||||
|             authorized-key? | ||||
| 
 | ||||
|             signature-sexp | ||||
|             authorized-key?)) | ||||
|             signature-subject | ||||
|             signature-signed-data | ||||
|             valid-signature?)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -136,4 +140,21 @@ PUBLIC-KEY (see <http://theworld.com/~cme/spki.txt> for examples.)" | |||
|            (canonical-sexp->string (sign data secret-key)) | ||||
|            (canonical-sexp->string public-key)))) | ||||
| 
 | ||||
| (define (signature-subject sig) | ||||
|   "Return the signer's public key for SIG." | ||||
|   (find-sexp-token sig 'public-key)) | ||||
| 
 | ||||
| (define (signature-signed-data sig) | ||||
|   "Return the signed data from SIG, typically an sexp such as | ||||
|   (hash \"sha256\" #...#)." | ||||
|   (find-sexp-token sig 'data)) | ||||
| 
 | ||||
| (define (valid-signature? sig) | ||||
|   "Return #t if SIG is valid." | ||||
|   (let* ((data       (signature-signed-data sig)) | ||||
|          (signature  (find-sexp-token sig 'sig-val)) | ||||
|          (public-key (signature-subject sig))) | ||||
|     (and data signature | ||||
|          (verify signature data public-key)))) | ||||
| 
 | ||||
| ;;; pki.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -238,8 +238,6 @@ the given MANIFEST." | |||
| 
 | ||||
|        (let ((output (assoc-ref %outputs "out")) | ||||
|              (inputs (map cdr %build-inputs))) | ||||
|          (format #t "building profile '~a' with ~a packages...~%" | ||||
|                  output (length inputs)) | ||||
|          (union-build output inputs | ||||
|                       #:log-port (%make-void-port "w")) | ||||
|          (call-with-output-file (string-append output "/manifest") | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -72,23 +72,21 @@ | |||
|      ;; Read the signature as produced above, check whether its public key is | ||||
|      ;; authorized, and verify the signature, and print the signed data to | ||||
|      ;; stdout upon success. | ||||
|      (let* ((sig+data   (read-canonical-sexp signature-file)) | ||||
|             (public-key (find-sexp-token sig+data 'public-key)) | ||||
|             (data       (find-sexp-token sig+data 'data)) | ||||
|             (signature  (find-sexp-token sig+data 'sig-val))) | ||||
|        (if (and data signature) | ||||
|            (if (authorized-key? public-key) | ||||
|                (if (verify signature data public-key) | ||||
|                    (begin | ||||
|                      (display (bytevector->base16-string | ||||
|                                (hash-data->bytevector data))) | ||||
|      (let* ((signature (read-canonical-sexp signature-file)) | ||||
|             (subject   (signature-subject signature)) | ||||
|             (data      (signature-signed-data signature))) | ||||
|        (if (and data subject) | ||||
|            (if (authorized-key? subject) | ||||
|                (if (valid-signature? signature) | ||||
|                    (let ((hash (hash-data->bytevector data))) | ||||
|                      (display (bytevector->base16-string hash)) | ||||
|                      #t)                          ; success | ||||
|                    (leave (_ "error: invalid signature: ~a~%") | ||||
|                           (canonical-sexp->string signature))) | ||||
|                (leave (_ "error: unauthorized public key: ~a~%") | ||||
|                       (canonical-sexp->string public-key))) | ||||
|                       (canonical-sexp->string subject))) | ||||
|            (leave (_ "error: corrupt signature data: ~a~%") | ||||
|                   (canonical-sexp->string sig+data))))) | ||||
|                   (canonical-sexp->string signature))))) | ||||
|     (("--help") | ||||
|      (display (_ "Usage: guix authenticate OPTION... | ||||
| Sign or verify the signature on the given file.  This tool is meant to | ||||
|  |  | |||
							
								
								
									
										380
									
								
								guix/scripts/offload.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										380
									
								
								guix/scripts/offload.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,380 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (guix scripts offload) | ||||
|   #:use-module (guix config) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix nar) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module ((guix build utils) #:select (which)) | ||||
|   #:use-module (guix ui) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (srfi srfi-34) | ||||
|   #:use-module (srfi srfi-35) | ||||
|   #:use-module (ice-9 popen) | ||||
|   #:use-module (ice-9 rdelim) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (ice-9 format) | ||||
|   #:use-module (rnrs io ports) | ||||
|   #:export (build-machine | ||||
|             build-requirements | ||||
|             guix-offload)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; Attempt to offload builds to the machines listed in | ||||
| ;;; /etc/guix/machines.scm, transferring missing dependencies over SSH, and | ||||
| ;;; retrieving the build output(s) over SSH upon success. | ||||
| ;;; | ||||
| ;;; This command should not be used directly; instead, it is called on-demand | ||||
| ;;; by the daemon, unless it was started with '--no-build-hook' or a client | ||||
| ;;; inhibited build hooks. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| 
 | ||||
| (define-record-type* <build-machine> | ||||
|   build-machine make-build-machine | ||||
|   build-machine? | ||||
|   (name            build-machine-name)            ; string | ||||
|   (system          build-machine-system)          ; string | ||||
|   (user            build-machine-user)            ; string | ||||
|   (private-key     build-machine-private-key      ; file name | ||||
|                    (default (user-lsh-private-key))) | ||||
|   (parallel-builds build-machine-parallel-builds  ; number | ||||
|                    (default 1)) | ||||
|   (speed           build-machine-speed            ; inexact real | ||||
|                    (default 1.0)) | ||||
|   (features        build-machine-features         ; list of strings | ||||
|                    (default '()))) | ||||
| 
 | ||||
| (define-record-type* <build-requirements> | ||||
|   build-requirements make-build-requirements | ||||
|   build-requirements? | ||||
|   (system          build-requirements-system)     ; string | ||||
|   (features        build-requirements-features    ; list of strings | ||||
|                    (default '()))) | ||||
| 
 | ||||
| (define %machine-file | ||||
|   ;; File that lists machines available as build slaves. | ||||
|   (string-append %config-directory "/machines.scm")) | ||||
| 
 | ||||
| (define %lsh-command | ||||
|   "lsh") | ||||
| 
 | ||||
| (define %lshg-command | ||||
|   ;; FIXME: 'lshg' fails to pass large amounts of data, see | ||||
|   ;; <http://lists.lysator.liu.se/pipermail/lsh-bugs/2014q1/000639.html>. | ||||
|   "lsh") | ||||
| 
 | ||||
| (define (user-lsh-private-key) | ||||
|   "Return the user's default lsh private key, or #f if it could not be | ||||
| determined." | ||||
|   (and=> (getenv "HOME") | ||||
|          (cut string-append <> "/.lsh/identity"))) | ||||
| 
 | ||||
| (define %user-module | ||||
|   ;; Module in which the machine description file is loaded. | ||||
|   (let ((module (make-fresh-user-module))) | ||||
|     (module-use! module (resolve-interface '(guix scripts offload))) | ||||
|     module)) | ||||
| 
 | ||||
| (define* (build-machines #:optional (file %machine-file)) | ||||
|   "Read the list of build machines from FILE and return it." | ||||
|   (catch #t | ||||
|     (lambda () | ||||
|       ;; Avoid ABI incompatibility with the <build-machine> record. | ||||
|       (set! %fresh-auto-compile #t) | ||||
| 
 | ||||
|       (save-module-excursion | ||||
|        (lambda () | ||||
|          (set-current-module %user-module) | ||||
|          (primitive-load %machine-file)))) | ||||
|     (lambda args | ||||
|       (match args | ||||
|         (('system-error . _) | ||||
|          (let ((err (system-error-errno args))) | ||||
|            ;; Silently ignore missing file since this is a common case. | ||||
|            (if (= ENOENT err) | ||||
|                '() | ||||
|                (leave (_ "failed to open machine file '~a': ~a~%") | ||||
|                       %machine-file (strerror err))))) | ||||
|         (_ | ||||
|          (leave (_ "failed to load machine file '~a': ~s~%") | ||||
|                 %machine-file args)))))) | ||||
| 
 | ||||
| (define (open-ssh-gateway machine) | ||||
|   "Initiate an SSH connection gateway to MACHINE, and return the PID of the | ||||
| running lsh gateway upon success, or #f on failure." | ||||
|   (catch 'system-error | ||||
|     (lambda () | ||||
|       (let* ((port   (open-pipe* OPEN_READ %lsh-command | ||||
|                                  "-l" (build-machine-user machine) | ||||
|                                  "-i" (build-machine-private-key machine) | ||||
|                                  ;; XXX: With lsh 2.1, passing '--write-pid' | ||||
|                                  ;; last causes the PID not to be printed. | ||||
|                                  "--write-pid" "--gateway" "--background" "-z" | ||||
|                                  (build-machine-name machine))) | ||||
|              (line   (read-line port)) | ||||
|              (status (close-pipe port))) | ||||
|        (if (zero? status) | ||||
|            (let ((pid (string->number line))) | ||||
|              (if (integer? pid) | ||||
|                  pid | ||||
|                  (begin | ||||
|                    (warning (_ "'~a' did not write its PID on stdout: ~s~%") | ||||
|                             %lsh-command line) | ||||
|                    #f))) | ||||
|            (begin | ||||
|              (warning (_ "failed to initiate SSH connection to '~a':\ | ||||
|  '~a' exited with ~a~%") | ||||
|                       (build-machine-name machine) | ||||
|                       %lsh-command | ||||
|                       (status:exit-val status)) | ||||
|              #f)))) | ||||
|     (lambda args | ||||
|       (leave (_ "failed to execute '~a': ~a~%") | ||||
|              %lsh-command (strerror (system-error-errno args)))))) | ||||
| 
 | ||||
| (define (remote-pipe machine mode command) | ||||
|   "Run COMMAND on MACHINE, assuming an lsh gateway has been set up." | ||||
|   (catch 'system-error | ||||
|     (lambda () | ||||
|       (apply open-pipe* mode %lshg-command | ||||
|              "-l" (build-machine-user machine) "-z" | ||||
|              (build-machine-name machine) | ||||
|              command)) | ||||
|     (lambda args | ||||
|       (warning (_ "failed to execute '~a': ~a~%") | ||||
|                %lshg-command (strerror (system-error-errno args))) | ||||
|       #f))) | ||||
| 
 | ||||
| (define* (offload drv machine | ||||
|                   #:key print-build-trace? (max-silent-time 3600) | ||||
|                   (build-timeout 7200)) | ||||
|   "Perform DRV on MACHINE, assuming DRV and its prerequisites are available | ||||
| there.  Return a read pipe from where to read the build log." | ||||
|   (format (current-error-port) "offloading '~a' to '~a'...~%" | ||||
|           (derivation-file-name drv) (build-machine-name machine)) | ||||
|   (format (current-error-port) "@ build-remote ~a ~a~%" | ||||
|           (derivation-file-name drv) (build-machine-name machine)) | ||||
| 
 | ||||
|   ;; FIXME: Protect DRV from garbage collection on MACHINE. | ||||
|   (let ((pipe (remote-pipe machine OPEN_READ | ||||
|                            `("guix" "build" | ||||
|                              ;; FIXME: more options | ||||
|                              ,(format #f "--max-silent-time=~a" | ||||
|                                       max-silent-time) | ||||
|                              ,(derivation-file-name drv))))) | ||||
|     pipe)) | ||||
| 
 | ||||
| (define (send-files files machine) | ||||
|   "Send the subset of FILES that's missing to MACHINE's store.  Return #t on | ||||
| success, #f otherwise." | ||||
|   (define (missing-files files) | ||||
|     ;; Return the subset of FILES not already on MACHINE. | ||||
|     (let* ((files   (format #f "~{~a~%~}" files)) | ||||
|            (missing (filtered-port | ||||
|                      (list (which %lshg-command) | ||||
|                            "-l" (build-machine-user machine) | ||||
|                            "-i" (build-machine-private-key machine) | ||||
|                            (build-machine-name machine) | ||||
|                            "guix" "archive" "--missing") | ||||
|                      (open-input-string files)))) | ||||
|       (string-tokenize (get-string-all missing)))) | ||||
| 
 | ||||
|   (with-store store | ||||
|     (guard (c ((nix-protocol-error? c) | ||||
|                (warning (_ "failed to export files for '~a': ~s~%") | ||||
|                         (build-machine-name machine) | ||||
|                         c) | ||||
|                (false-if-exception (close-pipe pipe)) | ||||
|                #f)) | ||||
| 
 | ||||
|       ;; Compute the subset of FILES missing on MACHINE, and send them in | ||||
|       ;; topologically sorted order so that they can actually be imported. | ||||
|       (let ((files (missing-files (topologically-sorted store files))) | ||||
|             (pipe  (remote-pipe machine OPEN_WRITE | ||||
|                                 '("guix" "archive" "--import")))) | ||||
|         (format #t (_ "sending ~a store files to '~a'...~%") | ||||
|                 (length files) (build-machine-name machine)) | ||||
|         (catch 'system-error | ||||
|           (lambda () | ||||
|             (export-paths store files pipe)) | ||||
|           (lambda args | ||||
|             (warning (_ "failed while exporting files to '~a': ~a~%") | ||||
|                      (build-machine-name machine) | ||||
|                      (strerror (system-error-errno args))))) | ||||
|         (zero? (close-pipe pipe)))))) | ||||
| 
 | ||||
| (define (retrieve-files files machine) | ||||
|   "Retrieve FILES from MACHINE's store, and import them." | ||||
|   (define host | ||||
|     (build-machine-name machine)) | ||||
| 
 | ||||
|   (let ((pipe (remote-pipe machine OPEN_READ | ||||
|                            `("guix" "archive" "--export" ,@files)))) | ||||
|     (and pipe | ||||
|          (with-store store | ||||
|            (guard (c ((nix-protocol-error? c) | ||||
|                       (warning (_ "failed to import files from '~a': ~s~%") | ||||
|                                host c) | ||||
|                       #f)) | ||||
|              (format (current-error-port) "retrieving ~a files from '~a'...~%" | ||||
|                      (length files) host) | ||||
| 
 | ||||
|              ;; We cannot use the 'import-paths' RPC here because we already | ||||
|              ;; hold the locks for FILES. | ||||
|              (restore-file-set pipe | ||||
|                                #:log-port (current-error-port) | ||||
|                                #:lock? #f) | ||||
| 
 | ||||
|              (zero? (close-pipe pipe))))))) | ||||
| 
 | ||||
| (define (machine-matches? machine requirements) | ||||
|   "Return #t if MACHINE matches REQUIREMENTS." | ||||
|   (and (string=? (build-requirements-system requirements) | ||||
|                  (build-machine-system machine)) | ||||
|        (lset<= string=? | ||||
|                (build-requirements-features requirements) | ||||
|                (build-machine-features machine)))) | ||||
| 
 | ||||
| (define (machine-faster? m1 m2) | ||||
|   "Return #t if M1 is faster than M2." | ||||
|   (> (build-machine-speed m1) (build-machine-speed m2))) | ||||
| 
 | ||||
| (define (choose-build-machine requirements machines) | ||||
|   "Return the best machine among MACHINES fulfilling REQUIREMENTS, or #f." | ||||
|   ;; FIXME: Take machine load into account, and/or shuffle MACHINES. | ||||
|   (let ((machines (sort (filter (cut machine-matches? <> requirements) | ||||
|                                 machines) | ||||
|                         machine-faster?))) | ||||
|     (match machines | ||||
|       ((head . _) | ||||
|        head) | ||||
|       (_ #f)))) | ||||
| 
 | ||||
| (define* (process-request wants-local? system drv features | ||||
|                           #:key | ||||
|                           print-build-trace? (max-silent-time 3600) | ||||
|                           (build-timeout 7200)) | ||||
|   "Process a request to build DRV." | ||||
|   (let* ((local?  (and wants-local? (string=? system (%current-system)))) | ||||
|          (reqs    (build-requirements | ||||
|                    (system system) | ||||
|                    (features features))) | ||||
|          (machine (choose-build-machine reqs (build-machines)))) | ||||
|     (if machine | ||||
|         (match (open-ssh-gateway machine) | ||||
|           ((? integer? pid) | ||||
|            (display "# accept\n") | ||||
|            (let ((inputs  (string-tokenize (read-line))) | ||||
|                  (outputs (string-tokenize (read-line)))) | ||||
|              (when (send-files (cons (derivation-file-name drv) inputs) | ||||
|                                machine) | ||||
|                (let ((log (offload drv machine | ||||
|                                    #:print-build-trace? print-build-trace? | ||||
|                                    #:max-silent-time max-silent-time | ||||
|                                    #:build-timeout build-timeout))) | ||||
|                  (let loop ((line (read-line log))) | ||||
|                    (if (eof-object? line) | ||||
|                        (close-pipe log) | ||||
|                        (begin | ||||
|                          (display line) (newline) | ||||
|                          (loop (read-line log)))))) | ||||
|                (retrieve-files outputs machine))) | ||||
|            (format (current-error-port) "done with offloaded '~a'~%" | ||||
|                    (derivation-file-name drv)) | ||||
|            (kill pid SIGTERM)) | ||||
|           (#f | ||||
|            (display "# decline\n"))) | ||||
|         (display "# decline\n")))) | ||||
| 
 | ||||
| (define-syntax-rule (with-nar-error-handling body ...) | ||||
|   "Execute BODY with any &nar-error suitably reported to the user." | ||||
|   (guard (c ((nar-error? c) | ||||
|              (let ((file (nar-error-file c))) | ||||
|                (if (condition-has-type? c &message) | ||||
|                    (leave (_ "while importing file '~a': ~a~%") | ||||
|                           file (gettext (condition-message c))) | ||||
|                    (leave (_ "failed to import file '~a'~%") | ||||
|                           file))))) | ||||
|     body ...)) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Entry point. | ||||
| ;;; | ||||
| 
 | ||||
| (define (guix-offload . args) | ||||
|   (define request-line-rx | ||||
|     ;; The request format.  See 'tryBuildHook' method in build.cc. | ||||
|     (make-regexp "([01]) ([a-z0-9_-]+) (/[[:graph:]]+.drv) ([[:graph:]]*)")) | ||||
| 
 | ||||
|   (define not-coma | ||||
|     (char-set-complement (char-set #\,))) | ||||
| 
 | ||||
|   ;; Make sure $HOME really corresponds to the current user.  This is | ||||
|   ;; necessary since lsh uses that to determine the location of the yarrow | ||||
|   ;; seed file, and fails if it's owned by someone else. | ||||
|   (and=> (passwd:dir (getpw (getuid))) | ||||
|          (cut setenv "HOME" <>)) | ||||
| 
 | ||||
|   (match args | ||||
|     ((system max-silent-time print-build-trace? build-timeout) | ||||
|      (let ((max-silent-time    (string->number max-silent-time)) | ||||
|            (build-timeout      (string->number build-timeout)) | ||||
|            (print-build-trace? (string=? print-build-trace? "1"))) | ||||
|        (parameterize ((%current-system system)) | ||||
|          (let loop ((line (read-line))) | ||||
|            (unless (eof-object? line) | ||||
|              (cond ((regexp-exec request-line-rx line) | ||||
|                     => | ||||
|                     (lambda (match) | ||||
|                       (with-nar-error-handling | ||||
|                        (process-request (equal? (match:substring match 1) "1") | ||||
|                                         (match:substring match 2) ; system | ||||
|                                         (call-with-input-file | ||||
|                                             (match:substring match 3) | ||||
|                                           read-derivation) | ||||
|                                         (string-tokenize | ||||
|                                          (match:substring match 4) not-coma) | ||||
|                                         #:print-build-trace? print-build-trace? | ||||
|                                         #:max-silent-time max-silent-time | ||||
|                                         #:build-timeout build-timeout)))) | ||||
|                    (else | ||||
|                     (leave (_ "invalid request line: ~s~%") line))) | ||||
|              (loop (read-line))))))) | ||||
|     (("--version") | ||||
|      (show-version-and-exit "guix offload")) | ||||
|     (("--help") | ||||
|      (format #t (_ "Usage: guix offload SYSTEM PRINT-BUILD-TRACE | ||||
| Process build offload requests written on the standard input, possibly | ||||
| offloading builds to the machines listed in '~a'.~%") | ||||
|              %machine-file) | ||||
|      (display (_ " | ||||
| This tool is meant to be used internally by 'guix-daemon'.\n")) | ||||
|      (show-bug-report-information)) | ||||
|     (x | ||||
|      (leave (_ "invalid arguments: ~{~s ~}~%") x)))) | ||||
| 
 | ||||
| ;;; offload.scm ends here | ||||
|  | @ -1032,8 +1032,9 @@ more information.~%")) | |||
| 
 | ||||
|         (('search regexp) | ||||
|          (let ((regexp (make-regexp regexp regexp/icase))) | ||||
|            (for-each (cute package->recutils <> (current-output-port)) | ||||
|                      (find-packages-by-description regexp)) | ||||
|            (leave-on-EPIPE | ||||
|             (for-each (cute package->recutils <> (current-output-port)) | ||||
|                       (find-packages-by-description regexp))) | ||||
|            #t)) | ||||
| 
 | ||||
|         (('search-paths) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -486,6 +486,29 @@ Internal tool to substitute a pre-built binary to a local build.\n")) | |||
|   "Implement the build daemon's substituter protocol." | ||||
|   (mkdir-p %narinfo-cache-directory) | ||||
|   (maybe-remove-expired-cached-narinfo) | ||||
| 
 | ||||
|   ;; Starting from commit 22144afa in Nix, we are allowed to bail out directly | ||||
|   ;; when we know we cannot substitute, but we must emit a newline on stdout | ||||
|   ;; when everything is alright. | ||||
|   (let ((uri (string->uri %cache-url))) | ||||
|     (case (uri-scheme uri) | ||||
|       ((http) | ||||
|        ;; Exit gracefully if there's no network access. | ||||
|        (let ((host (uri-host uri))) | ||||
|          (catch 'getaddrinfo-error | ||||
|            (lambda () | ||||
|              (getaddrinfo host)) | ||||
|            (lambda (key error) | ||||
|              (warning (_ "failed to look up host '~a' (~a), \ | ||||
| substituter disabled~%") | ||||
|                       host (gai-strerror error)) | ||||
|              (exit 0))))) | ||||
|       (else #t))) | ||||
| 
 | ||||
|   ;; Say hello (see above.) | ||||
|   (newline) | ||||
|   (force-output (current-output-port)) | ||||
| 
 | ||||
|   (with-networking | ||||
|    (match args | ||||
|      (("--query") | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ | |||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (ice-9 vlist) | ||||
|   #:use-module (ice-9 popen) | ||||
|   #:export (%daemon-socket-file | ||||
| 
 | ||||
|             nix-server? | ||||
|  | @ -52,6 +53,7 @@ | |||
| 
 | ||||
|             open-connection | ||||
|             close-connection | ||||
|             with-store | ||||
|             set-build-options | ||||
|             valid-path? | ||||
|             query-path-hash | ||||
|  | @ -74,6 +76,7 @@ | |||
|             references | ||||
|             requisites | ||||
|             referrers | ||||
|             topologically-sorted | ||||
|             valid-derivers | ||||
|             query-derivation-outputs | ||||
|             live-paths | ||||
|  | @ -85,6 +88,8 @@ | |||
| 
 | ||||
|             current-build-output-port | ||||
| 
 | ||||
|             register-path | ||||
| 
 | ||||
|             %store-prefix | ||||
|             store-path? | ||||
|             direct-store-path? | ||||
|  | @ -320,6 +325,17 @@ operate, should the disk become full.  Return a server object." | |||
|   "Close the connection to SERVER." | ||||
|   (close (nix-server-socket server))) | ||||
| 
 | ||||
| (define-syntax-rule (with-store store exp ...) | ||||
|   "Bind STORE to an open connection to the store and evaluate EXPs; | ||||
| automatically close the store when the dynamic extent of EXP is left." | ||||
|   (let ((store (open-connection))) | ||||
|     (dynamic-wind | ||||
|       (const #f) | ||||
|       (lambda () | ||||
|         exp ...) | ||||
|       (lambda () | ||||
|         (false-if-exception (close-connection store)))))) | ||||
| 
 | ||||
| (define current-build-output-port | ||||
|   ;; The port where build output is sent. | ||||
|   (make-parameter (current-error-port))) | ||||
|  | @ -360,11 +376,11 @@ encoding conversion errors." | |||
|     (nix-server-socket server)) | ||||
| 
 | ||||
|   ;; magic cookies from worker-protocol.hh | ||||
|   (define %stderr-next  #x6f6c6d67) | ||||
|   (define %stderr-read  #x64617461)               ; data needed from source | ||||
|   (define %stderr-write #x64617416)               ; data for sink | ||||
|   (define %stderr-last  #x616c7473) | ||||
|   (define %stderr-error #x63787470) | ||||
|   (define %stderr-next  #x6f6c6d67)          ; "olmg", build log | ||||
|   (define %stderr-read  #x64617461)          ; "data", data needed from source | ||||
|   (define %stderr-write #x64617416)          ; "dat\x16", data for sink | ||||
|   (define %stderr-last  #x616c7473)          ; "alts", we're done | ||||
|   (define %stderr-error #x63787470)          ; "cxtp", error reporting | ||||
| 
 | ||||
|   (let ((k (read-int p))) | ||||
|     (cond ((= k %stderr-write) | ||||
|  | @ -574,6 +590,40 @@ SEED." | |||
| references, recursively)." | ||||
|   (fold-path store cons '() path)) | ||||
| 
 | ||||
| (define (topologically-sorted store paths) | ||||
|   "Return a list containing PATHS and all their references sorted in | ||||
| topological order." | ||||
|   (define (traverse) | ||||
|     ;; Do a simple depth-first traversal of all of PATHS. | ||||
|     (let loop ((paths   paths) | ||||
|                (visited vlist-null) | ||||
|                (result  '())) | ||||
|       (define (visit n) | ||||
|         (vhash-cons n #t visited)) | ||||
| 
 | ||||
|       (define (visited? n) | ||||
|         (vhash-assoc n visited)) | ||||
| 
 | ||||
|       (match paths | ||||
|         ((head tail ...) | ||||
|          (if (visited? head) | ||||
|              (loop tail visited result) | ||||
|              (call-with-values | ||||
|                  (lambda () | ||||
|                    (loop (references store head) | ||||
|                          (visit head) | ||||
|                          result)) | ||||
|                (lambda (visited result) | ||||
|                  (loop tail | ||||
|                        visited | ||||
|                        (cons head result)))))) | ||||
|         (() | ||||
|          (values visited result))))) | ||||
| 
 | ||||
|   (call-with-values traverse | ||||
|     (lambda (_ result) | ||||
|       (reverse result)))) | ||||
| 
 | ||||
| (define referrers | ||||
|   (operation (query-referrers (store-path path)) | ||||
|              "Return the list of path that refer to PATH." | ||||
|  | @ -694,6 +744,28 @@ is true." | |||
|          (and (export-path server head port #:sign? sign?) | ||||
|               (loop tail))))))) | ||||
| 
 | ||||
| (define* (register-path path | ||||
|                         #:key (references '()) deriver) | ||||
|   "Register PATH as a valid store file, with REFERENCES as its list of | ||||
| references, and DERIVER as its deriver (.drv that led to it.)  Return #t on | ||||
| success. | ||||
| 
 | ||||
| Use with care as it directly modifies the store!  This is primarily meant to | ||||
| be used internally by the daemon's build hook." | ||||
|   ;; Currently this is implemented by calling out to the fine C++ blob. | ||||
|   (catch 'system-error | ||||
|     (lambda () | ||||
|       (let ((pipe (open-pipe* OPEN_WRITE %guix-register-program))) | ||||
|         (and pipe | ||||
|              (begin | ||||
|                (format pipe "~a~%~a~%~a~%" | ||||
|                        path (or deriver "") (length references)) | ||||
|                (for-each (cut format pipe "~a~%" <>) references) | ||||
|                (zero? (close-pipe pipe)))))) | ||||
|     (lambda args | ||||
|       ;; Failed to run %GUIX-REGISTER-PROGRAM. | ||||
|       #f))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Store paths. | ||||
|  |  | |||
							
								
								
									
										16
									
								
								guix/ui.scm
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								guix/ui.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; | ||||
|  | @ -138,7 +138,7 @@ messages." | |||
|   "Display version information for COMMAND and `(exit 0)'." | ||||
|   (simple-format #t "~a (~a) ~a~%" | ||||
|                  command %guix-package-name %guix-version) | ||||
|   (display (_ "Copyright (C) 2013 the Guix authors | ||||
|   (display (_ "Copyright (C) 2014 the Guix authors | ||||
| License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> | ||||
| This is free software: you are free to change and redistribute it. | ||||
| There is NO WARRANTY, to the extent permitted by law. | ||||
|  | @ -404,7 +404,11 @@ WIDTH columns." | |||
|   (format port "location: ~a~%" | ||||
|           (or (and=> (package-location p) location->string) | ||||
|               (_ "unknown"))) | ||||
|   (format port "home-page: ~a~%" (package-home-page p)) | ||||
| 
 | ||||
|   ;; Note: Starting from version 1.6 or recutils, hyphens are not allowed in | ||||
|   ;; field identifiers. | ||||
|   (format port "homepage: ~a~%" (package-home-page p)) | ||||
| 
 | ||||
|   (format port "license: ~a~%" | ||||
|           (match (package-license p) | ||||
|             (((? license? licenses) ...) | ||||
|  | @ -554,13 +558,17 @@ reporting." | |||
|        (command-files))) | ||||
| 
 | ||||
| (define (show-guix-help) | ||||
|   (define (internal? command) | ||||
|     (member command '("substitute-binary" "authenticate" "offload"))) | ||||
| 
 | ||||
|   (format #t (_ "Usage: guix COMMAND ARGS... | ||||
| Run COMMAND with ARGS.\n")) | ||||
|   (newline) | ||||
|   (format #t (_ "COMMAND must be one of the sub-commands listed below:\n")) | ||||
|   (newline) | ||||
|   ;; TODO: Display a synopsis of each command. | ||||
|   (format #t "~{   ~a~%~}" (sort (commands) string<?)) | ||||
|   (format #t "~{   ~a~%~}" (sort (remove internal? (commands)) | ||||
|                                  string<?)) | ||||
|   (show-bug-report-information)) | ||||
| 
 | ||||
| (define program-name | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -34,7 +34,7 @@ | |||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 format) | ||||
|   #:autoload   (system foreign) (pointer->procedure) | ||||
|   #:use-module (system foreign) | ||||
|   #:export (bytevector->base16-string | ||||
|             base16-string->bytevector | ||||
| 
 | ||||
|  | @ -43,6 +43,7 @@ | |||
|             nixpkgs-derivation* | ||||
| 
 | ||||
|             compile-time-value | ||||
|             fcntl-flock | ||||
|             memoize | ||||
|             default-keyword-arguments | ||||
|             substitute-keyword-arguments | ||||
|  | @ -222,6 +223,67 @@ buffered data is lost." | |||
|   "Evaluate the given Nixpkgs derivation at compile-time." | ||||
|   (compile-time-value (nixpkgs-derivation attribute))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Advisory file locking. | ||||
| ;;; | ||||
| 
 | ||||
| (define %struct-flock | ||||
|   ;; 'struct flock' from <fcntl.h>. | ||||
|   (list short                                     ; l_type | ||||
|         short                                     ; l_whence | ||||
|         size_t                                    ; l_start | ||||
|         size_t                                    ; l_len | ||||
|         int))                                     ; l_pid | ||||
| 
 | ||||
| (define F_SETLKW | ||||
|   ;; On Linux-based systems, this is usually 7, but not always | ||||
|   ;; (exceptions include SPARC.)  On GNU/Hurd, it's 9. | ||||
|   (compile-time-value | ||||
|    (cond ((string-contains %host-type "sparc") 9) ; sparc-*-linux-gnu | ||||
|          ((string-contains %host-type "linux") 7) ; *-linux-gnu | ||||
|          (else 9))))                              ; *-gnu* | ||||
| 
 | ||||
| (define F_xxLCK | ||||
|   ;; The F_RDLCK, F_WRLCK, and F_UNLCK constants. | ||||
|   (compile-time-value | ||||
|    (cond ((string-contains %host-type "sparc") #(1 2 3))    ; sparc-*-linux-gnu | ||||
|          ((string-contains %host-type "hppa")  #(1 2 3))    ; hppa-*-linux-gnu | ||||
|          ((string-contains %host-type "linux") #(0 1 2))    ; *-linux-gnu | ||||
|          (else                                 #(1 2 3))))) ; *-gnu* | ||||
| 
 | ||||
| (define fcntl-flock | ||||
|   (let* ((ptr  (dynamic-func "fcntl" (dynamic-link))) | ||||
|          (proc (pointer->procedure int ptr `(,int ,int *)))) | ||||
|     (lambda (fd-or-port operation) | ||||
|       "Perform locking OPERATION on the file beneath FD-OR-PORT.  OPERATION | ||||
| must be a symbol, one of 'read-lock, 'write-lock, or 'unlock." | ||||
|       (define (operation->int op) | ||||
|         (case op | ||||
|           ((read-lock)  (vector-ref F_xxLCK 0)) | ||||
|           ((write-lock) (vector-ref F_xxLCK 1)) | ||||
|           ((unlock)     (vector-ref F_xxLCK 2)) | ||||
|           (else         (error "invalid fcntl-flock operation" op)))) | ||||
| 
 | ||||
|       (define fd | ||||
|         (if (port? fd-or-port) | ||||
|             (fileno fd-or-port) | ||||
|             fd-or-port)) | ||||
| 
 | ||||
|       ;; XXX: 'fcntl' is a vararg function, but here we happily use the | ||||
|       ;; standard ABI; crossing fingers. | ||||
|       (let ((err (proc fd | ||||
|                        F_SETLKW                   ; lock & wait | ||||
|                        (make-c-struct %struct-flock | ||||
|                                       (list (operation->int operation) | ||||
|                                             SEEK_SET | ||||
|                                             0 0   ; whole file | ||||
|                                             0))))) | ||||
|         (or (zero? err) | ||||
| 
 | ||||
|             ;; Presumably we got EAGAIN or so. | ||||
|             (throw 'flock-error fd)))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Miscellaneous. | ||||
|  |  | |||
							
								
								
									
										19
									
								
								m4/guix.m4
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								m4/guix.m4
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| dnl GNU Guix --- Functional package management for GNU | ||||
| dnl Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| dnl Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| dnl | ||||
| dnl This file is part of GNU Guix. | ||||
| dnl | ||||
|  | @ -134,3 +134,20 @@ AC_DEFUN([GUIX_CHECK_SRFI_37], [ | |||
|        ac_cv_guix_srfi_37_broken=yes | ||||
|      fi]) | ||||
| ]) | ||||
| 
 | ||||
| dnl GUIX_CHECK_UNBUFFERED_CBIP | ||||
| dnl | ||||
| dnl Check whether 'setbvuf' works on custom binary input ports (CBIPs), as is | ||||
| dnl the case starting with Guile 2.0.10. | ||||
| AC_DEFUN([GUIX_CHECK_UNBUFFERED_CBIP], [ | ||||
|   AC_CACHE_CHECK([whether Guile's custom binary input ports support 'setvbuf'], | ||||
|     [ac_cv_guix_cbips_support_setvbuf], | ||||
|     [if "$GUILE" -c "(use-modules (rnrs io ports))			\ | ||||
|        (let ((p (make-custom-binary-input-port \"cbip\" pk #f #f #f)))	\ | ||||
|          (setvbuf p _IONBF))" >&5 2>&1 | ||||
|      then | ||||
|        ac_cv_guix_cbips_support_setvbuf=yes | ||||
|      else | ||||
|        ac_cv_guix_cbips_support_setvbuf=no | ||||
|      fi]) | ||||
| ]) | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| Subproject commit 1b6ee8f4c7e74f75e1f49b43cf22be7730b30649 | ||||
| Subproject commit bf0ad8aabca67b4faabe3a1ac3c57884ae9924f4 | ||||
|  | @ -1,5 +1,5 @@ | |||
| /* GNU Guix --- Functional package management for GNU
 | ||||
|    Copyright (C) 2013 Ludovic Courtès <ludo@gnu.org> | ||||
|    Copyright (C) 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
|    Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, | ||||
|      2013 Eelco Dolstra <eelco.dolstra@logicblox.com> | ||||
| 
 | ||||
|  | @ -133,10 +133,13 @@ register_validity (LocalStore *store, std::istream &input, | |||
|       if (info.path == "") | ||||
| 	break; | ||||
| 
 | ||||
|       /* Rewrite the input to refer final name, as if we were in a chroot
 | ||||
| 	 under PREFIX.  */ | ||||
|       std::string final_prefix (NIX_STORE_DIR "/"); | ||||
|       info.path = final_prefix + baseNameOf (info.path); | ||||
|       if (!prefix.empty ()) | ||||
| 	{ | ||||
| 	  /* Rewrite the input to refer to the final name, as if we were in a
 | ||||
| 	     chroot under PREFIX.  */ | ||||
| 	  std::string final_prefix (NIX_STORE_DIR "/"); | ||||
| 	  info.path = final_prefix + baseNameOf (info.path); | ||||
| 	} | ||||
| 
 | ||||
|       /* Keep its real path to canonicalize it and compute its hash.  */ | ||||
|       std::string real_path; | ||||
|  | @ -165,6 +168,9 @@ register_validity (LocalStore *store, std::istream &input, | |||
| int | ||||
| main (int argc, char *argv[]) | ||||
| { | ||||
|   /* Honor the environment variables, and initialize the settings.  */ | ||||
|   settings.processEnvironment (); | ||||
| 
 | ||||
|   try | ||||
|     { | ||||
|       argp_parse (&argp, argc, argv, 0, 0, 0); | ||||
|  | @ -173,10 +179,11 @@ main (int argc, char *argv[]) | |||
| 	 'settings.nixStore', 'settings.nixDBPath', etc.  */ | ||||
|       LocalStore store; | ||||
| 
 | ||||
|       /* Under the --prefix tree, the final name of the store will be
 | ||||
| 	 NIX_STORE_DIR.  Set it here so that the database uses file names | ||||
| 	 prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR.  */ | ||||
|       settings.nixStore = NIX_STORE_DIR; | ||||
|       if (!prefix.empty ()) | ||||
| 	/* Under the --prefix tree, the final name of the store will be
 | ||||
| 	   NIX_STORE_DIR.  Set it here so that the database uses file names | ||||
| 	   prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR.  */ | ||||
| 	settings.nixStore = NIX_STORE_DIR; | ||||
| 
 | ||||
|       register_validity (&store, *input); | ||||
|     } | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* GNU Guix --- Functional package management for GNU
 | ||||
|    Copyright (C) 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
|    Copyright (C) 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| 
 | ||||
|    This file is part of GNU Guix. | ||||
| 
 | ||||
|  | @ -67,6 +67,7 @@ builds derivations on behalf of its clients."; | |||
| #define GUIX_OPT_CHROOT_DIR 10 | ||||
| #define GUIX_OPT_LISTEN 11 | ||||
| #define GUIX_OPT_NO_SUBSTITUTES 12 | ||||
| #define GUIX_OPT_NO_BUILD_HOOK 13 | ||||
| 
 | ||||
| static const struct argp_option options[] = | ||||
|   { | ||||
|  | @ -94,6 +95,8 @@ static const struct argp_option options[] = | |||
|       "Perform builds as a user of GROUP" }, | ||||
|     { "no-substitutes", GUIX_OPT_NO_SUBSTITUTES, 0, 0, | ||||
|       "Do not use substitutes" }, | ||||
|     { "no-build-hook", GUIX_OPT_NO_BUILD_HOOK, 0, 0, | ||||
|       "Do not use the 'build hook'" }, | ||||
|     { "cache-failures", GUIX_OPT_CACHE_FAILURES, 0, 0, | ||||
|       "Cache build failures" }, | ||||
|     { "lose-logs", GUIX_OPT_LOSE_LOGS, 0, 0, | ||||
|  | @ -159,6 +162,9 @@ parse_opt (int key, char *arg, struct argp_state *state) | |||
|     case GUIX_OPT_NO_SUBSTITUTES: | ||||
|       settings.useSubstitutes = false; | ||||
|       break; | ||||
|     case GUIX_OPT_NO_BUILD_HOOK: | ||||
|       settings.useBuildHook = false; | ||||
|       break; | ||||
|     case GUIX_OPT_DEBUG: | ||||
|       verbosity = lvlDebug; | ||||
|       break; | ||||
|  | @ -226,6 +232,21 @@ main (int argc, char *argv[]) | |||
|       settings.substituters.clear (); | ||||
|       settings.useSubstitutes = true; | ||||
| 
 | ||||
| #ifdef HAVE_DAEMON_OFFLOAD_HOOK | ||||
|       /* Use our build hook for distributed builds by default.  */ | ||||
|       settings.useBuildHook = true; | ||||
|       if (getenv ("NIX_BUILD_HOOK") == NULL) | ||||
| 	{ | ||||
| 	  std::string build_hook; | ||||
| 
 | ||||
| 	  build_hook = settings.nixLibexecDir + "/guix/offload"; | ||||
| 	  setenv ("NIX_BUILD_HOOK", build_hook.c_str (), 1); | ||||
| 	} | ||||
| #else | ||||
|       /* We are not installing any build hook, so disable it.  */ | ||||
|       settings.useBuildHook = false; | ||||
| #endif | ||||
| 
 | ||||
|       argp_parse (&argp, argc, argv, 0, 0, 0); | ||||
| 
 | ||||
|       if (settings.useSubstitutes) | ||||
|  |  | |||
							
								
								
									
										11
									
								
								nix/scripts/offload.in
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								nix/scripts/offload.in
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #!@SHELL@ | ||||
| # A shorthand for "guix offload", for use by the daemon. | ||||
| 
 | ||||
| if test "x$GUIX_UNINSTALLED" = "x" | ||||
| then | ||||
|     prefix="@prefix@" | ||||
|     exec_prefix="@exec_prefix@" | ||||
|     exec "@bindir@/guix" offload "$@" | ||||
| else | ||||
|     exec guix offload "$@" | ||||
| fi | ||||
							
								
								
									
										13
									
								
								po/Makevars
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								po/Makevars
									
										
									
									
									
								
							|  | @ -5,11 +5,14 @@ DOMAIN = $(PACKAGE) | |||
| subdir = po | ||||
| top_builddir = .. | ||||
| 
 | ||||
| # These options get passed to xgettext. | ||||
| XGETTEXT_OPTIONS =					\ | ||||
|   --language=Scheme --from-code=UTF-8			\ | ||||
|   --keyword=_ --keyword=N_				\ | ||||
|   --keyword=synopsis --keyword=description | ||||
| # These options get passed to xgettext.  We want to catch standard | ||||
| # gettext uses, package synopses and descriptions, and SRFI-34 error | ||||
| # condition messages. | ||||
| XGETTEXT_OPTIONS =				\ | ||||
|   --language=Scheme --from-code=UTF-8		\ | ||||
|   --keyword=_ --keyword=N_			\ | ||||
|   --keyword=synopsis --keyword=description	\ | ||||
|   --keyword=message | ||||
| 
 | ||||
| COPYRIGHT_HOLDER = Ludovic Courtès | ||||
| 
 | ||||
|  |  | |||
|  | @ -15,3 +15,4 @@ guix/scripts/authenticate.scm | |||
| guix/gnu-maintenance.scm | ||||
| guix/ui.scm | ||||
| guix/http-client.scm | ||||
| guix/nar.scm | ||||
|  |  | |||
							
								
								
									
										468
									
								
								po/sr.po
									
										
									
									
									
								
							
							
						
						
									
										468
									
								
								po/sr.po
									
										
									
									
									
								
							|  | @ -1,21 +1,20 @@ | |||
| # Serbian translation of guix. | ||||
| # Copyright (C) 2013 Free Software Foundation, Inc. | ||||
| # This file is distributed under the same license as the guix package. | ||||
| # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013. | ||||
| # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013, 2014. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: guix 0.4-pre2\n" | ||||
| "Project-Id-Version: guix 0.5-pre2\n" | ||||
| "Report-Msgid-Bugs-To: ludo@gnu.org\n" | ||||
| "POT-Creation-Date: 2013-12-10 22:16+0100\n" | ||||
| "PO-Revision-Date: 2013-11-08 11:41+0200\n" | ||||
| "POT-Creation-Date: 2013-12-03 21:18+0100\n" | ||||
| "PO-Revision-Date: 2014-01-13 22:32+0200\n" | ||||
| "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" | ||||
| "Language-Team: Serbian <(nothing)>\n" | ||||
| "Language: sr\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||||
| "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||
| 
 | ||||
| #: gnu/packages.scm:94 | ||||
| #, scheme-format | ||||
|  | @ -29,10 +28,12 @@ msgstr "Поздрав, Гну народе: Пример Гну пакета" | |||
| #: gnu/packages/base.scm:62 | ||||
| msgid "" | ||||
| "GNU Hello prints the message \"Hello, world!\" and then exits.  It\n" | ||||
| "serves as an example of standard GNU coding practices.  As such, it " | ||||
| "supports\n" | ||||
| "serves as an example of standard GNU coding practices.  As such, it supports\n" | ||||
| "command-line arguments, multiple languages, and so on." | ||||
| msgstr "" | ||||
| "Гнуов Поздравник исписује поруку „Поздрав, народе!“ и излази.  Служи\n" | ||||
| "као пример стандардног увежбавања Гнуовог кодирања.  Као такав, подржава\n" | ||||
| "аргументе линије наредби, вишеструке језике, и тако редом." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:80 | ||||
| msgid "Print lines matching a pattern" | ||||
|  | @ -48,6 +49,13 @@ msgid "" | |||
| "numbers.  GNU grep offers many extensions over the standard utility,\n" | ||||
| "including, for example, recursive directory searching." | ||||
| msgstr "" | ||||
| "греп је алат за проналажење текста унутар датотека.  Текст се проналази\n" | ||||
| "упоређивањем са обрасцем који достави корисник у једној или више датотека.\n" | ||||
| "Образац може бити достављен као основни или проширени регуларни израз, или\n" | ||||
| "као стална ниска.  По основи, одговарајући текст се једноставно исписује\n" | ||||
| "на екрану, међутим излаз може бити прилагођен да садржи, рецимо бројеве\n" | ||||
| "редова.  Гнуов греп нуди многа проширења преко уобичајеног помагала,\n" | ||||
| "укључујући, на пример, дубинско претраживање директоријума." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:104 | ||||
| msgid "Stream editor" | ||||
|  | @ -56,13 +64,16 @@ msgstr "Уређивач протока" | |||
| #: gnu/packages/base.scm:119 | ||||
| msgid "" | ||||
| "Sed is a non-interactive, text stream editor.  It receives a text\n" | ||||
| "input from a file or from standard input and it then applies a series of " | ||||
| "text\n" | ||||
| "editing commands to the stream and prints its output to standard output.  " | ||||
| "It\n" | ||||
| "input from a file or from standard input and it then applies a series of text\n" | ||||
| "editing commands to the stream and prints its output to standard output.  It\n" | ||||
| "is often used for substituting text patterns in a stream.  The GNU\n" | ||||
| "implementation offers several extensions over the standard utility." | ||||
| msgstr "" | ||||
| "Сед је не-међудејствени, уређивач тока текста.  Он прихвата текстуални\n" | ||||
| "улаз из датотеке или са стандардног улаза и затим примењује низ наредби\n" | ||||
| "за уређивање текста над токим и исписује његов излаз на стандардни излаз.\n" | ||||
| "Често се користи за замену текстуалних образаца у току.  Гнуова примена\n" | ||||
| "нуди неколико проширења поред уобичајеног помагала." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:139 | ||||
| msgid "Managing tar archives" | ||||
|  | @ -77,6 +88,12 @@ msgid "" | |||
| "creation/modification dates.  GNU tar offers many extensions over the\n" | ||||
| "standard utility." | ||||
| msgstr "" | ||||
| "Тар обезбеђује способност за стварање тар архива, као и способност\n" | ||||
| "за извлачење, освежавање или исписивање датотека у постојећој архиви.\n" | ||||
| "Користан је за обједињавање више датотека у једну већу датотеку, док\n" | ||||
| "задржава структуру директоријума и податке о датотеци као што су\n" | ||||
| "овлашћења и датуми стварања/измена.  Гнуов тар нуди многа проширења\n" | ||||
| "поред стандардног помагала." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:168 | ||||
| msgid "Apply differences to originals, with optional backups" | ||||
|  | @ -85,12 +102,15 @@ msgstr "Примењивање разлика на оригинале, са оп | |||
| #: gnu/packages/base.scm:170 | ||||
| msgid "" | ||||
| "Patch is a program that applies changes to files based on differences\n" | ||||
| "laid out as by the program \"diff\".  The changes may be applied to one or " | ||||
| "more\n" | ||||
| "laid out as by the program \"diff\".  The changes may be applied to one or more\n" | ||||
| "files depending on the contents of the diff file.  It accepts several\n" | ||||
| "different diff formats.  It may also be used to revert previously applied\n" | ||||
| "differences." | ||||
| msgstr "" | ||||
| "Закрпко је програм који примењује измене над датотекама на основу разлика\n" | ||||
| "изнесених програмом различник.  Измене могу бити примењене над једном или\n" | ||||
| "више датотека у зависности од садржаја датотеке разлика.  Прихвата више\n" | ||||
| "различитих записа различника.  Такође може бити коришћен за враћање претходно примењених разлика." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:190 | ||||
| msgid "Comparing and merging files" | ||||
|  | @ -99,13 +119,16 @@ msgstr "Упоређивање и стапање датотека" | |||
| #: gnu/packages/base.scm:192 | ||||
| msgid "" | ||||
| "GNU Diffutils is a package containing tools for finding the\n" | ||||
| "differences between files.  The \"diff\" command is used to show how two " | ||||
| "files\n" | ||||
| "differ, while \"cmp\" shows the offsets and line numbers where they " | ||||
| "differ. \n" | ||||
| "differences between files.  The \"diff\" command is used to show how two files\n" | ||||
| "differ, while \"cmp\" shows the offsets and line numbers where they differ. \n" | ||||
| "\"diff3\" allows you to compare three files.  Finally, \"sdiff\" offers an\n" | ||||
| "interactive means to merge two files." | ||||
| msgstr "" | ||||
| "Гнуова помагала разлика је пакет који садржи алате за проналажење разлика\n" | ||||
| "између датотека.  Наредба „diff“ се користи за приказивање разлика двеју\n" | ||||
| "датотека, док „cmp“ приказује помераје и бројеве редова на којима се\n" | ||||
| "разликују.  „diff3“ вам омогућава упоређивање три датотеке.  На крају,\n" | ||||
| "„sdiff“ нуди међудејствени начин за стапање две датотеке." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:219 | ||||
| msgid "Operating on files matching given criteria" | ||||
|  | @ -115,14 +138,17 @@ msgstr "Радње над датотекама према датим услов | |||
| msgid "" | ||||
| "Findutils supplies the basic file directory searching utilities of the\n" | ||||
| "GNU system.  It consists of two primary searching utilities: \"find\"\n" | ||||
| "recursively searches for files in a directory according to given criteria " | ||||
| "and\n" | ||||
| "\"locate\" lists files in a database that match a query.  Two auxiliary " | ||||
| "tools\n" | ||||
| "are included: \"updatedb\" updates the file name database and \"xargs\" may " | ||||
| "be\n" | ||||
| "recursively searches for files in a directory according to given criteria and\n" | ||||
| "\"locate\" lists files in a database that match a query.  Two auxiliary tools\n" | ||||
| "are included: \"updatedb\" updates the file name database and \"xargs\" may be\n" | ||||
| "used to apply commands with arbitrarily long arguments." | ||||
| msgstr "" | ||||
| "Помагала проналажења достављају основна помагала за претраживање датотеке\n" | ||||
| "Гнуовог система.  Састоји се од два основна помагала претраживања: „find“\n" | ||||
| "дубински тражи датотеке у директоријуму према задатом мерилу а „locate“\n" | ||||
| "исписује датотеке у бази података које одговарају упиту.  Укључена су два\n" | ||||
| "помоћна алата: „updatedb“ освежава назив датотеке базе података а „xargs“\n" | ||||
| "се може користити за примењивање наредби са произвољно дугим аргументима." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:265 | ||||
| msgid "Core GNU utilities (file, text, shell)" | ||||
|  | @ -132,10 +158,13 @@ msgstr "Гнуова кључна помагала (датотека, текст | |||
| msgid "" | ||||
| "GNU Coreutils includes all of the basic command-line tools that are\n" | ||||
| "expected in a POSIX system.  These provide the basic file, shell and text\n" | ||||
| "manipulation functions of the GNU system.  Most of these tools offer " | ||||
| "extended\n" | ||||
| "manipulation functions of the GNU system.  Most of these tools offer extended\n" | ||||
| "functionality beyond that which is outlined in the POSIX standard." | ||||
| msgstr "" | ||||
| "Гнуова кључна помагала укључују све основне алате линије наредби који се\n" | ||||
| "очекују у ПОСИКС систему.  Обезбеђују основне функције управљања датотеком,\n" | ||||
| "шкољком и текстом на Гнуовом систему.  Већина ових алата нуди проширене\n" | ||||
| "функционалности изван оних које су наведене у ПОСИКС стандарду." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:300 | ||||
| msgid "Remake files automatically" | ||||
|  | @ -145,12 +174,17 @@ msgstr "Самостално поновно стварање датотека" | |||
| msgid "" | ||||
| "Make is a program that is used to control the production of\n" | ||||
| "executables or other files from their source files.  The process is\n" | ||||
| "controlled from a Makefile, in which the developer specifies how each file " | ||||
| "is\n" | ||||
| "controlled from a Makefile, in which the developer specifies how each file is\n" | ||||
| "generated from its source.  It has powerful dependency resolution and the\n" | ||||
| "ability to determine when files have to be regenerated after their sources\n" | ||||
| "change.  GNU make offers many powerful extensions over the standard utility." | ||||
| msgstr "" | ||||
| "Мејк је програм који се користи за управљање стварањем извршних или других\n" | ||||
| "датотека из њихових изворних.  Поступком се управља из „Makefile“-а, у коме\n" | ||||
| "програмери наводе како се свака датотека ствара из свог извора.  Поседује\n" | ||||
| "моћно решавање зависности и способност одређивања када датотеке треба да\n" | ||||
| "буду поново створене након измена њихових извора.  Гнуов мејк нуди много\n" | ||||
| "моћних проширења поред стандардног помагала." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:345 | ||||
| msgid "Binary utilities: bfd gas gprof ld" | ||||
|  | @ -159,13 +193,16 @@ msgstr "Бинарна помагала: bfd gas gprof ld" | |||
| #: gnu/packages/base.scm:347 | ||||
| msgid "" | ||||
| "GNU Binutils is a collection of tools for working with binary files.\n" | ||||
| "Perhaps the most notable are \"ld\", a linker, and \"as\", an assembler. " | ||||
| "Other\n" | ||||
| "Perhaps the most notable are \"ld\", a linker, and \"as\", an assembler. Other\n" | ||||
| "tools include programs to display binary profiling information, list the\n" | ||||
| "strings in a binary file, and utilities for working with archives.  The \"bfd" | ||||
| "\"\n" | ||||
| "strings in a binary file, and utilities for working with archives.  The \"bfd\"\n" | ||||
| "library for working with executable and object formats is also included." | ||||
| msgstr "" | ||||
| "Гнуова бинарна помагала јесте збирка алата за рад са извршним датотекама.\n" | ||||
| "Можда је најпознатији „ld“, повезивач, и „as“, саставник.  Остали алати\n" | ||||
| "садрже програме за приказивање података бинарног профилисања, исписивање\n" | ||||
| "ниски у извршној датотеци, и помагала за рад са архивама.  Ту је такође и \n" | ||||
| "библиотека „bfd“ за рад са извршним и записима објеката." | ||||
| 
 | ||||
| #: gnu/packages/base.scm:476 | ||||
| msgid "The GNU C Library" | ||||
|  | @ -174,16 +211,13 @@ msgstr "Гну Ц библиотека" | |||
| #: gnu/packages/base.scm:478 | ||||
| msgid "" | ||||
| "Any Unix-like operating system needs a C library: the library which\n" | ||||
| "defines the \"system calls\" and other basic facilities such as open, " | ||||
| "malloc,\n" | ||||
| "defines the \"system calls\" and other basic facilities such as open, malloc,\n" | ||||
| "printf, exit...\n" | ||||
| "\n" | ||||
| "The GNU C library is used as the C library in the GNU system and most " | ||||
| "systems\n" | ||||
| "The GNU C library is used as the C library in the GNU system and most systems\n" | ||||
| "with the Linux kernel." | ||||
| msgstr "" | ||||
| "Сваком Јуниксоликом оперативном систему је потребна Ц библиотека: " | ||||
| "библиотека\n" | ||||
| "Сваком Јуниксоликом оперативном систему је потребна Ц библиотека: библиотека\n" | ||||
| "која одређује „системске позиве“ и остале основне олакшице као што су\n" | ||||
| "„open, malloc, printf, exit...“\n" | ||||
| "\n" | ||||
|  | @ -199,8 +233,7 @@ msgid "" | |||
| "The Time Zone Database (often called tz or zoneinfo)\n" | ||||
| "contains code and data that represent the history of local time for many\n" | ||||
| "representative locations around the globe. It is updated periodically to\n" | ||||
| "reflect changes made by political bodies to time zone boundaries, UTC " | ||||
| "offsets,\n" | ||||
| "reflect changes made by political bodies to time zone boundaries, UTC offsets,\n" | ||||
| "and daylight-saving rules." | ||||
| msgstr "" | ||||
| "База података временске зоне (често називана „tz“ или „zoneinfo“)\n" | ||||
|  | @ -211,7 +244,7 @@ msgstr "" | |||
| 
 | ||||
| #: gnu/packages/base.scm:925 | ||||
| msgid "GNU C++ standard library (intermediate)" | ||||
| msgstr "" | ||||
| msgstr "Гнуова Ц++ стандардна библиотека (посредничка)" | ||||
| 
 | ||||
| #: gnu/packages/base.scm:1012 | ||||
| msgid "The linker wrapper" | ||||
|  | @ -220,39 +253,40 @@ msgstr "Омотач повезивача" | |||
| #: gnu/packages/base.scm:1014 | ||||
| msgid "" | ||||
| "The linker wrapper (or `ld-wrapper') wraps the linker to add any\n" | ||||
| "missing `-rpath' flags, and to detect any misuse of libraries outside of " | ||||
| "the\n" | ||||
| "missing `-rpath' flags, and to detect any misuse of libraries outside of the\n" | ||||
| "store." | ||||
| msgstr "" | ||||
| "Омотач повезивача (или „ld-wrapper“) обмотава повезивача да би додао\n" | ||||
| "недостајућу опцију „-rpath“, и да би открио лоше коришћење библиотека\n" | ||||
| "изван складишта." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:96 gnu/packages/guile.scm:167 | ||||
| #: gnu/packages/guile.scm:97 gnu/packages/guile.scm:168 | ||||
| msgid "Scheme implementation intended especially for extensions" | ||||
| msgstr "Примена шеме нарочито осмишљена за проширења" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:98 gnu/packages/guile.scm:169 | ||||
| #: gnu/packages/guile.scm:99 gnu/packages/guile.scm:170 | ||||
| msgid "" | ||||
| "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the\n" | ||||
| "official extension language of the GNU system.  It is an implementation of\n" | ||||
| "the Scheme language which can be easily embedded in other applications to\n" | ||||
| "provide a convenient means of extending the functionality of the " | ||||
| "application\n" | ||||
| "provide a convenient means of extending the functionality of the application\n" | ||||
| "without requiring the source code to be rewritten." | ||||
| msgstr "" | ||||
| "Гуиле је Гнуов свеприсутан паметан језик за проширења, званични језик\n" | ||||
| "проширења за Гнуов систем.  То је примена Шеме језика који може лако\n" | ||||
| "бити уграђен у друге програме како би обезбедио исплатив начин проширивања\n" | ||||
| "функционалности програма без потребе поновног писања изворног кода." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:212 | ||||
| #: gnu/packages/guile.scm:213 | ||||
| msgid "Framework for building readers for GNU Guile" | ||||
| msgstr "Радни склоп за изградњу читача за Гну Гуила" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:214 | ||||
| #: gnu/packages/guile.scm:215 | ||||
| msgid "" | ||||
| "Guile-Reader is a simple framework for building readers for GNU Guile.\n" | ||||
| "\n" | ||||
| "The idea is to make it easy to build procedures that extend Guile’s read\n" | ||||
| "procedure. Readers supporting various syntax variants can easily be " | ||||
| "written,\n" | ||||
| "procedure. Readers supporting various syntax variants can easily be written,\n" | ||||
| "possibly by re-using existing “token readers” of a standard Scheme\n" | ||||
| "readers. For example, it is used to implement Skribilo’s R5RS-derived\n" | ||||
| "document syntax.\n" | ||||
|  | @ -266,41 +300,45 @@ msgstr "" | |||
| "Замисао је олакшати изградњу поступака који проширују Гуилов поступак\n" | ||||
| "читања. Читачи који подржавају разне варијанте синтаксе могу бити лако\n" | ||||
| "написани, по могућству поновним коришћењем постојећих „читача “ читача\n" | ||||
| "стандардне Шеме. На пример, користи се за примену синтаксе документа која " | ||||
| "произилази из Р5РС Скрибилоа.\n" | ||||
| "стандардне Шеме. На пример, користи се за примену синтаксе документа која произилази из Р5РС Скрибилоа.\n" | ||||
| "\n" | ||||
| "Приступ Гуиле-читача је сличан Општем Лисповом „читању табеле“, али је на\n" | ||||
| "срећу много моћнији и прилагодљивији (на пример, неко може да покрене\n" | ||||
| "онолико читача колико му је потребно)." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:266 | ||||
| #: gnu/packages/guile.scm:267 | ||||
| msgid "Guile bindings to ncurses" | ||||
| msgstr "Гуилеово повезивање са ен-курсом" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:268 | ||||
| #: gnu/packages/guile.scm:269 | ||||
| msgid "" | ||||
| "guile-ncurses provides Guile language bindings for the ncurses\n" | ||||
| "library." | ||||
| msgstr "" | ||||
| "гуиле-нкурсис обезбеђује повезивање Гуиле језика за нкурсис\n" | ||||
| "библиотеку." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:288 | ||||
| #: gnu/packages/guile.scm:289 | ||||
| msgid "Run jobs at scheduled times" | ||||
| msgstr "Покретање послова у заказано време" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:290 | ||||
| #: gnu/packages/guile.scm:291 | ||||
| msgid "" | ||||
| "GNU Mcron is a complete replacement for Vixie cron.  It is used to run\n" | ||||
| "tasks on a schedule, such as every hour or every Monday.  Mcron is written " | ||||
| "in\n" | ||||
| "tasks on a schedule, such as every hour or every Monday.  Mcron is written in\n" | ||||
| "Guile, so its configuration can be written in Scheme; the original cron\n" | ||||
| "format is also supported." | ||||
| msgstr "" | ||||
| "Гнуов Мкрон је потпуна замена за Викси крон.  Користи се за покретање\n" | ||||
| "задатака на заказивање, рецимо сваког сата или сваког понедељка.  Мкрон\n" | ||||
| "је написан у Гуилеу, тако да његово подешавање може бити написано у Шеми;\n" | ||||
| "изворни кронов запис је такође подржан." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:318 | ||||
| #: gnu/packages/guile.scm:319 | ||||
| msgid "Collection of useful Guile Scheme modules" | ||||
| msgstr "Збирка корисних модула Гуиле Шеме" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:320 | ||||
| #: gnu/packages/guile.scm:321 | ||||
| msgid "" | ||||
| "guile-lib is intended as an accumulation place for pure-scheme Guile\n" | ||||
| "modules, allowing for people to cooperate integrating their generic Guile\n" | ||||
|  | @ -312,25 +350,35 @@ msgstr "" | |||
| "у обједињену библиотеку. Сетите се само „down-scaled, limited-scope CPAN\n" | ||||
| "for Guile“." | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:380 | ||||
| msgid "Guile bindings to libssh" | ||||
| msgstr "Гуилеово повезивање са библбш-ом" | ||||
| 
 | ||||
| #: gnu/packages/guile.scm:382 | ||||
| msgid "" | ||||
| "Guile-SSH is a library that provides access to the SSH protocol for\n" | ||||
| "programs written in GNU Guile interpreter.  It is a wrapper to the underlying\n" | ||||
| "libssh library." | ||||
| msgstr "" | ||||
| "Гуиле-БШ је библиотека која обезбеђује приступ протоколу безбедне шкољке\n" | ||||
| "за програме написане у Гнуовом Гуиле преводиоцу.  То је омотач основне\n" | ||||
| "библиотеке либссх." | ||||
| 
 | ||||
| #: gnu/packages/lout.scm:109 | ||||
| msgid "Lout, a document layout system similar in style to LaTeX" | ||||
| msgstr "Лоут, систем изгледа документа сличан у стилу ЛаТеХ-у" | ||||
| 
 | ||||
| #: gnu/packages/lout.scm:111 | ||||
| msgid "" | ||||
| "The Lout document formatting system is now reads a high-level description " | ||||
| "of\n" | ||||
| "a document similar in style to LaTeX and produces a PostScript or plain " | ||||
| "text\n" | ||||
| "The Lout document formatting system is now reads a high-level description of\n" | ||||
| "a document similar in style to LaTeX and produces a PostScript or plain text\n" | ||||
| "output file.\n" | ||||
| "\n" | ||||
| "Lout offers an unprecedented range of advanced features, including optimal\n" | ||||
| "paragraph and page breaking, automatic hyphenation, PostScript EPS file\n" | ||||
| "inclusion and generation, equation formatting, tables, diagrams, rotation " | ||||
| "and\n" | ||||
| "inclusion and generation, equation formatting, tables, diagrams, rotation and\n" | ||||
| "scaling, sorted indexes, bibliographic databases, running headers and\n" | ||||
| "odd-even pages, automatic cross referencing, multilingual documents " | ||||
| "including\n" | ||||
| "odd-even pages, automatic cross referencing, multilingual documents including\n" | ||||
| "hyphenation (most European languages are supported), formatting of computer\n" | ||||
| "programs, and much more, all ready to use.  Furthermore, Lout is easily\n" | ||||
| "extended with definitions which are very much easier to write than troff of\n" | ||||
|  | @ -361,13 +409,16 @@ msgstr "Управљајте датотекама обичног текста к | |||
| #: gnu/packages/recutils.scm:54 | ||||
| msgid "" | ||||
| "GNU Recutils is a set of tools and libraries for creating and\n" | ||||
| "manipulating text-based, human-editable databases.  Despite being text-" | ||||
| "based,\n" | ||||
| "manipulating text-based, human-editable databases.  Despite being text-based,\n" | ||||
| "databases created with Recutils carry all of the expected features such as\n" | ||||
| "unique fields, primary keys, time stamps and more. Many different field " | ||||
| "types\n" | ||||
| "unique fields, primary keys, time stamps and more. Many different field types\n" | ||||
| "are supported, as is encryption." | ||||
| msgstr "" | ||||
| "Гнуово Рекпомагало је скуп алата и библиотека за стварање и руковање\n" | ||||
| "базама података заснованим на тексту које се могу уређивати.  Иако су\n" | ||||
| "засноване на тексту, базе података створене Рекпомагалом садрже све\n" | ||||
| "очекиване функције као што су јединствена поља, основни кључеви, ознаке\n" | ||||
| "времена и још неке. Многе различите врсте поља су подржане, као у шифровању." | ||||
| 
 | ||||
| #: guix/scripts/build.scm:54 | ||||
| #, scheme-format | ||||
|  | @ -383,13 +434,12 @@ msgstr "" | |||
| "Изграђује дати ПАКЕТ-ИЛИ-ИЗВЕДНИЦУ и исписује њихове путање излаза.\n" | ||||
| 
 | ||||
| #: guix/scripts/build.scm:75 | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| "\n" | ||||
| "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "  -e, --expression=ИЗРАЗ  изграђује процене ИЗРАЗА пакета на" | ||||
| "  -e, --expression=ИЗРАЗ  изграђује процене ИЗРАЗА пакета или изведенице на" | ||||
| 
 | ||||
| #: guix/scripts/build.scm:77 | ||||
| msgid "" | ||||
|  | @ -453,8 +503,7 @@ msgid "" | |||
| "      --no-substitutes   build instead of resorting to pre-built substitutes" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "      --no-substitutes   изграђује уместо да поново ређа заменике " | ||||
| "предизградње" | ||||
| "      --no-substitutes   изграђује уместо да поново ређа заменике предизградње" | ||||
| 
 | ||||
| #: guix/scripts/build.scm:93 guix/scripts/package.scm:492 | ||||
| msgid "" | ||||
|  | @ -472,8 +521,7 @@ msgid "" | |||
| "  -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:98 | ||||
| msgid "" | ||||
|  | @ -482,8 +530,7 @@ msgid "" | |||
| "                         as a garbage collector root" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "  -r, --root=ДАТОТЕКА       чини ДАТОТЕКУ симболичком везом ка резултату, и " | ||||
| "бележи је\n" | ||||
| "  -r, --root=ДАТОТЕКА       чини ДАТОТЕКУ симболичком везом ка резултату, и бележи је\n" | ||||
| "                         као корен скупљача ђубра" | ||||
| 
 | ||||
| #: guix/scripts/build.scm:101 | ||||
|  | @ -499,6 +546,8 @@ msgid "" | |||
| "\n" | ||||
| "      --log-file         return the log file names for the given derivations" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "      --log-file         исписује називе датотеке дневника за дате изведенице" | ||||
| 
 | ||||
| #: guix/scripts/build.scm:106 guix/scripts/download.scm:53 | ||||
| #: guix/scripts/package.scm:509 guix/scripts/gc.scm:58 | ||||
|  | @ -562,7 +611,7 @@ msgstr "~A: непознат пакет~%" | |||
| #: guix/scripts/build.scm:303 | ||||
| #, scheme-format | ||||
| msgid "no build log for '~a'~%" | ||||
| msgstr "" | ||||
| msgstr "нема дневника изградње за „~a“~%" | ||||
| 
 | ||||
| #: guix/scripts/download.scm:44 | ||||
| msgid "" | ||||
|  | @ -625,14 +674,14 @@ msgid "nothing to do: already at the empty profile~%" | |||
| msgstr "ништа за урадити: већ сам у празном профилу~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:183 | ||||
| #, fuzzy, scheme-format | ||||
| #, scheme-format | ||||
| msgid "The following package would be removed:~%~{~a~%~}~%" | ||||
| msgstr "Следећи пакети би требали бити уклоњени:~% ~{~a~%~}~%" | ||||
| msgstr "Следећи пакети би требали бити уклоњени:~%~{~a~%~}~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:188 | ||||
| #, fuzzy, scheme-format | ||||
| #, scheme-format | ||||
| msgid "The following package will be removed:~%~{~a~%~}~%" | ||||
| msgstr "Следећи пакети ће бити уклоњени:~% ~{~a~%~}~%" | ||||
| msgstr "Следећи пакети ће бити уклоњени:~%~{~a~%~}~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:200 | ||||
| #, scheme-format | ||||
|  | @ -709,8 +758,7 @@ msgid "" | |||
| "  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "  -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају " | ||||
| "РЕГИЗРАЗУ" | ||||
| "  -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају РЕГИЗРАЗУ" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:473 | ||||
| msgid "" | ||||
|  | @ -739,15 +787,14 @@ msgstr "" | |||
| "                         исписује генерације које одговарају ШАБЛОНУ" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:480 | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| "\n" | ||||
| "  -d, --delete-generations[=PATTERN]\n" | ||||
| "                         delete generations matching PATTERN" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "  -l, --list-generations[=ШАБЛОН]\n" | ||||
| "                         исписује генерације које одговарају ШАБЛОНУ" | ||||
| "  -d, --delete-generations[=ШАБЛОН]\n" | ||||
| "                         брише генерације које одговарају ШАБЛОНУ" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:484 | ||||
| msgid "" | ||||
|  | @ -763,8 +810,7 @@ msgid "" | |||
| "  -n, --dry-run          show what would be done without actually doing it" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "  -n, --dry-run          показује шта би требало да се уради а да заправо " | ||||
| "ништа не ради" | ||||
| "  -n, --dry-run          показује шта би требало да се уради а да заправо ништа не ради" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:495 | ||||
| msgid "" | ||||
|  | @ -798,8 +844,7 @@ msgid "" | |||
| msgstr "" | ||||
| "\n" | ||||
| "  -I, --list-installed[=РЕГИЗР]\n" | ||||
| "                         исписује инсталиране пакете који одговарају " | ||||
| "РЕГИЗРАЗУ" | ||||
| "                         исписује инсталиране пакете који одговарају РЕГИЗРАЗУ" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:505 | ||||
| msgid "" | ||||
|  | @ -842,9 +887,9 @@ msgid "Please change the owner of `~a' to user ~s.~%" | |||
| msgstr "Поставите као власника ~s над „~a“.~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:796 | ||||
| #, fuzzy, scheme-format | ||||
| #, scheme-format | ||||
| msgid "deleting ~a~%" | ||||
| msgstr "Генерација ~a\t~a~%" | ||||
| msgstr "бришем ~a~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:849 guix/scripts/package.scm:951 | ||||
| #, scheme-format | ||||
|  | @ -862,14 +907,14 @@ msgid "~a package in profile~%" | |||
| msgstr "~a пакет у профилу~%" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:915 | ||||
| #, fuzzy, scheme-format | ||||
| #, scheme-format | ||||
| msgid "Generation ~a\t~a" | ||||
| msgstr "Генерација ~a\t~a~%" | ||||
| msgstr "Генерација ~a\t~a" | ||||
| 
 | ||||
| #: guix/scripts/package.scm:922 | ||||
| #, scheme-format | ||||
| msgid "~a\t(current)~%" | ||||
| msgstr "" | ||||
| msgstr "~a\t(текуће)~%" | ||||
| 
 | ||||
| #: guix/scripts/gc.scm:39 | ||||
| msgid "" | ||||
|  | @ -994,6 +1039,8 @@ msgid "" | |||
| "\n" | ||||
| "      --url=URL          download the Guix tarball from URL" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "      --url=АДРЕСА       преузима тарбал Гуикса са АДРЕСЕ" | ||||
| 
 | ||||
| #: guix/scripts/pull.scm:169 | ||||
| msgid "" | ||||
|  | @ -1001,8 +1048,7 @@ msgid "" | |||
| "      --bootstrap        use the bootstrap Guile to build the new Guix" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "      --bootstrap        користи Гуиле почетног учитавања да изгради нови " | ||||
| "Гуикс" | ||||
| "      --bootstrap        користи Гуиле почетног учитавања да изгради нови Гуикс" | ||||
| 
 | ||||
| #: guix/scripts/pull.scm:207 | ||||
| #, scheme-format | ||||
|  | @ -1045,8 +1091,7 @@ msgstr "Преузима, молим сачекајте...~%" | |||
| #: guix/scripts/substitute-binary.scm:441 | ||||
| #, scheme-format | ||||
| msgid "(Please consider upgrading Guile to get proper progress report.)~%" | ||||
| msgstr "" | ||||
| "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" | ||||
| msgstr "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" | ||||
| 
 | ||||
| #: guix/scripts/substitute-binary.scm:458 | ||||
| #, scheme-format | ||||
|  | @ -1068,8 +1113,7 @@ msgid "" | |||
| "                         store file names passed on the standard input" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "      --query            извештава о доступности заменика за називе " | ||||
| "датотека\n" | ||||
| "      --query            извештава о доступности заменика за називе датотека\n" | ||||
| "                         складишта прослеђених на стандардном улазу" | ||||
| 
 | ||||
| #: guix/scripts/substitute-binary.scm:472 | ||||
|  | @ -1081,31 +1125,30 @@ msgid "" | |||
| msgstr "" | ||||
| "\n" | ||||
| "      --substitute ОДРЕДИШТЕ СКЛАДИШНЕ-ДАТОТЕКЕ\n" | ||||
| "                         преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар " | ||||
| "удатотеци\n" | ||||
| "                         преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар удатотеци\n" | ||||
| "                         ОДРЕДИШТЕ" | ||||
| 
 | ||||
| #: guix/scripts/substitute-binary.scm:596 | ||||
| #: guix/scripts/substitute-binary.scm:593 | ||||
| #, scheme-format | ||||
| msgid "~a: unrecognized options~%" | ||||
| msgstr "~a: непозната опција~%" | ||||
| 
 | ||||
| #: guix/gnu-maintenance.scm:357 | ||||
| #: guix/gnu-maintenance.scm:346 | ||||
| #, scheme-format | ||||
| msgid "signature verification failed for `~a'~%" | ||||
| msgstr "није успела провера потписа за „~a“~%" | ||||
| 
 | ||||
| #: guix/gnu-maintenance.scm:359 | ||||
| #: guix/gnu-maintenance.scm:348 | ||||
| #, scheme-format | ||||
| msgid "(could be because the public key is not in your keyring)~%" | ||||
| msgstr "(може бити зато што јавни кључ није у вашем привеску)~%" | ||||
| 
 | ||||
| #: guix/gnu-maintenance.scm:434 | ||||
| #: guix/gnu-maintenance.scm:423 | ||||
| #, scheme-format | ||||
| msgid "~a: could not locate source file" | ||||
| msgstr "~a: не могу да пронађем изворну датотеку" | ||||
| 
 | ||||
| #: guix/gnu-maintenance.scm:439 | ||||
| #: guix/gnu-maintenance.scm:428 | ||||
| #, scheme-format | ||||
| msgid "~a: ~a: no `version' field in source; skipping~%" | ||||
| msgstr "~a: ~a: нема поља „version“ у извору; прескачем~%" | ||||
|  | @ -1118,11 +1161,14 @@ msgstr "нисам успео да инсталирам локалитет: ~a~% | |||
| #: guix/ui.scm:141 | ||||
| msgid "" | ||||
| "Copyright (C) 2013 the Guix authors\n" | ||||
| "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." | ||||
| "html>\n" | ||||
| "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" | ||||
| "This is free software: you are free to change and redistribute it.\n" | ||||
| "There is NO WARRANTY, to the extent permitted by law.\n" | ||||
| msgstr "" | ||||
| "Ауторска права (C) 2013 аутори Гуикса\n" | ||||
| "Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или касније <http://gnu.org/licenses/gpl.html>\n" | ||||
| "Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n" | ||||
| "Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\n" | ||||
| 
 | ||||
| #: guix/ui.scm:149 | ||||
| #, scheme-format | ||||
|  | @ -1186,7 +1232,7 @@ msgid "failed to evaluate expression `~a': ~s~%" | |||
| msgstr "нисам успео да проценим израз „~a“: ~s~%" | ||||
| 
 | ||||
| #: guix/ui.scm:218 | ||||
| #, fuzzy, scheme-format | ||||
| #, scheme-format | ||||
| msgid "expression ~s does not evaluate to a package~%" | ||||
| msgstr "израз „~s“ се не процењује на пакет~%" | ||||
| 
 | ||||
|  | @ -1283,20 +1329,15 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "match to a specified pattern.  By default, grep prints the matching\n" | ||||
| #~ "lines." | ||||
| #~ msgstr "" | ||||
| #~ "Наредба греп претражује једну или више улазних датоотека за редовима " | ||||
| #~ "који\n" | ||||
| #~ "садрже поклапање са наведеним шаблоном.  По основи, греп исписује " | ||||
| #~ "поклопљене\n" | ||||
| #~ "Наредба греп претражује једну или више улазних датоотека за редовима који\n" | ||||
| #~ "садрже поклапање са наведеним шаблоном.  По основи, греп исписује поклопљене\n" | ||||
| #~ "редове." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "Sed (stream editor) isn't really a true text editor or text processor.\n" | ||||
| #~ "Instead, it is used to filter text, i.e., it takes text input and " | ||||
| #~ "performs\n" | ||||
| #~ "some operation (or set of operations) on it and outputs the modified " | ||||
| #~ "text.\n" | ||||
| #~ "Sed is typically used for extracting part of a file using pattern " | ||||
| #~ "matching or\n" | ||||
| #~ "Instead, it is used to filter text, i.e., it takes text input and performs\n" | ||||
| #~ "some operation (or set of operations) on it and outputs the modified text.\n" | ||||
| #~ "Sed is typically used for extracting part of a file using pattern matching or\n" | ||||
| #~ "substituting multiple occurrences of a string within a file." | ||||
| #~ msgstr "" | ||||
| #~ "Сед (уређивач протока) није стварно прави уређивач или обрађивач текста.\n" | ||||
|  | @ -1308,18 +1349,13 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ msgid "" | ||||
| #~ "The Tar program provides the ability to create tar archives, as well as\n" | ||||
| #~ "various other kinds of manipulation.  For example, you can use Tar on\n" | ||||
| #~ "previously created archives to extract files, to store additional files, " | ||||
| #~ "or\n" | ||||
| #~ "previously created archives to extract files, to store additional files, or\n" | ||||
| #~ "to update or list files which were already stored.\n" | ||||
| #~ "\n" | ||||
| #~ "Initially, tar archives were used to store files conveniently on " | ||||
| #~ "magnetic\n" | ||||
| #~ "tape.  The name \"Tar\" comes from this use; it stands for tape " | ||||
| #~ "archiver.\n" | ||||
| #~ "Despite the utility's name, Tar can direct its output to available " | ||||
| #~ "devices,\n" | ||||
| #~ "files, or other programs (using pipes), it can even access remote devices " | ||||
| #~ "or\n" | ||||
| #~ "Initially, tar archives were used to store files conveniently on magnetic\n" | ||||
| #~ "tape.  The name \"Tar\" comes from this use; it stands for tape archiver.\n" | ||||
| #~ "Despite the utility's name, Tar can direct its output to available devices,\n" | ||||
| #~ "files, or other programs (using pipes), it can even access remote devices or\n" | ||||
| #~ "files (as archives)." | ||||
| #~ msgstr "" | ||||
| #~ "Програм Тар обезбеђује способност стварања тар архива, као и разне друге\n" | ||||
|  | @ -1329,20 +1365,16 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "\n" | ||||
| #~ "На почетку, тар архиве су биле коришћене за пригодно чување датотека на\n" | ||||
| #~ "магнетским тракама. Назив „Тар“ је настао из такве употребе; и значи\n" | ||||
| #~ "архивар трака. Без обзира на назив помагала, Тар може да успери свој " | ||||
| #~ "излаз\n" | ||||
| #~ "ка доступним уређајима, датотекама, или другим програмима (употребом " | ||||
| #~ "спојки)\n" | ||||
| #~ "архивар трака. Без обзира на назив помагала, Тар може да успери свој излаз\n" | ||||
| #~ "ка доступним уређајима, датотекама, или другим програмима (употребом спојки)\n" | ||||
| #~ "чак може и да приступи удаљеним уређајима или датотекама (као архивама)." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "GNU Patch takes a patch file containing a difference listing produced by\n" | ||||
| #~ "the diff program and applies those differences to one or more original " | ||||
| #~ "files,\n" | ||||
| #~ "the diff program and applies those differences to one or more original files,\n" | ||||
| #~ "producing patched versions." | ||||
| #~ msgstr "" | ||||
| #~ "Гнуова закрпа узима датотеку закрпе која садржи списак разлика " | ||||
| #~ "произведен\n" | ||||
| #~ "Гнуова закрпа узима датотеку закрпе која садржи списак разлика произведен\n" | ||||
| #~ "програмом за разлике (diff) и примењује те разлике на једној или више\n" | ||||
| #~ "изворних датотека, стварајући прикрпљена издања." | ||||
| 
 | ||||
|  | @ -1350,35 +1382,24 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "GNU Diffutils is a package of several programs related to finding\n" | ||||
| #~ "differences between files.\n" | ||||
| #~ "\n" | ||||
| #~ "Computer users often find occasion to ask how two files differ. Perhaps " | ||||
| #~ "one\n" | ||||
| #~ "file is a newer version of the other file. Or maybe the two files started " | ||||
| #~ "out\n" | ||||
| #~ "Computer users often find occasion to ask how two files differ. Perhaps one\n" | ||||
| #~ "file is a newer version of the other file. Or maybe the two files started out\n" | ||||
| #~ "as identical copies but were changed by different people.\n" | ||||
| #~ "\n" | ||||
| #~ "You can use the diff command to show differences between two files, or " | ||||
| #~ "each\n" | ||||
| #~ "corresponding file in two directories. diff outputs differences between " | ||||
| #~ "files\n" | ||||
| #~ "You can use the diff command to show differences between two files, or each\n" | ||||
| #~ "corresponding file in two directories. diff outputs differences between files\n" | ||||
| #~ "line by line in any of several formats, selectable by command line\n" | ||||
| #~ "options. This set of differences is often called a ‘diff’ or ‘patch’. " | ||||
| #~ "For\n" | ||||
| #~ "options. This set of differences is often called a ‘diff’ or ‘patch’. For\n" | ||||
| #~ "files that are identical, diff normally produces no output; for\n" | ||||
| #~ "binary (non-text) files, diff normally reports only that they are " | ||||
| #~ "different.\n" | ||||
| #~ "binary (non-text) files, diff normally reports only that they are different.\n" | ||||
| #~ "\n" | ||||
| #~ "You can use the cmp command to show the offsets and line numbers where " | ||||
| #~ "two\n" | ||||
| #~ "files differ. cmp can also show all the characters that differ between " | ||||
| #~ "the\n" | ||||
| #~ "You can use the cmp command to show the offsets and line numbers where two\n" | ||||
| #~ "files differ. cmp can also show all the characters that differ between the\n" | ||||
| #~ "two files, side by side.\n" | ||||
| #~ "\n" | ||||
| #~ "You can use the diff3 command to show differences among three files. When " | ||||
| #~ "two\n" | ||||
| #~ "people have made independent changes to a common original, diff3 can " | ||||
| #~ "report\n" | ||||
| #~ "the differences between the original and the two changed versions, and " | ||||
| #~ "can\n" | ||||
| #~ "You can use the diff3 command to show differences among three files. When two\n" | ||||
| #~ "people have made independent changes to a common original, diff3 can report\n" | ||||
| #~ "the differences between the original and the two changed versions, and can\n" | ||||
| #~ "produce a merged file that contains both persons' changes together with\n" | ||||
| #~ "warnings about conflicts.\n" | ||||
| #~ "\n" | ||||
|  | @ -1388,43 +1409,32 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "разлика између датотека.\n" | ||||
| #~ "\n" | ||||
| #~ "Корисници рачунара често желе да знају у чему се разликују две датотеке.\n" | ||||
| #~ "Можда је једна датотека новије издање оне друге. Или су можда обе " | ||||
| #~ "датотеке\n" | ||||
| #~ "Можда је једна датотека новије издање оне друге. Или су можда обе датотеке\n" | ||||
| #~ "започете као истоветни умношци али су их измениле другачије особе.\n" | ||||
| #~ "\n" | ||||
| #~ "Можете да користите наредбу „diff“ да покажете разлике између две " | ||||
| #~ "датотеке\n" | ||||
| #~ "или сваку одговарајућу датотеку у два директоријума. дифф исписује " | ||||
| #~ "разлике\n" | ||||
| #~ "Можете да користите наредбу „diff“ да покажете разлике између две датотеке\n" | ||||
| #~ "или сваку одговарајућу датотеку у два директоријума. дифф исписује разлике\n" | ||||
| #~ "између датотека ред по ред у било ком од неколико записа, бирањем опција\n" | ||||
| #~ "линије наредби. Овај скуп разлика се често назива „diff“ или „patch“. За\n" | ||||
| #~ "датотеке које су исте, дифф обично не даје резултат; за извршне (не-" | ||||
| #~ "текстуалне)\n" | ||||
| #~ "датотеке које су исте, дифф обично не даје резултат; за извршне (не-текстуалне)\n" | ||||
| #~ "датотеке, дифф обично извештава само о томе да се оне разликују.\n" | ||||
| #~ "\n" | ||||
| #~ "\n" | ||||
| #~ "Можете да користите наредбу „cmp“ да прикажете помераје и бројеве редова\n" | ||||
| #~ "где се две датотеке разликују. цмп може такође да покаже све знакове " | ||||
| #~ "који\n" | ||||
| #~ "где се две датотеке разликују. цмп може такође да покаже све знакове који\n" | ||||
| #~ "се разликују између две датотеке, један поред другог.\n" | ||||
| #~ "\n" | ||||
| #~ "Можете да користите наредбу „diff3“ да прикажете разлике између три " | ||||
| #~ "датотеке.\n" | ||||
| #~ "Када два корисника направе независне измене у заједничком оригиналу, " | ||||
| #~ "дифф3\n" | ||||
| #~ "може да извести о разликама између оригинала и два измењена издања, и " | ||||
| #~ "може да\n" | ||||
| #~ "направи стопљену датотеку која заједно садржи измене обе особе са " | ||||
| #~ "упозорењима о сукобима.\n" | ||||
| #~ "Можете да користите наредбу „diff3“ да прикажете разлике између три датотеке.\n" | ||||
| #~ "Када два корисника направе независне измене у заједничком оригиналу, дифф3\n" | ||||
| #~ "може да извести о разликама између оригинала и два измењена издања, и може да\n" | ||||
| #~ "направи стопљену датотеку која заједно садржи измене обе особе са упозорењима о сукобима.\n" | ||||
| #~ "\n" | ||||
| #~ "Можете да користите наредбу „sdiff“ да међудејствено стопите две датотеке." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "The GNU Find Utilities are the basic directory searching utilities of\n" | ||||
| #~ "the GNU operating system.  These programs are typically used in " | ||||
| #~ "conjunction\n" | ||||
| #~ "with other programs to provide modular and powerful directory search and " | ||||
| #~ "file\n" | ||||
| #~ "the GNU operating system.  These programs are typically used in conjunction\n" | ||||
| #~ "with other programs to provide modular and powerful directory search and file\n" | ||||
| #~ "locating capabilities to other commands.\n" | ||||
| #~ "\n" | ||||
| #~ "The tools supplied with this package are:\n" | ||||
|  | @ -1442,15 +1452,13 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "Алати који иду уз овај пакет су:\n" | ||||
| #~ "\n" | ||||
| #~ "  * find — тражи датотеке у хијерархији директоријума;\n" | ||||
| #~ "  * locate — исписује датотеке у базама података које одговарају " | ||||
| #~ "шаблону;\n" | ||||
| #~ "  * locate — исписује датотеке у базама података које одговарају шаблону;\n" | ||||
| #~ "  * updatedb — освежава базу података назива датотеке;\n" | ||||
| #~ "  * xargs — гради редове извршавања наредбе са стандардног улаза.\n" | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "The GNU Core Utilities are the basic file, shell and text manipulation\n" | ||||
| #~ "utilities of the GNU operating system.  These are the core utilities " | ||||
| #~ "which\n" | ||||
| #~ "utilities of the GNU operating system.  These are the core utilities which\n" | ||||
| #~ "are expected to exist on every operating system." | ||||
| #~ msgstr "" | ||||
| #~ "Гнуова кључна помагала су основни алати за управљање датотекама, шкољком\n" | ||||
|  | @ -1461,33 +1469,25 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| #~ "Make is a tool which controls the generation of executables and other\n" | ||||
| #~ "non-source files of a program from the program's source files.\n" | ||||
| #~ "\n" | ||||
| #~ "Make gets its knowledge of how to build your program from a file called " | ||||
| #~ "the\n" | ||||
| #~ "makefile, which lists each of the non-source files and how to compute it " | ||||
| #~ "from\n" | ||||
| #~ "other files. When you write a program, you should write a makefile for " | ||||
| #~ "it, so\n" | ||||
| #~ "Make gets its knowledge of how to build your program from a file called the\n" | ||||
| #~ "makefile, which lists each of the non-source files and how to compute it from\n" | ||||
| #~ "other files. When you write a program, you should write a makefile for it, so\n" | ||||
| #~ "that it is possible to use Make to build and install the program." | ||||
| #~ msgstr "" | ||||
| #~ "Мејк је алат који управља стварањем извршних и других не-изворних " | ||||
| #~ "датотека\n" | ||||
| #~ "Мејк је алат који управља стварањем извршних и других не-изворних датотека\n" | ||||
| #~ "програма из изворних датотека програма.\n" | ||||
| #~ "\n" | ||||
| #~ "Мејк сазнаје како да изгради ваш програм из датотеке зване „makefile“, " | ||||
| #~ "која\n" | ||||
| #~ "исписује сваку не-изворну датотеку и како да је прорчуна из других " | ||||
| #~ "датотека.\n" | ||||
| #~ "Мејк сазнаје како да изгради ваш програм из датотеке зване „makefile“, која\n" | ||||
| #~ "исписује сваку не-изворну датотеку и како да је прорчуна из других датотека.\n" | ||||
| #~ "Када пишете програм треба да напишете и његову „makefile“ датотеку, тако\n" | ||||
| #~ "да буде могуће користити Мејк за изградњу и инсталацију програма." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "The GNU Binutils are a collection of binary tools.  The main ones are\n" | ||||
| #~ "`ld' (the GNU linker) and `as' (the GNU assembler).  They also include " | ||||
| #~ "the\n" | ||||
| #~ "`ld' (the GNU linker) and `as' (the GNU assembler).  They also include the\n" | ||||
| #~ "BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc." | ||||
| #~ msgstr "" | ||||
| #~ "Гнуова бинпомагала јесу скуп бинарних алата.  Главни су „ld“ (Гнуов " | ||||
| #~ "везник) и „as“ (Гнуов асемблер). У њих такође спадају библиотека „BFD“\n" | ||||
| #~ "Гнуова бинпомагала јесу скуп бинарних алата.  Главни су „ld“ (Гнуов везник) и „as“ (Гнуов асемблер). У њих такође спадају библиотека „BFD“\n" | ||||
| #~ "(Binary File Descriptor), „gprof“, „nm“, „strip“, итд." | ||||
| 
 | ||||
| #~ msgid "" | ||||
|  | @ -1501,66 +1501,48 @@ msgstr "пратим преусмеравање на „~a“...~%" | |||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "GNU Guile is an implementation of the Scheme programming language, with\n" | ||||
| #~ "support for many SRFIs, packaged for use in a wide variety of " | ||||
| #~ "environments.\n" | ||||
| #~ "In addition to implementing the R5RS Scheme standard and a large subset " | ||||
| #~ "of\n" | ||||
| #~ "support for many SRFIs, packaged for use in a wide variety of environments.\n" | ||||
| #~ "In addition to implementing the R5RS Scheme standard and a large subset of\n" | ||||
| #~ "R6RS, Guile includes a module system, full access to POSIX system calls,\n" | ||||
| #~ "networking support, multiple threads, dynamic linking, a foreign " | ||||
| #~ "function\n" | ||||
| #~ "networking support, multiple threads, dynamic linking, a foreign function\n" | ||||
| #~ "call interface, and powerful string processing." | ||||
| #~ msgstr "" | ||||
| #~ "Гну Гуиле је примена програмског језика Шеме, са подршком за многе\n" | ||||
| #~ "СРФИ-ове запакован за коришћење у разним окружењима.\n" | ||||
| #~ "Као додатак примене Р5РС стандарда Шеме и великог подскупа Р6РС, Гуиле\n" | ||||
| #~ "обухвата систем модула, потпун приступ системским позивима ПОСИКС-а, " | ||||
| #~ "пподршку умрежавања, вишеструке нити, динамичко повезивање, сучеље " | ||||
| #~ "позива\n" | ||||
| #~ "обухвата систем модула, потпун приступ системским позивима ПОСИКС-а, пподршку умрежавања, вишеструке нити, динамичко повезивање, сучеље позива\n" | ||||
| #~ "страних функција, и моћну обраду ниске." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n" | ||||
| #~ "provides functions for creating text user interfaces.  The text user " | ||||
| #~ "interface\n" | ||||
| #~ "functionality is built on the ncurses libraries: curses, form, panel, " | ||||
| #~ "and\n" | ||||
| #~ "provides functions for creating text user interfaces.  The text user interface\n" | ||||
| #~ "functionality is built on the ncurses libraries: curses, form, panel, and\n" | ||||
| #~ "menu." | ||||
| #~ msgstr "" | ||||
| #~ "Гну Гуиле Ен-курсис је библиотека за преводиоца Гуле Шеме која " | ||||
| #~ "обезбеђује\n" | ||||
| #~ "функције за стварање текстуалног корисничког сучеља. Функционалност " | ||||
| #~ "текстуалног\n" | ||||
| #~ "корисничког сучеља је изграђена на ен-курсис библиотекама: „curses, " | ||||
| #~ "form,\n" | ||||
| #~ "Гну Гуиле Ен-курсис је библиотека за преводиоца Гуле Шеме која обезбеђује\n" | ||||
| #~ "функције за стварање текстуалног корисничког сучеља. Функционалност текстуалног\n" | ||||
| #~ "корисничког сучеља је изграђена на ен-курсис библиотекама: „curses, form,\n" | ||||
| #~ "panel, и menu“." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n" | ||||
| #~ "for Vixie cron.  It is written in pure Guile, and allows configuration " | ||||
| #~ "files\n" | ||||
| #~ "to be written in scheme (as well as Vixie's original format) for " | ||||
| #~ "infinite\n" | ||||
| #~ "flexibility in specifying when jobs should be run.  Mcron was written by " | ||||
| #~ "Dale\n" | ||||
| #~ "for Vixie cron.  It is written in pure Guile, and allows configuration files\n" | ||||
| #~ "to be written in scheme (as well as Vixie's original format) for infinite\n" | ||||
| #~ "flexibility in specifying when jobs should be run.  Mcron was written by Dale\n" | ||||
| #~ "Mellor." | ||||
| #~ msgstr "" | ||||
| #~ "Гнуов пакет „mcron“ (Мелоров крон) је 100% сагласна замена за Викси " | ||||
| #~ "крон.\n" | ||||
| #~ "Написан је у чистом Гуилу, и допушта да датотеке подешавања буду " | ||||
| #~ "записане\n" | ||||
| #~ "Гнуов пакет „mcron“ (Мелоров крон) је 100% сагласна замена за Викси крон.\n" | ||||
| #~ "Написан је у чистом Гуилу, и допушта да датотеке подешавања буду записане\n" | ||||
| #~ "у шеми (као и у Виксијевом изворном запису) са бескрајном сагласношћу у\n" | ||||
| #~ "навођењу када послови требају да се покрену.  Написао га је Дејл Мелор." | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "GNU recutils is a set of tools and libraries to access human-editable,\n" | ||||
| #~ "text-based databases called recfiles.  The data is stored as a sequence " | ||||
| #~ "of\n" | ||||
| #~ "text-based databases called recfiles.  The data is stored as a sequence of\n" | ||||
| #~ "records, each record containing an arbitrary number of named fields." | ||||
| #~ msgstr "" | ||||
| #~ "Гну рекутилс је скуп алата и библиотека за приступ базама података " | ||||
| #~ "заснованим на\n" | ||||
| #~ "тексту, званим „recfiles“ које корисници могу да мењају.  Подаци су " | ||||
| #~ "ускладиштени\n" | ||||
| #~ "Гну рекутилс је скуп алата и библиотека за приступ базама података заснованим на\n" | ||||
| #~ "тексту, званим „recfiles“ које корисници могу да мењају.  Подаци су ускладиштени\n" | ||||
| #~ "као низ снимака, сваки снимак садржи одговарајући број именованих поља." | ||||
| 
 | ||||
| #~ msgid "profile `~a' does not exist~%" | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
| # | ||||
|  | @ -44,7 +44,12 @@ export PATH | |||
| NIX_ROOT_FINDER="$abs_top_builddir/nix/scripts/list-runtime-roots" | ||||
| NIX_SUBSTITUTERS="$abs_top_builddir/nix/scripts/substitute-binary" | ||||
| NIX_SETUID_HELPER="$abs_top_builddir/nix-setuid-helper" | ||||
| export NIX_ROOT_FINDER NIX_SETUID_HELPER NIX_SUBSTITUTERS | ||||
| NIX_BUILD_HOOK="$abs_top_builddir/nix/scripts/offload" | ||||
| export NIX_ROOT_FINDER NIX_SETUID_HELPER NIX_SUBSTITUTERS NIX_BUILD_HOOK | ||||
| 
 | ||||
| # The 'guix-register' program. | ||||
| GUIX_REGISTER="$abs_top_builddir/guix-register" | ||||
| export GUIX_REGISTER | ||||
| 
 | ||||
| # The following variables need only be defined when compiling Guix | ||||
| # modules, but we define them to be on the safe side in case of | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
| # | ||||
|  | @ -29,6 +29,33 @@ rm -rf "$new_store" | |||
| exit_hook=":" | ||||
| trap "chmod -R +w $new_store ; rm -rf $new_store $closure ; \$exit_hook" EXIT | ||||
| 
 | ||||
| # | ||||
| # Registering items in the current store---i.e., without '--prefix'. | ||||
| # | ||||
| 
 | ||||
| new_file="$NIX_STORE_DIR/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-guix-register-$$" | ||||
| echo "Fake store file to test registration." > "$new_file" | ||||
| 
 | ||||
| # Register the file with zero references and no deriver. | ||||
| guix-register <<EOF | ||||
| $new_file | ||||
| 
 | ||||
| 0 | ||||
| EOF | ||||
| 
 | ||||
| # Make sure it's valid, and delete it. | ||||
| guile -c " | ||||
|    (use-modules (guix store)) | ||||
|    (define s (open-connection)) | ||||
|    (exit (and (valid-path? s \"$new_file\") | ||||
|               (null? (references s \"$new_file\")) | ||||
|               (pair? (delete-paths s (list \"$new_file\")))))" | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # Registering items in a new store, with '--prefix'. | ||||
| # | ||||
| 
 | ||||
| mkdir -p "$new_store/$storedir" | ||||
| new_store_dir="`cd "$new_store/$storedir" ; pwd`" | ||||
| new_store="`cd "$new_store" ; pwd`" | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -37,6 +37,14 @@ | |||
|   (base16-string->bytevector | ||||
|    "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9")) | ||||
| 
 | ||||
| (define (supports-unbuffered-cbip?) | ||||
|   "Return #t if unbuffered custom binary input ports (CBIPs) are supported. | ||||
| In Guile <= 2.0.9, CBIPs were always fully buffered, so the | ||||
| 'open-sha256-input-port' does not work there." | ||||
|   (false-if-exception | ||||
|    (setvbuf (make-custom-binary-input-port "foo" pk #f #f #f) _IONBF))) | ||||
| 
 | ||||
|  | ||||
| (test-begin "hash") | ||||
| 
 | ||||
| (test-equal "sha256, empty" | ||||
|  | @ -68,6 +76,55 @@ | |||
|     (equal? (sha256 contents) | ||||
|             (call-with-input-file file port-sha256)))) | ||||
| 
 | ||||
| (test-skip (if (supports-unbuffered-cbip?) 0 4)) | ||||
| 
 | ||||
| (test-equal "open-sha256-input-port, empty" | ||||
|   `("" ,%empty-sha256) | ||||
|   (let-values (((port get) | ||||
|                 (open-sha256-input-port (open-string-input-port "")))) | ||||
|     (let ((str (get-string-all port))) | ||||
|       (list str (get))))) | ||||
| 
 | ||||
| (test-equal "open-sha256-input-port, hello" | ||||
|   `("hello world" ,%hello-sha256) | ||||
|   (let-values (((port get) | ||||
|                 (open-sha256-input-port | ||||
|                  (open-bytevector-input-port | ||||
|                   (string->utf8 "hello world"))))) | ||||
|     (let ((str (get-string-all port))) | ||||
|       (list str (get))))) | ||||
| 
 | ||||
| (test-equal "open-sha256-input-port, hello, one two" | ||||
|   (list (string->utf8 "hel") (string->utf8 "lo") | ||||
|         (base16-string->bytevector                ; echo -n hello | sha256sum | ||||
|          "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") | ||||
|         " world") | ||||
|   (let-values (((port get) | ||||
|                 (open-sha256-input-port | ||||
|                  (open-bytevector-input-port (string->utf8 "hello world"))))) | ||||
|     (let* ((one   (get-bytevector-n port 3)) | ||||
|            (two   (get-bytevector-n port 2)) | ||||
|            (hash  (get)) | ||||
|            (three (get-string-all port))) | ||||
|       (list one two hash three)))) | ||||
| 
 | ||||
| (test-equal "open-sha256-input-port, hello, read from wrapped port" | ||||
|   (list (string->utf8 "hello") | ||||
|         (base16-string->bytevector                ; echo -n hello | sha256sum | ||||
|          "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") | ||||
|         " world") | ||||
|   (let*-values (((wrapped) | ||||
|                  (open-bytevector-input-port (string->utf8 "hello world"))) | ||||
|                 ((port get) | ||||
|                  (open-sha256-input-port wrapped))) | ||||
|     (let* ((hello (get-bytevector-n port 5)) | ||||
|            (hash  (get)) | ||||
| 
 | ||||
|            ;; Now read from WRAPPED to make sure its current position is | ||||
|            ;; correct. | ||||
|            (world (get-string-all wrapped))) | ||||
|       (list hello hash world)))) | ||||
| 
 | ||||
| (test-end) | ||||
| 
 | ||||
|  | ||||
|  |  | |||
							
								
								
									
										103
									
								
								tests/nar.scm
									
										
									
									
									
								
							
							
						
						
									
										103
									
								
								tests/nar.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -18,11 +18,17 @@ | |||
| 
 | ||||
| (define-module (test-nar) | ||||
|   #:use-module (guix nar) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module ((guix hash) #:select (open-sha256-input-port)) | ||||
|   #:use-module (rnrs bytevectors) | ||||
|   #:use-module (rnrs io ports) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (srfi srfi-34) | ||||
|   #:use-module (srfi srfi-35) | ||||
|   #:use-module (srfi srfi-64) | ||||
|   #:use-module (ice-9 ftw) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (ice-9 match)) | ||||
| 
 | ||||
| ;; Test the (guix nar) module. | ||||
|  | @ -156,6 +162,24 @@ | |||
|   (string-append (dirname (search-path %load-path "pre-inst-env")) | ||||
|                  "/test-nar-" (number->string (getpid)))) | ||||
| 
 | ||||
| ;; XXX: Factorize. | ||||
| (define %seed | ||||
|   (seed->random-state (logxor (getpid) (car (gettimeofday))))) | ||||
| 
 | ||||
| (define (random-text) | ||||
|   (number->string (random (expt 2 256) %seed) 16)) | ||||
| 
 | ||||
| (define-syntax-rule (let/ec k exp...) | ||||
|   ;; This one appeared in Guile 2.0.9, so provide a copy here. | ||||
|   (let ((tag (make-prompt-tag))) | ||||
|     (call-with-prompt tag | ||||
|       (lambda () | ||||
|         (let ((k (lambda args | ||||
|                    (apply abort-to-prompt tag args)))) | ||||
|           exp...)) | ||||
|       (lambda (_ . args) | ||||
|         (apply values args))))) | ||||
| 
 | ||||
|  | ||||
| (test-begin "nar") | ||||
| 
 | ||||
|  | @ -201,6 +225,83 @@ | |||
|       (lambda () | ||||
|         (rmdir input))))) | ||||
| 
 | ||||
| ;; 'restore-file-set' depends on 'open-sha256-input-port', which in turn | ||||
| ;; relies on a Guile 2.0.10+ feature. | ||||
| (test-skip (if (false-if-exception | ||||
|                 (open-sha256-input-port (%make-void-port "r"))) | ||||
|                0 | ||||
|                3)) | ||||
| 
 | ||||
| (test-assert "restore-file-set (signed, valid)" | ||||
|   (with-store store | ||||
|     (let* ((texts (unfold (cut >= <> 10) | ||||
|                           (lambda _ (random-text)) | ||||
|                           1+ | ||||
|                           0)) | ||||
|            (files (map (cut add-text-to-store store "text" <>) texts)) | ||||
|            (dump  (call-with-bytevector-output-port | ||||
|                    (cut export-paths store files <>)))) | ||||
|       (delete-paths store files) | ||||
|       (and (every (negate file-exists?) files) | ||||
|            (let* ((source   (open-bytevector-input-port dump)) | ||||
|                   (imported (restore-file-set source))) | ||||
|              (and (equal? imported files) | ||||
|                   (every (lambda (file) | ||||
|                            (and (file-exists? file) | ||||
|                                 (valid-path? store file))) | ||||
|                          files) | ||||
|                   (equal? texts | ||||
|                           (map (lambda (file) | ||||
|                                  (call-with-input-file file | ||||
|                                    get-string-all)) | ||||
|                                files)))))))) | ||||
| 
 | ||||
| (test-assert "restore-file-set (missing signature)" | ||||
|   (let/ec return | ||||
|     (with-store store | ||||
|       (let* ((file  (add-text-to-store store "foo" "Hello, world!")) | ||||
|              (dump  (call-with-bytevector-output-port | ||||
|                      (cute export-paths store (list file) <> | ||||
|                            #:sign? #f)))) | ||||
|         (delete-paths store (list file)) | ||||
|         (and (not (file-exists? file)) | ||||
|              (let ((source (open-bytevector-input-port dump))) | ||||
|                (guard (c ((nar-signature-error? c) | ||||
|                           (let ((message (condition-message c)) | ||||
|                                 (port    (nar-error-port c))) | ||||
|                             (return | ||||
|                              (and (string-match "lacks.*signature" message) | ||||
|                                   (string=? file (nar-error-file c)) | ||||
|                                   (eq? source port)))))) | ||||
|                  (restore-file-set source)) | ||||
|                #f)))))) | ||||
| 
 | ||||
| (test-assert "restore-file-set (corrupt)" | ||||
|   (let/ec return | ||||
|     (with-store store | ||||
|       (let* ((file  (add-text-to-store store "foo" | ||||
|                                        (random-text))) | ||||
|              (dump  (call-with-bytevector-output-port | ||||
|                      (cute export-paths store (list file) <>)))) | ||||
|         (delete-paths store (list file)) | ||||
| 
 | ||||
|         ;; Flip a byte in the file contents. | ||||
|         (let* ((index 120) | ||||
|                (byte  (bytevector-u8-ref dump index))) | ||||
|           (bytevector-u8-set! dump index (logxor #xff byte))) | ||||
| 
 | ||||
|         (and (not (file-exists? file)) | ||||
|              (let ((source (open-bytevector-input-port dump))) | ||||
|                (guard (c ((nar-invalid-hash-error? c) | ||||
|                           (let ((message (condition-message c)) | ||||
|                                 (port    (nar-error-port c))) | ||||
|                             (return | ||||
|                              (and (string-contains message "hash") | ||||
|                                   (string=? file (nar-error-file c)) | ||||
|                                   (eq? source port)))))) | ||||
|                  (restore-file-set source)) | ||||
|                #f)))))) | ||||
| 
 | ||||
| (test-end "nar") | ||||
| 
 | ||||
|  | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -162,6 +162,38 @@ | |||
|          (equal? (valid-derivers %store o) | ||||
|                  (list (derivation-file-name d)))))) | ||||
| 
 | ||||
| (test-assert "topologically-sorted, one item" | ||||
|   (let* ((a (add-text-to-store %store "a" "a")) | ||||
|          (b (add-text-to-store %store "b" "b" (list a))) | ||||
|          (c (add-text-to-store %store "c" "c" (list b))) | ||||
|          (d (add-text-to-store %store "d" "d" (list c))) | ||||
|          (s (topologically-sorted %store (list d)))) | ||||
|     (equal? s (list a b c d)))) | ||||
| 
 | ||||
| (test-assert "topologically-sorted, several items" | ||||
|   (let* ((a  (add-text-to-store %store "a" "a")) | ||||
|          (b  (add-text-to-store %store "b" "b" (list a))) | ||||
|          (c  (add-text-to-store %store "c" "c" (list b))) | ||||
|          (d  (add-text-to-store %store "d" "d" (list c))) | ||||
|          (s1 (topologically-sorted %store (list d a c b))) | ||||
|          (s2 (topologically-sorted %store (list b d c a b d)))) | ||||
|     (equal? s1 s2 (list a b c d)))) | ||||
| 
 | ||||
| (test-assert "topologically-sorted, more difficult" | ||||
|   (let* ((a  (add-text-to-store %store "a" "a")) | ||||
|          (b  (add-text-to-store %store "b" "b" (list a))) | ||||
|          (c  (add-text-to-store %store "c" "c" (list b))) | ||||
|          (d  (add-text-to-store %store "d" "d" (list c))) | ||||
|          (w  (add-text-to-store %store "w" "w")) | ||||
|          (x  (add-text-to-store %store "x" "x" (list w))) | ||||
|          (y  (add-text-to-store %store "y" "y" (list x d))) | ||||
|          (s1 (topologically-sorted %store (list y))) | ||||
|          (s2 (topologically-sorted %store (list c y))) | ||||
|          (s3 (topologically-sorted %store (cons y (references %store y))))) | ||||
|     (and (equal? s1 (list w x a b c d y)) | ||||
|          (equal? s2 (list a b c w x d y)) | ||||
|          (lset= string=? s1 s3)))) | ||||
| 
 | ||||
| (test-assert "log-file, derivation" | ||||
|   (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '())) | ||||
|          (s (add-to-store %store "bash" #t "sha256" | ||||
|  | @ -389,6 +421,26 @@ Deriver: ~a~%" | |||
|              (pk 'corrupt-imported imported) | ||||
|              #f))))) | ||||
| 
 | ||||
| (test-assert "register-path" | ||||
|   (let ((file (string-append (%store-prefix) "/" (make-string 32 #\f) | ||||
|                              "-fake"))) | ||||
|     (when (valid-path? %store file) | ||||
|       (delete-paths %store (list file))) | ||||
|     (false-if-exception (delete-file file)) | ||||
| 
 | ||||
|     (let ((ref (add-text-to-store %store "ref-of-fake" (random-text))) | ||||
|           (drv (string-append file ".drv"))) | ||||
|       (call-with-output-file file | ||||
|         (cut display "This is a fake store item.\n" <>)) | ||||
|       (register-path file | ||||
|                      #:references (list ref) | ||||
|                      #:deriver drv) | ||||
| 
 | ||||
|       (and (valid-path? %store file) | ||||
|            (equal? (references %store file) (list ref)) | ||||
|            (null? (valid-derivers %store file)) | ||||
|            (null? (referrers %store file)))))) | ||||
| 
 | ||||
| (test-end "store") | ||||
| 
 | ||||
|  | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -139,6 +139,36 @@ | |||
|                    (append pids1 pids2))) | ||||
|            (equal? (get-bytevector-all decompressed) data))))) | ||||
| 
 | ||||
| (test-equal "fcntl-flock" | ||||
|   0                                               ; the child's exit status | ||||
|   (let ((file (open-input-file (search-path %load-path "guix.scm")))) | ||||
|     (fcntl-flock file 'read-lock) | ||||
|     (match (primitive-fork) | ||||
|       (0 | ||||
|        (dynamic-wind | ||||
|          (const #t) | ||||
|          (lambda () | ||||
|            ;; Taking a read lock should be OK. | ||||
|            (fcntl-flock file 'read-lock) | ||||
|            (fcntl-flock file 'unlock) | ||||
| 
 | ||||
|            (catch 'flock-error | ||||
|              (lambda () | ||||
|                ;; Taking an exclusive lock should raise an exception. | ||||
|                (fcntl-flock file 'write-lock)) | ||||
|              (lambda args | ||||
|                (primitive-exit 0))) | ||||
|            (primitive-exit 1)) | ||||
|          (lambda () | ||||
|            (primitive-exit 2)))) | ||||
|       (pid | ||||
|        (match (waitpid pid) | ||||
|          ((_  . status) | ||||
|           (let ((result (status:exit-val status))) | ||||
|             (fcntl-flock file 'unlock) | ||||
|             (close-port file) | ||||
|             result))))))) | ||||
| 
 | ||||
| ;; This is actually in (guix store). | ||||
| (test-equal "store-path-package-name" | ||||
|   "bash-4.2-p24" | ||||
|  |  | |||
		Reference in a new issue