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