aboutsummaryrefslogtreecommitdiff
path: root/nix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-01-23 23:48:34 +0100
committerLudovic Courtès <ludo@gnu.org>2014-01-24 00:01:50 +0100
commit49e6291a7a257f89f01644423f1b685778b8862a (patch)
treed461cae8cfc21fc9fa421c3fb62d372bf44c2ca7 /nix
parent50add47748eb40371d8b88208a13e7230d15c220 (diff)
downloadgnu-guix-49e6291a7a257f89f01644423f1b685778b8862a.tar
gnu-guix-49e6291a7a257f89f01644423f1b685778b8862a.tar.gz
Add 'guix offload' as a daemon build hook.
* nix/nix-daemon/guix-daemon.cc (GUIX_OPT_NO_BUILD_HOOK): New macro. (options): Add '--no-build-hook'. (parse_opt): Handle it. (main)[HAVE_DAEMON_OFFLOAD_HOOK]: Set 'useBuildHook' by default. Set $NIX_BUILD_HOOK to our offload hook unless otherwise specified. [!HAVE_DAEMON_OFFLOAD_HOOK]: Clear 'useBuildHook'. * pre-inst-env.in: Set and export NIX_BUILD_HOOK. * nix/scripts/offload.in, guix/scripts/offload.scm: New files. * guix/ui.scm (show-guix-help)[internal?]: Add "offload". * config-daemon.ac: Call 'GUIX_CHECK_UNBUFFERED_CBIP'. Instantiate 'nix/scripts/offload'. Set 'BUILD_DAEMON_OFFLOAD' conditional, and optionally define 'HAVE_DEAMON_OFFLOAD_HOOK' cpp macro. * daemon.am (nodist_pkglibexec_SCRIPTS)[BUILD_DAEMON_OFFLOAD]: Add it. * Makefile.am (MODULES)[BUILD_DAEMON_OFFLOAD]: Add 'guix/scripts/offload.scm'. (EXTRA_DIST)[!BUILD_DAEMON_OFFLOAD]: Likewise. * m4/guix.m4 (GUIX_CHECK_UNBUFFERED_CBIP): New macro. * doc/guix.texi (Setting Up the Daemon): Move most of the body to... (Build Environment Setup): ... this. New subsection. (Daemon Offload Setup): New subsection.
Diffstat (limited to 'nix')
-rw-r--r--nix/nix-daemon/guix-daemon.cc23
-rw-r--r--nix/scripts/offload.in11
2 files changed, 33 insertions, 1 deletions
diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc
index cf87e39354..d35b1cd076 100644
--- a/nix/nix-daemon/guix-daemon.cc
+++ b/nix/nix-daemon/guix-daemon.cc
@@ -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)
diff --git a/nix/scripts/offload.in b/nix/scripts/offload.in
new file mode 100644
index 0000000000..50faed31c0
--- /dev/null
+++ b/nix/scripts/offload.in
@@ -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