summary refs log tree commit diff
path: root/nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix')
-rw-r--r--nix/guix-register/guix-register.cc25
-rw-r--r--nix/nix-daemon/guix-daemon.cc23
-rw-r--r--nix/scripts/offload.in11
3 files changed, 49 insertions, 10 deletions
diff --git a/nix/guix-register/guix-register.cc b/nix/guix-register/guix-register.cc
index 14478f6a13..324673f346 100644
--- a/nix/guix-register/guix-register.cc
+++ b/nix/guix-register/guix-register.cc
@@ -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);
     }
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