diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-11-19 16:07:47 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-11-19 16:07:47 +0000 |
commit | aa392c3aa7e4743ff50b609009f4998a70ded628 (patch) | |
tree | 651996bf5c66df5e45ad4902f2ee83123d28441f /pkgs/build-support/trivial-builders.nix | |
parent | 5fca80982a4fba9c5b45b80045db4bb49cd724eb (diff) | |
download | nixpkgs-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.nix | 71 |
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 + ''; + +} |