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-entry 'scheme-indent-function 0)) | ||||||
|    (eval . (put 'manifest-pattern 'scheme-indent-function 0)) |    (eval . (put 'manifest-pattern 'scheme-indent-function 0)) | ||||||
|    (eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1)) |    (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-error-handling 'scheme-indent-function 0)) | ||||||
|    (eval . (put 'with-mutex 'scheme-indent-function 1)) |    (eval . (put 'with-mutex 'scheme-indent-function 1)) | ||||||
|    (eval . (put 'with-atomic-file-output '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 | GTAGS | ||||||
| /nix-setuid-helper | /nix-setuid-helper | ||||||
| /nix/scripts/guix-authenticate | /nix/scripts/guix-authenticate | ||||||
|  | /nix/scripts/offload | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								AUTHORS
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
										
									
									
									
								
							|  | @ -17,5 +17,6 @@ alphabetical order): | ||||||
|         Aljosha Papsch <misc@rpapsch.de> |         Aljosha Papsch <misc@rpapsch.de> | ||||||
|           Cyril Roelandt <tipecaml@gmail.com> |           Cyril Roelandt <tipecaml@gmail.com> | ||||||
|            Alex Sassmannshausen <alex.sassmannshausen@gmail.com> |            Alex Sassmannshausen <alex.sassmannshausen@gmail.com> | ||||||
|  |     Sree Harsha Totakura <sreeharsha@totakura.in> | ||||||
|           David Thompson <dthompson2@worcester.edu> |           David Thompson <dthompson2@worcester.edu> | ||||||
|         Mark H. Weaver <mhw@netris.org> |         Mark H. Weaver <mhw@netris.org> | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								Makefile.am
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								Makefile.am
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # GNU Guix --- Functional package management for GNU | # 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> | # Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| # | # | ||||||
| # This file is part of GNU Guix. | # This file is part of GNU Guix. | ||||||
|  | @ -80,6 +80,13 @@ MODULES =					\ | ||||||
|   guix.scm					\ |   guix.scm					\ | ||||||
|   $(GNU_SYSTEM_MODULES) |   $(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 | # Because of the autoload hack in (guix build download), we must build it | ||||||
| # first to avoid errors on systems where (gnutls) is unavailable. | # first to avoid errors on systems where (gnutls) is unavailable. | ||||||
| guix/scripts/download.go: guix/build/download.go | guix/scripts/download.go: guix/build/download.go | ||||||
|  | @ -185,6 +192,14 @@ EXTRA_DIST =					\ | ||||||
|   release.nix					\ |   release.nix					\ | ||||||
|   $(TESTS) |   $(TESTS) | ||||||
| 
 | 
 | ||||||
|  | if !BUILD_DAEMON_OFFLOAD | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST +=					\ | ||||||
|  |   guix/scripts/offload.scm | ||||||
|  | 
 | ||||||
|  | endif !BUILD_DAEMON_OFFLOAD | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| CLEANFILES =					\ | CLEANFILES =					\ | ||||||
|   $(GOBJECTS)					\ |   $(GOBJECTS)					\ | ||||||
|   $(SCM_TESTS:tests/%.scm=%.log) |   $(SCM_TESTS:tests/%.scm=%.log) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -29,6 +29,9 @@ | ||||||
|   ;; newer, even though they may not correspond. |   ;; newer, even though they may not correspond. | ||||||
|   (set! %fresh-auto-compile #t) |   (set! %fresh-auto-compile #t) | ||||||
| 
 | 
 | ||||||
|  |   ;; Display which files are loaded. | ||||||
|  |   (set! %load-verbosely #t) | ||||||
|  | 
 | ||||||
|   (and=> (assoc-ref (current-source-location) 'filename) |   (and=> (assoc-ref (current-source-location) 'filename) | ||||||
|          (lambda (file) |          (lambda (file) | ||||||
|            (let ((dir (string-append (dirname 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). |   dnl Check for <linux/fs.h> (for immutable file support). | ||||||
|   AC_CHECK_HEADERS([linux/fs.h]) |   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. |   dnl Temporary directory used to store the daemon's data. | ||||||
|   AC_MSG_CHECKING([for unit test root]) |   AC_MSG_CHECKING([for unit test root]) | ||||||
|   GUIX_TEST_ROOT="`pwd`/test-tmp" |   GUIX_TEST_ROOT="`pwd`/test-tmp" | ||||||
|  | @ -107,6 +118,11 @@ if test "x$guix_build_daemon" = "xyes"; then | ||||||
|     [chmod +x nix/scripts/substitute-binary]) |     [chmod +x nix/scripts/substitute-binary]) | ||||||
|   AC_CONFIG_FILES([nix/scripts/guix-authenticate], |   AC_CONFIG_FILES([nix/scripts/guix-authenticate], | ||||||
|     [chmod +x nix/scripts/guix-authenticate]) |     [chmod +x nix/scripts/guix-authenticate]) | ||||||
|  |   AC_CONFIG_FILES([nix/scripts/offload], | ||||||
|  |     [chmod +x nix/scripts/offload]) | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| AM_CONDITIONAL([BUILD_DAEMON], [test "x$guix_build_daemon" = "xyes"]) | 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 | # Prepare a version of $localstatedir & co. that does not contain references | ||||||
| # to shell variables. | # to shell variables. | ||||||
| guix_localstatedir="`eval echo $localstatedir | sed -e "s|NONE|/usr/local|g"`" | guix_prefix="`eval echo $prefix | sed -e"s|NONE|/usr/local|g"`" | ||||||
| guix_sysconfdir="`eval echo $sysconfdir | 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_localstatedir]) | ||||||
| AC_SUBST([guix_sysconfdir]) | AC_SUBST([guix_sysconfdir]) | ||||||
|  | AC_SUBST([guix_sbindir]) | ||||||
| 
 | 
 | ||||||
| dnl We require the pkg.m4 set of macros from pkg-config. | dnl We require the pkg.m4 set of macros from pkg-config. | ||||||
| dnl Make sure it's available. | dnl Make sure it's available. | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								daemon.am
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								daemon.am
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # GNU Guix --- Functional package management for GNU | # 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. | # This file is part of GNU Guix. | ||||||
| # | # | ||||||
|  | @ -56,6 +56,7 @@ libformat_a_CPPFLAGS =				\ | ||||||
| 
 | 
 | ||||||
| libutil_a_SOURCES =				\ | libutil_a_SOURCES =				\ | ||||||
|   nix/libutil/archive.cc			\ |   nix/libutil/archive.cc			\ | ||||||
|  |   nix/libutil/affinity.cc			\ | ||||||
|   nix/libutil/serialise.cc			\ |   nix/libutil/serialise.cc			\ | ||||||
|   nix/libutil/util.cc				\ |   nix/libutil/util.cc				\ | ||||||
|   nix/libutil/xml-writer.cc			\ |   nix/libutil/xml-writer.cc			\ | ||||||
|  | @ -63,6 +64,7 @@ libutil_a_SOURCES =				\ | ||||||
|   nix/libutil/gcrypt-hash.cc |   nix/libutil/gcrypt-hash.cc | ||||||
| 
 | 
 | ||||||
| libutil_headers =				\ | libutil_headers =				\ | ||||||
|  |   nix/libutil/affinity.hh			\ | ||||||
|   nix/libutil/hash.hh				\ |   nix/libutil/hash.hh				\ | ||||||
|   nix/libutil/serialise.hh			\ |   nix/libutil/serialise.hh			\ | ||||||
|   nix/libutil/xml-writer.hh			\ |   nix/libutil/xml-writer.hh			\ | ||||||
|  | @ -153,16 +155,6 @@ guix_register_LDADD =				\ | ||||||
|   $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) |   $(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 =						\ | noinst_HEADERS =						\ | ||||||
|   $(libformat_headers) $(libutil_headers) $(libstore_headers)	\ |   $(libformat_headers) $(libutil_headers) $(libstore_headers)	\ | ||||||
|   $(guix_daemon_headers) |   $(guix_daemon_headers) | ||||||
|  | @ -180,6 +172,14 @@ nodist_pkglibexec_SCRIPTS =			\ | ||||||
|   nix/scripts/list-runtime-roots		\ |   nix/scripts/list-runtime-roots		\ | ||||||
|   nix/scripts/substitute-binary |   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). | # XXX: It'd be better to hide it in $(pkglibexecdir). | ||||||
| nodist_libexec_SCRIPTS =			\ | nodist_libexec_SCRIPTS =			\ | ||||||
|   nix/scripts/guix-authenticate |   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 | @cindex daemon | ||||||
| Operations such as building a package or running the garbage collector | 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 | behalf of clients.  Only the daemon may access the store and its | ||||||
| associated database.  Thus, any operation that manipulates the store | associated database.  Thus, any operation that manipulates the store | ||||||
| goes through the daemon.  For instance, command-line tools such as | goes through the daemon.  For instance, command-line tools such as | ||||||
| @command{guix package} and @command{guix build} communicate with the | @command{guix package} and @command{guix build} communicate with the | ||||||
| daemon (@i{via} remote procedure calls) to instruct it what to do. | 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 | In a standard multi-user setup, Guix and its daemon---the | ||||||
| @command{guix-daemon} program---are installed by the system | @command{guix-daemon} program---are installed by the system | ||||||
| administrator; @file{/nix/store} is owned by @code{root} and | 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 | @noindent | ||||||
| This way, the daemon starts build processes in a chroot, under one of | 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 | the @code{guix-builder} users.  On GNU/Linux, by default, the chroot | ||||||
| environment contains nothing but the @code{/dev} and @code{/proc} | environment contains nothing but: | ||||||
| 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.}. |  | ||||||
| 
 | 
 | ||||||
| Finally, you may want to generate a key pair to allow the daemon to | @c Keep this list in sync with libstore/build.cc! ----------------------- | ||||||
| export signed archives of files from the store (@pxref{Invoking guix | @itemize | ||||||
| archive}): | @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 | @item | ||||||
| # guix archive --generate-key | @file{/etc/passwd} with an entry for the current user and an entry for | ||||||
| @end example | user @file{nobody}; | ||||||
| 
 | 
 | ||||||
| Guix may also be used in a single-user setup, with @command{guix-daemon} | @item | ||||||
| running as an unprivileged user.  However, to maximize non-interference | @file{/etc/group} with an entry for the user's group; | ||||||
| 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. |  | ||||||
| 
 | 
 | ||||||
| If you are installing Guix as an unprivileged user and do not have the | @item | ||||||
| ability to make @file{nix-setuid-helper} setuid-@code{root}, it is still | @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 | possible to run @command{guix-daemon}.  However, build processes will | ||||||
| not be isolated from one another, and not from the rest of the system. | 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 | Thus, build processes may interfere with each other, and may access | ||||||
| programs, libraries, and other files available on the system---making it | programs, libraries, and other files available on the system---making it | ||||||
| much harder to view them as @emph{pure} functions. | 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 | @node Invoking guix-daemon | ||||||
| @section Invoking @command{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} | explicitly enable substitution @i{via} the @code{set-build-options} | ||||||
| remote procedure call (@pxref{The Store}). | 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 | @item --cache-failures | ||||||
| Cache build failures.  By default, only successful builds are cached. | 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 | otherwise manipulate derivations.  The lowest-level primitive to create | ||||||
| a derivation is the @code{derivation} procedure: | 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 | Build a derivation with the given arguments, and return the resulting | ||||||
| @code{<derivation>} object. | @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 | 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 | path is exported in the build environment in the corresponding file, in | ||||||
| a simple text format. | 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 | @end deffn | ||||||
| 
 | 
 | ||||||
| @noindent | @noindent | ||||||
|  | @ -1368,7 +1503,7 @@ the caller to directly pass a Guile expression as the build script: | ||||||
|        [#:system (%current-system)] [#:inputs '()] @ |        [#:system (%current-system)] [#:inputs '()] @ | ||||||
|        [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @ |        [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @ | ||||||
|        [#:env-vars '()] [#:modules '()] @ |        [#: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 | Return a derivation that executes Scheme expression @var{exp} as a | ||||||
| builder for derivation @var{name}.  @var{inputs} must be a list of | 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, | @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 | @var{guile-for-build} is omitted or is @code{#f}, the value of the | ||||||
| @code{%guile-for-build} fluid is used instead. | @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 | @end deffn | ||||||
| 
 | 
 | ||||||
| @noindent | @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. | locally instead of allowing downloads of pre-built binaries. | ||||||
| 
 | 
 | ||||||
| @item --no-build-hook | @item --no-build-hook | ||||||
| Do not attempt to offload builds @i{via} the daemon's ``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 | (@pxref{Daemon Offload Setup}).  That is, always build things locally | ||||||
| remote machines. | instead of offloading builds to remote machines. | ||||||
| @c TODO: Add xref to build hook doc. |  | ||||||
| 
 | 
 | ||||||
| @item --max-silent-time=@var{seconds} | @item --max-silent-time=@var{seconds} | ||||||
| When the build or substitution process remains silent for more than | 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 | From a programming viewpoint, the package definitions of the | ||||||
| distribution are provided by Guile modules in the @code{(gnu packages | 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)} | Reference Manual}).  For instance, the @code{(gnu packages emacs)} | ||||||
| module exports a variable named @code{emacs}, which is bound to a | module exports a variable named @code{emacs}, which is bound to a | ||||||
| @code{<package>} object (@pxref{Defining Packages}).  The @code{(gnu | @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 system service)  ; for 'lsh-service' | ||||||
|              (gnu packages base)   ; Coreutils, grep, etc. |              (gnu packages base)   ; Coreutils, grep, etc. | ||||||
|              (gnu packages bash)   ; Bash |              (gnu packages bash)   ; Bash | ||||||
|              (gnu packages system) ; dmd, Inetutils |              (gnu packages admin)  ; dmd, Inetutils | ||||||
|              (gnu packages zile)   ; Zile |              (gnu packages zile)   ; Zile | ||||||
|              (gnu packages less)   ; less |              (gnu packages less)   ; less | ||||||
|              (gnu packages guile)  ; Guile |              (gnu packages guile)  ; Guile | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages.scm				\ |   gnu/packages.scm				\ | ||||||
|   gnu/packages/acct.scm				\ |   gnu/packages/acct.scm				\ | ||||||
|   gnu/packages/acl.scm				\ |   gnu/packages/acl.scm				\ | ||||||
|  |   gnu/packages/admin.scm			\ | ||||||
|   gnu/packages/algebra.scm			\ |   gnu/packages/algebra.scm			\ | ||||||
|   gnu/packages/apl.scm				\ |   gnu/packages/apl.scm				\ | ||||||
|   gnu/packages/apr.scm				\ |   gnu/packages/apr.scm				\ | ||||||
|  | @ -51,8 +52,11 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/cryptsetup.scm			\ |   gnu/packages/cryptsetup.scm			\ | ||||||
|   gnu/packages/curl.scm				\ |   gnu/packages/curl.scm				\ | ||||||
|   gnu/packages/cyrus-sasl.scm			\ |   gnu/packages/cyrus-sasl.scm			\ | ||||||
|  |   gnu/packages/dc.scm				\ | ||||||
|   gnu/packages/dejagnu.scm			\ |   gnu/packages/dejagnu.scm			\ | ||||||
|   gnu/packages/ddrescue.scm			\ |   gnu/packages/ddrescue.scm			\ | ||||||
|  |   gnu/packages/dictionaries.scm			\ | ||||||
|  |   gnu/packages/docbook.scm			\ | ||||||
|   gnu/packages/dwm.scm				\ |   gnu/packages/dwm.scm				\ | ||||||
|   gnu/packages/ed.scm				\ |   gnu/packages/ed.scm				\ | ||||||
|   gnu/packages/elf.scm				\ |   gnu/packages/elf.scm				\ | ||||||
|  | @ -60,6 +64,7 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/fdisk.scm			\ |   gnu/packages/fdisk.scm			\ | ||||||
|   gnu/packages/file.scm				\ |   gnu/packages/file.scm				\ | ||||||
|   gnu/packages/flex.scm				\ |   gnu/packages/flex.scm				\ | ||||||
|  |   gnu/packages/fltk.scm				\ | ||||||
|   gnu/packages/fonts.scm			\ |   gnu/packages/fonts.scm			\ | ||||||
|   gnu/packages/fontutils.scm			\ |   gnu/packages/fontutils.scm			\ | ||||||
|   gnu/packages/freeipmi.scm			\ |   gnu/packages/freeipmi.scm			\ | ||||||
|  | @ -138,13 +143,14 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/mtools.scm			\ |   gnu/packages/mtools.scm			\ | ||||||
|   gnu/packages/mysql.scm			\ |   gnu/packages/mysql.scm			\ | ||||||
|   gnu/packages/nano.scm				\ |   gnu/packages/nano.scm				\ | ||||||
|  |   gnu/packages/ncdu.scm				\ | ||||||
|   gnu/packages/ncurses.scm			\ |   gnu/packages/ncurses.scm			\ | ||||||
|   gnu/packages/netpbm.scm			\ |   gnu/packages/netpbm.scm			\ | ||||||
|   gnu/packages/nettle.scm			\ |   gnu/packages/nettle.scm			\ | ||||||
|   gnu/packages/noweb.scm			\ |   gnu/packages/noweb.scm			\ | ||||||
|   gnu/packages/ocaml.scm			\ |   gnu/packages/ocaml.scm			\ | ||||||
|   gnu/packages/ocrad.scm			\ |   gnu/packages/ocrad.scm			\ | ||||||
|   gnu/packages/oggvorbis.scm			\ |   gnu/packages/onc-rpc.scm			\ | ||||||
|   gnu/packages/openldap.scm			\ |   gnu/packages/openldap.scm			\ | ||||||
|   gnu/packages/openssl.scm			\ |   gnu/packages/openssl.scm			\ | ||||||
|   gnu/packages/package-management.scm		\ |   gnu/packages/package-management.scm		\ | ||||||
|  | @ -154,6 +160,7 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/pdf.scm				\ |   gnu/packages/pdf.scm				\ | ||||||
|   gnu/packages/pem.scm				\ |   gnu/packages/pem.scm				\ | ||||||
|   gnu/packages/perl.scm				\ |   gnu/packages/perl.scm				\ | ||||||
|  |   gnu/packages/photo.scm			\ | ||||||
|   gnu/packages/pkg-config.scm			\ |   gnu/packages/pkg-config.scm			\ | ||||||
|   gnu/packages/plotutils.scm			\ |   gnu/packages/plotutils.scm			\ | ||||||
|   gnu/packages/popt.scm				\ |   gnu/packages/popt.scm				\ | ||||||
|  | @ -180,7 +187,6 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/sqlite.scm			\ |   gnu/packages/sqlite.scm			\ | ||||||
|   gnu/packages/ssh.scm				\ |   gnu/packages/ssh.scm				\ | ||||||
|   gnu/packages/swig.scm				\ |   gnu/packages/swig.scm				\ | ||||||
|   gnu/packages/system.scm			\ |  | ||||||
|   gnu/packages/tcl.scm				\ |   gnu/packages/tcl.scm				\ | ||||||
|   gnu/packages/tcsh.scm				\ |   gnu/packages/tcsh.scm				\ | ||||||
|   gnu/packages/texinfo.scm			\ |   gnu/packages/texinfo.scm			\ | ||||||
|  | @ -188,6 +194,7 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/time.scm				\ |   gnu/packages/time.scm				\ | ||||||
|   gnu/packages/tmux.scm				\ |   gnu/packages/tmux.scm				\ | ||||||
|   gnu/packages/tor.scm				\ |   gnu/packages/tor.scm				\ | ||||||
|  |   gnu/packages/uucp.scm				\ | ||||||
|   gnu/packages/unrtf.scm			\ |   gnu/packages/unrtf.scm			\ | ||||||
|   gnu/packages/valgrind.scm			\ |   gnu/packages/valgrind.scm			\ | ||||||
|   gnu/packages/version-control.scm		\ |   gnu/packages/version-control.scm		\ | ||||||
|  | @ -200,6 +207,7 @@ GNU_SYSTEM_MODULES =				\ | ||||||
|   gnu/packages/wget.scm				\ |   gnu/packages/wget.scm				\ | ||||||
|   gnu/packages/which.scm			\ |   gnu/packages/which.scm			\ | ||||||
|   gnu/packages/wordnet.scm			\ |   gnu/packages/wordnet.scm			\ | ||||||
|  |   gnu/packages/xiph.scm				\ | ||||||
|   gnu/packages/xlockmore.scm			\ |   gnu/packages/xlockmore.scm			\ | ||||||
|   gnu/packages/xml.scm				\ |   gnu/packages/xml.scm				\ | ||||||
|   gnu/packages/xnee.scm				\ |   gnu/packages/xnee.scm				\ | ||||||
|  | @ -273,7 +281,6 @@ dist_patch_DATA =						\ | ||||||
|   gnu/packages/patches/perl-no-sys-dirs.patch			\ |   gnu/packages/patches/perl-no-sys-dirs.patch			\ | ||||||
|   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ |   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ | ||||||
|   gnu/packages/patches/procps-make-3.82.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-test-timeouts.patch		\ | ||||||
|   gnu/packages/patches/pulseaudio-volume-test.patch		\ |   gnu/packages/patches/pulseaudio-volume-test.patch		\ | ||||||
|   gnu/packages/patches/python-fix-dbm.patch			\ |   gnu/packages/patches/python-fix-dbm.patch			\ | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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> | ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -17,7 +17,7 @@ | ||||||
| ;;; You should have received a copy of the GNU General Public License | ;;; You should have received a copy of the GNU General Public License | ||||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ;;; 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 licenses) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|   #:use-module (guix download) |   #:use-module (guix download) | ||||||
|  | @ -25,10 +25,13 @@ | ||||||
|   #:use-module (guix build-system gnu) |   #:use-module (guix build-system gnu) | ||||||
|   #:use-module (guix build-system trivial) |   #:use-module (guix build-system trivial) | ||||||
|   #:use-module (gnu packages) |   #:use-module (gnu packages) | ||||||
|  |   #:use-module (gnu packages base) | ||||||
|   #:use-module (gnu packages ncurses) |   #:use-module (gnu packages ncurses) | ||||||
|  |   #:use-module (gnu packages readline) | ||||||
|   #:use-module (gnu packages linux) |   #:use-module (gnu packages linux) | ||||||
|   #:use-module (gnu packages guile) |   #:use-module (gnu packages guile) | ||||||
|   #:use-module (gnu packages gettext) |   #:use-module (gnu packages gettext) | ||||||
|  |   #:use-module (gnu packages perl) | ||||||
|   #:use-module ((gnu packages base) |   #:use-module ((gnu packages base) | ||||||
|                 #:select (tar)) |                 #:select (tar)) | ||||||
|   #:use-module ((gnu packages compression) |   #:use-module ((gnu packages compression) | ||||||
|  | @ -130,21 +133,20 @@ re-executing them as necessary.") | ||||||
| (define-public inetutils | (define-public inetutils | ||||||
|   (package |   (package | ||||||
|     (name "inetutils") |     (name "inetutils") | ||||||
|     (version "1.9.1") |     (version "1.9.2") | ||||||
|     (source (origin |     (source (origin | ||||||
|              (method url-fetch) |              (method url-fetch) | ||||||
|              (uri (string-append "mirror://gnu/inetutils/inetutils-" |              (uri (string-append "mirror://gnu/inetutils/inetutils-" | ||||||
|                                  version ".tar.gz")) |                                  version ".tar.gz")) | ||||||
|              (sha256 |              (sha256 | ||||||
|               (base32 |               (base32 | ||||||
|                "0azzg6njgq79byl6960kb0wihfhhzf49snslhxgvi30ribgfpa82")) |                "04wrm0v7l4890mmbaawd6wjwdv08bkglgqhpz0q4dkb0l50fl8q4")))) | ||||||
|              (patches |  | ||||||
|               (list (search-patch "diffutils-gets-undeclared.patch"))))) |  | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (arguments `(;; FIXME: `tftp.sh' relies on `netstat' from utils-linux, |     (arguments `(;; FIXME: `tftp.sh' relies on `netstat' from utils-linux, | ||||||
|                  ;; which is currently missing. |                  ;; which is currently missing. | ||||||
|                  #:tests? #f)) |                  #:tests? #f)) | ||||||
|     (inputs `(("ncurses" ,ncurses))) |     (inputs `(("ncurses" ,ncurses) | ||||||
|  |               ("readline" ,readline)))            ; for 'ftp' | ||||||
|     (home-page "http://www.gnu.org/software/inetutils/") |     (home-page "http://www.gnu.org/software/inetutils/") | ||||||
|     (synopsis "Basic networking utilities") |     (synopsis "Basic networking utilities") | ||||||
|     (description |     (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 |      "GNU Alive sends periodic pings to a server, generally to keep a | ||||||
| connection alive.") | connection alive.") | ||||||
|     (license gpl3+))) |     (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 | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -21,7 +21,8 @@ | ||||||
|   #:use-module (guix download) |   #:use-module (guix download) | ||||||
|   #:use-module (guix build-system gnu) |   #:use-module (guix build-system gnu) | ||||||
|   #:use-module (guix licenses) |   #:use-module (guix licenses) | ||||||
|   #:use-module (gnu packages perl)) |   #:use-module (gnu packages perl) | ||||||
|  |   #:use-module (gnu packages which)) | ||||||
| 
 | 
 | ||||||
| (define-public aspell | (define-public aspell | ||||||
|   (package |   (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 | documents written in the UTF-8 encoding and its ability to use multiple | ||||||
| dictionaries, including personal ones.") | dictionaries, including personal ones.") | ||||||
|     (license lgpl2.1+))) |     (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 | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -20,7 +20,8 @@ | ||||||
|   #:use-module (guix licenses) |   #:use-module (guix licenses) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|   #:use-module (guix download) |   #: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 | (define-public libgc | ||||||
|   (package |   (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.") | C or C++ programs, though that is not its primary goal.") | ||||||
|    (home-page "http://www.hpl.hp.com/personal/Hans_Boehm/gc/") |    (home-page "http://www.hpl.hp.com/personal/Hans_Boehm/gc/") | ||||||
| 
 | 
 | ||||||
|    ;; permissive X11-style license: |    (license | ||||||
|    ;; http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt |     (x11-style "http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt")))) | ||||||
|    (license x11))) | 
 | ||||||
|  | (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) |     (native-inputs `(("gettext" ,gnu-gettext) | ||||||
|                      ("pkg-config" ,pkg-config))) |                      ("pkg-config" ,pkg-config))) | ||||||
|     (home-page "https://www.gnu.org/software/gnubik/") |     (home-page "https://www.gnu.org/software/gnubik/") | ||||||
|     (synopsis "3d Rubik's cube game.") |     (synopsis "3d Rubik's cube game") | ||||||
|     (description "GNUbik is a puzzle game in which you must manipulate a cube to make |     (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 | 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 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.") | scriptable with Guile.") | ||||||
|     (license gpl3+))) |     (license gpl3+))) | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; GNU Guix --- Functional package management for GNU | ||||||
|  | ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; Copyright © 2013 Guy Grant <gzg@riseup.net> | ;;; Copyright © 2013 Guy Grant <gzg@riseup.net> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -138,12 +139,12 @@ Polygon meshes, and Extruded polygon meshes") | ||||||
|     (propagated-inputs |     (propagated-inputs | ||||||
|       `(("glproto" ,glproto) |       `(("glproto" ,glproto) | ||||||
|         ("libdrm" ,libdrm-2.4.33) |         ("libdrm" ,libdrm-2.4.33) | ||||||
|  |         ("libx11" ,libx11) | ||||||
|         ("libxdamage" ,libxdamage) |         ("libxdamage" ,libxdamage) | ||||||
|         ("libxxf86vm" ,libxxf86vm))) |         ("libxxf86vm" ,libxxf86vm))) | ||||||
|     (inputs |     (inputs | ||||||
|       `(("dri2proto" ,dri2proto) |       `(("dri2proto" ,dri2proto) | ||||||
|         ("expat" ,expat) |         ("expat" ,expat) | ||||||
|         ("libx11" ,libx11) |  | ||||||
|         ("libxfixes" ,libxfixes) |         ("libxfixes" ,libxfixes) | ||||||
|         ("libxml2" ,libxml2) |         ("libxml2" ,libxml2) | ||||||
|         ("makedepend" ,makedepend))) |         ("makedepend" ,makedepend))) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; | ;;; | ||||||
|  | @ -106,14 +106,14 @@ shared NFS home directories.") | ||||||
| (define glib | (define glib | ||||||
|   (package |   (package | ||||||
|    (name "glib") |    (name "glib") | ||||||
|    (version "2.38.0") |    (version "2.39.1") | ||||||
|    (source (origin |    (source (origin | ||||||
|             (method url-fetch) |             (method url-fetch) | ||||||
|             (uri (string-append "mirror://gnome/sources/" |             (uri (string-append "mirror://gnome/sources/" | ||||||
|                                 name "/" (string-take version 4) "/" |                                 name "/" (string-take version 4) "/" | ||||||
|                                 name "-" version ".tar.xz")) |                                 name "-" version ".tar.xz")) | ||||||
|             (sha256 |             (sha256 | ||||||
|              (base32 "0cpzqadqk6z6bmb79p04pykxc8x57rvshh33414cnk41bvgaf4vm")) |              (base32 "0lqi6z47068vgh91fm59jn0kq969wf3g2q8k4m33jsb0amprg36h")) | ||||||
|             (patches (list (search-patch "glib-tests-homedir.patch") |             (patches (list (search-patch "glib-tests-homedir.patch") | ||||||
|                            (search-patch "glib-tests-desktop.patch") |                            (search-patch "glib-tests-desktop.patch") | ||||||
|                            (search-patch "glib-tests-prlimit.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. |       ;; Note: `--docdir' and `--htmldir' are not honored, so work around it. | ||||||
|       #:configure-flags (list (string-append "--with-html-dir=" |       #:configure-flags (list (string-append "--with-html-dir=" | ||||||
|                                              (assoc-ref %outputs "doc") |                                              (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") |    (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME") | ||||||
|    (description |    (description | ||||||
|     "GLib provides data structure handling for C, portability wrappers, |     "GLib provides data structure handling for C, portability wrappers, | ||||||
|  |  | ||||||
|  | @ -28,10 +28,10 @@ | ||||||
|   #:use-module (gnu packages gstreamer) |   #:use-module (gnu packages gstreamer) | ||||||
|   #:use-module (gnu packages libjpeg) |   #:use-module (gnu packages libjpeg) | ||||||
|   #:use-module (gnu packages libtiff) |   #:use-module (gnu packages libtiff) | ||||||
|   #:use-module (gnu packages oggvorbis) |  | ||||||
|   #:use-module (gnu packages openssl) |   #:use-module (gnu packages openssl) | ||||||
|   #:use-module (gnu packages pkg-config) |   #:use-module (gnu packages pkg-config) | ||||||
|   #:use-module (gnu packages video) |   #:use-module (gnu packages video) | ||||||
|  |   #:use-module (gnu packages xiph) | ||||||
|   #:use-module ((guix licenses) |   #:use-module ((guix licenses) | ||||||
|                 #:renamer (symbol-prefix-proc 'license:)) |                 #:renamer (symbol-prefix-proc 'license:)) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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> | ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -27,6 +27,10 @@ | ||||||
|   #:use-module (gnu packages readline) |   #:use-module (gnu packages readline) | ||||||
|   #:use-module ((gnu packages compression) |   #:use-module ((gnu packages compression) | ||||||
|                 #:renamer (symbol-prefix-proc 'guix:)) |                 #: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 packages) | ||||||
|   #:use-module (guix download) |   #:use-module (guix download) | ||||||
|   #:use-module (guix build-system gnu)) |   #: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 |    ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright | ||||||
|    (license gpl2) |    (license gpl2) | ||||||
|    (home-page "http://pgp-tools.alioth.debian.org/"))) |    (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 | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -35,7 +35,9 @@ | ||||||
|   #:use-module (gnu packages which) |   #:use-module (gnu packages which) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|   #:use-module (guix download) |   #: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: | ;;; 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 |       ;; The headers and/or `guile-2.0.pc' refer to these packages, so they | ||||||
|       ;; must be propagated. |       ;; must be propagated. | ||||||
|       ("bdw-gc" ,libgc) |       ("bdw-gc" ,libgc-7.4) | ||||||
|       ("gmp" ,gmp))) |       ("gmp" ,gmp))) | ||||||
| 
 | 
 | ||||||
|    (self-native-input? #t) |    (self-native-input? #t) | ||||||
|  | @ -173,7 +175,15 @@ without requiring the source code to be rewritten.") | ||||||
| (define-public guile-2.0/fixed | (define-public guile-2.0/fixed | ||||||
|   ;; A package of Guile 2.0 that's rarely changed.  It is the one used |   ;; 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. |   ;; 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 gstreamer) | ||||||
|   #:use-module (gnu packages gtk) |   #:use-module (gnu packages gtk) | ||||||
|   #:use-module (gnu packages linux) |   #: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 | (define-public libcanberra | ||||||
|   (package |   (package | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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> | ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; 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 for cases where the operating system has not enabled these | ||||||
| settings.") | settings.") | ||||||
|     (license gpl2))) |     (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 | (define-public pspp | ||||||
|   (package |   (package | ||||||
|     (name "pspp") |     (name "pspp") | ||||||
|     (version "0.8.1") |     (version "0.8.2") | ||||||
|     (source |     (source | ||||||
|      (origin |      (origin | ||||||
|       (method url-fetch) |       (method url-fetch) | ||||||
|  | @ -133,8 +133,7 @@ LP/MIP solver is included in the package.") | ||||||
|                           version ".tar.gz")) |                           version ".tar.gz")) | ||||||
|       (sha256 |       (sha256 | ||||||
|        (base32 |        (base32 | ||||||
|         "0qhxsdbwxd3cn1shc13wxvx2lg32lp4z6sz24kv3jz7p5xfi8j7x")) |         "1w7h3dglgx0jlq1wb605b8pgfsk2vr1q2q2rj7bsajh9ihbcsixr")))) | ||||||
|       (patches (list (search-patch "pspp-tests.patch"))))) |  | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (inputs |     (inputs | ||||||
|      `(("cairo" ,cairo) |      `(("cairo" ,cairo) | ||||||
|  |  | ||||||
|  | @ -23,12 +23,13 @@ | ||||||
|   #:use-module (gnu packages autotools) |   #:use-module (gnu packages autotools) | ||||||
|   #:use-module (gnu packages cdrom) |   #:use-module (gnu packages cdrom) | ||||||
|   #:use-module (gnu packages compression) |   #:use-module (gnu packages compression) | ||||||
|  |   #:use-module (gnu packages gettext) | ||||||
|   #:use-module (gnu packages ghostscript) |   #:use-module (gnu packages ghostscript) | ||||||
|   #:use-module (gnu packages glib) |   #:use-module (gnu packages glib) | ||||||
|   #:use-module (gnu packages gtk) |   #:use-module (gnu packages gtk) | ||||||
|   #:use-module (gnu packages oggvorbis) |  | ||||||
|   #:use-module (gnu packages pcre) |   #:use-module (gnu packages pcre) | ||||||
|   #:use-module (gnu packages pkg-config) |   #:use-module (gnu packages pkg-config) | ||||||
|  |   #:use-module (gnu packages xiph) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|   #:use-module (guix download) |   #:use-module (guix download) | ||||||
|   #:use-module (guix build-system gnu)) |   #: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.") | for album and track information.") | ||||||
|    (license license:gpl2) |    (license license:gpl2) | ||||||
|    (home-page "http://sourceforge.net/projects/ripperx/"))) |    (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 (); |    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
 | --- glib-2.39.1/gio/tests/desktop-app-info.c	2013-06-07 23:46:28.000000000 +0200
 | ||||||
| @@ -385,6 +385,7 @@ main (int   argc,
 | +++ 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); |    g_setenv ("XDG_DATA_HOME", basedir, TRUE); | ||||||
|    cleanup_subdirs (basedir); |    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', | The hunk below removes tests that depend on `gdbus-testserver.py', | ||||||
| because that script depends on python-gobject. | 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.39.1/gio/tests/Makefile.in	2014-01-20 00:18:16.000000000 +0100
 | ||||||
| +++ glib-2.38.0/gio/tests/Makefile.in	2013-09-30 21:55:35.000000000 +0200
 | +++ glib-2.39.1/gio/tests/Makefile.in	2014-01-20 00:18:47.000000000 +0100
 | ||||||
| @@ -172,19 +172,12 @@
 | @@ -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-auth				\ | ||||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-bz627724				\ |  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-bz627724				\ | ||||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-close-pending			\ |  @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-threads			\ | ||||||
| -@HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gdbus-proxy-well-known-name		\
 | -@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			\ | ||||||
|  |  @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@	gdbus-threading				\
 | ||||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gmenumodel				\ |  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	gmenumodel				\ | ||||||
|  @HAVE_DBUS_DAEMON_TRUE@@OS_UNIX_TRUE@	$(NULL) |  @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 (); |    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:)) |                 #:renamer (symbol-prefix-proc 'l:)) | ||||||
|   #:use-module (guix build-system gnu) |   #:use-module (guix build-system gnu) | ||||||
|   #:use-module (gnu packages) |   #:use-module (gnu packages) | ||||||
|   #:use-module (gnu packages linux) |   #:use-module (gnu packages algebra) | ||||||
|   #:use-module (gnu packages oggvorbis) |   #:use-module ((gnu packages autotools) #:select (libtool)) | ||||||
|   #:use-module (gnu packages pkg-config) |  | ||||||
|   #:use-module (gnu packages avahi) |   #:use-module (gnu packages avahi) | ||||||
|  |   #:use-module (gnu packages check) | ||||||
|  |   #:use-module (gnu packages gdbm) | ||||||
|   #:use-module (gnu packages glib) |   #:use-module (gnu packages glib) | ||||||
|   #:use-module (gnu packages gtk) |   #:use-module (gnu packages gtk) | ||||||
|   #:use-module (gnu packages libcanberra) |   #:use-module (gnu packages libcanberra) | ||||||
|   #:use-module (gnu packages algebra) |   #:use-module (gnu packages linux) | ||||||
|   #:use-module ((gnu packages autotools) #:select (libtool)) |  | ||||||
|   #:use-module (gnu packages gdbm) |  | ||||||
|   #:use-module (gnu packages m4) |   #:use-module (gnu packages m4) | ||||||
|   #:use-module (gnu packages check) |   #:use-module (gnu packages pkg-config) | ||||||
|  |   #:use-module (gnu packages xiph) | ||||||
|   #:export (libsndfile |   #:export (libsndfile | ||||||
|             libsamplerate |             libsamplerate | ||||||
|             json-c |             json-c | ||||||
|  |  | ||||||
|  | @ -28,10 +28,10 @@ | ||||||
|   #:use-module (gnu packages libtiff) |   #:use-module (gnu packages libtiff) | ||||||
|   #:use-module (gnu packages linux) |   #:use-module (gnu packages linux) | ||||||
|   #:use-module (gnu packages mp3) |   #:use-module (gnu packages mp3) | ||||||
|   #:use-module (gnu packages oggvorbis) |  | ||||||
|   #:use-module (gnu packages pkg-config) |   #:use-module (gnu packages pkg-config) | ||||||
|   #:use-module (gnu packages pulseaudio) |   #:use-module (gnu packages pulseaudio) | ||||||
|   #:use-module (gnu packages gl) |   #:use-module (gnu packages gl) | ||||||
|  |   #:use-module (gnu packages xiph) | ||||||
|   #:use-module (gnu packages xorg) |   #:use-module (gnu packages xorg) | ||||||
|   #:export (sdl |   #:export (sdl | ||||||
|             sdl2 |             sdl2 | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ | ||||||
| (define-public sqlite | (define-public sqlite | ||||||
|   (package |   (package | ||||||
|    (name "sqlite") |    (name "sqlite") | ||||||
|    (version "3.7.15.2") |    (version "3.8.2") | ||||||
|    (source (origin |    (source (origin | ||||||
|             (method url-fetch) |             (method url-fetch) | ||||||
|             ;; TODO: Download from sqlite.org once this bug : |             ;; TODO: Download from sqlite.org once this bug : | ||||||
|  | @ -34,10 +34,10 @@ | ||||||
|             ;; has been fixed. |             ;; has been fixed. | ||||||
|             (uri (string-append |             (uri (string-append | ||||||
|                   "mirror://sourceforge/sqlite.mirror/SQLite%20" |                   "mirror://sourceforge/sqlite.mirror/SQLite%20" | ||||||
|                   version "/sqlite-autoconf-3071502.tar.gz")) |                   version "/sqlite-autoconf-3080200.tar.gz")) | ||||||
|             (sha256 |             (sha256 | ||||||
|              (base32 |              (base32 | ||||||
|               "135s6r5z12q56brywpxnraqbqm7bdkxs76v7dygqgjpnjyvicbbq")))) |               "14pg9zlwbwsj5w7f3qr25d3nniyv82gmczwlvpj0i0ic1431v1d0")))) | ||||||
|    (build-system gnu-build-system) |    (build-system gnu-build-system) | ||||||
|    (home-page "http://www.sqlite.org/") |    (home-page "http://www.sqlite.org/") | ||||||
|    (synopsis "The SQLite database management system") |    (synopsis "The SQLite database management system") | ||||||
|  |  | ||||||
|  | @ -199,12 +199,6 @@ Additionally, various channel-specific options can be negotiated.") | ||||||
|      '(#:phases (alist-cons-before |      '(#:phases (alist-cons-before | ||||||
|                  'configure 'autoreconf |                  'configure 'autoreconf | ||||||
|                  (lambda* (#:key inputs #:allow-other-keys) |                  (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" |                    (substitute* "src/Makefile.am" | ||||||
|                      (("-lssh_threads" match) |                      (("-lssh_threads" match) | ||||||
|                       (string-append "-L" (assoc-ref inputs "libssh") |                       (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.") | libssh library.") | ||||||
|     (home-page "https://github.com/artyom-poptsov/libguile-ssh") |     (home-page "https://github.com/artyom-poptsov/libguile-ssh") | ||||||
|     (license license:gpl3+))) |     (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 | (define-public valgrind | ||||||
|   (package |   (package | ||||||
|     (name "valgrind") |     (name "valgrind") | ||||||
|     (version "3.8.1") |     (version "3.9.0") | ||||||
|     (source (origin |     (source (origin | ||||||
|              (method url-fetch) |              (method url-fetch) | ||||||
|              (uri (string-append "http://valgrind.org/downloads/valgrind-" |              (uri (string-append "http://valgrind.org/downloads/valgrind-" | ||||||
|                                  version ".tar.bz2")) |                                  version ".tar.bz2")) | ||||||
|              (sha256 |              (sha256 | ||||||
|               (base32 |               (base32 | ||||||
|                "1nsqk70ry3221sd62s4f0njcrncppszs4xxjcak13lxyfq2y0fs7")) |                "1w6n5qvxy2ssbczcl1c2yd2ggjn3ipay2hvpn10laly2dfh73bz6")) | ||||||
|              (patches (list (search-patch "valgrind-glibc.patch"))))) |              (patches (list (search-patch "valgrind-glibc.patch"))))) | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (arguments |     (arguments | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; GNU Guix --- Functional package management for GNU | ||||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ;;; 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> | ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
|   #:use-module (gnu packages perl) |   #:use-module (gnu packages perl) | ||||||
|   #:use-module (gnu packages python) |   #:use-module (gnu packages python) | ||||||
|   #:use-module (gnu packages sqlite) |   #:use-module (gnu packages sqlite) | ||||||
|   #:use-module (gnu packages system) |   #:use-module (gnu packages admin) | ||||||
|   #:use-module (gnu packages xml) |   #:use-module (gnu packages xml) | ||||||
|   #:use-module (gnu packages emacs) |   #:use-module (gnu packages emacs) | ||||||
|   #:use-module (gnu packages compression) |   #:use-module (gnu packages compression) | ||||||
|  | @ -83,10 +83,12 @@ as well as the classic centralized workflow.") | ||||||
|              (base32 |              (base32 | ||||||
|               "156bwqqgaw65rsvbb4wih5jfg94bxyf6p16mdwf0ky3f4ln55s2i")))) |               "156bwqqgaw65rsvbb4wih5jfg94bxyf6p16mdwf0ky3f4ln55s2i")))) | ||||||
|    (build-system gnu-build-system) |    (build-system gnu-build-system) | ||||||
|  |    (native-inputs | ||||||
|  |     `(("native-perl" ,perl) | ||||||
|  |       ("gettext" ,gnu-gettext))) | ||||||
|    (inputs |    (inputs | ||||||
|     `(("curl" ,curl) |     `(("curl" ,curl) | ||||||
|       ("expat" ,expat) |       ("expat" ,expat) | ||||||
|       ("gettext" ,gnu-gettext) |  | ||||||
|       ("openssl" ,openssl) |       ("openssl" ,openssl) | ||||||
|       ("perl" ,perl) |       ("perl" ,perl) | ||||||
|       ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL |       ("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 out "/libexec/git-core/git-citool")) | ||||||
|                   (git-cit* (string-append gui "/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 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 "/bin")) | ||||||
|              (mkdir-p (string-append gui "/libexec/git-core")) |              (mkdir-p (string-append gui "/libexec/git-core")) | ||||||
|              (mkdir-p (string-append svn "/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") |                              (,(string-append (assoc-ref inputs "subversion") | ||||||
|                                               "/lib")))) |                                               "/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. |              ;; Tell 'git' to look for core programs in the user's profile. | ||||||
|              ;; This allows user to install other outputs of this package and |              ;; This allows user to install other outputs of this package and | ||||||
|              ;; have them transparently taken into account.  There's a |              ;; have them transparently taken into account.  There's a | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -25,28 +25,29 @@ | ||||||
|   #:use-module (gnu packages compression) |   #:use-module (gnu packages compression) | ||||||
|   #:use-module (gnu packages elf) |   #:use-module (gnu packages elf) | ||||||
|   #:use-module (gnu packages fontutils) |   #:use-module (gnu packages fontutils) | ||||||
|   #:use-module (gnu packages oggvorbis) |  | ||||||
|   #:use-module (gnu packages openssl) |   #:use-module (gnu packages openssl) | ||||||
|   #:use-module (gnu packages perl) |   #:use-module (gnu packages perl) | ||||||
|   #:use-module (gnu packages pkg-config) |   #:use-module (gnu packages pkg-config) | ||||||
|   #:use-module (gnu packages python) |   #:use-module (gnu packages python) | ||||||
|  |   #:use-module (gnu packages xiph) | ||||||
|   #:use-module (gnu packages yasm)) |   #:use-module (gnu packages yasm)) | ||||||
| 
 | 
 | ||||||
| (define-public ffmpeg | (define-public ffmpeg | ||||||
|   (package |   (package | ||||||
|     (name "ffmpeg") |     (name "ffmpeg") | ||||||
|     (version "2.1.1") |     (version "2.1.3") | ||||||
|     (source (origin |     (source (origin | ||||||
|              (method url-fetch) |              (method url-fetch) | ||||||
|              (uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-" |              (uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-" | ||||||
|                                  version ".tar.bz2")) |                                  version ".tar.bz2")) | ||||||
|              (sha256 |              (sha256 | ||||||
|               (base32 |               (base32 | ||||||
|                "1qnspbpwa6cflsb6mkm84ay4nfx60ism6d7lgvnasidck9dmxydy")))) |                "18qkdpka94rp44x17q7d2bvmw26spxf41c69nvzy31szsdzjwcqx")))) | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (inputs |     (inputs | ||||||
|      `(("fontconfig" ,fontconfig) |      `(("fontconfig" ,fontconfig) | ||||||
|        ("freetype" ,freetype) |        ("freetype" ,freetype) | ||||||
|  |        ("opus" ,opus) | ||||||
|        ("libtheora" ,libtheora) |        ("libtheora" ,libtheora) | ||||||
|        ("libvorbis" ,libvorbis) |        ("libvorbis" ,libvorbis) | ||||||
|        ("patchelf" ,patchelf) |        ("patchelf" ,patchelf) | ||||||
|  | @ -107,7 +108,6 @@ | ||||||
| ;;   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] | ;;   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] | ||||||
| ;;   --enable-libopencv       enable video filtering via libopencv [no] | ;;   --enable-libopencv       enable video filtering via libopencv [no] | ||||||
| ;;   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [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-libpulse        enable Pulseaudio input via libpulse [no] | ||||||
| ;;   --enable-libquvi         enable quvi input via libquvi [no] | ;;   --enable-libquvi         enable quvi input via libquvi [no] | ||||||
| ;;   --enable-librtmp         enable RTMP[E] support via librtmp [no] | ;;   --enable-librtmp         enable RTMP[E] support via librtmp [no] | ||||||
|  | @ -142,6 +142,7 @@ | ||||||
|                       "--enable-fontconfig" |                       "--enable-fontconfig" | ||||||
|                       ;; "--enable-gnutls" ; causes test failures |                       ;; "--enable-gnutls" ; causes test failures | ||||||
|                       "--enable-libfreetype" |                       "--enable-libfreetype" | ||||||
|  |                       "--enable-libopus" | ||||||
|                       "--enable-libspeex" |                       "--enable-libspeex" | ||||||
|                       "--enable-libtheora" |                       "--enable-libtheora" | ||||||
|                       "--enable-libvorbis" |                       "--enable-libvorbis" | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
|   #:use-module (gnu packages gawk) |   #:use-module (gnu packages gawk) | ||||||
|   #:use-module (gnu packages ncurses) |   #:use-module (gnu packages ncurses) | ||||||
|   #:use-module (gnu packages perl) |   #: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)) |   #:use-module (gnu packages tcsh)) | ||||||
| 
 | 
 | ||||||
| (define-public vim | (define-public vim | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; GNU Guix --- Functional package management for GNU | ||||||
| ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
|  | ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -18,7 +19,6 @@ | ||||||
| 
 | 
 | ||||||
| (define-module (gnu packages wget) | (define-module (gnu packages wget) | ||||||
|   #:use-module (guix licenses) |   #:use-module (guix licenses) | ||||||
|   #:use-module (gnu packages gettext) |  | ||||||
|   #:use-module (gnu packages gnutls) |   #:use-module (gnu packages gnutls) | ||||||
|   #:use-module (gnu packages perl) |   #:use-module (gnu packages perl) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|  | @ -28,7 +28,7 @@ | ||||||
| (define-public wget | (define-public wget | ||||||
|   (package |   (package | ||||||
|     (name "wget") |     (name "wget") | ||||||
|     (version "1.14") |     (version "1.15") | ||||||
|     (source |     (source | ||||||
|      (origin |      (origin | ||||||
|       (method url-fetch) |       (method url-fetch) | ||||||
|  | @ -36,12 +36,12 @@ | ||||||
|                           version ".tar.xz")) |                           version ".tar.xz")) | ||||||
|       (sha256 |       (sha256 | ||||||
|        (base32 |        (base32 | ||||||
|         "0yqllj3nv9p3vqbdm6j4nvpjcwf1y19rq8sd966nrbd2qvvxfq8p")))) |         "1yw0sk4mrs7bvga3c79rkbhxivmw8cs3b5wq3cglp1f9ai1mz2ni")))) | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (inputs |     (inputs | ||||||
|      `(("gnutls" ,gnutls) |      `(("gnutls" ,gnutls))) | ||||||
|        ("perl" ,perl) |     (native-inputs | ||||||
|        ("gettext" ,gnu-gettext))) |      `(("perl" ,perl))) | ||||||
|     (home-page "http://www.gnu.org/software/wget/") |     (home-page "http://www.gnu.org/software/wget/") | ||||||
|     (synopsis "Non-interactive command-line utility for downloading files") |     (synopsis "Non-interactive command-line utility for downloading files") | ||||||
|     (description |     (description | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu> | ;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu> | ||||||
|  | ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -18,7 +19,7 @@ | ||||||
| ;;; You should have received a copy of the GNU General Public License | ;;; You should have received a copy of the GNU General Public License | ||||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ;;; 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) | ||||||
|   #:use-module (gnu packages bison) |   #:use-module (gnu packages bison) | ||||||
|   #:use-module (gnu packages compression) |   #:use-module (gnu packages compression) | ||||||
|  | @ -40,7 +41,8 @@ | ||||||
|             ao |             ao | ||||||
|             flac |             flac | ||||||
|             libkate |             libkate | ||||||
|             vorbis-tools)) |             vorbis-tools | ||||||
|  |             opus)) | ||||||
| 
 | 
 | ||||||
| (define libogg | (define libogg | ||||||
|   (package |   (package | ||||||
|  | @ -155,7 +157,7 @@ stereo encoding, and voice activity detection.") | ||||||
|     ;; FIXME: Add further backends, see the summary printed after configure. |     ;; FIXME: Add further backends, see the summary printed after configure. | ||||||
|     ;; XXX: Should back-ends be pushed to different outputs?  For instance, |     ;; XXX: Should back-ends be pushed to different outputs?  For instance, | ||||||
|     ;; "out" would include only the ALSA back-end, while "pulse" would |     ;; "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) |     (inputs `(("pkg-config" ,pkg-config) | ||||||
|               ("alsa-lib" ,alsa-lib) |               ("alsa-lib" ,alsa-lib) | ||||||
|               ("pulseaudio" ,pulseaudio))) |               ("pulseaudio" ,pulseaudio))) | ||||||
|  | @ -278,3 +280,26 @@ ogginfo, to obtain information (tags, bitrate, length, etc.) about | ||||||
|          an ogg vorbis file.") |          an ogg vorbis file.") | ||||||
|    (license license:gpl2) |    (license license:gpl2) | ||||||
|    (home-page "http://xiph.org/vorbis/"))) |    (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 |           (base32 | ||||||
|             "1gdv6559cdz1lfw73x7wsvax1fkvphmayrymprljhyyb5nwk5kkz")))) |             "1gdv6559cdz1lfw73x7wsvax1fkvphmayrymprljhyyb5nwk5kkz")))) | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|  |     (propagated-inputs | ||||||
|  |      ;; xft.pc refers to 'xrender'. | ||||||
|  |       `(("libxrender" ,libxrender))) | ||||||
|     (inputs |     (inputs | ||||||
|       `(("libx11" ,libx11) |       `(("libx11" ,libx11) | ||||||
|         ("xproto" ,xproto) |         ("xproto" ,xproto) | ||||||
|         ("libxrender" ,libxrender) |  | ||||||
|         ("freetype" ,freetype) |         ("freetype" ,freetype) | ||||||
|         ("fontconfig" ,fontconfig))) |         ("fontconfig" ,fontconfig))) | ||||||
|     (native-inputs |     (native-inputs | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
|   #:use-module (gnu packages linux-initrd) |   #:use-module (gnu packages linux-initrd) | ||||||
|   #:use-module (gnu packages base) |   #:use-module (gnu packages base) | ||||||
|   #:use-module (gnu packages bash) |   #:use-module (gnu packages bash) | ||||||
|   #:use-module (gnu packages system) |   #:use-module (gnu packages admin) | ||||||
|   #:use-module (gnu packages package-management) |   #:use-module (gnu packages package-management) | ||||||
|   #:use-module (gnu system dmd) |   #:use-module (gnu system dmd) | ||||||
|   #:use-module (gnu system grub) |   #:use-module (gnu system grub) | ||||||
|  | @ -288,7 +288,7 @@ alias ll='ls -l' | ||||||
|                             (append-map service-pam-services services)))) |                             (append-map service-pam-services services)))) | ||||||
| 
 | 
 | ||||||
|        (bash-file (package-file bash "bin/bash")) |        (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 |        (accounts -> (cons (user-account | ||||||
|                             (name "root") |                             (name "root") | ||||||
|                             (password "") |                             (password "") | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ | ||||||
|   #:use-module (guix records) |   #:use-module (guix records) | ||||||
|   #:use-module ((gnu packages base) |   #:use-module ((gnu packages base) | ||||||
|                 #:select (glibc-final)) |                 #:select (glibc-final)) | ||||||
|   #:use-module ((gnu packages system) |   #:use-module ((gnu packages admin) | ||||||
|                 #:select (mingetty inetutils shadow)) |                 #:select (mingetty inetutils shadow)) | ||||||
|   #:use-module ((gnu packages package-management) |   #:use-module ((gnu packages package-management) | ||||||
|                 #:select (guix)) |                 #:select (guix)) | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ | ||||||
|   #:use-module (guix records) |   #:use-module (guix records) | ||||||
|   #:use-module (guix packages) |   #:use-module (guix packages) | ||||||
|   #:use-module (guix monads) |   #:use-module (guix monads) | ||||||
|   #:use-module ((gnu packages system) |   #:use-module ((gnu packages admin) | ||||||
|                 #:select (shadow)) |                 #:select (shadow)) | ||||||
|   #:use-module (gnu packages bash) |   #:use-module (gnu packages bash) | ||||||
|   #:use-module (srfi srfi-1) |   #:use-module (srfi srfi-1) | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ | ||||||
|   #:use-module (gnu packages package-management) |   #:use-module (gnu packages package-management) | ||||||
|   #:use-module ((gnu packages make-bootstrap) |   #:use-module ((gnu packages make-bootstrap) | ||||||
|                 #:select (%guile-static-stripped)) |                 #:select (%guile-static-stripped)) | ||||||
|   #:use-module (gnu packages system) |   #:use-module (gnu packages admin) | ||||||
| 
 | 
 | ||||||
|   #:use-module (gnu system shadow) |   #:use-module (gnu system shadow) | ||||||
|   #:use-module (gnu system linux) |   #:use-module (gnu system linux) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -95,7 +95,9 @@ | ||||||
| 
 | 
 | ||||||
|   ;; Other useful nodes. |   ;; Other useful nodes. | ||||||
|   (mknod (scope "dev/null") 'char-special #o666 (device-number 1 3)) |   (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 | (define %host-qemu-ipv4-address | ||||||
|   (inet-pton AF_INET "10.0.2.10")) |   (inet-pton AF_INET "10.0.2.10")) | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ | ||||||
|             %store-directory |             %store-directory | ||||||
|             %state-directory |             %state-directory | ||||||
|             %config-directory |             %config-directory | ||||||
|  |             %guix-register-program | ||||||
|             %system |             %system | ||||||
|             %libgcrypt |             %libgcrypt | ||||||
|             %nixpkgs |             %nixpkgs | ||||||
|  | @ -62,6 +63,10 @@ | ||||||
|   ;; This must match `NIX_CONF_DIR' as defined in `daemon.am'. |   ;; This must match `NIX_CONF_DIR' as defined in `daemon.am'. | ||||||
|   (or (getenv "NIX_CONF_DIR") "@guix_sysconfdir@/guix")) |   (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 | (define %system | ||||||
|   "@guix_system@") |   "@guix_system@") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -532,7 +532,8 @@ the derivation called NAME with hash HASH." | ||||||
|                      (system (%current-system)) (env-vars '()) |                      (system (%current-system)) (env-vars '()) | ||||||
|                      (inputs '()) (outputs '("out")) |                      (inputs '()) (outputs '("out")) | ||||||
|                      hash hash-algo hash-mode |                      hash hash-algo hash-mode | ||||||
|                      references-graphs) |                      references-graphs | ||||||
|  |                      local-build?) | ||||||
|   "Build a derivation with the given arguments, and return the resulting |   "Build a derivation with the given arguments, and return the resulting | ||||||
| <derivation> object.  When HASH, HASH-ALGO, and HASH-MODE are given, a | <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 | 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 | 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 | 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) |   (define (add-output-paths drv) | ||||||
|     ;; Return DRV with an actual store path for each of its output and the |     ;; Return DRV with an actual store path for each of its output and the | ||||||
|     ;; corresponding environment variable. |     ;; 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 |     ;; 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 |     ;; derivations (urgh!).  We hide that from our API, but here is the place | ||||||
|     ;; where we kludgify those options. |     ;; where we kludgify those options. | ||||||
|     (match references-graphs |     (let ((env-vars (if local-build? | ||||||
|       (((file . path) ...) |                         `(("preferLocalBuild" . "1") | ||||||
|        (let ((value (map (cut string-append <> " " <>) |                           ,@env-vars) | ||||||
|                          file path))) |                         env-vars))) | ||||||
|          ;; XXX: This all breaks down if an element of FILE or PATH contains |       (match references-graphs | ||||||
|          ;; white space. |         (((file . path) ...) | ||||||
|          `(("exportReferencesGraph" . ,(string-join value " ")) |          (let ((value (map (cut string-append <> " " <>) | ||||||
|            ,@env-vars))) |                            file path))) | ||||||
|       (#f |            ;; XXX: This all breaks down if an element of FILE or PATH contains | ||||||
|        env-vars))) |            ;; white space. | ||||||
|  |            `(("exportReferencesGraph" . ,(string-join value " ")) | ||||||
|  |              ,@env-vars))) | ||||||
|  |         (#f | ||||||
|  |          env-vars)))) | ||||||
| 
 | 
 | ||||||
|   (define (env-vars-with-empty-outputs env-vars) |   (define (env-vars-with-empty-outputs env-vars) | ||||||
|     ;; Return a variant of ENV-VARS where each OUTPUTS is associated with an |     ;; 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 '()) |                                        (env-vars '()) | ||||||
|                                        (modules '()) |                                        (modules '()) | ||||||
|                                        guile-for-build |                                        guile-for-build | ||||||
|                                        references-graphs) |                                        references-graphs | ||||||
|  |                                        local-build?) | ||||||
|   "Return a derivation that executes Scheme expression EXP as a builder |   "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) | 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 | 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 | 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. | 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 |   (define guile-drv | ||||||
|     (or guile-for-build (%guile-for-build))) |     (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 |                 #:hash hash #:hash-algo hash-algo | ||||||
|                 #:outputs outputs |                 #: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 | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -25,7 +25,8 @@ | ||||||
|   #:use-module (srfi srfi-11) |   #:use-module (srfi srfi-11) | ||||||
|   #:export (sha256 |   #:export (sha256 | ||||||
|             open-sha256-port |             open-sha256-port | ||||||
|             port-sha256)) |             port-sha256 | ||||||
|  |             open-sha256-input-port)) | ||||||
| 
 | 
 | ||||||
| ;;; Commentary: | ;;; Commentary: | ||||||
| ;;; | ;;; | ||||||
|  | @ -128,4 +129,41 @@ output port." | ||||||
|     (close-port out) |     (close-port out) | ||||||
|     (get))) |     (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 | ;;; hash.scm ends here | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; GNU Guix --- Functional package management for GNU | ||||||
| ;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> | ;;; Copyright © 2012, 2014 Ludovic Courtès <ludo@gnu.org> | ||||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||||
| ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; | ;;; | ||||||
|  | @ -31,6 +31,7 @@ | ||||||
|             expat |             expat | ||||||
|             freetype |             freetype | ||||||
|             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+ |             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+ | ||||||
|  |             fdl1.3+ | ||||||
|             isc |             isc | ||||||
|             ijg |             ijg | ||||||
|             ibmpl1.0 |             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/gpl.html" | ||||||
|            "https://www.gnu.org/licenses/license-list#GNUGPLv3")) |            "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 | (define isc | ||||||
|   (license "ISC" |   (license "ISC" | ||||||
|            "http://directory.fsf.org/wiki/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 | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -19,23 +19,40 @@ | ||||||
| (define-module (guix nar) | (define-module (guix nar) | ||||||
|   #:use-module (guix utils) |   #:use-module (guix utils) | ||||||
|   #:use-module (guix serialization) |   #: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 bytevectors) | ||||||
|   #:use-module (rnrs io ports) |   #:use-module (rnrs io ports) | ||||||
|   #:use-module (srfi srfi-1) |   #:use-module (srfi srfi-1) | ||||||
|  |   #:use-module (srfi srfi-11) | ||||||
|   #:use-module (srfi srfi-26) |   #:use-module (srfi srfi-26) | ||||||
|   #:use-module (srfi srfi-34) |   #:use-module (srfi srfi-34) | ||||||
|   #:use-module (srfi srfi-35) |   #:use-module (srfi srfi-35) | ||||||
|   #:use-module (ice-9 ftw) |   #:use-module (ice-9 ftw) | ||||||
|   #:use-module (ice-9 match) |   #:use-module (ice-9 match) | ||||||
|   #:export (nar-error? |   #:export (nar-error? | ||||||
|  |             nar-error-port | ||||||
|  |             nar-error-file | ||||||
|  | 
 | ||||||
|             nar-read-error? |             nar-read-error? | ||||||
|             nar-read-error-file |  | ||||||
|             nar-read-error-port |  | ||||||
|             nar-read-error-token |             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 |             write-file | ||||||
|             restore-file)) |             restore-file | ||||||
|  | 
 | ||||||
|  |             restore-file-set)) | ||||||
| 
 | 
 | ||||||
| ;;; Comment: | ;;; Comment: | ||||||
| ;;; | ;;; | ||||||
|  | @ -44,15 +61,24 @@ | ||||||
| ;;; Code: | ;;; Code: | ||||||
| 
 | 
 | ||||||
| (define-condition-type &nar-error &error      ; XXX: inherit from &nix-error ? | (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 | (define-condition-type &nar-read-error &nar-error | ||||||
|   nar-read-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 |   (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) | (define (dump in out size) | ||||||
|   "Copy SIZE bytes from IN to OUT." |   "Copy SIZE bytes from IN to OUT." | ||||||
|   (define buf-size 65536) |   (define buf-size 65536) | ||||||
|  | @ -239,4 +265,191 @@ Restore it as FILE." | ||||||
|          (&message (message "unsupported nar entry type")) |          (&message (message "unsupported nar entry type")) | ||||||
|          (&nar-read-error (port port) (file file) (token x)))))))) |          (&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 | ;;; nar.scm ends here | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								guix/pki.scm
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								guix/pki.scm
									
										
									
									
									
								
							|  | @ -29,8 +29,12 @@ | ||||||
|             current-acl |             current-acl | ||||||
|             public-keys->acl |             public-keys->acl | ||||||
|             acl->public-keys |             acl->public-keys | ||||||
|  |             authorized-key? | ||||||
|  | 
 | ||||||
|             signature-sexp |             signature-sexp | ||||||
|             authorized-key?)) |             signature-subject | ||||||
|  |             signature-signed-data | ||||||
|  |             valid-signature?)) | ||||||
| 
 | 
 | ||||||
| ;;; Commentary: | ;;; 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 (sign data secret-key)) | ||||||
|            (canonical-sexp->string public-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 | ;;; pki.scm ends here | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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> | ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -238,8 +238,6 @@ the given MANIFEST." | ||||||
| 
 | 
 | ||||||
|        (let ((output (assoc-ref %outputs "out")) |        (let ((output (assoc-ref %outputs "out")) | ||||||
|              (inputs (map cdr %build-inputs))) |              (inputs (map cdr %build-inputs))) | ||||||
|          (format #t "building profile '~a' with ~a packages...~%" |  | ||||||
|                  output (length inputs)) |  | ||||||
|          (union-build output inputs |          (union-build output inputs | ||||||
|                       #:log-port (%make-void-port "w")) |                       #:log-port (%make-void-port "w")) | ||||||
|          (call-with-output-file (string-append output "/manifest") |          (call-with-output-file (string-append output "/manifest") | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -72,23 +72,21 @@ | ||||||
|      ;; Read the signature as produced above, check whether its public key is |      ;; Read the signature as produced above, check whether its public key is | ||||||
|      ;; authorized, and verify the signature, and print the signed data to |      ;; authorized, and verify the signature, and print the signed data to | ||||||
|      ;; stdout upon success. |      ;; stdout upon success. | ||||||
|      (let* ((sig+data   (read-canonical-sexp signature-file)) |      (let* ((signature (read-canonical-sexp signature-file)) | ||||||
|             (public-key (find-sexp-token sig+data 'public-key)) |             (subject   (signature-subject signature)) | ||||||
|             (data       (find-sexp-token sig+data 'data)) |             (data      (signature-signed-data signature))) | ||||||
|             (signature  (find-sexp-token sig+data 'sig-val))) |        (if (and data subject) | ||||||
|        (if (and data signature) |            (if (authorized-key? subject) | ||||||
|            (if (authorized-key? public-key) |                (if (valid-signature? signature) | ||||||
|                (if (verify signature data public-key) |                    (let ((hash (hash-data->bytevector data))) | ||||||
|                    (begin |                      (display (bytevector->base16-string hash)) | ||||||
|                      (display (bytevector->base16-string |  | ||||||
|                                (hash-data->bytevector data))) |  | ||||||
|                      #t)                          ; success |                      #t)                          ; success | ||||||
|                    (leave (_ "error: invalid signature: ~a~%") |                    (leave (_ "error: invalid signature: ~a~%") | ||||||
|                           (canonical-sexp->string signature))) |                           (canonical-sexp->string signature))) | ||||||
|                (leave (_ "error: unauthorized public key: ~a~%") |                (leave (_ "error: unauthorized public key: ~a~%") | ||||||
|                       (canonical-sexp->string public-key))) |                       (canonical-sexp->string subject))) | ||||||
|            (leave (_ "error: corrupt signature data: ~a~%") |            (leave (_ "error: corrupt signature data: ~a~%") | ||||||
|                   (canonical-sexp->string sig+data))))) |                   (canonical-sexp->string signature))))) | ||||||
|     (("--help") |     (("--help") | ||||||
|      (display (_ "Usage: guix authenticate OPTION... |      (display (_ "Usage: guix authenticate OPTION... | ||||||
| Sign or verify the signature on the given file.  This tool is meant to | 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) |         (('search regexp) | ||||||
|          (let ((regexp (make-regexp regexp regexp/icase))) |          (let ((regexp (make-regexp regexp regexp/icase))) | ||||||
|            (for-each (cute package->recutils <> (current-output-port)) |            (leave-on-EPIPE | ||||||
|                      (find-packages-by-description regexp)) |             (for-each (cute package->recutils <> (current-output-port)) | ||||||
|  |                       (find-packages-by-description regexp))) | ||||||
|            #t)) |            #t)) | ||||||
| 
 | 
 | ||||||
|         (('search-paths) |         (('search-paths) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; 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." |   "Implement the build daemon's substituter protocol." | ||||||
|   (mkdir-p %narinfo-cache-directory) |   (mkdir-p %narinfo-cache-directory) | ||||||
|   (maybe-remove-expired-cached-narinfo) |   (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 |   (with-networking | ||||||
|    (match args |    (match args | ||||||
|      (("--query") |      (("--query") | ||||||
|  |  | ||||||
|  | @ -33,6 +33,7 @@ | ||||||
|   #:use-module (ice-9 match) |   #:use-module (ice-9 match) | ||||||
|   #:use-module (ice-9 regex) |   #:use-module (ice-9 regex) | ||||||
|   #:use-module (ice-9 vlist) |   #:use-module (ice-9 vlist) | ||||||
|  |   #:use-module (ice-9 popen) | ||||||
|   #:export (%daemon-socket-file |   #:export (%daemon-socket-file | ||||||
| 
 | 
 | ||||||
|             nix-server? |             nix-server? | ||||||
|  | @ -52,6 +53,7 @@ | ||||||
| 
 | 
 | ||||||
|             open-connection |             open-connection | ||||||
|             close-connection |             close-connection | ||||||
|  |             with-store | ||||||
|             set-build-options |             set-build-options | ||||||
|             valid-path? |             valid-path? | ||||||
|             query-path-hash |             query-path-hash | ||||||
|  | @ -74,6 +76,7 @@ | ||||||
|             references |             references | ||||||
|             requisites |             requisites | ||||||
|             referrers |             referrers | ||||||
|  |             topologically-sorted | ||||||
|             valid-derivers |             valid-derivers | ||||||
|             query-derivation-outputs |             query-derivation-outputs | ||||||
|             live-paths |             live-paths | ||||||
|  | @ -85,6 +88,8 @@ | ||||||
| 
 | 
 | ||||||
|             current-build-output-port |             current-build-output-port | ||||||
| 
 | 
 | ||||||
|  |             register-path | ||||||
|  | 
 | ||||||
|             %store-prefix |             %store-prefix | ||||||
|             store-path? |             store-path? | ||||||
|             direct-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 the connection to SERVER." | ||||||
|   (close (nix-server-socket 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 | (define current-build-output-port | ||||||
|   ;; The port where build output is sent. |   ;; The port where build output is sent. | ||||||
|   (make-parameter (current-error-port))) |   (make-parameter (current-error-port))) | ||||||
|  | @ -360,11 +376,11 @@ encoding conversion errors." | ||||||
|     (nix-server-socket server)) |     (nix-server-socket server)) | ||||||
| 
 | 
 | ||||||
|   ;; magic cookies from worker-protocol.hh |   ;; magic cookies from worker-protocol.hh | ||||||
|   (define %stderr-next  #x6f6c6d67) |   (define %stderr-next  #x6f6c6d67)          ; "olmg", build log | ||||||
|   (define %stderr-read  #x64617461)               ; data needed from source |   (define %stderr-read  #x64617461)          ; "data", data needed from source | ||||||
|   (define %stderr-write #x64617416)               ; data for sink |   (define %stderr-write #x64617416)          ; "dat\x16", data for sink | ||||||
|   (define %stderr-last  #x616c7473) |   (define %stderr-last  #x616c7473)          ; "alts", we're done | ||||||
|   (define %stderr-error #x63787470) |   (define %stderr-error #x63787470)          ; "cxtp", error reporting | ||||||
| 
 | 
 | ||||||
|   (let ((k (read-int p))) |   (let ((k (read-int p))) | ||||||
|     (cond ((= k %stderr-write) |     (cond ((= k %stderr-write) | ||||||
|  | @ -574,6 +590,40 @@ SEED." | ||||||
| references, recursively)." | references, recursively)." | ||||||
|   (fold-path store cons '() path)) |   (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 | (define referrers | ||||||
|   (operation (query-referrers (store-path path)) |   (operation (query-referrers (store-path path)) | ||||||
|              "Return the list of path that refer to PATH." |              "Return the list of path that refer to PATH." | ||||||
|  | @ -694,6 +744,28 @@ is true." | ||||||
|          (and (export-path server head port #:sign? sign?) |          (and (export-path server head port #:sign? sign?) | ||||||
|               (loop tail))))))) |               (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. | ;;; Store paths. | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								guix/ui.scm
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								guix/ui.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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 Mark H Weaver <mhw@netris.org> | ||||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||||
| ;;; | ;;; | ||||||
|  | @ -138,7 +138,7 @@ messages." | ||||||
|   "Display version information for COMMAND and `(exit 0)'." |   "Display version information for COMMAND and `(exit 0)'." | ||||||
|   (simple-format #t "~a (~a) ~a~%" |   (simple-format #t "~a (~a) ~a~%" | ||||||
|                  command %guix-package-name %guix-version) |                  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> | 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. | This is free software: you are free to change and redistribute it. | ||||||
| There is NO WARRANTY, to the extent permitted by law. | There is NO WARRANTY, to the extent permitted by law. | ||||||
|  | @ -404,7 +404,11 @@ WIDTH columns." | ||||||
|   (format port "location: ~a~%" |   (format port "location: ~a~%" | ||||||
|           (or (and=> (package-location p) location->string) |           (or (and=> (package-location p) location->string) | ||||||
|               (_ "unknown"))) |               (_ "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~%" |   (format port "license: ~a~%" | ||||||
|           (match (package-license p) |           (match (package-license p) | ||||||
|             (((? license? licenses) ...) |             (((? license? licenses) ...) | ||||||
|  | @ -554,13 +558,17 @@ reporting." | ||||||
|        (command-files))) |        (command-files))) | ||||||
| 
 | 
 | ||||||
| (define (show-guix-help) | (define (show-guix-help) | ||||||
|  |   (define (internal? command) | ||||||
|  |     (member command '("substitute-binary" "authenticate" "offload"))) | ||||||
|  | 
 | ||||||
|   (format #t (_ "Usage: guix COMMAND ARGS... |   (format #t (_ "Usage: guix COMMAND ARGS... | ||||||
| Run COMMAND with ARGS.\n")) | Run COMMAND with ARGS.\n")) | ||||||
|   (newline) |   (newline) | ||||||
|   (format #t (_ "COMMAND must be one of the sub-commands listed below:\n")) |   (format #t (_ "COMMAND must be one of the sub-commands listed below:\n")) | ||||||
|   (newline) |   (newline) | ||||||
|   ;; TODO: Display a synopsis of each command. |   ;; 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)) |   (show-bug-report-information)) | ||||||
| 
 | 
 | ||||||
| (define program-name | (define program-name | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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 Mark H Weaver <mhw@netris.org> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
|  | @ -34,7 +34,7 @@ | ||||||
|   #:use-module (ice-9 regex) |   #:use-module (ice-9 regex) | ||||||
|   #:use-module (ice-9 match) |   #:use-module (ice-9 match) | ||||||
|   #:use-module (ice-9 format) |   #:use-module (ice-9 format) | ||||||
|   #:autoload   (system foreign) (pointer->procedure) |   #:use-module (system foreign) | ||||||
|   #:export (bytevector->base16-string |   #:export (bytevector->base16-string | ||||||
|             base16-string->bytevector |             base16-string->bytevector | ||||||
| 
 | 
 | ||||||
|  | @ -43,6 +43,7 @@ | ||||||
|             nixpkgs-derivation* |             nixpkgs-derivation* | ||||||
| 
 | 
 | ||||||
|             compile-time-value |             compile-time-value | ||||||
|  |             fcntl-flock | ||||||
|             memoize |             memoize | ||||||
|             default-keyword-arguments |             default-keyword-arguments | ||||||
|             substitute-keyword-arguments |             substitute-keyword-arguments | ||||||
|  | @ -222,6 +223,67 @@ buffered data is lost." | ||||||
|   "Evaluate the given Nixpkgs derivation at compile-time." |   "Evaluate the given Nixpkgs derivation at compile-time." | ||||||
|   (compile-time-value (nixpkgs-derivation attribute))) |   (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. | ;;; Miscellaneous. | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								m4/guix.m4
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								m4/guix.m4
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| dnl GNU Guix --- Functional package management for GNU | 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 | ||||||
| dnl This file is part of GNU Guix. | dnl This file is part of GNU Guix. | ||||||
| dnl | dnl | ||||||
|  | @ -134,3 +134,20 @@ AC_DEFUN([GUIX_CHECK_SRFI_37], [ | ||||||
|        ac_cv_guix_srfi_37_broken=yes |        ac_cv_guix_srfi_37_broken=yes | ||||||
|      fi]) |      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
 | /* 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, |    Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, | ||||||
|      2013 Eelco Dolstra <eelco.dolstra@logicblox.com> |      2013 Eelco Dolstra <eelco.dolstra@logicblox.com> | ||||||
| 
 | 
 | ||||||
|  | @ -133,10 +133,13 @@ register_validity (LocalStore *store, std::istream &input, | ||||||
|       if (info.path == "") |       if (info.path == "") | ||||||
| 	break; | 	break; | ||||||
| 
 | 
 | ||||||
|       /* Rewrite the input to refer final name, as if we were in a chroot
 |       if (!prefix.empty ()) | ||||||
| 	 under PREFIX.  */ | 	{ | ||||||
|       std::string final_prefix (NIX_STORE_DIR "/"); | 	  /* Rewrite the input to refer to the final name, as if we were in a
 | ||||||
|       info.path = final_prefix + baseNameOf (info.path); | 	     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.  */ |       /* Keep its real path to canonicalize it and compute its hash.  */ | ||||||
|       std::string real_path; |       std::string real_path; | ||||||
|  | @ -165,6 +168,9 @@ register_validity (LocalStore *store, std::istream &input, | ||||||
| int | int | ||||||
| main (int argc, char *argv[]) | main (int argc, char *argv[]) | ||||||
| { | { | ||||||
|  |   /* Honor the environment variables, and initialize the settings.  */ | ||||||
|  |   settings.processEnvironment (); | ||||||
|  | 
 | ||||||
|   try |   try | ||||||
|     { |     { | ||||||
|       argp_parse (&argp, argc, argv, 0, 0, 0); |       argp_parse (&argp, argc, argv, 0, 0, 0); | ||||||
|  | @ -173,10 +179,11 @@ main (int argc, char *argv[]) | ||||||
| 	 'settings.nixStore', 'settings.nixDBPath', etc.  */ | 	 'settings.nixStore', 'settings.nixDBPath', etc.  */ | ||||||
|       LocalStore store; |       LocalStore store; | ||||||
| 
 | 
 | ||||||
|       /* Under the --prefix tree, the final name of the store will be
 |       if (!prefix.empty ()) | ||||||
| 	 NIX_STORE_DIR.  Set it here so that the database uses file names | 	/* Under the --prefix tree, the final name of the store will be
 | ||||||
| 	 prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR.  */ | 	   NIX_STORE_DIR.  Set it here so that the database uses file names | ||||||
|       settings.nixStore = NIX_STORE_DIR; | 	   prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR.  */ | ||||||
|  | 	settings.nixStore = NIX_STORE_DIR; | ||||||
| 
 | 
 | ||||||
|       register_validity (&store, *input); |       register_validity (&store, *input); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 | /* 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. |    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_CHROOT_DIR 10 | ||||||
| #define GUIX_OPT_LISTEN 11 | #define GUIX_OPT_LISTEN 11 | ||||||
| #define GUIX_OPT_NO_SUBSTITUTES 12 | #define GUIX_OPT_NO_SUBSTITUTES 12 | ||||||
|  | #define GUIX_OPT_NO_BUILD_HOOK 13 | ||||||
| 
 | 
 | ||||||
| static const struct argp_option options[] = | static const struct argp_option options[] = | ||||||
|   { |   { | ||||||
|  | @ -94,6 +95,8 @@ static const struct argp_option options[] = | ||||||
|       "Perform builds as a user of GROUP" }, |       "Perform builds as a user of GROUP" }, | ||||||
|     { "no-substitutes", GUIX_OPT_NO_SUBSTITUTES, 0, 0, |     { "no-substitutes", GUIX_OPT_NO_SUBSTITUTES, 0, 0, | ||||||
|       "Do not use substitutes" }, |       "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-failures", GUIX_OPT_CACHE_FAILURES, 0, 0, | ||||||
|       "Cache build failures" }, |       "Cache build failures" }, | ||||||
|     { "lose-logs", GUIX_OPT_LOSE_LOGS, 0, 0, |     { "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: |     case GUIX_OPT_NO_SUBSTITUTES: | ||||||
|       settings.useSubstitutes = false; |       settings.useSubstitutes = false; | ||||||
|       break; |       break; | ||||||
|  |     case GUIX_OPT_NO_BUILD_HOOK: | ||||||
|  |       settings.useBuildHook = false; | ||||||
|  |       break; | ||||||
|     case GUIX_OPT_DEBUG: |     case GUIX_OPT_DEBUG: | ||||||
|       verbosity = lvlDebug; |       verbosity = lvlDebug; | ||||||
|       break; |       break; | ||||||
|  | @ -226,6 +232,21 @@ main (int argc, char *argv[]) | ||||||
|       settings.substituters.clear (); |       settings.substituters.clear (); | ||||||
|       settings.useSubstitutes = true; |       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); |       argp_parse (&argp, argc, argv, 0, 0, 0); | ||||||
| 
 | 
 | ||||||
|       if (settings.useSubstitutes) |       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 | subdir = po | ||||||
| top_builddir = .. | top_builddir = .. | ||||||
| 
 | 
 | ||||||
| # These options get passed to xgettext. | # These options get passed to xgettext.  We want to catch standard | ||||||
| XGETTEXT_OPTIONS =					\ | # gettext uses, package synopses and descriptions, and SRFI-34 error | ||||||
|   --language=Scheme --from-code=UTF-8			\ | # condition messages. | ||||||
|   --keyword=_ --keyword=N_				\ | XGETTEXT_OPTIONS =				\ | ||||||
|   --keyword=synopsis --keyword=description |   --language=Scheme --from-code=UTF-8		\ | ||||||
|  |   --keyword=_ --keyword=N_			\ | ||||||
|  |   --keyword=synopsis --keyword=description	\ | ||||||
|  |   --keyword=message | ||||||
| 
 | 
 | ||||||
| COPYRIGHT_HOLDER = Ludovic Courtès | COPYRIGHT_HOLDER = Ludovic Courtès | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,3 +15,4 @@ guix/scripts/authenticate.scm | ||||||
| guix/gnu-maintenance.scm | guix/gnu-maintenance.scm | ||||||
| guix/ui.scm | guix/ui.scm | ||||||
| guix/http-client.scm | guix/http-client.scm | ||||||
|  | guix/nar.scm | ||||||
|  |  | ||||||
							
								
								
									
										468
									
								
								po/sr.po
									
										
									
									
									
								
							
							
						
						
									
										468
									
								
								po/sr.po
									
										
									
									
									
								
							|  | @ -1,21 +1,20 @@ | ||||||
| # Serbian translation of guix. | # Serbian translation of guix. | ||||||
| # Copyright (C) 2013 Free Software Foundation, Inc. | # Copyright (C) 2013 Free Software Foundation, Inc. | ||||||
| # This file is distributed under the same license as the guix package. | # This file is distributed under the same license as the guix package. | ||||||
| # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013. | # Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013, 2014. | ||||||
| msgid "" | msgid "" | ||||||
| msgstr "" | 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" | "Report-Msgid-Bugs-To: ludo@gnu.org\n" | ||||||
| "POT-Creation-Date: 2013-12-10 22:16+0100\n" | "POT-Creation-Date: 2013-12-03 21:18+0100\n" | ||||||
| "PO-Revision-Date: 2013-11-08 11:41+0200\n" | "PO-Revision-Date: 2014-01-13 22:32+0200\n" | ||||||
| "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" | "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" | ||||||
| "Language-Team: Serbian <(nothing)>\n" | "Language-Team: Serbian <(nothing)>\n" | ||||||
| "Language: sr\n" | "Language: sr\n" | ||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Type: text/plain; charset=UTF-8\n" | "Content-Type: text/plain; charset=UTF-8\n" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=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" | ||||||
| "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" |  | ||||||
| 
 | 
 | ||||||
| #: gnu/packages.scm:94 | #: gnu/packages.scm:94 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -29,10 +28,12 @@ msgstr "Поздрав, Гну народе: Пример Гну пакета" | ||||||
| #: gnu/packages/base.scm:62 | #: gnu/packages/base.scm:62 | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Hello prints the message \"Hello, world!\" and then exits.  It\n" | "GNU Hello prints the message \"Hello, world!\" and then exits.  It\n" | ||||||
| "serves as an example of standard GNU coding practices.  As such, it " | "serves as an example of standard GNU coding practices.  As such, it supports\n" | ||||||
| "supports\n" |  | ||||||
| "command-line arguments, multiple languages, and so on." | "command-line arguments, multiple languages, and so on." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуов Поздравник исписује поруку „Поздрав, народе!“ и излази.  Служи\n" | ||||||
|  | "као пример стандардног увежбавања Гнуовог кодирања.  Као такав, подржава\n" | ||||||
|  | "аргументе линије наредби, вишеструке језике, и тако редом." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:80 | #: gnu/packages/base.scm:80 | ||||||
| msgid "Print lines matching a pattern" | msgid "Print lines matching a pattern" | ||||||
|  | @ -48,6 +49,13 @@ msgid "" | ||||||
| "numbers.  GNU grep offers many extensions over the standard utility,\n" | "numbers.  GNU grep offers many extensions over the standard utility,\n" | ||||||
| "including, for example, recursive directory searching." | "including, for example, recursive directory searching." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "греп је алат за проналажење текста унутар датотека.  Текст се проналази\n" | ||||||
|  | "упоређивањем са обрасцем који достави корисник у једној или више датотека.\n" | ||||||
|  | "Образац може бити достављен као основни или проширени регуларни израз, или\n" | ||||||
|  | "као стална ниска.  По основи, одговарајући текст се једноставно исписује\n" | ||||||
|  | "на екрану, међутим излаз може бити прилагођен да садржи, рецимо бројеве\n" | ||||||
|  | "редова.  Гнуов греп нуди многа проширења преко уобичајеног помагала,\n" | ||||||
|  | "укључујући, на пример, дубинско претраживање директоријума." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:104 | #: gnu/packages/base.scm:104 | ||||||
| msgid "Stream editor" | msgid "Stream editor" | ||||||
|  | @ -56,13 +64,16 @@ msgstr "Уређивач протока" | ||||||
| #: gnu/packages/base.scm:119 | #: gnu/packages/base.scm:119 | ||||||
| msgid "" | msgid "" | ||||||
| "Sed is a non-interactive, text stream editor.  It receives a text\n" | "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 " | "input from a file or from standard input and it then applies a series of text\n" | ||||||
| "text\n" | "editing commands to the stream and prints its output to standard output.  It\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" | "is often used for substituting text patterns in a stream.  The GNU\n" | ||||||
| "implementation offers several extensions over the standard utility." | "implementation offers several extensions over the standard utility." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Сед је не-међудејствени, уређивач тока текста.  Он прихвата текстуални\n" | ||||||
|  | "улаз из датотеке или са стандардног улаза и затим примењује низ наредби\n" | ||||||
|  | "за уређивање текста над токим и исписује његов излаз на стандардни излаз.\n" | ||||||
|  | "Често се користи за замену текстуалних образаца у току.  Гнуова примена\n" | ||||||
|  | "нуди неколико проширења поред уобичајеног помагала." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:139 | #: gnu/packages/base.scm:139 | ||||||
| msgid "Managing tar archives" | msgid "Managing tar archives" | ||||||
|  | @ -77,6 +88,12 @@ msgid "" | ||||||
| "creation/modification dates.  GNU tar offers many extensions over the\n" | "creation/modification dates.  GNU tar offers many extensions over the\n" | ||||||
| "standard utility." | "standard utility." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Тар обезбеђује способност за стварање тар архива, као и способност\n" | ||||||
|  | "за извлачење, освежавање или исписивање датотека у постојећој архиви.\n" | ||||||
|  | "Користан је за обједињавање више датотека у једну већу датотеку, док\n" | ||||||
|  | "задржава структуру директоријума и податке о датотеци као што су\n" | ||||||
|  | "овлашћења и датуми стварања/измена.  Гнуов тар нуди многа проширења\n" | ||||||
|  | "поред стандардног помагала." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:168 | #: gnu/packages/base.scm:168 | ||||||
| msgid "Apply differences to originals, with optional backups" | msgid "Apply differences to originals, with optional backups" | ||||||
|  | @ -85,12 +102,15 @@ msgstr "Примењивање разлика на оригинале, са оп | ||||||
| #: gnu/packages/base.scm:170 | #: gnu/packages/base.scm:170 | ||||||
| msgid "" | msgid "" | ||||||
| "Patch is a program that applies changes to files based on differences\n" | "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 " | "laid out as by the program \"diff\".  The changes may be applied to one or more\n" | ||||||
| "more\n" |  | ||||||
| "files depending on the contents of the diff file.  It accepts several\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" | "different diff formats.  It may also be used to revert previously applied\n" | ||||||
| "differences." | "differences." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Закрпко је програм који примењује измене над датотекама на основу разлика\n" | ||||||
|  | "изнесених програмом различник.  Измене могу бити примењене над једном или\n" | ||||||
|  | "више датотека у зависности од садржаја датотеке разлика.  Прихвата више\n" | ||||||
|  | "различитих записа различника.  Такође може бити коришћен за враћање претходно примењених разлика." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:190 | #: gnu/packages/base.scm:190 | ||||||
| msgid "Comparing and merging files" | msgid "Comparing and merging files" | ||||||
|  | @ -99,13 +119,16 @@ msgstr "Упоређивање и стапање датотека" | ||||||
| #: gnu/packages/base.scm:192 | #: gnu/packages/base.scm:192 | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Diffutils is a package containing tools for finding the\n" | "GNU Diffutils is a package containing tools for finding the\n" | ||||||
| "differences between files.  The \"diff\" command is used to show how two " | "differences between files.  The \"diff\" command is used to show how two files\n" | ||||||
| "files\n" | "differ, while \"cmp\" shows the offsets and line numbers where they differ. \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" | "\"diff3\" allows you to compare three files.  Finally, \"sdiff\" offers an\n" | ||||||
| "interactive means to merge two files." | "interactive means to merge two files." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуова помагала разлика је пакет који садржи алате за проналажење разлика\n" | ||||||
|  | "између датотека.  Наредба „diff“ се користи за приказивање разлика двеју\n" | ||||||
|  | "датотека, док „cmp“ приказује помераје и бројеве редова на којима се\n" | ||||||
|  | "разликују.  „diff3“ вам омогућава упоређивање три датотеке.  На крају,\n" | ||||||
|  | "„sdiff“ нуди међудејствени начин за стапање две датотеке." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:219 | #: gnu/packages/base.scm:219 | ||||||
| msgid "Operating on files matching given criteria" | msgid "Operating on files matching given criteria" | ||||||
|  | @ -115,14 +138,17 @@ msgstr "Радње над датотекама према датим услов | ||||||
| msgid "" | msgid "" | ||||||
| "Findutils supplies the basic file directory searching utilities of the\n" | "Findutils supplies the basic file directory searching utilities of the\n" | ||||||
| "GNU system.  It consists of two primary searching utilities: \"find\"\n" | "GNU system.  It consists of two primary searching utilities: \"find\"\n" | ||||||
| "recursively searches for files in a directory according to given criteria " | "recursively searches for files in a directory according to given criteria and\n" | ||||||
| "and\n" | "\"locate\" lists files in a database that match a query.  Two auxiliary tools\n" | ||||||
| "\"locate\" lists files in a database that match a query.  Two auxiliary " | "are included: \"updatedb\" updates the file name database and \"xargs\" may be\n" | ||||||
| "tools\n" |  | ||||||
| "are included: \"updatedb\" updates the file name database and \"xargs\" may " |  | ||||||
| "be\n" |  | ||||||
| "used to apply commands with arbitrarily long arguments." | "used to apply commands with arbitrarily long arguments." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Помагала проналажења достављају основна помагала за претраживање датотеке\n" | ||||||
|  | "Гнуовог система.  Састоји се од два основна помагала претраживања: „find“\n" | ||||||
|  | "дубински тражи датотеке у директоријуму према задатом мерилу а „locate“\n" | ||||||
|  | "исписује датотеке у бази података које одговарају упиту.  Укључена су два\n" | ||||||
|  | "помоћна алата: „updatedb“ освежава назив датотеке базе података а „xargs“\n" | ||||||
|  | "се може користити за примењивање наредби са произвољно дугим аргументима." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:265 | #: gnu/packages/base.scm:265 | ||||||
| msgid "Core GNU utilities (file, text, shell)" | msgid "Core GNU utilities (file, text, shell)" | ||||||
|  | @ -132,10 +158,13 @@ msgstr "Гнуова кључна помагала (датотека, текст | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Coreutils includes all of the basic command-line tools that are\n" | "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" | "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 " | "manipulation functions of the GNU system.  Most of these tools offer extended\n" | ||||||
| "extended\n" |  | ||||||
| "functionality beyond that which is outlined in the POSIX standard." | "functionality beyond that which is outlined in the POSIX standard." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуова кључна помагала укључују све основне алате линије наредби који се\n" | ||||||
|  | "очекују у ПОСИКС систему.  Обезбеђују основне функције управљања датотеком,\n" | ||||||
|  | "шкољком и текстом на Гнуовом систему.  Већина ових алата нуди проширене\n" | ||||||
|  | "функционалности изван оних које су наведене у ПОСИКС стандарду." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:300 | #: gnu/packages/base.scm:300 | ||||||
| msgid "Remake files automatically" | msgid "Remake files automatically" | ||||||
|  | @ -145,12 +174,17 @@ msgstr "Самостално поновно стварање датотека" | ||||||
| msgid "" | msgid "" | ||||||
| "Make is a program that is used to control the production of\n" | "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" | "executables or other files from their source files.  The process is\n" | ||||||
| "controlled from a Makefile, in which the developer specifies how each file " | "controlled from a Makefile, in which the developer specifies how each file is\n" | ||||||
| "is\n" |  | ||||||
| "generated from its source.  It has powerful dependency resolution and the\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" | "ability to determine when files have to be regenerated after their sources\n" | ||||||
| "change.  GNU make offers many powerful extensions over the standard utility." | "change.  GNU make offers many powerful extensions over the standard utility." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Мејк је програм који се користи за управљање стварањем извршних или других\n" | ||||||
|  | "датотека из њихових изворних.  Поступком се управља из „Makefile“-а, у коме\n" | ||||||
|  | "програмери наводе како се свака датотека ствара из свог извора.  Поседује\n" | ||||||
|  | "моћно решавање зависности и способност одређивања када датотеке треба да\n" | ||||||
|  | "буду поново створене након измена њихових извора.  Гнуов мејк нуди много\n" | ||||||
|  | "моћних проширења поред стандардног помагала." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:345 | #: gnu/packages/base.scm:345 | ||||||
| msgid "Binary utilities: bfd gas gprof ld" | msgid "Binary utilities: bfd gas gprof ld" | ||||||
|  | @ -159,13 +193,16 @@ msgstr "Бинарна помагала: bfd gas gprof ld" | ||||||
| #: gnu/packages/base.scm:347 | #: gnu/packages/base.scm:347 | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Binutils is a collection of tools for working with binary files.\n" | "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. " | "Perhaps the most notable are \"ld\", a linker, and \"as\", an assembler. Other\n" | ||||||
| "Other\n" |  | ||||||
| "tools include programs to display binary profiling information, list the\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" | "strings in a binary file, and utilities for working with archives.  The \"bfd\"\n" | ||||||
| "\"\n" |  | ||||||
| "library for working with executable and object formats is also included." | "library for working with executable and object formats is also included." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуова бинарна помагала јесте збирка алата за рад са извршним датотекама.\n" | ||||||
|  | "Можда је најпознатији „ld“, повезивач, и „as“, саставник.  Остали алати\n" | ||||||
|  | "садрже програме за приказивање података бинарног профилисања, исписивање\n" | ||||||
|  | "ниски у извршној датотеци, и помагала за рад са архивама.  Ту је такође и \n" | ||||||
|  | "библиотека „bfd“ за рад са извршним и записима објеката." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:476 | #: gnu/packages/base.scm:476 | ||||||
| msgid "The GNU C Library" | msgid "The GNU C Library" | ||||||
|  | @ -174,16 +211,13 @@ msgstr "Гну Ц библиотека" | ||||||
| #: gnu/packages/base.scm:478 | #: gnu/packages/base.scm:478 | ||||||
| msgid "" | msgid "" | ||||||
| "Any Unix-like operating system needs a C library: the library which\n" | "Any Unix-like operating system needs a C library: the library which\n" | ||||||
| "defines the \"system calls\" and other basic facilities such as open, " | "defines the \"system calls\" and other basic facilities such as open, malloc,\n" | ||||||
| "malloc,\n" |  | ||||||
| "printf, exit...\n" | "printf, exit...\n" | ||||||
| "\n" | "\n" | ||||||
| "The GNU C library is used as the C library in the GNU system and most " | "The GNU C library is used as the C library in the GNU system and most systems\n" | ||||||
| "systems\n" |  | ||||||
| "with the Linux kernel." | "with the Linux kernel." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Сваком Јуниксоликом оперативном систему је потребна Ц библиотека: " | "Сваком Јуниксоликом оперативном систему је потребна Ц библиотека: библиотека\n" | ||||||
| "библиотека\n" |  | ||||||
| "која одређује „системске позиве“ и остале основне олакшице као што су\n" | "која одређује „системске позиве“ и остале основне олакшице као што су\n" | ||||||
| "„open, malloc, printf, exit...“\n" | "„open, malloc, printf, exit...“\n" | ||||||
| "\n" | "\n" | ||||||
|  | @ -199,8 +233,7 @@ msgid "" | ||||||
| "The Time Zone Database (often called tz or zoneinfo)\n" | "The Time Zone Database (often called tz or zoneinfo)\n" | ||||||
| "contains code and data that represent the history of local time for many\n" | "contains code and data that represent the history of local time for many\n" | ||||||
| "representative locations around the globe. It is updated periodically to\n" | "representative locations around the globe. It is updated periodically to\n" | ||||||
| "reflect changes made by political bodies to time zone boundaries, UTC " | "reflect changes made by political bodies to time zone boundaries, UTC offsets,\n" | ||||||
| "offsets,\n" |  | ||||||
| "and daylight-saving rules." | "and daylight-saving rules." | ||||||
| msgstr "" | msgstr "" | ||||||
| "База података временске зоне (често називана „tz“ или „zoneinfo“)\n" | "База података временске зоне (често називана „tz“ или „zoneinfo“)\n" | ||||||
|  | @ -211,7 +244,7 @@ msgstr "" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:925 | #: gnu/packages/base.scm:925 | ||||||
| msgid "GNU C++ standard library (intermediate)" | msgid "GNU C++ standard library (intermediate)" | ||||||
| msgstr "" | msgstr "Гнуова Ц++ стандардна библиотека (посредничка)" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/base.scm:1012 | #: gnu/packages/base.scm:1012 | ||||||
| msgid "The linker wrapper" | msgid "The linker wrapper" | ||||||
|  | @ -220,39 +253,40 @@ msgstr "Омотач повезивача" | ||||||
| #: gnu/packages/base.scm:1014 | #: gnu/packages/base.scm:1014 | ||||||
| msgid "" | msgid "" | ||||||
| "The linker wrapper (or `ld-wrapper') wraps the linker to add any\n" | "The linker wrapper (or `ld-wrapper') wraps the linker to add any\n" | ||||||
| "missing `-rpath' flags, and to detect any misuse of libraries outside of " | "missing `-rpath' flags, and to detect any misuse of libraries outside of the\n" | ||||||
| "the\n" |  | ||||||
| "store." | "store." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Омотач повезивача (или „ld-wrapper“) обмотава повезивача да би додао\n" | "Омотач повезивача (или „ld-wrapper“) обмотава повезивача да би додао\n" | ||||||
| "недостајућу опцију „-rpath“, и да би открио лоше коришћење библиотека\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" | msgid "Scheme implementation intended especially for extensions" | ||||||
| msgstr "Примена шеме нарочито осмишљена за проширења" | msgstr "Примена шеме нарочито осмишљена за проширења" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:98 gnu/packages/guile.scm:169 | #: gnu/packages/guile.scm:99 gnu/packages/guile.scm:170 | ||||||
| msgid "" | msgid "" | ||||||
| "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the\n" | "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the\n" | ||||||
| "official extension language of the GNU system.  It is an implementation of\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" | "the Scheme language which can be easily embedded in other applications to\n" | ||||||
| "provide a convenient means of extending the functionality of the " | "provide a convenient means of extending the functionality of the application\n" | ||||||
| "application\n" |  | ||||||
| "without requiring the source code to be rewritten." | "without requiring the source code to be rewritten." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гуиле је Гнуов свеприсутан паметан језик за проширења, званични језик\n" | ||||||
|  | "проширења за Гнуов систем.  То је примена Шеме језика који може лако\n" | ||||||
|  | "бити уграђен у друге програме како би обезбедио исплатив начин проширивања\n" | ||||||
|  | "функционалности програма без потребе поновног писања изворног кода." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:212 | #: gnu/packages/guile.scm:213 | ||||||
| msgid "Framework for building readers for GNU Guile" | msgid "Framework for building readers for GNU Guile" | ||||||
| msgstr "Радни склоп за изградњу читача за Гну Гуила" | msgstr "Радни склоп за изградњу читача за Гну Гуила" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:214 | #: gnu/packages/guile.scm:215 | ||||||
| msgid "" | msgid "" | ||||||
| "Guile-Reader is a simple framework for building readers for GNU Guile.\n" | "Guile-Reader is a simple framework for building readers for GNU Guile.\n" | ||||||
| "\n" | "\n" | ||||||
| "The idea is to make it easy to build procedures that extend Guile’s read\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 " | "procedure. Readers supporting various syntax variants can easily be written,\n" | ||||||
| "written,\n" |  | ||||||
| "possibly by re-using existing “token readers” of a standard Scheme\n" | "possibly by re-using existing “token readers” of a standard Scheme\n" | ||||||
| "readers. For example, it is used to implement Skribilo’s R5RS-derived\n" | "readers. For example, it is used to implement Skribilo’s R5RS-derived\n" | ||||||
| "document syntax.\n" | "document syntax.\n" | ||||||
|  | @ -266,41 +300,45 @@ msgstr "" | ||||||
| "Замисао је олакшати изградњу поступака који проширују Гуилов поступак\n" | "Замисао је олакшати изградњу поступака који проширују Гуилов поступак\n" | ||||||
| "читања. Читачи који подржавају разне варијанте синтаксе могу бити лако\n" | "читања. Читачи који подржавају разне варијанте синтаксе могу бити лако\n" | ||||||
| "написани, по могућству поновним коришћењем постојећих „читача “ читача\n" | "написани, по могућству поновним коришћењем постојећих „читача “ читача\n" | ||||||
| "стандардне Шеме. На пример, користи се за примену синтаксе документа која " | "стандардне Шеме. На пример, користи се за примену синтаксе документа која произилази из Р5РС Скрибилоа.\n" | ||||||
| "произилази из Р5РС Скрибилоа.\n" |  | ||||||
| "\n" | "\n" | ||||||
| "Приступ Гуиле-читача је сличан Општем Лисповом „читању табеле“, али је на\n" | "Приступ Гуиле-читача је сличан Општем Лисповом „читању табеле“, али је на\n" | ||||||
| "срећу много моћнији и прилагодљивији (на пример, неко може да покрене\n" | "срећу много моћнији и прилагодљивији (на пример, неко може да покрене\n" | ||||||
| "онолико читача колико му је потребно)." | "онолико читача колико му је потребно)." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:266 | #: gnu/packages/guile.scm:267 | ||||||
| msgid "Guile bindings to ncurses" | msgid "Guile bindings to ncurses" | ||||||
| msgstr "Гуилеово повезивање са ен-курсом" | msgstr "Гуилеово повезивање са ен-курсом" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:268 | #: gnu/packages/guile.scm:269 | ||||||
| msgid "" | msgid "" | ||||||
| "guile-ncurses provides Guile language bindings for the ncurses\n" | "guile-ncurses provides Guile language bindings for the ncurses\n" | ||||||
| "library." | "library." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "гуиле-нкурсис обезбеђује повезивање Гуиле језика за нкурсис\n" | ||||||
|  | "библиотеку." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:288 | #: gnu/packages/guile.scm:289 | ||||||
| msgid "Run jobs at scheduled times" | msgid "Run jobs at scheduled times" | ||||||
| msgstr "Покретање послова у заказано време" | msgstr "Покретање послова у заказано време" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:290 | #: gnu/packages/guile.scm:291 | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Mcron is a complete replacement for Vixie cron.  It is used to run\n" | "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 " | "tasks on a schedule, such as every hour or every Monday.  Mcron is written in\n" | ||||||
| "in\n" |  | ||||||
| "Guile, so its configuration can be written in Scheme; the original cron\n" | "Guile, so its configuration can be written in Scheme; the original cron\n" | ||||||
| "format is also supported." | "format is also supported." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуов Мкрон је потпуна замена за Викси крон.  Користи се за покретање\n" | ||||||
|  | "задатака на заказивање, рецимо сваког сата или сваког понедељка.  Мкрон\n" | ||||||
|  | "је написан у Гуилеу, тако да његово подешавање може бити написано у Шеми;\n" | ||||||
|  | "изворни кронов запис је такође подржан." | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:318 | #: gnu/packages/guile.scm:319 | ||||||
| msgid "Collection of useful Guile Scheme modules" | msgid "Collection of useful Guile Scheme modules" | ||||||
| msgstr "Збирка корисних модула Гуиле Шеме" | msgstr "Збирка корисних модула Гуиле Шеме" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/guile.scm:320 | #: gnu/packages/guile.scm:321 | ||||||
| msgid "" | msgid "" | ||||||
| "guile-lib is intended as an accumulation place for pure-scheme Guile\n" | "guile-lib is intended as an accumulation place for pure-scheme Guile\n" | ||||||
| "modules, allowing for people to cooperate integrating their generic Guile\n" | "modules, allowing for people to cooperate integrating their generic Guile\n" | ||||||
|  | @ -312,25 +350,35 @@ msgstr "" | ||||||
| "у обједињену библиотеку. Сетите се само „down-scaled, limited-scope CPAN\n" | "у обједињену библиотеку. Сетите се само „down-scaled, limited-scope CPAN\n" | ||||||
| "for Guile“." | "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 | #: gnu/packages/lout.scm:109 | ||||||
| msgid "Lout, a document layout system similar in style to LaTeX" | msgid "Lout, a document layout system similar in style to LaTeX" | ||||||
| msgstr "Лоут, систем изгледа документа сличан у стилу ЛаТеХ-у" | msgstr "Лоут, систем изгледа документа сличан у стилу ЛаТеХ-у" | ||||||
| 
 | 
 | ||||||
| #: gnu/packages/lout.scm:111 | #: gnu/packages/lout.scm:111 | ||||||
| msgid "" | msgid "" | ||||||
| "The Lout document formatting system is now reads a high-level description " | "The Lout document formatting system is now reads a high-level description of\n" | ||||||
| "of\n" | "a document similar in style to LaTeX and produces a PostScript or plain text\n" | ||||||
| "a document similar in style to LaTeX and produces a PostScript or plain " |  | ||||||
| "text\n" |  | ||||||
| "output file.\n" | "output file.\n" | ||||||
| "\n" | "\n" | ||||||
| "Lout offers an unprecedented range of advanced features, including optimal\n" | "Lout offers an unprecedented range of advanced features, including optimal\n" | ||||||
| "paragraph and page breaking, automatic hyphenation, PostScript EPS file\n" | "paragraph and page breaking, automatic hyphenation, PostScript EPS file\n" | ||||||
| "inclusion and generation, equation formatting, tables, diagrams, rotation " | "inclusion and generation, equation formatting, tables, diagrams, rotation and\n" | ||||||
| "and\n" |  | ||||||
| "scaling, sorted indexes, bibliographic databases, running headers and\n" | "scaling, sorted indexes, bibliographic databases, running headers and\n" | ||||||
| "odd-even pages, automatic cross referencing, multilingual documents " | "odd-even pages, automatic cross referencing, multilingual documents including\n" | ||||||
| "including\n" |  | ||||||
| "hyphenation (most European languages are supported), formatting of computer\n" | "hyphenation (most European languages are supported), formatting of computer\n" | ||||||
| "programs, and much more, all ready to use.  Furthermore, Lout is easily\n" | "programs, and much more, all ready to use.  Furthermore, Lout is easily\n" | ||||||
| "extended with definitions which are very much easier to write than troff of\n" | "extended with definitions which are very much easier to write than troff of\n" | ||||||
|  | @ -361,13 +409,16 @@ msgstr "Управљајте датотекама обичног текста к | ||||||
| #: gnu/packages/recutils.scm:54 | #: gnu/packages/recutils.scm:54 | ||||||
| msgid "" | msgid "" | ||||||
| "GNU Recutils is a set of tools and libraries for creating and\n" | "GNU Recutils is a set of tools and libraries for creating and\n" | ||||||
| "manipulating text-based, human-editable databases.  Despite being text-" | "manipulating text-based, human-editable databases.  Despite being text-based,\n" | ||||||
| "based,\n" |  | ||||||
| "databases created with Recutils carry all of the expected features such as\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 " | "unique fields, primary keys, time stamps and more. Many different field types\n" | ||||||
| "types\n" |  | ||||||
| "are supported, as is encryption." | "are supported, as is encryption." | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Гнуово Рекпомагало је скуп алата и библиотека за стварање и руковање\n" | ||||||
|  | "базама података заснованим на тексту које се могу уређивати.  Иако су\n" | ||||||
|  | "засноване на тексту, базе података створене Рекпомагалом садрже све\n" | ||||||
|  | "очекиване функције као што су јединствена поља, основни кључеви, ознаке\n" | ||||||
|  | "времена и још неке. Многе различите врсте поља су подржане, као у шифровању." | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:54 | #: guix/scripts/build.scm:54 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -383,13 +434,12 @@ msgstr "" | ||||||
| "Изграђује дати ПАКЕТ-ИЛИ-ИЗВЕДНИЦУ и исписује њихове путање излаза.\n" | "Изграђује дати ПАКЕТ-ИЛИ-ИЗВЕДНИЦУ и исписује њихове путање излаза.\n" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:75 | #: guix/scripts/build.scm:75 | ||||||
| #, fuzzy |  | ||||||
| msgid "" | msgid "" | ||||||
| "\n" | "\n" | ||||||
| "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to" | "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -e, --expression=ИЗРАЗ  изграђује процене ИЗРАЗА пакета на" | "  -e, --expression=ИЗРАЗ  изграђује процене ИЗРАЗА пакета или изведенице на" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:77 | #: guix/scripts/build.scm:77 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -453,8 +503,7 @@ msgid "" | ||||||
| "      --no-substitutes   build instead of resorting to pre-built substitutes" | "      --no-substitutes   build instead of resorting to pre-built substitutes" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "      --no-substitutes   изграђује уместо да поново ређа заменике " | "      --no-substitutes   изграђује уместо да поново ређа заменике предизградње" | ||||||
| "предизградње" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:93 guix/scripts/package.scm:492 | #: guix/scripts/build.scm:93 guix/scripts/package.scm:492 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -472,8 +521,7 @@ msgid "" | ||||||
| "  -c, --cores=N          allow the use of up to N CPU cores for the build" | "  -c, --cores=N          allow the use of up to N CPU cores for the build" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -c, --cores=N          омогућава коришћење до N језгра процесора за " | "  -c, --cores=N          омогућава коришћење до N језгра процесора за изградњу" | ||||||
| "изградњу" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:98 | #: guix/scripts/build.scm:98 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -482,8 +530,7 @@ msgid "" | ||||||
| "                         as a garbage collector root" | "                         as a garbage collector root" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -r, --root=ДАТОТЕКА       чини ДАТОТЕКУ симболичком везом ка резултату, и " | "  -r, --root=ДАТОТЕКА       чини ДАТОТЕКУ симболичком везом ка резултату, и бележи је\n" | ||||||
| "бележи је\n" |  | ||||||
| "                         као корен скупљача ђубра" | "                         као корен скупљача ђубра" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:101 | #: guix/scripts/build.scm:101 | ||||||
|  | @ -499,6 +546,8 @@ msgid "" | ||||||
| "\n" | "\n" | ||||||
| "      --log-file         return the log file names for the given derivations" | "      --log-file         return the log file names for the given derivations" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "\n" | ||||||
|  | "      --log-file         исписује називе датотеке дневника за дате изведенице" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/build.scm:106 guix/scripts/download.scm:53 | #: guix/scripts/build.scm:106 guix/scripts/download.scm:53 | ||||||
| #: guix/scripts/package.scm:509 guix/scripts/gc.scm:58 | #: guix/scripts/package.scm:509 guix/scripts/gc.scm:58 | ||||||
|  | @ -562,7 +611,7 @@ msgstr "~A: непознат пакет~%" | ||||||
| #: guix/scripts/build.scm:303 | #: guix/scripts/build.scm:303 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "no build log for '~a'~%" | msgid "no build log for '~a'~%" | ||||||
| msgstr "" | msgstr "нема дневника изградње за „~a“~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/download.scm:44 | #: guix/scripts/download.scm:44 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -625,14 +674,14 @@ msgid "nothing to do: already at the empty profile~%" | ||||||
| msgstr "ништа за урадити: већ сам у празном профилу~%" | msgstr "ништа за урадити: већ сам у празном профилу~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:183 | #: guix/scripts/package.scm:183 | ||||||
| #, fuzzy, scheme-format | #, scheme-format | ||||||
| msgid "The following package would be removed:~%~{~a~%~}~%" | msgid "The following package would be removed:~%~{~a~%~}~%" | ||||||
| msgstr "Следећи пакети би требали бити уклоњени:~% ~{~a~%~}~%" | msgstr "Следећи пакети би требали бити уклоњени:~%~{~a~%~}~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:188 | #: guix/scripts/package.scm:188 | ||||||
| #, fuzzy, scheme-format | #, scheme-format | ||||||
| msgid "The following package will be removed:~%~{~a~%~}~%" | msgid "The following package will be removed:~%~{~a~%~}~%" | ||||||
| msgstr "Следећи пакети ће бити уклоњени:~% ~{~a~%~}~%" | msgstr "Следећи пакети ће бити уклоњени:~%~{~a~%~}~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:200 | #: guix/scripts/package.scm:200 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -709,8 +758,7 @@ msgid "" | ||||||
| "  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" | "  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају " | "  -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају РЕГИЗРАЗУ" | ||||||
| "РЕГИЗРАЗУ" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:473 | #: guix/scripts/package.scm:473 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -739,15 +787,14 @@ msgstr "" | ||||||
| "                         исписује генерације које одговарају ШАБЛОНУ" | "                         исписује генерације које одговарају ШАБЛОНУ" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:480 | #: guix/scripts/package.scm:480 | ||||||
| #, fuzzy |  | ||||||
| msgid "" | msgid "" | ||||||
| "\n" | "\n" | ||||||
| "  -d, --delete-generations[=PATTERN]\n" | "  -d, --delete-generations[=PATTERN]\n" | ||||||
| "                         delete generations matching PATTERN" | "                         delete generations matching PATTERN" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -l, --list-generations[=ШАБЛОН]\n" | "  -d, --delete-generations[=ШАБЛОН]\n" | ||||||
| "                         исписује генерације које одговарају ШАБЛОНУ" | "                         брише генерације које одговарају ШАБЛОНУ" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:484 | #: guix/scripts/package.scm:484 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -763,8 +810,7 @@ msgid "" | ||||||
| "  -n, --dry-run          show what would be done without actually doing it" | "  -n, --dry-run          show what would be done without actually doing it" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -n, --dry-run          показује шта би требало да се уради а да заправо " | "  -n, --dry-run          показује шта би требало да се уради а да заправо ништа не ради" | ||||||
| "ништа не ради" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:495 | #: guix/scripts/package.scm:495 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -798,8 +844,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "  -I, --list-installed[=РЕГИЗР]\n" | "  -I, --list-installed[=РЕГИЗР]\n" | ||||||
| "                         исписује инсталиране пакете који одговарају " | "                         исписује инсталиране пакете који одговарају РЕГИЗРАЗУ" | ||||||
| "РЕГИЗРАЗУ" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:505 | #: guix/scripts/package.scm:505 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -842,9 +887,9 @@ msgid "Please change the owner of `~a' to user ~s.~%" | ||||||
| msgstr "Поставите као власника ~s над „~a“.~%" | msgstr "Поставите као власника ~s над „~a“.~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:796 | #: guix/scripts/package.scm:796 | ||||||
| #, fuzzy, scheme-format | #, scheme-format | ||||||
| msgid "deleting ~a~%" | msgid "deleting ~a~%" | ||||||
| msgstr "Генерација ~a\t~a~%" | msgstr "бришем ~a~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:849 guix/scripts/package.scm:951 | #: guix/scripts/package.scm:849 guix/scripts/package.scm:951 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -862,14 +907,14 @@ msgid "~a package in profile~%" | ||||||
| msgstr "~a пакет у профилу~%" | msgstr "~a пакет у профилу~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:915 | #: guix/scripts/package.scm:915 | ||||||
| #, fuzzy, scheme-format | #, scheme-format | ||||||
| msgid "Generation ~a\t~a" | msgid "Generation ~a\t~a" | ||||||
| msgstr "Генерација ~a\t~a~%" | msgstr "Генерација ~a\t~a" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/package.scm:922 | #: guix/scripts/package.scm:922 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "~a\t(current)~%" | msgid "~a\t(current)~%" | ||||||
| msgstr "" | msgstr "~a\t(текуће)~%" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/gc.scm:39 | #: guix/scripts/gc.scm:39 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -994,6 +1039,8 @@ msgid "" | ||||||
| "\n" | "\n" | ||||||
| "      --url=URL          download the Guix tarball from URL" | "      --url=URL          download the Guix tarball from URL" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "\n" | ||||||
|  | "      --url=АДРЕСА       преузима тарбал Гуикса са АДРЕСЕ" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/pull.scm:169 | #: guix/scripts/pull.scm:169 | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -1001,8 +1048,7 @@ msgid "" | ||||||
| "      --bootstrap        use the bootstrap Guile to build the new Guix" | "      --bootstrap        use the bootstrap Guile to build the new Guix" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "      --bootstrap        користи Гуиле почетног учитавања да изгради нови " | "      --bootstrap        користи Гуиле почетног учитавања да изгради нови Гуикс" | ||||||
| "Гуикс" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/pull.scm:207 | #: guix/scripts/pull.scm:207 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -1045,8 +1091,7 @@ msgstr "Преузима, молим сачекајте...~%" | ||||||
| #: guix/scripts/substitute-binary.scm:441 | #: guix/scripts/substitute-binary.scm:441 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "(Please consider upgrading Guile to get proper progress report.)~%" | msgid "(Please consider upgrading Guile to get proper progress report.)~%" | ||||||
| msgstr "" | msgstr "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" | ||||||
| "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%" |  | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/substitute-binary.scm:458 | #: guix/scripts/substitute-binary.scm:458 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -1068,8 +1113,7 @@ msgid "" | ||||||
| "                         store file names passed on the standard input" | "                         store file names passed on the standard input" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "      --query            извештава о доступности заменика за називе " | "      --query            извештава о доступности заменика за називе датотека\n" | ||||||
| "датотека\n" |  | ||||||
| "                         складишта прослеђених на стандардном улазу" | "                         складишта прослеђених на стандардном улазу" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/substitute-binary.scm:472 | #: guix/scripts/substitute-binary.scm:472 | ||||||
|  | @ -1081,31 +1125,30 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\n" | ||||||
| "      --substitute ОДРЕДИШТЕ СКЛАДИШНЕ-ДАТОТЕКЕ\n" | "      --substitute ОДРЕДИШТЕ СКЛАДИШНЕ-ДАТОТЕКЕ\n" | ||||||
| "                         преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар " | "                         преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар удатотеци\n" | ||||||
| "удатотеци\n" |  | ||||||
| "                         ОДРЕДИШТЕ" | "                         ОДРЕДИШТЕ" | ||||||
| 
 | 
 | ||||||
| #: guix/scripts/substitute-binary.scm:596 | #: guix/scripts/substitute-binary.scm:593 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "~a: unrecognized options~%" | msgid "~a: unrecognized options~%" | ||||||
| msgstr "~a: непозната опција~%" | msgstr "~a: непозната опција~%" | ||||||
| 
 | 
 | ||||||
| #: guix/gnu-maintenance.scm:357 | #: guix/gnu-maintenance.scm:346 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "signature verification failed for `~a'~%" | msgid "signature verification failed for `~a'~%" | ||||||
| msgstr "није успела провера потписа за „~a“~%" | msgstr "није успела провера потписа за „~a“~%" | ||||||
| 
 | 
 | ||||||
| #: guix/gnu-maintenance.scm:359 | #: guix/gnu-maintenance.scm:348 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "(could be because the public key is not in your keyring)~%" | msgid "(could be because the public key is not in your keyring)~%" | ||||||
| msgstr "(може бити зато што јавни кључ није у вашем привеску)~%" | msgstr "(може бити зато што јавни кључ није у вашем привеску)~%" | ||||||
| 
 | 
 | ||||||
| #: guix/gnu-maintenance.scm:434 | #: guix/gnu-maintenance.scm:423 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "~a: could not locate source file" | msgid "~a: could not locate source file" | ||||||
| msgstr "~a: не могу да пронађем изворну датотеку" | msgstr "~a: не могу да пронађем изворну датотеку" | ||||||
| 
 | 
 | ||||||
| #: guix/gnu-maintenance.scm:439 | #: guix/gnu-maintenance.scm:428 | ||||||
| #, scheme-format | #, scheme-format | ||||||
| msgid "~a: ~a: no `version' field in source; skipping~%" | msgid "~a: ~a: no `version' field in source; skipping~%" | ||||||
| msgstr "~a: ~a: нема поља „version“ у извору; прескачем~%" | msgstr "~a: ~a: нема поља „version“ у извору; прескачем~%" | ||||||
|  | @ -1118,11 +1161,14 @@ msgstr "нисам успео да инсталирам локалитет: ~a~% | ||||||
| #: guix/ui.scm:141 | #: guix/ui.scm:141 | ||||||
| msgid "" | msgid "" | ||||||
| "Copyright (C) 2013 the Guix authors\n" | "Copyright (C) 2013 the Guix authors\n" | ||||||
| "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." | "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" | ||||||
| "html>\n" |  | ||||||
| "This is free software: you are free to change and redistribute it.\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" | "There is NO WARRANTY, to the extent permitted by law.\n" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "Ауторска права (C) 2013 аутори Гуикса\n" | ||||||
|  | "Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или касније <http://gnu.org/licenses/gpl.html>\n" | ||||||
|  | "Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n" | ||||||
|  | "Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\n" | ||||||
| 
 | 
 | ||||||
| #: guix/ui.scm:149 | #: guix/ui.scm:149 | ||||||
| #, scheme-format | #, scheme-format | ||||||
|  | @ -1186,7 +1232,7 @@ msgid "failed to evaluate expression `~a': ~s~%" | ||||||
| msgstr "нисам успео да проценим израз „~a“: ~s~%" | msgstr "нисам успео да проценим израз „~a“: ~s~%" | ||||||
| 
 | 
 | ||||||
| #: guix/ui.scm:218 | #: guix/ui.scm:218 | ||||||
| #, fuzzy, scheme-format | #, scheme-format | ||||||
| msgid "expression ~s does not evaluate to a package~%" | msgid "expression ~s does not evaluate to a package~%" | ||||||
| msgstr "израз „~s“ се не процењује на пакет~%" | msgstr "израз „~s“ се не процењује на пакет~%" | ||||||
| 
 | 
 | ||||||
|  | @ -1283,20 +1329,15 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "match to a specified pattern.  By default, grep prints the matching\n" | #~ "match to a specified pattern.  By default, grep prints the matching\n" | ||||||
| #~ "lines." | #~ "lines." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Наредба греп претражује једну или више улазних датоотека за редовима " | #~ "Наредба греп претражује једну или више улазних датоотека за редовима који\n" | ||||||
| #~ "који\n" | #~ "садрже поклапање са наведеним шаблоном.  По основи, греп исписује поклопљене\n" | ||||||
| #~ "садрже поклапање са наведеним шаблоном.  По основи, греп исписује " |  | ||||||
| #~ "поклопљене\n" |  | ||||||
| #~ "редове." | #~ "редове." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "Sed (stream editor) isn't really a true text editor or text processor.\n" | #~ "Sed (stream editor) isn't really a true text editor or text processor.\n" | ||||||
| #~ "Instead, it is used to filter text, i.e., it takes text input and " | #~ "Instead, it is used to filter text, i.e., it takes text input and performs\n" | ||||||
| #~ "performs\n" | #~ "some operation (or set of operations) on it and outputs the modified text.\n" | ||||||
| #~ "some operation (or set of operations) on it and outputs the modified " | #~ "Sed is typically used for extracting part of a file using pattern matching or\n" | ||||||
| #~ "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." | #~ "substituting multiple occurrences of a string within a file." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Сед (уређивач протока) није стварно прави уређивач или обрађивач текста.\n" | #~ "Сед (уређивач протока) није стварно прави уређивач или обрађивач текста.\n" | ||||||
|  | @ -1308,18 +1349,13 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "The Tar program provides the ability to create tar archives, as well as\n" | #~ "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" | #~ "various other kinds of manipulation.  For example, you can use Tar on\n" | ||||||
| #~ "previously created archives to extract files, to store additional files, " | #~ "previously created archives to extract files, to store additional files, or\n" | ||||||
| #~ "or\n" |  | ||||||
| #~ "to update or list files which were already stored.\n" | #~ "to update or list files which were already stored.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Initially, tar archives were used to store files conveniently on " | #~ "Initially, tar archives were used to store files conveniently on magnetic\n" | ||||||
| #~ "magnetic\n" | #~ "tape.  The name \"Tar\" comes from this use; it stands for tape archiver.\n" | ||||||
| #~ "tape.  The name \"Tar\" comes from this use; it stands for tape " | #~ "Despite the utility's name, Tar can direct its output to available devices,\n" | ||||||
| #~ "archiver.\n" | #~ "files, or other programs (using pipes), it can even access remote devices or\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)." | #~ "files (as archives)." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Програм Тар обезбеђује способност стварања тар архива, као и разне друге\n" | #~ "Програм Тар обезбеђује способност стварања тар архива, као и разне друге\n" | ||||||
|  | @ -1329,20 +1365,16 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "На почетку, тар архиве су биле коришћене за пригодно чување датотека на\n" | #~ "На почетку, тар архиве су биле коришћене за пригодно чување датотека на\n" | ||||||
| #~ "магнетским тракама. Назив „Тар“ је настао из такве употребе; и значи\n" | #~ "магнетским тракама. Назив „Тар“ је настао из такве употребе; и значи\n" | ||||||
| #~ "архивар трака. Без обзира на назив помагала, Тар може да успери свој " | #~ "архивар трака. Без обзира на назив помагала, Тар може да успери свој излаз\n" | ||||||
| #~ "излаз\n" | #~ "ка доступним уређајима, датотекама, или другим програмима (употребом спојки)\n" | ||||||
| #~ "ка доступним уређајима, датотекама, или другим програмима (употребом " |  | ||||||
| #~ "спојки)\n" |  | ||||||
| #~ "чак може и да приступи удаљеним уређајима или датотекама (као архивама)." | #~ "чак може и да приступи удаљеним уређајима или датотекама (као архивама)." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "GNU Patch takes a patch file containing a difference listing produced by\n" | #~ "GNU Patch takes a patch file containing a difference listing produced by\n" | ||||||
| #~ "the diff program and applies those differences to one or more original " | #~ "the diff program and applies those differences to one or more original files,\n" | ||||||
| #~ "files,\n" |  | ||||||
| #~ "producing patched versions." | #~ "producing patched versions." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гнуова закрпа узима датотеку закрпе која садржи списак разлика " | #~ "Гнуова закрпа узима датотеку закрпе која садржи списак разлика произведен\n" | ||||||
| #~ "произведен\n" |  | ||||||
| #~ "програмом за разлике (diff) и примењује те разлике на једној или више\n" | #~ "програмом за разлике (diff) и примењује те разлике на једној или више\n" | ||||||
| #~ "изворних датотека, стварајући прикрпљена издања." | #~ "изворних датотека, стварајући прикрпљена издања." | ||||||
| 
 | 
 | ||||||
|  | @ -1350,35 +1382,24 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "GNU Diffutils is a package of several programs related to finding\n" | #~ "GNU Diffutils is a package of several programs related to finding\n" | ||||||
| #~ "differences between files.\n" | #~ "differences between files.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Computer users often find occasion to ask how two files differ. Perhaps " | #~ "Computer users often find occasion to ask how two files differ. Perhaps one\n" | ||||||
| #~ "one\n" | #~ "file is a newer version of the other file. Or maybe the two files started out\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" | #~ "as identical copies but were changed by different people.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "You can use the diff command to show differences between two files, or " | #~ "You can use the diff command to show differences between two files, or each\n" | ||||||
| #~ "each\n" | #~ "corresponding file in two directories. diff outputs differences between files\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" | #~ "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’. " | #~ "options. This set of differences is often called a ‘diff’ or ‘patch’. For\n" | ||||||
| #~ "For\n" |  | ||||||
| #~ "files that are identical, diff normally produces no output; for\n" | #~ "files that are identical, diff normally produces no output; for\n" | ||||||
| #~ "binary (non-text) files, diff normally reports only that they are " | #~ "binary (non-text) files, diff normally reports only that they are different.\n" | ||||||
| #~ "different.\n" |  | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "You can use the cmp command to show the offsets and line numbers where " | #~ "You can use the cmp command to show the offsets and line numbers where two\n" | ||||||
| #~ "two\n" | #~ "files differ. cmp can also show all the characters that differ between the\n" | ||||||
| #~ "files differ. cmp can also show all the characters that differ between " |  | ||||||
| #~ "the\n" |  | ||||||
| #~ "two files, side by side.\n" | #~ "two files, side by side.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "You can use the diff3 command to show differences among three files. When " | #~ "You can use the diff3 command to show differences among three files. When two\n" | ||||||
| #~ "two\n" | #~ "people have made independent changes to a common original, diff3 can report\n" | ||||||
| #~ "people have made independent changes to a common original, diff3 can " | #~ "the differences between the original and the two changed versions, and can\n" | ||||||
| #~ "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" | #~ "produce a merged file that contains both persons' changes together with\n" | ||||||
| #~ "warnings about conflicts.\n" | #~ "warnings about conflicts.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
|  | @ -1388,43 +1409,32 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "разлика између датотека.\n" | #~ "разлика између датотека.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Корисници рачунара често желе да знају у чему се разликују две датотеке.\n" | #~ "Корисници рачунара често желе да знају у чему се разликују две датотеке.\n" | ||||||
| #~ "Можда је једна датотека новије издање оне друге. Или су можда обе " | #~ "Можда је једна датотека новије издање оне друге. Или су можда обе датотеке\n" | ||||||
| #~ "датотеке\n" |  | ||||||
| #~ "започете као истоветни умношци али су их измениле другачије особе.\n" | #~ "започете као истоветни умношци али су их измениле другачије особе.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Можете да користите наредбу „diff“ да покажете разлике између две " | #~ "Можете да користите наредбу „diff“ да покажете разлике између две датотеке\n" | ||||||
| #~ "датотеке\n" | #~ "или сваку одговарајућу датотеку у два директоријума. дифф исписује разлике\n" | ||||||
| #~ "или сваку одговарајућу датотеку у два директоријума. дифф исписује " |  | ||||||
| #~ "разлике\n" |  | ||||||
| #~ "између датотека ред по ред у било ком од неколико записа, бирањем опција\n" | #~ "између датотека ред по ред у било ком од неколико записа, бирањем опција\n" | ||||||
| #~ "линије наредби. Овај скуп разлика се често назива „diff“ или „patch“. За\n" | #~ "линије наредби. Овај скуп разлика се често назива „diff“ или „patch“. За\n" | ||||||
| #~ "датотеке које су исте, дифф обично не даје резултат; за извршне (не-" | #~ "датотеке које су исте, дифф обично не даје резултат; за извршне (не-текстуалне)\n" | ||||||
| #~ "текстуалне)\n" |  | ||||||
| #~ "датотеке, дифф обично извештава само о томе да се оне разликују.\n" | #~ "датотеке, дифф обично извештава само о томе да се оне разликују.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Можете да користите наредбу „cmp“ да прикажете помераје и бројеве редова\n" | #~ "Можете да користите наредбу „cmp“ да прикажете помераје и бројеве редова\n" | ||||||
| #~ "где се две датотеке разликују. цмп може такође да покаже све знакове " | #~ "где се две датотеке разликују. цмп може такође да покаже све знакове који\n" | ||||||
| #~ "који\n" |  | ||||||
| #~ "се разликују између две датотеке, један поред другог.\n" | #~ "се разликују између две датотеке, један поред другог.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Можете да користите наредбу „diff3“ да прикажете разлике између три " | #~ "Можете да користите наредбу „diff3“ да прикажете разлике између три датотеке.\n" | ||||||
| #~ "датотеке.\n" | #~ "Када два корисника направе независне измене у заједничком оригиналу, дифф3\n" | ||||||
| #~ "Када два корисника направе независне измене у заједничком оригиналу, " | #~ "може да извести о разликама између оригинала и два измењена издања, и може да\n" | ||||||
| #~ "дифф3\n" | #~ "направи стопљену датотеку која заједно садржи измене обе особе са упозорењима о сукобима.\n" | ||||||
| #~ "може да извести о разликама између оригинала и два измењена издања, и " |  | ||||||
| #~ "може да\n" |  | ||||||
| #~ "направи стопљену датотеку која заједно садржи измене обе особе са " |  | ||||||
| #~ "упозорењима о сукобима.\n" |  | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Можете да користите наредбу „sdiff“ да међудејствено стопите две датотеке." | #~ "Можете да користите наредбу „sdiff“ да међудејствено стопите две датотеке." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "The GNU Find Utilities are the basic directory searching utilities of\n" | #~ "The GNU Find Utilities are the basic directory searching utilities of\n" | ||||||
| #~ "the GNU operating system.  These programs are typically used in " | #~ "the GNU operating system.  These programs are typically used in conjunction\n" | ||||||
| #~ "conjunction\n" | #~ "with other programs to provide modular and powerful directory search and file\n" | ||||||
| #~ "with other programs to provide modular and powerful directory search and " |  | ||||||
| #~ "file\n" |  | ||||||
| #~ "locating capabilities to other commands.\n" | #~ "locating capabilities to other commands.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "The tools supplied with this package are:\n" | #~ "The tools supplied with this package are:\n" | ||||||
|  | @ -1442,15 +1452,13 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "Алати који иду уз овај пакет су:\n" | #~ "Алати који иду уз овај пакет су:\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "  * find — тражи датотеке у хијерархији директоријума;\n" | #~ "  * find — тражи датотеке у хијерархији директоријума;\n" | ||||||
| #~ "  * locate — исписује датотеке у базама података које одговарају " | #~ "  * locate — исписује датотеке у базама података које одговарају шаблону;\n" | ||||||
| #~ "шаблону;\n" |  | ||||||
| #~ "  * updatedb — освежава базу података назива датотеке;\n" | #~ "  * updatedb — освежава базу података назива датотеке;\n" | ||||||
| #~ "  * xargs — гради редове извршавања наредбе са стандардног улаза.\n" | #~ "  * xargs — гради редове извршавања наредбе са стандардног улаза.\n" | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "The GNU Core Utilities are the basic file, shell and text manipulation\n" | #~ "The GNU Core Utilities are the basic file, shell and text manipulation\n" | ||||||
| #~ "utilities of the GNU operating system.  These are the core utilities " | #~ "utilities of the GNU operating system.  These are the core utilities which\n" | ||||||
| #~ "which\n" |  | ||||||
| #~ "are expected to exist on every operating system." | #~ "are expected to exist on every operating system." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гнуова кључна помагала су основни алати за управљање датотекама, шкољком\n" | #~ "Гнуова кључна помагала су основни алати за управљање датотекама, шкољком\n" | ||||||
|  | @ -1461,33 +1469,25 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| #~ "Make is a tool which controls the generation of executables and other\n" | #~ "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" | #~ "non-source files of a program from the program's source files.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Make gets its knowledge of how to build your program from a file called " | #~ "Make gets its knowledge of how to build your program from a file called the\n" | ||||||
| #~ "the\n" | #~ "makefile, which lists each of the non-source files and how to compute it from\n" | ||||||
| #~ "makefile, which lists each of the non-source files and how to compute it " | #~ "other files. When you write a program, you should write a makefile for it, so\n" | ||||||
| #~ "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." | #~ "that it is possible to use Make to build and install the program." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Мејк је алат који управља стварањем извршних и других не-изворних " | #~ "Мејк је алат који управља стварањем извршних и других не-изворних датотека\n" | ||||||
| #~ "датотека\n" |  | ||||||
| #~ "програма из изворних датотека програма.\n" | #~ "програма из изворних датотека програма.\n" | ||||||
| #~ "\n" | #~ "\n" | ||||||
| #~ "Мејк сазнаје како да изгради ваш програм из датотеке зване „makefile“, " | #~ "Мејк сазнаје како да изгради ваш програм из датотеке зване „makefile“, која\n" | ||||||
| #~ "која\n" | #~ "исписује сваку не-изворну датотеку и како да је прорчуна из других датотека.\n" | ||||||
| #~ "исписује сваку не-изворну датотеку и како да је прорчуна из других " |  | ||||||
| #~ "датотека.\n" |  | ||||||
| #~ "Када пишете програм треба да напишете и његову „makefile“ датотеку, тако\n" | #~ "Када пишете програм треба да напишете и његову „makefile“ датотеку, тако\n" | ||||||
| #~ "да буде могуће користити Мејк за изградњу и инсталацију програма." | #~ "да буде могуће користити Мејк за изградњу и инсталацију програма." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "The GNU Binutils are a collection of binary tools.  The main ones are\n" | #~ "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 " | #~ "`ld' (the GNU linker) and `as' (the GNU assembler).  They also include the\n" | ||||||
| #~ "the\n" |  | ||||||
| #~ "BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc." | #~ "BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гнуова бинпомагала јесу скуп бинарних алата.  Главни су „ld“ (Гнуов " | #~ "Гнуова бинпомагала јесу скуп бинарних алата.  Главни су „ld“ (Гнуов везник) и „as“ (Гнуов асемблер). У њих такође спадају библиотека „BFD“\n" | ||||||
| #~ "везник) и „as“ (Гнуов асемблер). У њих такође спадају библиотека „BFD“\n" |  | ||||||
| #~ "(Binary File Descriptor), „gprof“, „nm“, „strip“, итд." | #~ "(Binary File Descriptor), „gprof“, „nm“, „strip“, итд." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
|  | @ -1501,66 +1501,48 @@ msgstr "пратим преусмеравање на „~a“...~%" | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "GNU Guile is an implementation of the Scheme programming language, with\n" | #~ "GNU Guile is an implementation of the Scheme programming language, with\n" | ||||||
| #~ "support for many SRFIs, packaged for use in a wide variety of " | #~ "support for many SRFIs, packaged for use in a wide variety of environments.\n" | ||||||
| #~ "environments.\n" | #~ "In addition to implementing the R5RS Scheme standard and a large subset of\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" | #~ "R6RS, Guile includes a module system, full access to POSIX system calls,\n" | ||||||
| #~ "networking support, multiple threads, dynamic linking, a foreign " | #~ "networking support, multiple threads, dynamic linking, a foreign function\n" | ||||||
| #~ "function\n" |  | ||||||
| #~ "call interface, and powerful string processing." | #~ "call interface, and powerful string processing." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гну Гуиле је примена програмског језика Шеме, са подршком за многе\n" | #~ "Гну Гуиле је примена програмског језика Шеме, са подршком за многе\n" | ||||||
| #~ "СРФИ-ове запакован за коришћење у разним окружењима.\n" | #~ "СРФИ-ове запакован за коришћење у разним окружењима.\n" | ||||||
| #~ "Као додатак примене Р5РС стандарда Шеме и великог подскупа Р6РС, Гуиле\n" | #~ "Као додатак примене Р5РС стандарда Шеме и великог подскупа Р6РС, Гуиле\n" | ||||||
| #~ "обухвата систем модула, потпун приступ системским позивима ПОСИКС-а, " | #~ "обухвата систем модула, потпун приступ системским позивима ПОСИКС-а, пподршку умрежавања, вишеструке нити, динамичко повезивање, сучеље позива\n" | ||||||
| #~ "пподршку умрежавања, вишеструке нити, динамичко повезивање, сучеље " |  | ||||||
| #~ "позива\n" |  | ||||||
| #~ "страних функција, и моћну обраду ниске." | #~ "страних функција, и моћну обраду ниске." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n" | #~ "GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n" | ||||||
| #~ "provides functions for creating text user interfaces.  The text user " | #~ "provides functions for creating text user interfaces.  The text user interface\n" | ||||||
| #~ "interface\n" | #~ "functionality is built on the ncurses libraries: curses, form, panel, and\n" | ||||||
| #~ "functionality is built on the ncurses libraries: curses, form, panel, " |  | ||||||
| #~ "and\n" |  | ||||||
| #~ "menu." | #~ "menu." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гну Гуиле Ен-курсис је библиотека за преводиоца Гуле Шеме која " | #~ "Гну Гуиле Ен-курсис је библиотека за преводиоца Гуле Шеме која обезбеђује\n" | ||||||
| #~ "обезбеђује\n" | #~ "функције за стварање текстуалног корисничког сучеља. Функционалност текстуалног\n" | ||||||
| #~ "функције за стварање текстуалног корисничког сучеља. Функционалност " | #~ "корисничког сучеља је изграђена на ен-курсис библиотекама: „curses, form,\n" | ||||||
| #~ "текстуалног\n" |  | ||||||
| #~ "корисничког сучеља је изграђена на ен-курсис библиотекама: „curses, " |  | ||||||
| #~ "form,\n" |  | ||||||
| #~ "panel, и menu“." | #~ "panel, и menu“." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n" | #~ "The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n" | ||||||
| #~ "for Vixie cron.  It is written in pure Guile, and allows configuration " | #~ "for Vixie cron.  It is written in pure Guile, and allows configuration files\n" | ||||||
| #~ "files\n" | #~ "to be written in scheme (as well as Vixie's original format) for infinite\n" | ||||||
| #~ "to be written in scheme (as well as Vixie's original format) for " | #~ "flexibility in specifying when jobs should be run.  Mcron was written by Dale\n" | ||||||
| #~ "infinite\n" |  | ||||||
| #~ "flexibility in specifying when jobs should be run.  Mcron was written by " |  | ||||||
| #~ "Dale\n" |  | ||||||
| #~ "Mellor." | #~ "Mellor." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гнуов пакет „mcron“ (Мелоров крон) је 100% сагласна замена за Викси " | #~ "Гнуов пакет „mcron“ (Мелоров крон) је 100% сагласна замена за Викси крон.\n" | ||||||
| #~ "крон.\n" | #~ "Написан је у чистом Гуилу, и допушта да датотеке подешавања буду записане\n" | ||||||
| #~ "Написан је у чистом Гуилу, и допушта да датотеке подешавања буду " |  | ||||||
| #~ "записане\n" |  | ||||||
| #~ "у шеми (као и у Виксијевом изворном запису) са бескрајном сагласношћу у\n" | #~ "у шеми (као и у Виксијевом изворном запису) са бескрајном сагласношћу у\n" | ||||||
| #~ "навођењу када послови требају да се покрену.  Написао га је Дејл Мелор." | #~ "навођењу када послови требају да се покрену.  Написао га је Дејл Мелор." | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "GNU recutils is a set of tools and libraries to access human-editable,\n" | #~ "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 " | #~ "text-based databases called recfiles.  The data is stored as a sequence of\n" | ||||||
| #~ "of\n" |  | ||||||
| #~ "records, each record containing an arbitrary number of named fields." | #~ "records, each record containing an arbitrary number of named fields." | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Гну рекутилс је скуп алата и библиотека за приступ базама података " | #~ "Гну рекутилс је скуп алата и библиотека за приступ базама података заснованим на\n" | ||||||
| #~ "заснованим на\n" | #~ "тексту, званим „recfiles“ које корисници могу да мењају.  Подаци су ускладиштени\n" | ||||||
| #~ "тексту, званим „recfiles“ које корисници могу да мењају.  Подаци су " |  | ||||||
| #~ "ускладиштени\n" |  | ||||||
| #~ "као низ снимака, сваки снимак садржи одговарајући број именованих поља." | #~ "као низ снимака, сваки снимак садржи одговарајући број именованих поља." | ||||||
| 
 | 
 | ||||||
| #~ msgid "profile `~a' does not exist~%" | #~ msgid "profile `~a' does not exist~%" | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| # GNU Guix --- Functional package management for GNU | # 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. | # 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_ROOT_FINDER="$abs_top_builddir/nix/scripts/list-runtime-roots" | ||||||
| NIX_SUBSTITUTERS="$abs_top_builddir/nix/scripts/substitute-binary" | NIX_SUBSTITUTERS="$abs_top_builddir/nix/scripts/substitute-binary" | ||||||
| NIX_SETUID_HELPER="$abs_top_builddir/nix-setuid-helper" | 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 | # The following variables need only be defined when compiling Guix | ||||||
| # modules, but we define them to be on the safe side in case of | # 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 | # 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. | # This file is part of GNU Guix. | ||||||
| # | # | ||||||
|  | @ -29,6 +29,33 @@ rm -rf "$new_store" | ||||||
| exit_hook=":" | exit_hook=":" | ||||||
| trap "chmod -R +w $new_store ; rm -rf $new_store $closure ; \$exit_hook" EXIT | 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" | mkdir -p "$new_store/$storedir" | ||||||
| new_store_dir="`cd "$new_store/$storedir" ; pwd`" | new_store_dir="`cd "$new_store/$storedir" ; pwd`" | ||||||
| new_store="`cd "$new_store" ; pwd`" | new_store="`cd "$new_store" ; pwd`" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -37,6 +37,14 @@ | ||||||
|   (base16-string->bytevector |   (base16-string->bytevector | ||||||
|    "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9")) |    "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-begin "hash") | ||||||
| 
 | 
 | ||||||
| (test-equal "sha256, empty" | (test-equal "sha256, empty" | ||||||
|  | @ -68,6 +76,55 @@ | ||||||
|     (equal? (sha256 contents) |     (equal? (sha256 contents) | ||||||
|             (call-with-input-file file port-sha256)))) |             (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) | (test-end) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										103
									
								
								tests/nar.scm
									
										
									
									
									
								
							
							
						
						
									
										103
									
								
								tests/nar.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -18,11 +18,17 @@ | ||||||
| 
 | 
 | ||||||
| (define-module (test-nar) | (define-module (test-nar) | ||||||
|   #:use-module (guix 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 bytevectors) | ||||||
|   #:use-module (rnrs io ports) |   #:use-module (rnrs io ports) | ||||||
|  |   #:use-module (srfi srfi-1) | ||||||
|   #:use-module (srfi srfi-26) |   #:use-module (srfi srfi-26) | ||||||
|  |   #:use-module (srfi srfi-34) | ||||||
|  |   #:use-module (srfi srfi-35) | ||||||
|   #:use-module (srfi srfi-64) |   #:use-module (srfi srfi-64) | ||||||
|   #:use-module (ice-9 ftw) |   #:use-module (ice-9 ftw) | ||||||
|  |   #:use-module (ice-9 regex) | ||||||
|   #:use-module (ice-9 match)) |   #:use-module (ice-9 match)) | ||||||
| 
 | 
 | ||||||
| ;; Test the (guix nar) module. | ;; Test the (guix nar) module. | ||||||
|  | @ -156,6 +162,24 @@ | ||||||
|   (string-append (dirname (search-path %load-path "pre-inst-env")) |   (string-append (dirname (search-path %load-path "pre-inst-env")) | ||||||
|                  "/test-nar-" (number->string (getpid)))) |                  "/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") | (test-begin "nar") | ||||||
| 
 | 
 | ||||||
|  | @ -201,6 +225,83 @@ | ||||||
|       (lambda () |       (lambda () | ||||||
|         (rmdir input))))) |         (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") | (test-end "nar") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -162,6 +162,38 @@ | ||||||
|          (equal? (valid-derivers %store o) |          (equal? (valid-derivers %store o) | ||||||
|                  (list (derivation-file-name d)))))) |                  (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" | (test-assert "log-file, derivation" | ||||||
|   (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '())) |   (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '())) | ||||||
|          (s (add-to-store %store "bash" #t "sha256" |          (s (add-to-store %store "bash" #t "sha256" | ||||||
|  | @ -389,6 +421,26 @@ Deriver: ~a~%" | ||||||
|              (pk 'corrupt-imported imported) |              (pk 'corrupt-imported imported) | ||||||
|              #f))))) |              #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") | (test-end "store") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| ;;; GNU Guix --- Functional package management for GNU | ;;; 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. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -139,6 +139,36 @@ | ||||||
|                    (append pids1 pids2))) |                    (append pids1 pids2))) | ||||||
|            (equal? (get-bytevector-all decompressed) data))))) |            (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). | ;; This is actually in (guix store). | ||||||
| (test-equal "store-path-package-name" | (test-equal "store-path-package-name" | ||||||
|   "bash-4.2-p24" |   "bash-4.2-p24" | ||||||
|  |  | ||||||
		Reference in a new issue