* It is now possible to execute a builder using a shell inside the Nix

store, rather than outside (such as /bin/sh).

  For instance, the Nix expression for the ATerm library now looks
  like this:

    {stdenv, fetchurl}:

    stdenv.mkDerivation {
      name = "aterm-2.0.5";
      builder = ./builder.sh;
      ...
    }

  where `mkDerivation' is a helper function in `stdenv' that massages
  the given attribute set into using the bash shell that is part of
  the standard environment:

    mkDerivation = attrs: derivation (att s // {
      builder = pkgs.bash ~ /bin/sh;
      args = ["-e" attrs.builder];
      stdenv = (...);
      system = (...).system;
    });

  Note that this makes it unnecessary to set the `stdenv' and `system'
  attributes, since `mkDerivation' already does that.


svn path=/nixpkgs/trunk/; revision=866
This commit is contained in:
Eelco Dolstra 2004-03-28 21:07:43 +00:00
parent f8f9f4d12c
commit 892b119c9d
3 changed files with 31 additions and 19 deletions

View File

@ -1,6 +1,3 @@
#! /bin/sh
. $stdenv/setup
configureFlags="--with-gcc"
genericBuild

View File

@ -1,12 +1,10 @@
{stdenv, fetchurl}:
derivation {
stdenv.mkDerivation {
name = "aterm-2.0.5";
system = stdenv.system;
builder = ./builder.sh;
src = fetchurl {
url = http://www.cwi.nl/projects/MetaEnv/aterm/aterm-2.0.5.tar.gz;
md5 = "68aefb0c10b2ab876b8d3c0b2d0cdb1b";
};
inherit stdenv;
}

View File

@ -1,19 +1,36 @@
{stdenv, glibc, pkgs, genericStdenv, gccWrapper}:
genericStdenv {
name = "stdenv-nix-linux";
preHook = ./prehook.sh;
initialPath = (import ../nix/path.nix) {pkgs = pkgs;};
let {
inherit stdenv;
body =
gcc = gccWrapper {
name = pkgs.gcc.name;
nativeTools = false;
nativeGlibc = false;
inherit (pkgs) gcc binutils;
inherit stdenv glibc;
};
genericStdenv {
name = "stdenv-nix-linux";
preHook = ./prehook.sh;
initialPath = (import ../nix/path.nix) {pkgs = pkgs;};
inherit stdenv;
gcc = gccWrapper {
name = pkgs.gcc.name;
nativeTools = false;
nativeGlibc = false;
inherit (pkgs) gcc binutils;
inherit stdenv glibc;
};
param1 = pkgs.bash;
}
# Add a utility function to produce derivations that use this
# stdenv and its the bash shell.
// {
mkDerivation = attrs: derivation (attrs // {
builder = pkgs.bash ~ /bin/sh;
args = ["-e" attrs.builder];
stdenv = body;
system = body.system;
});
};
param1 = pkgs.bash;
}