summary refs log tree commit diff
path: root/pkgs/build-support/trivial-builders.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2009-11-19 16:07:47 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2009-11-19 16:07:47 +0000
commitaa392c3aa7e4743ff50b609009f4998a70ded628 (patch)
tree651996bf5c66df5e45ad4902f2ee83123d28441f /pkgs/build-support/trivial-builders.nix
parent5fca80982a4fba9c5b45b80045db4bb49cd724eb (diff)
downloadnixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar.gz
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar.bz2
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar.lz
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar.xz
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.tar.zst
nixpkgs-aa392c3aa7e4743ff50b609009f4998a70ded628.zip
* Move functions like `runCommand' out of all-packages.nix and into
  build-support/.

svn path=/nixpkgs/trunk/; revision=18465
Diffstat (limited to 'pkgs/build-support/trivial-builders.nix')
-rw-r--r--pkgs/build-support/trivial-builders.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
new file mode 100644
index 00000000000..1c9e7fc49f2
--- /dev/null
+++ b/pkgs/build-support/trivial-builders.nix
@@ -0,0 +1,71 @@
+{ stdenv, lndir }:
+
+rec {
+
+  # Run the shell command `buildCommand' to produce a store path named
+  # `name'.  The attributes in `env' are added to the environment
+  # prior to running the command.
+  runCommand = name: env: buildCommand:
+    stdenv.mkDerivation ({
+      inherit name buildCommand;
+    } // env);
+
+
+  # Create a single file.
+  writeTextFile =
+    { name # the name of the derivation
+    , text
+    , executable ? false # run chmod +x ?
+    , destination ? ""   # relative path appended to $out eg "/bin/foo"
+    }:
+    runCommand name {inherit text executable; }
+      ''
+        n=$out${destination}
+        mkdir -p "$(dirname "$n")"
+        echo -n "$text" > "$n"
+        (test -n "$executable" && chmod +x "$n") || true
+      '';
+
+    
+  # Shorthands for `writeTextFile'.
+  writeText = name: text: writeTextFile {inherit name text;};
+  writeScript = name: text: writeTextFile {inherit name text; executable = true;};
+  writeScriptBin = name: text: writeTextFile {inherit name text; executable = true; destination = "/bin/${name}";};
+
+
+  # Create a forest of symlinks to the files in `paths'.
+  symlinkJoin = name: paths:
+    runCommand name { inherit paths; }
+      ''
+        mkdir -p $out
+        for i in $paths; do
+          ${lndir}/bin/lndir $i $out
+        done
+      '';
+
+
+  # Make a package that just contains a setup hook with the given contents.
+  makeSetupHook = script:
+    runCommand "hook" {}
+      ''
+        ensureDir $out/nix-support
+        cp ${script} $out/nix-support/setup-hook
+      '';
+
+
+  # Write the references (i.e. the runtime dependencies in the Nix store) of `path' to a file.
+  writeReferencesToFile = path: runCommand "runtime-deps"
+    {
+      exportReferencesGraph = ["graph" path];
+    }
+    ''
+      touch $out
+      while read path; do
+        echo $path >> $out
+        read dummy
+        read nrRefs
+        for ((i = 0; i < nrRefs; i++)); do read ref; done
+      done < graph
+    '';
+
+}