summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2008-05-22 12:01:24 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2008-05-22 12:01:24 +0000
commit0aea0db581e84c11556d0ee5c473848f343cc6bb (patch)
tree51e5ff877032544013d1aa8634f6d5d80c72f656 /pkgs
parentc741baeb4e1743aee549676fd4a357eb33b3737b (diff)
downloadnixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar.gz
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar.bz2
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar.lz
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar.xz
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.tar.zst
nixpkgs-0aea0db581e84c11556d0ee5c473848f343cc6bb.zip
* Put all packages that depend on a specific kernel (notably kernel
  modules) together in an attribute set returned by the function
  "kernelPackagesFor" that takes a kernel as argument.  For instance,
  kernelPackages_2_6_23 is the result of calling this function with
  kernel_2_6_23.

  This is necessary in NixOS to make it easier to override the kernel:
  it's not enough to just specify a different kernel (via the
  boot.kernel option), but you also need matching nvidiaDriver, aufs,
  iwlwifi, etc.  Having a single attribute set that contains all
  kernel-related packages makes this much easier.

* The kernel now has a passthru attribute "features" that allows NixOS
  expressions to test whether a kernel has certain features.  For
  instance, the externel "iwlwifi" kernel module package should only
  be built on kernels < 2.6.24, as kernels >= 2.6.24 have iwlwifi
  support integrated.  So the NixOS expressions can do the test
  "kernel.features ? iwlwifi" to see if the iwlwifi package should be
  built.

  Kernel patches can declare additional features.  E.g., the fbsplash
  patch adds a "fbSplash" feature.

svn path=/nixpkgs/trunk/; revision=11881
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/os-specific/linux/aufs/default.nix2
-rw-r--r--pkgs/os-specific/linux/iwlwifi/default.nix6
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.23.nix7
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.25.nix13
-rw-r--r--pkgs/os-specific/linux/klibc/shrunk.nix2
-rw-r--r--pkgs/os-specific/linux/nvidia/default.nix2
-rw-r--r--pkgs/os-specific/linux/wis-go7007/default.nix2
-rw-r--r--pkgs/top-level/all-packages.nix161
8 files changed, 112 insertions, 83 deletions
diff --git a/pkgs/os-specific/linux/aufs/default.nix b/pkgs/os-specific/linux/aufs/default.nix
index 1668f300fa8..e8361a7265d 100644
--- a/pkgs/os-specific/linux/aufs/default.nix
+++ b/pkgs/os-specific/linux/aufs/default.nix
@@ -1,7 +1,7 @@
 {stdenv, fetchurl, kernel}:
 
 stdenv.mkDerivation {
-  name = "aufs-20080508";
+  name = "aufs-20080508-${kernel.version}";
 
   src = fetchurl {
     url = http://nixos.org/tarballs/aufs-20080508.tar.bz2;
diff --git a/pkgs/os-specific/linux/iwlwifi/default.nix b/pkgs/os-specific/linux/iwlwifi/default.nix
index ed551e9bd45..c993886c21d 100644
--- a/pkgs/os-specific/linux/iwlwifi/default.nix
+++ b/pkgs/os-specific/linux/iwlwifi/default.nix
@@ -1,10 +1,12 @@
 {stdenv, fetchurl, kernel}:
 
+let version = "1.2.25"; in
+
 stdenv.mkDerivation rec {
-  name = "iwlwifi-1.2.25";
+  name = "iwlwifi-${version}-${kernel.version}";
 
   src = fetchurl {
-    url = "http://www.intellinuxwireless.org/iwlwifi/downloads/${name}.tgz";
+    url = "http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-${version}.tgz";
     sha256 = "09fjy0swcyd77fdp8x2825wj5cd73hwbzl8mz9sy2ha21p1qwq1d";
   };
 
diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.23.nix b/pkgs/os-specific/linux/kernel/linux-2.6.23.nix
index b58fb41601e..b6756c113dd 100644
--- a/pkgs/os-specific/linux/kernel/linux-2.6.23.nix
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.23.nix
@@ -34,6 +34,13 @@ in
 
 stdenv.mkDerivation {
   name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
+
+  passthru = {
+    inherit version;
+    # Combine the `features' attribute sets of all the kernel patches.
+    features = lib.fold (x: y: (if x ? features then x.features else {}) // y) {} kernelPatches;
+  };
+  
   builder = ./builder.sh;
   
   src = fetchurl {
diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.25.nix b/pkgs/os-specific/linux/kernel/linux-2.6.25.nix
index ad1b0cc2797..5de1e141901 100644
--- a/pkgs/os-specific/linux/kernel/linux-2.6.25.nix
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.25.nix
@@ -26,14 +26,25 @@ assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
 
 let
 
-  lib = import ../../../lib;
+  lib = stdenv.lib;
 
   version = "2.6.25.4";
 
+  baseFeatures = {
+    iwlwifi = true;
+  };
+
 in
 
 stdenv.mkDerivation {
   name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
+
+  passthru = {
+    inherit version;
+    # Combine the `features' attribute sets of all the kernel patches.
+    features = lib.fold (x: y: (if x ? features then x.features else {}) // y) baseFeatures kernelPatches;
+  };
+  
   builder = ./builder.sh;
   
   src = fetchurl {
diff --git a/pkgs/os-specific/linux/klibc/shrunk.nix b/pkgs/os-specific/linux/klibc/shrunk.nix
index 828e4691623..f45067565ab 100644
--- a/pkgs/os-specific/linux/klibc/shrunk.nix
+++ b/pkgs/os-specific/linux/klibc/shrunk.nix
@@ -1,7 +1,7 @@
 {stdenv, klibc}:
 
 stdenv.mkDerivation {
-  name = "${klibc.name}";
+  name = "${klibc.name}-shrunk";
   buildCommand = ''
     ensureDir $out/lib
     cp -prd ${klibc}/lib/klibc/bin $out/
diff --git a/pkgs/os-specific/linux/nvidia/default.nix b/pkgs/os-specific/linux/nvidia/default.nix
index bbd9acb15d2..7b414600ccb 100644
--- a/pkgs/os-specific/linux/nvidia/default.nix
+++ b/pkgs/os-specific/linux/nvidia/default.nix
@@ -7,7 +7,7 @@ let
 in
 
 stdenv.mkDerivation {
-  name = "nvidiaDrivers-" + versionNumber;
+  name = "nvidiaDrivers-${versionNumber}-${kernel.version}";
   builder = ./builder.sh;
   
   src = fetchurl {
diff --git a/pkgs/os-specific/linux/wis-go7007/default.nix b/pkgs/os-specific/linux/wis-go7007/default.nix
index 3e35c83488a..0fa939c20c6 100644
--- a/pkgs/os-specific/linux/wis-go7007/default.nix
+++ b/pkgs/os-specific/linux/wis-go7007/default.nix
@@ -1,7 +1,7 @@
 {stdenv, fetchurl, kernel, ncurses, fxload}:
 
 stdenv.mkDerivation {
-  name = "wis-go7007-0.9.8";
+  name = "wis-go7007-0.9.8-${kernel.version}";
 
   src = fetchurl {
     url = http://gentoo.osuosl.org/distfiles/wis-go7007-linux-0.9.8.tar.bz2;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 279a04d7732..8e50d47b6e8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -4007,10 +4007,6 @@ let pkgs = rec {
     inherit kernel;
   } null;
 
-  aufs = import ../os-specific/linux/aufs {
-    inherit fetchurl stdenv kernel;
-  };
-
   blcrFun = builderDefsPackage (selectVersion ../os-specific/linux/blcr "0.6.5"){
     inherit perl;
   };
@@ -4061,11 +4057,6 @@ let pkgs = rec {
     inherit stdenv fetchurl gettext;
   };
 
-  ext3cowtools = import ../os-specific/linux/ext3cow-tools {
-    inherit stdenv fetchurl;
-    kernel_ext3cowpatched = kernel;
-  };
-
   eject = import ../os-specific/linux/eject {
     inherit fetchurl stdenv gettext;
   };
@@ -4140,10 +4131,6 @@ let pkgs = rec {
     inherit fetchurl stdenv;
   };
 
-  iwlwifi = import ../os-specific/linux/iwlwifi {
-    inherit fetchurl stdenv kernel;
-  };
-
   iwlwifi3945ucode = import ../os-specific/linux/firmware/iwlwifi-3945-ucode {
     inherit fetchurl stdenv;
   };
@@ -4191,12 +4178,12 @@ let pkgs = rec {
     cross = "sparc-linux";
   };
 
-  kernel = kernel_2_6_23;
-
+  /*
   systemKernel =
     if getConfig ["kernel" "version"] "2.6.21" == "2.6.22" then kernel_2_6_22 else
     if getConfig ["kernel" "version"] "2.6.21" == "2.6.23" then kernel_2_6_23 else
     kernel;
+  */
 
   kernel_2_6_20 = import ../os-specific/linux/kernel/linux-2.6.20.nix {
     inherit fetchurl stdenv perl mktemp module_init_tools;
@@ -4343,30 +4330,17 @@ let pkgs = rec {
   kernel_2_6_25 = import ../os-specific/linux/kernel/linux-2.6.25.nix {
     inherit fetchurl stdenv perl mktemp module_init_tools;
     kernelPatches = [
-      /*
-      { # resume with resume=swap:/dev/xx
-        name = "tux on ice"; # (swsusp2)
-        patch = fetchurl {
-          url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc5-for-2.6.23.14.patch.bz2";
-          sha256 = "187190rxbn9x1c6bwv59mwy1zhff8nn5ad58cfiz23wa5wrk4mif";
-        };
-        extraConfig = "
-          CONFIG_SUSPEND2=y
-          CONFIG_SUSPEND2_FILE=y
-          CONFIG_SUSPEND2_SWAP=y
-          CONFIG_CRYPTO_LZF=y
-        ";
-      }
-      */
       { name = "fbcondecor-0.9.4-2.6.25-rc6";
         patch = fetchurl {
           url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.4-2.6.25-rc6.patch;
           sha256 = "1wm94n7f0qyb8xvafip15r158z5pzw7zb7q8hrgddb092c6ibmq8";
         };
         extraConfig = "CONFIG_FB_CON_DECOR=y";
+        features = { fbConDecor = true; };
       }
       { name = "sec_perm-2.6.24";
         patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch;
+        features = { secPermPatch = true; };
       }
     ];
     extraConfig =
@@ -4399,6 +4373,7 @@ let pkgs = rec {
           sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
         };
         extraConfig = "CONFIG_FB_SPLASH=y";
+        features = { fbSplash = true; };
       }
       /* !!! Not needed anymore for the NixOS LiveCD - we have AUFS. */
       { name = "unionfs-2.2.2";
@@ -4418,6 +4393,83 @@ let pkgs = rec {
       [(getConfig ["kernel" "addConfig"] "")];
   };
 
+  /* Kernel modules are inherently tied to a specific kernel.  So
+     rather than provide specific instances of those packages for a
+     specific kernel, we have a function that builds those packages
+     for a specific kernel.  This function can then be called for
+     whatever kernel you're using. */
+  
+  kernelPackagesFor = kernel: rec {
+
+    inherit kernel;
+
+    aufs = import ../os-specific/linux/aufs {
+      inherit fetchurl stdenv kernel;
+    };
+
+    iwlwifi = import ../os-specific/linux/iwlwifi {
+      inherit fetchurl stdenv kernel;
+    };
+
+    nvidiaDrivers = import ../os-specific/linux/nvidia {
+      inherit stdenv fetchurl kernel xlibs gtkLibs;
+    };
+
+    wis_go7007 = import ../os-specific/linux/wis-go7007 {
+      inherit fetchurl stdenv kernel ncurses fxload;
+    };
+
+    # Actually, klibc builds fine with the static kernelHeaders, but
+    # splashutils expects a klibc with patched headers...
+    klibc = import ../os-specific/linux/klibc {
+      inherit fetchurl stdenv perl bison mktemp kernel;
+    };
+
+    klibcShrunk = import ../os-specific/linux/klibc/shrunk.nix {
+      inherit stdenv klibc;
+    };
+
+    splashutils = import ../os-specific/linux/splashutils {
+      inherit fetchurl stdenv klibc;
+      zlib = zlibStatic;
+      libjpeg = libjpegStatic;
+    };
+
+    ext3cowtools = import ../os-specific/linux/ext3cow-tools {
+      inherit stdenv fetchurl;
+      kernel_ext3cowpatched = kernel;
+    };
+
+    ov511 = import ../os-specific/linux/ov511 {
+      inherit fetchurl kernel;
+      stdenv = overrideGCC stdenv gcc34;
+    };
+
+    # State Nix
+    snix = import ../tools/package-management/snix {
+      inherit fetchurl stdenv perl curl bzip2 openssl;
+      inherit libtool automake autoconf docbook5 docbook5_xsl libxslt docbook_xml_dtd_43 w3m;
+
+      aterm = aterm242fixes;
+      db4 = db45;
+
+      bison = bison23;
+      flex = flex2533;
+
+      inherit ext3cowtools e3cfsprogs rsync;
+      ext3cow_kernel = kernel;
+    };
+
+  };
+
+  # Build the kernel modules for the some of the kernels.
+  kernelPackages_2_6_23 = recurseIntoAttrs (kernelPackagesFor kernel_2_6_23);
+  kernelPackages_2_6_25 = recurseIntoAttrs (kernelPackagesFor kernel_2_6_25);
+
+  # The current default kernel / kernel modules.
+  kernelPackages = kernelPackages_2_6_23;
+  #kernel = kernelPackages.kernel;
+
   customKernel = lib.sumArgs (import ../os-specific/linux/kernel/linux.nix) {
     inherit fetchurl stdenv perl mktemp module_init_tools lib;
   };
@@ -4427,9 +4479,7 @@ let pkgs = rec {
   };
 
   # No finished expression is provided - pick your own kernel
-  kqemuFunCurrent = theKernel: (kqemuFun { 
-    kernel = theKernel;
-  } null);
+  kqemuFunCurrent = kernel: kqemuFun {inherit kernel;};
 
   libselinux = import ../os-specific/linux/libselinux {
     inherit fetchurl stdenv libsepol;
@@ -4460,15 +4510,6 @@ let pkgs = rec {
     inherit fetchurl stdenv libxml2;
   };
 
-  klibc = import ../os-specific/linux/klibc {
-    inherit fetchurl stdenv perl bison mktemp;
-    kernel = systemKernel;
-  };
-
-  klibcShrunk = import ../os-specific/linux/klibc/shrunk.nix {
-    inherit stdenv klibc;
-  };
-
   kvm = kvm57;
 
   kvm12 = import ../os-specific/linux/kvm/12.nix {
@@ -4564,10 +4605,6 @@ let pkgs = rec {
     inherit fetchurl stdenv;
   };
 
-  nvidiaDrivers = import ../os-specific/linux/nvidia {
-    inherit stdenv fetchurl kernel xlibs gtkLibs;
-  };
-
   gw6cFun = builderDefsPackage (selectVersion ../os-specific/linux/gw6c "5.1") {
     inherit fetchurl stdenv nettools openssl procps iproute;
   };
@@ -4577,11 +4614,6 @@ let pkgs = rec {
     inherit fetchurl stdenv openldap;
   };
 
-  ov511 = import ../os-specific/linux/ov511 {
-    inherit fetchurl kernel;
-    stdenv = overrideGCC stdenv gcc34;
-  };
-
   pam = import ../os-specific/linux/pam {
     inherit stdenv fetchurl cracklib flex;
   };
@@ -4643,12 +4675,6 @@ let pkgs = rec {
     inherit fetchurl stdenv;
   };
 
-  splashutils = import ../os-specific/linux/splashutils {
-    inherit fetchurl stdenv klibc;
-    zlib = zlibStatic;
-    libjpeg = libjpegStatic;
-  };
-
   squashfsTools = import ../os-specific/linux/squashfs {
     inherit fetchurl stdenv zlib;
   };
@@ -4726,10 +4752,6 @@ let pkgs = rec {
     inherit fetchurl stdenv;
   };
 
-  wis_go7007 = import ../os-specific/linux/wis-go7007 {
-    inherit fetchurl stdenv kernel ncurses fxload;
-  };
-
   wpa_supplicant = import ../os-specific/linux/wpa_supplicant {
     inherit fetchurl stdenv openssl;
   };
@@ -6402,11 +6424,13 @@ let pkgs = rec {
     fetchdarcs = fetchdarcs2;
   };
 
+  /*
   nixStatic = import ../tools/package-management/nix-static {
     inherit fetchurl stdenv perl curl autoconf automake libtool;
     aterm = aterm242fixes;
     bdb = db4;
   };
+  */
 
   # The bleeding edge.
   nixUnstable = import ../tools/package-management/nix/unstable.nix {
@@ -6481,21 +6505,6 @@ let pkgs = rec {
     inherit (xlibs) libX11;
   };
 
-  # State Nix
-  snix = import ../tools/package-management/snix {
-    inherit fetchurl stdenv perl curl bzip2 openssl;
-    inherit libtool automake autoconf docbook5 docbook5_xsl libxslt docbook_xml_dtd_43 w3m;
-
-    aterm = aterm242fixes;
-    db4 = db45;
-
-    bison = bison23;
-    flex = flex2533;
-
-    inherit ext3cowtools e3cfsprogs rsync;
-    ext3cow_kernel = kernel;
-  };
-
   synaptics = import ../misc/synaptics {
     inherit fetchurl stdenv pkgconfig;
     inherit (xlibs) libX11 libXi libXext pixman xf86inputevdev;