Compare commits

...

13 Commits

Author SHA1 Message Date
Eelco Dolstra
875f94e248 svn path=/nixpkgs/branches/syscall-tracing/; revision=29261 2011-09-13 22:09:22 +00:00
Eelco Dolstra
6f36a40fae * Doh.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29233
2011-09-13 08:52:06 +00:00
Eelco Dolstra
411bf3107d * keepBuildTree doesn't always work properly.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29232
2011-09-12 21:30:04 +00:00
Eelco Dolstra
2001f17547 * "rm -rf" doesn't work if some directories are read-only.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29202
2011-09-12 09:11:18 +00:00
Eelco Dolstra
06e9027476 * Compress the log on the fly, compress .build, and tee stdout/stderr
to prevent the builder from being killed after an hour.

svn path=/nixpkgs/branches/syscall-tracing/; revision=29159
2011-09-10 18:31:43 +00:00
Eelco Dolstra
6643f177e3 svn path=/nixpkgs/branches/syscall-tracing/; revision=29158 2011-09-10 14:18:18 +00:00
Eelco Dolstra
ae613dfda4 * Weird infinite recursion in kde47, so turn it off.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29157
2011-09-10 13:28:18 +00:00
Eelco Dolstra
bf364e9ff6 * In overrideDerivation, handle derivations with a passthru
attribute properly.

svn path=/nixpkgs/branches/syscall-tracing/; revision=29156
2011-09-10 13:26:19 +00:00
Eelco Dolstra
f032df497e * Use stdenv.lib.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29155
2011-09-10 13:25:44 +00:00
Eelco Dolstra
6787dddb04 * Disable all packages using builderDefs or composableDerivation.
They give evaluation errors when the tracing stdenv adapter is
  applied. 

svn path=/nixpkgs/branches/syscall-tracing/; revision=29154
2011-09-10 13:25:18 +00:00
Eelco Dolstra
8d40289096 * fftw updated to 3.3, and follow the coding guidelines.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29153
2011-09-10 13:02:24 +00:00
Eelco Dolstra
d78637a80a * Hacky: don't do tracing on derivations that produce
a single regular file.  Those fail because the tracer
  creates $out/.build and $out/.trace.

svn path=/nixpkgs/branches/syscall-tracing/; revision=29081
2011-09-07 15:15:37 +00:00
Eelco Dolstra
b92492a373 * Apply the syscall tracer stdenv adapter globally.
svn path=/nixpkgs/branches/syscall-tracing/; revision=29080
2011-09-07 15:14:17 +00:00
11 changed files with 90 additions and 50 deletions

View File

@ -1,4 +1,5 @@
args: with args; with stringsWithDeps; with lib; args: with args; with stringsWithDeps; with lib;
assert false;
let inherit (builtins) head tail trace; in let inherit (builtins) head tail trace; in
(rec (rec
{ {

View File

@ -13,6 +13,7 @@ let
stdenv.mkDerivation ({ stdenv.mkDerivation ({
name = "mirrors-list"; name = "mirrors-list";
builder = ./write-mirror-list.sh; builder = ./write-mirror-list.sh;
dontTrace = true;
} // mirrors); } // mirrors);
# Names of the master sites that are mirrored (i.e., "sourceforge", # Names of the master sites that are mirrored (i.e., "sourceforge",
@ -65,6 +66,8 @@ stdenv.mkDerivation {
else if name != "" then name else if name != "" then name
else baseNameOf (toString (builtins.head urls_)); else baseNameOf (toString (builtins.head urls_));
dontTrace = true;
builder = ./builder.sh; builder = ./builder.sh;
buildInputs = [curl]; buildInputs = [curl];

View File

@ -1,31 +1,29 @@
{fetchurl, stdenv, builderDefs, stringsWithDeps, singlePrecision ? false}: { fetchurl, stdenv, singlePrecision ? false }:
let localDefs = builderDefs.passthru.function {
src =
fetchurl {
url = ftp://ftp.fftw.org/pub/fftw/fftw-3.2.2.tar.gz;
sha256 = "13vnglardq413q2518zi4a8pam3znydrz28m9w09kss9xrjsx9va";
};
buildInputs = [];
configureFlags = ["--enable-shared" "--enable-openmp"]
# some distros seem to be shipping both versions within the same package?
# why does --enable-float still result in ..3f.so instead of ..3.so?
++ (if singlePrecision then [ "--enable-single" ] else [ ])
# I think all i686 has sse
++ (if (stdenv.isi686 || stdenv.isx86_64) && singlePrecision then [ "--enable-sse" ] else [ ])
# I think all x86_64 has sse2
++ (if stdenv.isx86_64 && ! singlePrecision then [ "--enable-sse2" ] else [ ]);
with stdenv.lib;
let version = "3.3"; in
stdenv.mkDerivation rec {
name = "fftw-${version}" + (if singlePrecision then "-single" else "-double");
src = fetchurl {
url = "ftp://ftp.fftw.org/pub/fftw/fftw-${version}.tar.gz";
sha256 = "1skakcijq5rds6mmj7jffqk5i4fw7p81k4z1iikkx4qk3999hnnj";
}; };
in with localDefs;
stdenv.mkDerivation { configureFlags =
name = "fftw-3.2.2" + ( if singlePrecision then "-single" else "-double" ); [ "--enable-shared" "--enable-openmp" ]
builder = writeScript "fftw-3.2.1-builder" # some distros seem to be shipping both versions within the same package?
(textClosure localDefs [doConfigure doMakeInstall doForceShare]); # why does --enable-float still result in ..3f.so instead of ..3.so?
++ optional singlePrecision "--enable-single"
# I think all i686 has sse
++ optional ((stdenv.isi686 || stdenv.isx86_64) && singlePrecision) "--enable-sse"
# I think all x86_64 has sse2
++ optional (stdenv.isx86_64 && !singlePrecision) "--enable-sse2";
meta = { meta = {
description = "Fastest Fourier Transform in the West library"; homepage = http://www.fftw.org/;
}; description = "A C subroutine library for computing the discrete Fourier transform";
passthru = {
# Allow instantiating "-A fftw.src"
inherit src;
}; };
} }

View File

@ -20,7 +20,7 @@ let inherit (lib) nv nvs; in
# consider adding addtional elements by derivation.merge { removeAttrs = ["elem"]; }; # consider adding addtional elements by derivation.merge { removeAttrs = ["elem"]; };
removeAttrs ? ["cfg" "flags"] removeAttrs ? ["cfg" "flags"]
}: (lib.defaultOverridableDelayableArgs ( a: mkDerivation a) }: assert false; (lib.defaultOverridableDelayableArgs ( a: mkDerivation a)
{ {
inherit applyPreTidy removeAttrs; inherit applyPreTidy removeAttrs;
}).merge; }).merge;

View File

@ -36,13 +36,13 @@ rec {
# Filter out special attributes. # Filter out special attributes.
drop = ["meta" "passthru" "outPath" "drvPath" "hostDrv" "buildDrv" "type" "override" "deepOverride" "origArgs"] drop = ["meta" "passthru" "outPath" "drvPath" "hostDrv" "buildDrv" "type" "override" "deepOverride" "origArgs"]
# also drop functions such as .merge .override etc # also drop functions such as .merge .override etc
++ lib.filter (n: isFunction (getAttr n drv)) (attrNames drv); ++ lib.filter (n: isFunction (getAttr n drv)) (attrNames drv)
++ lib.optionals (drv ? passthru) (attrNames drv.passthru);
attrs = removeAttrs drv drop; attrs = removeAttrs drv drop;
newDrv = derivation (attrs // (f drv)); newDrv = derivation (attrs // (f drv));
in newDrv // in newDrv
{ meta = if drv ? meta then drv.meta else {}; // { meta = if drv ? meta then drv.meta else {}; }
passthru = if drv ? passthru then drv.passthru else {}; // (if drv ? passthru then drv.passthru // { passthru = drv.passthru; } else {});
};
# usage: (you can use override multiple times) # usage: (you can use override multiple times)

View File

@ -2,8 +2,9 @@
a new stdenv with different behaviour, e.g. using a different C a new stdenv with different behaviour, e.g. using a different C
compiler. */ compiler. */
{dietlibc, fetchurl, runCommand}: { dietlibc, fetchurl, runCommand }:
let pkgs = import /etc/nixos/nixpkgs { }; in
rec { rec {
@ -349,4 +350,35 @@ rec {
drvPath = validate pkg.drvPath; drvPath = validate pkg.drvPath;
}; };
}; };
traceScript = pkgs.writeScript "builder.sh"
''
#! ${pkgs.bash}/bin/bash
echo tracing: $builder $realArgs
set +o posix
${pkgs.coreutils}/bin/mkdir -p $out/.trace $out/.build
# Compress the strace output on the fly. The builder's stderr
# also goes to the log so that the trace processor can see stuff
# like Make trace messages.
exec 4> >(${pkgs.bzip2}/bin/bzip2 > $out/.trace/log.bz2)
exec 5> >(${pkgs.coreutils}/bin/tee /dev/fd/4)
${pkgs.strace}/bin/strace -e trace=file,process,dup,dup2,close,pipe -v -q -f -s 512 -o /dev/fd/4 ${pkgs.stdenv.shell} -c 'cd $out/.build; exec $builder $realArgs' 2>&5
(cd $out && ${pkgs.gnutar}/bin/tar c .build | ${pkgs.bzip2}/bin/bzip2 > .build.tar.bz2 && ${pkgs.coreutils}/bin/chmod -R u+w .build && ${pkgs.coreutils}/bin/rm -rf .build)
'';
traceSyscalls = stdenv: stdenv //
{ mkDerivation = args: stdenv.lib.overrideDerivation (stdenv.mkDerivation args)
(args2: if args2 ? dontTrace then { } else {
realArgs = args2.args;
args = [ "-e" traceScript ];
enableParallelBuilding = false;
# Don't run the patchelf phase in stdenv since I don't want
# Nixpkgs-specific stuff polluting our pictures :-)
dontPatchELF = true;
});
};
} }

View File

@ -87,7 +87,8 @@ let
# should be made available to Nix expressions using the # should be made available to Nix expressions using the
# derivation (e.g., in assertions). # derivation (e.g., in assertions).
// //
(if attrs ? passthru then attrs.passthru else {}); lib.optionalAttrs (attrs ? passthru)
(attrs.passthru // { passthru = attrs.passthru; });
# Utility flags to test the type of platform. # Utility flags to test the type of platform.
isDarwin = result.system == "i686-darwin" isDarwin = result.system == "i686-darwin"

View File

@ -307,7 +307,7 @@ stripDirs() {
if test -n "${dirs}"; then if test -n "${dirs}"; then
header "stripping (with flags $stripFlags) in $dirs" header "stripping (with flags $stripFlags) in $dirs"
find $dirs -type f -print0 | xargs -0 ${xargsFlags:--r} strip $stripFlags || true find $dirs \( -name '.build' -prune \) -type f -print0 | xargs -0 ${xargsFlags:--r} strip $stripFlags || true
stopNest stopNest
fi fi
} }
@ -665,7 +665,7 @@ patchShebangs() {
header "patching script interpreter paths" header "patching script interpreter paths"
local dir="$1" local dir="$1"
local f local f
for f in $(find "$dir" -type f -perm +0100); do for f in $(find "$dir" \( -name '.build' -prune \) -type f -perm +0100); do
local oldPath=$(sed -ne '1 s,^#![ ]*\([^ ]*\).*$,\1,p' "$f") local oldPath=$(sed -ne '1 s,^#![ ]*\([^ ]*\).*$,\1,p' "$f")
if test -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE"; then if test -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE"; then
local newPath=$(type -P $(basename $oldPath) || true) local newPath=$(type -P $(basename $oldPath) || true)

View File

@ -7,6 +7,8 @@
# The function defaults are for easy testing. # The function defaults are for easy testing.
{system ? "i686-linux", allPackages ? import ../../top-level/all-packages.nix, platform}: {system ? "i686-linux", allPackages ? import ../../top-level/all-packages.nix, platform}:
with import ../adapters.nix { dietlibc = null; fetchurl = null; runCommand = null; };
rec { rec {
bootstrapFiles = bootstrapFiles =
@ -143,14 +145,14 @@ rec {
# Create the first "real" standard environment. This one consists # Create the first "real" standard environment. This one consists
# of bootstrap tools only, and a minimal Glibc to keep the GCC # of bootstrap tools only, and a minimal Glibc to keep the GCC
# configure script happy. # configure script happy.
stdenvLinuxBoot1 = stdenvBootFun { stdenvLinuxBoot1 = traceSyscalls (stdenvBootFun {
gcc = wrapGCC { gcc = wrapGCC {
libc = bootstrapGlibc; libc = bootstrapGlibc;
binutils = bootstrapTools; binutils = bootstrapTools;
coreutils = bootstrapTools; coreutils = bootstrapTools;
}; };
inherit fetchurl; inherit fetchurl;
}; });
# 2) These are the packages that we can build with the first # 2) These are the packages that we can build with the first
@ -164,15 +166,16 @@ rec {
firstBinutils = stdenvLinuxBoot1Pkgs.binutils; firstBinutils = stdenvLinuxBoot1Pkgs.binutils;
# 3) 2nd stdenv that we will use to build only the glibc. # 3) 2nd stdenv that we will use to build only the glibc.
stdenvLinuxBoot2 = stdenvBootFun { stdenvLinuxBoot2 = traceSyscalls (stdenvBootFun {
gcc = wrapGCC { gcc = wrapGCC {
libc = bootstrapGlibc; libc = bootstrapGlibc;
binutils = firstBinutils; binutils = firstBinutils;
coreutils = bootstrapTools; coreutils = bootstrapTools;
}; };
inherit fetchurl; inherit fetchurl;
}; });
# 4) These are the packages that we can build with the 2nd # 4) These are the packages that we can build with the 2nd
@ -191,7 +194,7 @@ rec {
# 6) Construct a third stdenv identical to the 2nd, except that # 6) Construct a third stdenv identical to the 2nd, except that
# this one uses the Glibc built in step 3. It still uses # this one uses the Glibc built in step 3. It still uses
# the recent binutils and rest of the bootstrap tools, including GCC. # the recent binutils and rest of the bootstrap tools, including GCC.
stdenvLinuxBoot3 = stdenvBootFun { stdenvLinuxBoot3 = traceSyscalls (stdenvBootFun {
gcc = wrapGCC { gcc = wrapGCC {
binutils = stdenvLinuxBoot1Pkgs.binutils; binutils = stdenvLinuxBoot1Pkgs.binutils;
coreutils = bootstrapTools; coreutils = bootstrapTools;
@ -202,7 +205,7 @@ rec {
inherit (stdenvLinuxBoot1Pkgs) perl; inherit (stdenvLinuxBoot1Pkgs) perl;
}; };
inherit fetchurl; inherit fetchurl;
}; });
# 7) The packages that can be built using the third stdenv. # 7) The packages that can be built using the third stdenv.
@ -229,7 +232,7 @@ rec {
# this one uses the dynamically linked GCC and Binutils from step # this one uses the dynamically linked GCC and Binutils from step
# 5. The other tools (e.g. coreutils) are still from the # 5. The other tools (e.g. coreutils) are still from the
# bootstrap tools. # bootstrap tools.
stdenvLinuxBoot4 = stdenvBootFun { stdenvLinuxBoot4 = traceSyscalls (stdenvBootFun {
gcc = wrapGCC rec { gcc = wrapGCC rec {
inherit (stdenvLinuxBoot3Pkgs) binutils; inherit (stdenvLinuxBoot3Pkgs) binutils;
coreutils = bootstrapTools; coreutils = bootstrapTools;
@ -241,7 +244,7 @@ rec {
inherit (stdenvLinuxBoot1Pkgs) perl; inherit (stdenvLinuxBoot1Pkgs) perl;
}; };
inherit fetchurl; inherit fetchurl;
}; });
# 9) The packages that can be built using the fourth stdenv. # 9) The packages that can be built using the fourth stdenv.
@ -258,7 +261,7 @@ rec {
# When updating stdenvLinux, make sure that the result has no # When updating stdenvLinux, make sure that the result has no
# dependency (`nix-store -qR') on bootstrapTools or the # dependency (`nix-store -qR') on bootstrapTools or the
# first binutils built. # first binutils built.
stdenvLinux = import ../generic rec { stdenvLinux = traceSyscalls (import ../generic rec {
name = "stdenv-linux"; name = "stdenv-linux";
inherit system; inherit system;
@ -295,6 +298,6 @@ rec {
gnumake gnused gnutar gnugrep gnupatch patchelf gnumake gnused gnutar gnugrep gnupatch patchelf
attr acl; attr acl;
}; };
}; });
} }

View File

@ -1507,6 +1507,7 @@ let
x11_ssh_askpass = callPackage ../tools/networking/x11-ssh-askpass { }; x11_ssh_askpass = callPackage ../tools/networking/x11-ssh-askpass { };
/*
xbursttools = assert stdenv ? glibc; import ../tools/misc/xburst-tools { xbursttools = assert stdenv ? glibc; import ../tools/misc/xburst-tools {
inherit stdenv fetchgit autoconf automake libusb confuse; inherit stdenv fetchgit autoconf automake libusb confuse;
# It needs a cross compiler for mipsel to build the firmware it will # It needs a cross compiler for mipsel to build the firmware it will
@ -1539,6 +1540,7 @@ let
in in
pkgsCross.gccCrossStageStatic; pkgsCross.gccCrossStageStatic;
}; };
*/
xclip = callPackage ../tools/misc/xclip { }; xclip = callPackage ../tools/misc/xclip { };
@ -7850,7 +7852,7 @@ let
# TODO: merge with branches/drop-kde4.5 if you want to remove KDE SC 4.5 # TODO: merge with branches/drop-kde4.5 if you want to remove KDE SC 4.5
# This branch removes kde45 and quite a few compatibility hacks # This branch removes kde45 and quite a few compatibility hacks
kde45 = kdePackagesFor pkgs.kde45 "4.5"; kde45 = kdePackagesFor pkgs.kde45 "4.5";
kde47 = kdePackagesFor pkgs.kde47 "4.7"; #kde47 = kdePackagesFor pkgs.kde47 "4.7";
kdePackagesFor = self: version: kdePackagesFor = self: version:
let callPackageOrig = callPackage; in let callPackageOrig = callPackage; in

View File

@ -35,7 +35,7 @@ rec {
prio = level: job: toJob job // { schedulingPriority = level; }; prio = level: job: toJob job // { schedulingPriority = level; };
toJob = x: if builtins.isAttrs x then x else toJob = x: if builtins.isAttrs x then x else
{ type = "job"; systems = x; schedulingPriority = 5; }; { type = "job"; systems = x; schedulingPriority = 1; };
/* Perform a job on the given set of platforms. The function `f' is /* Perform a job on the given set of platforms. The function `f' is
called by Hydra for each platform, and should return some job called by Hydra for each platform, and should return some job