From 1ac9dcd24d3c41954068f2bd2e415552cb0de7c1 Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <eelco.dolstra@logicblox.com>
Date: Thu, 19 Aug 2010 12:37:10 +0000
Subject: [PATCH] * Fix eval-release.nix by testing whether all attributes of a
   derivation evaluate inside the tryEval.  This catches cases such as  
 aufs2-util, which fails due to an assertion in its dependency aufs2. *
 Explicitly blacklist "xbursttools" because it gives some   evaluation error
 in cross-OpenSSL.  No idea why, probably due to   some pass-through
 attribute.

svn path=/nixpkgs/trunk/; revision=23247
---
 maintainers/scripts/eval-release.nix          | 8 ++++++--
 pkgs/lib/customisation.nix                    | 2 +-
 pkgs/lib/trivial.nix                          | 4 ++++
 pkgs/tools/misc/partition-manager/default.nix | 8 ++++----
 pkgs/top-level/all-packages.nix               | 7 ++++---
 5 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/maintainers/scripts/eval-release.nix b/maintainers/scripts/eval-release.nix
index 64dbbd15cf3..62607fcc497 100644
--- a/maintainers/scripts/eval-release.nix
+++ b/maintainers/scripts/eval-release.nix
@@ -6,9 +6,13 @@ let
 
   lib = (import ../.. {}).lib;
 
-  rel = removeAttrs (import ../../pkgs/top-level/release.nix) ["tarball"];
+  rel = removeAttrs (import ../../pkgs/top-level/release.nix) [ "tarball" "xbursttools" ];
 
-  maybe = x: let y = builtins.tryEval x; in if y.success then y.value else null;
+  strictList = xs: lib.fold (x: xs: lib.seq x xs) xs xs;
+  
+  strictAttrs = as: strictList (lib.attrValues as);
+
+  maybe = as: let y = builtins.tryEval (strictAttrs as); in if y.success then y.value else builtins.trace "FAIL" null;
 
   call = attrs: lib.flip lib.mapAttrs attrs
     (n: v: builtins.trace n (
diff --git a/pkgs/lib/customisation.nix b/pkgs/lib/customisation.nix
index 7b4b390cbef..e8946ddf743 100644
--- a/pkgs/lib/customisation.nix
+++ b/pkgs/lib/customisation.nix
@@ -54,7 +54,7 @@ rec {
         makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs));
       deepOverride = newArgs:
         makeOverridable f (lib.overrideExisting (lib.mapAttrs (deepOverrider newArgs) origArgs) newArgs);
-      origArgs = origArgs;
+      #origArgs = origArgs;
     };
 
   deepOverrider = newArgs: name: x: if builtins.isAttrs x then (
diff --git a/pkgs/lib/trivial.nix b/pkgs/lib/trivial.nix
index aaae36afa05..af47a8c8841 100644
--- a/pkgs/lib/trivial.nix
+++ b/pkgs/lib/trivial.nix
@@ -18,4 +18,8 @@ rec {
   # Flip the order of the arguments of a binary function.
   flip = f: a: b: f b a;
 
+  # `seq x y' evaluates x, then returns y.  That is, it forces strict
+  # evaluation of its first argument.
+  seq = x: y: if x == null then y else y;
+  
 }
diff --git a/pkgs/tools/misc/partition-manager/default.nix b/pkgs/tools/misc/partition-manager/default.nix
index fd8abf7caf3..7775aae5bd8 100644
--- a/pkgs/tools/misc/partition-manager/default.nix
+++ b/pkgs/tools/misc/partition-manager/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, gettext, parted, libuuid, qt, kde, perl }:
+{ stdenv, fetchurl, cmake, gettext, parted, libuuid, qt4, kde, perl }:
 
 stdenv.mkDerivation {
   name = "partitionmanager-1.0.0";
@@ -9,16 +9,16 @@ stdenv.mkDerivation {
   };
 
   buildInputs =
-    [ cmake gettext parted libuuid qt kde.kdelibs kde.kdebase kde.automoc4 perl kde.phonon ];
+    [ cmake gettext parted libuuid qt4 kde.kdelibs kde.kdebase kde.automoc4 perl kde.phonon ];
 
   preConfigure = ''
     export VERBOSE=1
-    cmakeFlagsArray=($cmakeFlagsArray -DGETTEXT_INCLUDE_DIR=${gettext}/include -DCMAKE_INCLUDE_PATH=${qt}/include/QtGui )
+    cmakeFlagsArray=($cmakeFlagsArray -DGETTEXT_INCLUDE_DIR=${gettext}/include -DCMAKE_INCLUDE_PATH=${qt4}/include/QtGui )
   '';
 
   postInstall = ''
     set -x
-    rpath=`patchelf --print-rpath $out/bin/partitionmanager-bin`:${qt}/lib 
+    rpath=`patchelf --print-rpath $out/bin/partitionmanager-bin`:${qt4}/lib 
     for p in $out/bin/partitionmanager-bin; do
       patchelf --set-rpath $rpath $p
     done
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 8026345e5d6..5556a128bf7 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1303,7 +1303,8 @@ let
     inherit stdenv fetchgit autoconf automake libusb confuse;
     # It needs a cross compiler for mipsel to build the firmware it will
     # load into the Ben Nanonote
-    gccCross = let
+    gccCross =
+      let
         pkgsCross = (import ./all-packages.nix) {
           inherit system;
           inherit bootStdenv noSysDirs gccWithCC gccWithProfiling config;
@@ -4879,7 +4880,8 @@ let
   windows = rec {
     w32api = callPackage ../os-specific/windows/w32api {
       gccCross = gccCrossStageStatic;
-      binutilsCross = binutilsCross;    };
+      binutilsCross = binutilsCross;
+    };
 
     w32api_headers = w32api.override {
       onlyHeaders = true;
@@ -5919,7 +5921,6 @@ let
 
   partitionManager = callPackage ../tools/misc/partition-manager {
     kde = kde44;
-    qt = qt4;
   };
 
   pdftk = callPackage ../tools/typesetting/pdftk { };