summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/audio/flac/default.nix4
-rw-r--r--pkgs/build-support/gcc-wrapper/builder.sh9
-rw-r--r--pkgs/build-support/gcc-wrapper/default.nix3
-rw-r--r--pkgs/build-support/gcc-wrapper/setup-hook.sh2
-rw-r--r--pkgs/build-support/multiple-outputs.nix85
-rw-r--r--pkgs/development/compilers/gcc/4.6/builder.sh29
-rw-r--r--pkgs/development/compilers/gcc/4.6/default.nix10
-rw-r--r--pkgs/development/interpreters/perl/5.16/default.nix6
-rw-r--r--pkgs/development/libraries/acl/default.nix2
-rw-r--r--pkgs/development/libraries/apr-util/default.nix4
-rw-r--r--pkgs/development/libraries/apr/default.nix16
-rw-r--r--pkgs/development/libraries/atk/default.nix6
-rw-r--r--pkgs/development/libraries/attr/default.nix2
-rw-r--r--pkgs/development/libraries/cairo/default.nix5
-rw-r--r--pkgs/development/libraries/freetype/default.nix10
-rw-r--r--pkgs/development/libraries/gdk-pixbuf/default.nix6
-rw-r--r--pkgs/development/libraries/glib/default.nix4
-rw-r--r--pkgs/development/libraries/glibc/2.17/builder.sh35
-rw-r--r--pkgs/development/libraries/glibc/2.17/default.nix4
-rw-r--r--pkgs/development/libraries/gmime/default.nix4
-rw-r--r--pkgs/development/libraries/gtk+/2.x.nix4
-rw-r--r--pkgs/development/libraries/jasper/default.nix6
-rw-r--r--pkgs/development/libraries/libelf/default.nix16
-rw-r--r--pkgs/development/libraries/libjpeg/default.nix8
-rw-r--r--pkgs/development/libraries/libogg/default.nix4
-rw-r--r--pkgs/development/libraries/libsamplerate/default.nix6
-rw-r--r--pkgs/development/libraries/libsndfile/default.nix8
-rw-r--r--pkgs/development/libraries/libtiff/default.nix2
-rw-r--r--pkgs/development/libraries/libvorbis/default.nix4
-rw-r--r--pkgs/development/libraries/openssl/default.nix26
-rw-r--r--pkgs/development/libraries/pango/default.nix4
-rw-r--r--pkgs/development/libraries/pcre/default.nix8
-rw-r--r--pkgs/development/libraries/speex/default.nix11
-rw-r--r--pkgs/development/tools/misc/libtool/libtool2.nix16
-rw-r--r--pkgs/development/tools/misc/patchelf/default.nix2
-rw-r--r--pkgs/misc/cups/default.nix11
-rw-r--r--pkgs/os-specific/linux/pam/default.nix9
-rw-r--r--pkgs/os-specific/linux/systemd/default.nix10
-rw-r--r--pkgs/os-specific/linux/util-linux/default.nix4
-rw-r--r--pkgs/servers/http/apache-httpd/2.2.nix14
-rw-r--r--pkgs/servers/x11/xorg/builder.sh6
-rw-r--r--pkgs/servers/x11/xorg/default.nix36
-rw-r--r--pkgs/stdenv/linux/default.nix12
-rw-r--r--pkgs/top-level/all-packages.nix111
44 files changed, 443 insertions, 141 deletions
diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix
index 0383a1ce0ad..95ab8244478 100644
--- a/pkgs/applications/audio/flac/default.nix
+++ b/pkgs/applications/audio/flac/default.nix
@@ -12,6 +12,10 @@ stdenv.mkDerivation rec {
 
   doCheck = true; # takes lots of time but will be run rarely (small build-time closure)
 
+  enableParallelBuilding = true;
+
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   meta = {
     homepage = http://xiph.org/flac/;
     description = "Library and tools for encoding and decoding the FLAC lossless audio file format";
diff --git a/pkgs/build-support/gcc-wrapper/builder.sh b/pkgs/build-support/gcc-wrapper/builder.sh
index ed7ad0a50b7..b499aa612f8 100644
--- a/pkgs/build-support/gcc-wrapper/builder.sh
+++ b/pkgs/build-support/gcc-wrapper/builder.sh
@@ -24,7 +24,7 @@ if test -z "$nativeLibc"; then
     # compile, because it uses "#include_next <limits.h>" to find the
     # limits.h file in ../includes-fixed. To remedy the problem,
     # another -idirafter is necessary to add that directory again.
-    echo "-B$libc/lib/ -idirafter $libc/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags
+    echo "-B$libc/lib/ -idirafter $libc_dev/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags
 
     echo "-L$libc/lib" > $out/nix-support/libc-ldflags
 
@@ -39,9 +39,9 @@ if test -n "$nativeTools"; then
     ldPath="$nativePrefix/bin"
 else
     if test -e "$gcc/lib64"; then
-        gccLDFlags="$gccLDFlags -L$gcc/lib64"
+        gccLDFlags="$gccLDFlags -L$gcc_lib/lib64"
     fi
-    gccLDFlags="$gccLDFlags -L$gcc/lib"
+    gccLDFlags="$gccLDFlags -L$gcc_lib/lib"
     if [ -n "$langVhdl" ]; then
         gccLDFlags="$gccLDFlags -L$zlib/lib"
     fi
@@ -85,6 +85,7 @@ doSubstitute() {
         -e "s^@binutils@^$binutils^g" \
         -e "s^@coreutils@^$coreutils^g" \
         -e "s^@libc@^$libc^g" \
+        -e "s^@libc_bin@^$libc_bin^g" \
         -e "s^@ld@^$ldPath/ld^g" \
         < "$src" > "$dst" 
 }
@@ -191,5 +192,5 @@ cp -p $utils $out/nix-support/utils.sh
 # tools like gcov, the manpages, etc. as well (including for binutils
 # and Glibc).
 if test -z "$nativeTools"; then
-    echo $gcc $binutils $libc > $out/nix-support/propagated-user-env-packages
+    echo $gcc $binutils $libc $libc_bin > $out/nix-support/propagated-user-env-packages
 fi
diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix
index 992c0f9af37..d4ba45b26f4 100644
--- a/pkgs/build-support/gcc-wrapper/default.nix
+++ b/pkgs/build-support/gcc-wrapper/default.nix
@@ -40,7 +40,10 @@ stdenv.mkDerivation {
   addFlags = ./add-flags;
   
   inherit nativeTools nativeLibc nativePrefix gcc;
+  gcc_lib = gcc.lib or gcc;
   libc = if nativeLibc then null else libc;
+  libc_dev = if nativeLibc then null else libc.dev or libc;
+  libc_bin = if nativeLibc then null else libc.bin or libc;
   binutils = if nativeTools then null else binutils;
   # The wrapper scripts use 'cat', so we may need coreutils
   coreutils = if nativeTools then null else coreutils;
diff --git a/pkgs/build-support/gcc-wrapper/setup-hook.sh b/pkgs/build-support/gcc-wrapper/setup-hook.sh
index 513ab8053a7..26a722bac9b 100644
--- a/pkgs/build-support/gcc-wrapper/setup-hook.sh
+++ b/pkgs/build-support/gcc-wrapper/setup-hook.sh
@@ -25,7 +25,7 @@ if test -n "@binutils@"; then
 fi
 
 if test -n "@libc@"; then
-    addToSearchPath PATH @libc@/bin
+    addToSearchPath PATH @libc_bin@/bin
 fi
 
 if test -n "@coreutils@"; then
diff --git a/pkgs/build-support/multiple-outputs.nix b/pkgs/build-support/multiple-outputs.nix
new file mode 100644
index 00000000000..016558c1e73
--- /dev/null
+++ b/pkgs/build-support/multiple-outputs.nix
@@ -0,0 +1,85 @@
+{ stdenv }:
+
+with stdenv.lib;
+
+{ outputs ? [ "out" ], setOutputConfigureFlags ? true, ... } @ args:
+
+stdenv.mkDerivation (args // {
+
+  #postPhases = [ "fixupOutputsPhase" ] ++ args.postPhases or [];
+
+  preHook =
+    if setOutputConfigureFlags then
+      optionalString (elem "man" outputs) ''
+        configureFlags="--mandir=$man/share/man --infodir=$man/share/info $configureFlags"
+      '' +
+      optionalString (elem "bin" outputs) ''
+        configureFlags="--bindir=$bin/bin --sbindir=$bin/sbin --mandir=$bin/share/man --infodir=$man/share/info $configureFlags"
+      '' +
+      optionalString (elem "lib" outputs) ''
+        configureFlags="--libdir=$lib/lib $configureFlags"
+      '' +
+      optionalString (elem "dev" outputs) ''
+        configureFlags="--includedir=$dev/include $configureFlags"
+        installFlags="pkgconfigdir=$dev/lib/pkgconfig m4datadir=$dev/share/aclocal aclocaldir=$dev/share/aclocal $installFlags"
+      ''
+    else null;
+
+  preFixup =
+    ''
+      runHook preFixupOutputs
+
+      if [ -n "$doc" ]; then
+        for i in share/doc share/gtk-doc; do
+          if [ -e $out/$i ]; then
+            mkdir -p $doc/$i
+            mv $out/$i/* $doc/$i/
+            rmdir $out/$i
+          fi
+        done
+        rmdir --ignore-fail-on-non-empty $out/share
+      fi
+
+      if [ -n "$dev" ]; then
+        mkdir -p "$dev/nix-support"
+        if [ -n "$propagatedBuildInputs" ]; then
+          echo "$propagatedBuildInputs" > "$dev/nix-support/propagated-build-inputs"
+          propagatedBuildInputs=
+        fi
+        echo "$out $lib $bin $propagatedNativeBuildInputs" > "$dev/nix-support/propagated-native-build-inputs"
+        propagatedNativeBuildInputs=
+      elif [ -n "$out" ]; then
+        propagatedNativeBuildInputs="$lib $propagatedNativeBuildsInputs"
+      fi
+
+      for i in $bin $lib $man $static; do
+        if [ -z "$dontStrip" ]; then
+          prefix="$i" stripDirs "lib lib64 libexec bin sbin" "''${stripDebugFlags:--S}"
+        fi
+        if [ "$havePatchELF" = 1 -a -z "$dontPatchELF" ]; then
+          prefix="$i" patchELF
+        fi
+        if [ -z "$dontPatchShebangs" ]; then
+          patchShebangs "$i"
+        fi
+
+        # Cut&paste...
+        if [ -z "$dontGzipMan" ]; then
+            GLOBIGNORE=.:..:*.gz:*.bz2
+            for f in $i/share/man/*/* $i/share/man/*/*/*; do
+                if [ -f $f ]; then
+                    if gzip -c $f > $f.gz; then
+                        rm $f
+                    else
+                        rm $f.gz
+                    fi
+                fi
+            done
+            unset GLOBIGNORE
+        fi
+      done
+
+      runHook postFixupOutputs
+    ''; # */
+
+})
diff --git a/pkgs/development/compilers/gcc/4.6/builder.sh b/pkgs/development/compilers/gcc/4.6/builder.sh
index bdf15be5a99..6aa0ae440c8 100644
--- a/pkgs/development/compilers/gcc/4.6/builder.sh
+++ b/pkgs/development/compilers/gcc/4.6/builder.sh
@@ -8,9 +8,10 @@ mkdir $NIX_FIXINC_DUMMY
 if test "$staticCompiler" = "1"; then
     EXTRA_LDFLAGS="-static"
 else
-    EXTRA_LDFLAGS=""
+    EXTRA_LDFLAGS="-Wl,-rpath,$lib/lib"
 fi
 
+
 # GCC interprets empty paths as ".", which we don't want.
 if test -z "$CPATH"; then unset CPATH; fi
 if test -z "$LIBRARY_PATH"; then unset LIBRARY_PATH; fi
@@ -29,11 +30,11 @@ if test "$noSysDirs" = "1"; then
         # Use *real* header files, otherwise a limits.h is generated
         # that does not include Glibc's limits.h (notably missing
         # SSIZE_MAX, which breaks the build).
-        export NIX_FIXINC_DUMMY=$(cat $NIX_GCC/nix-support/orig-libc)/include
+        export NIX_FIXINC_DUMMY=$libc_dev/include
 
         # The path to the Glibc binaries such as `crti.o'.
         glibc_libdir="$(cat $NIX_GCC/nix-support/orig-libc)/lib"
-        
+
     else
         # Hack: support impure environments.
         extraFlags="-isystem /usr/include"
@@ -50,10 +51,10 @@ if test "$noSysDirs" = "1"; then
     # bootstrap compiler are optimized and (optionally) contain
     # debugging information (info "(gccinstall) Building").
     if test -n "$dontStrip"; then
-	extraFlags="-O2 -g $extraFlags"
+        extraFlags="-O2 -g $extraFlags"
     else
-	# Don't pass `-g' at all; this saves space while building.
-	extraFlags="-O2 $extraFlags"
+        # Don't pass `-g' at all; this saves space while building.
+        extraFlags="-O2 $extraFlags"
     fi
 
     EXTRA_FLAGS="$extraFlags"
@@ -170,9 +171,8 @@ preConfigure() {
         # Patch the configure script so it finds glibc headers.  It's
         # important for example in order not to get libssp built,
         # because its functionality is in glibc already.
-        glibc_headers="$(cat $NIX_GCC/nix-support/orig-libc)/include"
         sed -i \
-            -e "s,glibc_header_dir=/usr/include,glibc_header_dir=$glibc_headers", \
+            -e "s,glibc_header_dir=/usr/include,glibc_header_dir=$libc_dev/include", \
             gcc/configure
     fi
 
@@ -206,6 +206,14 @@ preInstall() {
 
 
 postInstall() {
+    # Move runtime libraries to $lib.
+    mkdir -p $lib/lib
+    ln -s lib $lib/lib64
+    mv -v $out/lib/lib*.so $out/lib/lib*.so.*[0-9] $out/lib/*.la $lib/lib/
+    for i in $lib/lib/*.la; do
+        substituteInPlace $i --replace $out $lib
+    done
+
     # Remove precompiled headers for now.  They are very big and
     # probably not very useful yet.
     find $out/include -name "*.gch" -exec rm -rf {} \; -prune
@@ -214,9 +222,10 @@ postInstall() {
     # previous gcc.
     rm -rf $out/libexec/gcc/*/*/install-tools
     rm -rf $out/lib/gcc/*/*/install-tools
-    
+
     # More dependencies with the previous gcc or some libs (gccbug stores the build command line)
     rm -rf $out/bin/gccbug
+
     # Take out the bootstrap-tools from the rpath, as it's not needed at all having $out
     for i in $out/libexec/gcc/*/*/*; do
         if PREV_RPATH=`patchelf --print-rpath $i`; then
@@ -225,7 +234,7 @@ postInstall() {
     done
 
     # Get rid of some "fixed" header files
-    rm -rf $out/lib/gcc/*/*/include/root
+    rm -rfv $out/lib/gcc/*/*/include-fixed/{root,linux}
 
     # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks.
     for i in $out/bin/*-gcc*; do
diff --git a/pkgs/development/compilers/gcc/4.6/default.nix b/pkgs/development/compilers/gcc/4.6/default.nix
index 6713dd12b3c..476ddaa8409 100644
--- a/pkgs/development/compilers/gcc/4.6/default.nix
+++ b/pkgs/development/compilers/gcc/4.6/default.nix
@@ -175,7 +175,7 @@ let version = "4.6.3";
       "-stage-final";
     crossNameAddon = if cross != null then "-${cross.config}" + stageNameAddon else "";
 
-  bootstrap = cross == null && !stdenv.isArm && !stdenv.isMips;
+    bootstrap = cross == null && !stdenv.isArm && !stdenv.isMips;
 
 in
 
@@ -187,13 +187,19 @@ stdenv.mkDerivation ({
 
   builder = ./builder.sh;
 
-  src = (import ./sources.nix) {
+  srcs = (import ./sources.nix) {
     inherit fetchurl optional version;
     inherit langC langCC langFortran langJava langAda langGo;
   };
 
+  outputs = [ "out" "lib" ];
+
+  setOutputConfigureFlags = false;
+
   inherit patches enableMultilib;
 
+  libc_dev = stdenv.gcc.libc_dev;
+
   postPatch =
     if (stdenv.isGNU
         || (libcCross != null                  # e.g., building `gcc.crossDrv'
diff --git a/pkgs/development/interpreters/perl/5.16/default.nix b/pkgs/development/interpreters/perl/5.16/default.nix
index 2113faee164..752f0d49885 100644
--- a/pkgs/development/interpreters/perl/5.16/default.nix
+++ b/pkgs/development/interpreters/perl/5.16/default.nix
@@ -14,6 +14,10 @@ stdenv.mkDerivation rec {
     sha256 = "1dpd9lhc4723wmsn4dsn4m320qlqgyw28bvcbhnfqp2nl3f0ikv9";
   };
 
+  outputs = [ "out" "man" ];
+
+  setOutputConfigureFlags = false;
+
   patches =
     [ # Do not look in /usr etc. for dependencies.
       ./no-sys-dirs.patch
@@ -44,7 +48,7 @@ stdenv.mkDerivation rec {
 
   preConfigure =
     ''
-      configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3"
+      configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$man/share/man/man1 -Dman3dir=$man/share/man/man3"
 
       ${stdenv.lib.optionalString stdenv.isArm ''
         configureFlagsArray=(-Dldflags="-lm -lrt")
diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix
index bc0821f39fd..065ef0ba7ca 100644
--- a/pkgs/development/libraries/acl/default.nix
+++ b/pkgs/development/libraries/acl/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "09aj30m49ivycl3irram8c3givc0crivjm3ymw0nhfaxrwhlb186";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   nativeBuildInputs = [ gettext ];
   buildInputs = [ attr ];
 
diff --git a/pkgs/development/libraries/apr-util/default.nix b/pkgs/development/libraries/apr-util/default.nix
index 5f6291127e9..de5c64a06a1 100644
--- a/pkgs/development/libraries/apr-util/default.nix
+++ b/pkgs/development/libraries/apr-util/default.nix
@@ -19,11 +19,13 @@ stdenv.mkDerivation rec {
   configureFlags = ''
     --with-apr=${apr} --with-expat=${expat}
     --with-crypto
-    ${stdenv.lib.optionalString sslSupport "--with-openssl=${openssl}"}
+    ${stdenv.lib.optionalString sslSupport "--with-openssl"}
     ${stdenv.lib.optionalString bdbSupport "--with-berkeley-db=${db4}"}
     ${stdenv.lib.optionalString ldapSupport "--with-ldap"}
   '';
 
+  buildInputs = stdenv.lib.optional sslSupport openssl;
+
   propagatedBuildInputs = stdenv.lib.optional ldapSupport openldap;
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/apr/default.nix b/pkgs/development/libraries/apr/default.nix
index 07a565596bb..0a83741635e 100644
--- a/pkgs/development/libraries/apr/default.nix
+++ b/pkgs/development/libraries/apr/default.nix
@@ -14,6 +14,13 @@ stdenv.mkDerivation rec {
 
   patches = optionals stdenv.isDarwin [ ./darwin_fix_configure.patch ];
 
+  outputs = [ "dev" "out" ];
+
+  preConfigure =
+    ''
+      configureFlagsArray+=("--with-installbuilddir=$dev/share/build")
+    '';
+
   configureFlags =
     # Don't use accept4 because it's only supported on Linux >= 2.6.28.
     [ "apr_cv_accept4=no" ]
@@ -21,6 +28,15 @@ stdenv.mkDerivation rec {
     # Based on ftp://sourceware.org/pub/cygwin/release/libapr1/libapr1-1.3.8-2-src.tar.bz2
     ++ stdenv.lib.optional (stdenv.system == "i686-cygwin") "ac_cv_header_windows_h=no";
 
+  enableParallelBuilding = true;
+
+  postInstall =
+    ''
+      mkdir $dev/bin $dev/lib
+      mv $out/bin/apr-1-config $dev/bin
+      mv $out/lib/pkgconfig $dev/lib
+    '';
+
   meta = {
     homepage = http://apr.apache.org/;
     description = "The Apache Portable Runtime library";
diff --git a/pkgs/development/libraries/atk/default.nix b/pkgs/development/libraries/atk/default.nix
index cea207f27bc..180392cc5e0 100644
--- a/pkgs/development/libraries/atk/default.nix
+++ b/pkgs/development/libraries/atk/default.nix
@@ -8,14 +8,16 @@ stdenv.mkDerivation rec {
     sha256 = "1x3dd3hg9l1j9dq70xwph13vxdp6a9wbfcnryryf1wr6c8bij9dj";
   };
 
+  enableParallelBuilding = true;
+
+  outputs = [ "dev" "out" "doc" ];
+
   buildInputs = libintlOrEmpty;
 
   nativeBuildInputs = [ pkgconfig perl ];
 
   propagatedBuildInputs = [ glib ];
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "ATK, the accessibility toolkit";
 
diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix
index 3c5855ea284..8000dacfc46 100644
--- a/pkgs/development/libraries/attr/default.nix
+++ b/pkgs/development/libraries/attr/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "07qf6kb2zk512az481bbnsk9jycn477xpva1a726n5pzlzf9pmnw";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   nativeBuildInputs = [ gettext ];
 
   configureFlags = "MAKE=make MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk";
diff --git a/pkgs/development/libraries/cairo/default.nix b/pkgs/development/libraries/cairo/default.nix
index a09903f7ea9..f971a290358 100644
--- a/pkgs/development/libraries/cairo/default.nix
+++ b/pkgs/development/libraries/cairo/default.nix
@@ -18,6 +18,8 @@ stdenv.mkDerivation rec {
     sha256 = "04xcykglff58ygs0dkrmmnqljmpjwp2qgwcz8sijqkdpz7ix3l4n";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   nativeBuildInputs = [ pkgconfig ] ++ libintlOrEmpty ++ libiconvOrEmpty;
 
   propagatedBuildInputs =
@@ -55,9 +57,6 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  # The default `--disable-gtk-doc' is ignored.
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "A 2D graphics library with support for multiple output devices";
 
diff --git a/pkgs/development/libraries/freetype/default.nix b/pkgs/development/libraries/freetype/default.nix
index 8fa75425544..b2e39e41a0b 100644
--- a/pkgs/development/libraries/freetype/default.nix
+++ b/pkgs/development/libraries/freetype/default.nix
@@ -32,12 +32,14 @@ stdenv.mkDerivation rec {
     sha256 = "0gxyzxqpyf8g85y6g1zc1wqrh71prbbk8xfw4m8rwzb4ck5hp7gg";
   };
 
+  outputs = [ "dev" "out" ];
+
+  configureFlags = "--disable-static --bindir=$(dev)/bin";
+
   infinality_patch = if useInfinality
     then fetchurl { inherit (infinality) url sha256; }
     else null;
 
-  configureFlags = "--disable-static";
-
   NIX_CFLAGS_COMPILE = with stdenv.lib;
     " -fno-strict-aliasing" # from Gentoo, see https://bugzilla.redhat.com/show_bug.cgi?id=506840
     + optionalString useEncumberedCode " -DFT_CONFIG_OPTION_SUBPIXEL_RENDERING=1"
@@ -58,7 +60,9 @@ stdenv.mkDerivation rec {
 
   postInstall =
     ''
-      ln -s freetype2/freetype $out/include/freetype
+      mkdir $dev/lib
+      mv $out/lib/pkgconfig $dev/lib/
+      ln -s freetype2/freetype $dev/include/freetype
     '';
 
   crossAttrs = {
diff --git a/pkgs/development/libraries/gdk-pixbuf/default.nix b/pkgs/development/libraries/gdk-pixbuf/default.nix
index 3a22bb4c3c1..8306f3831b1 100644
--- a/pkgs/development/libraries/gdk-pixbuf/default.nix
+++ b/pkgs/development/libraries/gdk-pixbuf/default.nix
@@ -9,6 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "1fy2a05xhfg7gy4l4aajsbmgj62zxhikdxqh6bicihxmzm1vg85y";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
+  enableParallelBuilding = true;
+
   # !!! We might want to factor out the gdk-pixbuf-xlib subpackage.
   buildInputs = [ libX11 libintlOrEmpty ];
 
@@ -18,8 +22,6 @@ stdenv.mkDerivation rec {
 
   configureFlags = "--with-libjasper --with-x11";
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "A library for image loading and manipulation";
 
diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix
index 7469b07ce86..f9229793165 100644
--- a/pkgs/development/libraries/glib/default.nix
+++ b/pkgs/development/libraries/glib/default.nix
@@ -32,6 +32,8 @@ stdenv.mkDerivation (rec {
     sha256 = "090bw5par3dfy5m6dhq393pmy92zpw3d7rgbzqjc14jfg637bqvx";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   # configure script looks for d-bus but it is only needed for tests
   buildInputs = [ libelf ];
 
@@ -48,8 +50,6 @@ stdenv.mkDerivation (rec {
 
   enableParallelBuilding = true;
 
-  postInstall = ''rm -rvf $out/share/gtk-doc'';
-
   passthru = {
      gioModuleDir = "lib/gio/modules";
      inherit flattenInclude;
diff --git a/pkgs/development/libraries/glibc/2.17/builder.sh b/pkgs/development/libraries/glibc/2.17/builder.sh
index e68e13f9bec..f9e491868ef 100644
--- a/pkgs/development/libraries/glibc/2.17/builder.sh
+++ b/pkgs/development/libraries/glibc/2.17/builder.sh
@@ -12,14 +12,16 @@ postConfigure() {
 
     export NIX_DONT_SET_RPATH=1
     unset CFLAGS
-}
 
+    # Apparently --bindir is not respected.
+    makeFlagsArray+=("bindir=$bin/bin" "sbindir=$bin/sbin" "rootsbindir=$bin/sbin")
+}
 
 postInstall() {
     if test -n "$installLocales"; then
         make -j${NIX_BUILD_CORES:-1} -l${NIX_BUILD_CORES:-1} localedata/install-locales
     fi
-    
+
     test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache
 
     # FIXME: Use `test -n $linuxHeaders' when `kernelHeaders' has been
@@ -27,19 +29,19 @@ postInstall() {
     if test -z "$hurdHeaders"; then
         # Include the Linux kernel headers in Glibc, except the `scsi'
         # subdirectory, which Glibc provides itself.
-	(cd $out/include && \
-	 ln -sv $(ls -d $kernelHeaders/include/* | grep -v 'scsi$') .)
+        (cd $dev/include && \
+         ln -sv $(ls -d $kernelHeaders/include/* | grep -v 'scsi$') .)
     fi
 
     if test -f "$out/lib/libhurduser.so"; then
-	# libc.so, libhurduser.so, and libmachuser.so depend on each
-	# other, so add them to libc.so (a RUNPATH on libc.so.0.3
-	# would be ignored by the cross-linker.)
-	echo "adding \`libhurduser.so' and \`libmachuser.so' to the \`libc.so' linker script..."
-	sed -i "$out/lib/libc.so" \
-	    -e"s|\(libc\.so\.[^ ]\+\>\)|\1 $out/lib/libhurduser.so $out/lib/libmachuser.so|g"
+        # libc.so, libhurduser.so, and libmachuser.so depend on each
+        # other, so add them to libc.so (a RUNPATH on libc.so.0.3
+        # would be ignored by the cross-linker.)
+        echo "adding \`libhurduser.so' and \`libmachuser.so' to the \`libc.so' linker script..."
+        sed -i "$out/lib/libc.so" \
+            -e"s|\(libc\.so\.[^ ]\+\>\)|\1 $out/lib/libhurduser.so $out/lib/libmachuser.so|g"
     fi
-	
+
     # Fix for NIXOS-54 (ldd not working on x86_64).  Make a symlink
     # "lib64" to "lib".
     if test -n "$is64bit"; then
@@ -49,6 +51,17 @@ postInstall() {
     # This file, that should not remain in the glibc derivation,
     # may have not been created during the preInstall
     rm -f $out/lib/libgcc_s.so.1
+
+    # Put libraries for static linking in a separate output.  Note
+    # that libc_nonshared.a and libpthread_nonshared.a are required
+    # for dynamically-linked applications.
+    mkdir -p $static/lib
+    mv $out/lib/*.a $static/lib
+    mv $static/lib/lib*_nonshared.a $out/lib
+
+    # Work around a Nix bug: hard links across outputs cause a build failure.
+    cp $bin/bin/getconf $bin/bin/getconf_
+    mv $bin/bin/getconf_ $bin/bin/getconf
 }
 
 genericBuild
diff --git a/pkgs/development/libraries/glibc/2.17/default.nix b/pkgs/development/libraries/glibc/2.17/default.nix
index b6d91c932db..da2ddc7a797 100644
--- a/pkgs/development/libraries/glibc/2.17/default.nix
+++ b/pkgs/development/libraries/glibc/2.17/default.nix
@@ -23,6 +23,8 @@ in
 
     builder = ./builder.sh;
 
+    outputs = [ "out" "dev" "bin" "static" ];
+
     # When building glibc from bootstrap-tools, we need libgcc_s at RPATH for
     # any program we run, because the gcc will have been placed at a new
     # store path than that determined when built (as a source for the
@@ -93,7 +95,7 @@ in
 
       # To avoid a dependency on the build system 'bash'.
       preFixup = ''
-        rm $out/bin/{ldd,tzselect,catchsegv,xtrace}
+        rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
       '';
     }
    else {}))
diff --git a/pkgs/development/libraries/gmime/default.nix b/pkgs/development/libraries/gmime/default.nix
index 99859b9f34e..8394f5c4e62 100644
--- a/pkgs/development/libraries/gmime/default.nix
+++ b/pkgs/development/libraries/gmime/default.nix
@@ -8,9 +8,13 @@ stdenv.mkDerivation rec {
     sha256 = "16n9gmlwn6rphi59hrwy6dpn785s3r13h2kmrn3k61l2kfws1hml";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   nativeBuildInputs = [ pkgconfig ];
   propagatedBuildInputs = [ glib zlib libgpgerror ];
 
+  enableParallelBuilding = true;
+
   meta = {
     homepage = http://spruce.sourceforge.net/gmime/;
     description = "A C/C++ library for manipulating MIME messages";
diff --git a/pkgs/development/libraries/gtk+/2.x.nix b/pkgs/development/libraries/gtk+/2.x.nix
index c7dc45aa462..e5aadea9507 100644
--- a/pkgs/development/libraries/gtk+/2.x.nix
+++ b/pkgs/development/libraries/gtk+/2.x.nix
@@ -15,6 +15,8 @@ stdenv.mkDerivation rec {
     sha256 = "1193frzg0qrwa885w77kd055zfpbdjwby88xn2skpx9g4w0k35kc";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   enableParallelBuilding = true;
 
   NIX_CFLAGS_COMPILE = "-I${cairo}/include/cairo";
@@ -32,8 +34,6 @@ stdenv.mkDerivation rec {
 
   configureFlags = "--with-xinput=yes";
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "A multi-platform toolkit for creating graphical user interfaces";
 
diff --git a/pkgs/development/libraries/jasper/default.nix b/pkgs/development/libraries/jasper/default.nix
index 4046c05f79e..f6777dc3bb9 100644
--- a/pkgs/development/libraries/jasper/default.nix
+++ b/pkgs/development/libraries/jasper/default.nix
@@ -12,7 +12,11 @@ stdenv.mkDerivation rec {
   propagatedBuildInputs = [ libjpeg ];
 
   configureFlags = "--enable-shared";
-  
+
+  outputs = [ "dev" "out" "man" "bin" ];
+
+  enableParallelBuilding = true;
+
   meta = {
     homepage = http://www.ece.uvic.ca/~mdadams/jasper/;
     description = "JasPer JPEG2000 Library";
diff --git a/pkgs/development/libraries/libelf/default.nix b/pkgs/development/libraries/libelf/default.nix
index 40eb2a10faf..b37bf593c03 100644
--- a/pkgs/development/libraries/libelf/default.nix
+++ b/pkgs/development/libraries/libelf/default.nix
@@ -1,6 +1,6 @@
 { fetchurl, stdenv, gettext }:
 
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   name = "libelf-0.8.13";
 
   src = fetchurl {
@@ -10,6 +10,11 @@ stdenv.mkDerivation (rec {
 
   doCheck = true;
 
+  # Libelf's custom NLS macros fail to determine the catalog file extension on
+  # Darwin, so disable NLS for now.
+  # FIXME: Eventually make Gettext a build input on all platforms.
+  configureFlags = stdenv.lib.optional stdenv.isDarwin "--disable-nls";
+
   meta = {
     description = "Libelf, an ELF object file access library";
 
@@ -21,12 +26,3 @@ stdenv.mkDerivation (rec {
     maintainers = [ stdenv.lib.maintainers.ludo ];
   };
 }
-
-//
-
-# Libelf's custom NLS macros fail to determine the catalog file extension on
-# Darwin, so disable NLS for now.
-# FIXME: Eventually make Gettext a build input on all platforms.
-(if stdenv.isDarwin
- then { configureFlags = [ "--disable-nls" ]; }
- else { }))
diff --git a/pkgs/development/libraries/libjpeg/default.nix b/pkgs/development/libraries/libjpeg/default.nix
index 63d698dda18..166f399dc25 100644
--- a/pkgs/development/libraries/libjpeg/default.nix
+++ b/pkgs/development/libraries/libjpeg/default.nix
@@ -1,13 +1,15 @@
-{ stdenv, fetchurl }: 
+{ stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "libjpeg-8d";
-  
+
   src = fetchurl {
     url = http://www.ijg.org/files/jpegsrc.v8d.tar.gz;
     sha256 = "1cz0dy05mgxqdgjf52p54yxpyy95rgl30cnazdrfmw7hfca9n0h0";
   };
-  
+
+  outputs = [ "dev" "out" "man" "bin" ];
+
   meta = {
     homepage = http://www.ijg.org/;
     description = "A library that implements the JPEG image file format";
diff --git a/pkgs/development/libraries/libogg/default.nix b/pkgs/development/libraries/libogg/default.nix
index f3c2d3b766d..add52e00419 100644
--- a/pkgs/development/libraries/libogg/default.nix
+++ b/pkgs/development/libraries/libogg/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   name = "libogg-1.3.0";
-  
+
   src = fetchurl {
     url = "http://downloads.xiph.org/releases/ogg/${name}.tar.xz";
     sha256 = "0jy79ffkl34vycnwfsj4svqsdg1lwy2l1rr49y8r4d44kh12a5r3";
@@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ xz ];
 
+  outputs = [ "dev" "doc" "out" ];
+
   meta = {
     homepage = http://xiph.org/ogg/;
   };
diff --git a/pkgs/development/libraries/libsamplerate/default.nix b/pkgs/development/libraries/libsamplerate/default.nix
index 17f06e46711..0e2f042104d 100644
--- a/pkgs/development/libraries/libsamplerate/default.nix
+++ b/pkgs/development/libraries/libsamplerate/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, fftw, libsndfile }:
+{ stdenv, fetchurl, pkgconfig, libsndfile }:
 
 stdenv.mkDerivation rec {
   name = "libsamplerate-0.1.7";
@@ -9,12 +9,14 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ pkgconfig ];
-  propagatedBuildInputs = [ fftw libsndfile ];
+  propagatedBuildInputs = [ libsndfile ];
 
   # maybe interesting configure flags:
   #--disable-fftw          disable usage of FFTW
   #--disable-cpu-clip      disable tricky cpu specific clipper
 
+  outputs = [ "dev" "bin" "out" ];
+
   meta = {
     description = "Sample Rate Converter for audio";
     homepage = http://www.mega-nerd.com/SRC/index.html;
diff --git a/pkgs/development/libraries/libsndfile/default.nix b/pkgs/development/libraries/libsndfile/default.nix
index d9b4afbf0ff..7140843a453 100644
--- a/pkgs/development/libraries/libsndfile/default.nix
+++ b/pkgs/development/libraries/libsndfile/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, flac, libogg, libvorbis, pkgconfig }:
+{ stdenv, fetchurl, flac, libogg, libvorbis, pkgconfig }:
 
 stdenv.mkDerivation rec {
   name = "libsndfile-1.0.23";
@@ -8,7 +8,11 @@ stdenv.mkDerivation rec {
     sha256 = "0k9x4804gfh9d9zd4rm1v2izm8l716rzk4d6jlrjcf45b5sw7jal";
   };
 
-  buildInputs = [pkgconfig flac libogg libvorbis];
+  buildInputs = [ pkgconfig flac libogg libvorbis ];
+
+  enableParallelBuilding = true;
+
+  outputs = [ "dev" "out" "bin" "doc" ];
 
   meta = {
     description = "Libsndfile, a C library for reading and writing files containing sampled sound";
diff --git a/pkgs/development/libraries/libtiff/default.nix b/pkgs/development/libraries/libtiff/default.nix
index e073717de56..5101429a403 100644
--- a/pkgs/development/libraries/libtiff/default.nix
+++ b/pkgs/development/libraries/libtiff/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sha256 = "0wj8d1iwk9vnpax2h29xqc2hwknxg3s0ay2d5pxkg59ihbifn6pa";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   propagatedBuildInputs = [ zlib libjpeg ];
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/libraries/libvorbis/default.nix b/pkgs/development/libraries/libvorbis/default.nix
index b1277b87e6a..b6c25ad9a93 100644
--- a/pkgs/development/libraries/libvorbis/default.nix
+++ b/pkgs/development/libraries/libvorbis/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   name = "libvorbis-1.3.3";
-  
+
   src = fetchurl {
     url = "http://downloads.xiph.org/releases/vorbis/${name}.tar.xz";
     sha256 = "1gby6hapz9njx4l9g0pndyk4q83z5fgrgc30mfwfgx7bllspsk43";
@@ -11,6 +11,8 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ xz ];
   propagatedBuildInputs = [ libogg ];
 
+  outputs = [ "dev" "out" "doc" ];
+
   meta = {
     homepage = http://xiph.org/vorbis/;
   };
diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix
index 640b99df547..6a3beee80de 100644
--- a/pkgs/development/libraries/openssl/default.nix
+++ b/pkgs/development/libraries/openssl/default.nix
@@ -46,6 +46,10 @@ stdenv.mkDerivation {
 
   patches = patchesCross false;
 
+  outputs = [ "dev" "out" "man" "bin" ];
+
+  setOutputConfigureFlags = false;
+
   buildInputs = stdenv.lib.optional withCryptodev cryptodevHeaders;
 
   nativeBuildInputs = [ perl ];
@@ -58,7 +62,7 @@ stdenv.mkDerivation {
   configureFlags = "shared --libdir=lib --openssldir=etc/ssl" +
     stdenv.lib.optionalString withCryptodev " -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS";
 
-  makeFlags = "MANDIR=$(out)/share/man";
+  makeFlags = "MANDIR=$(man)/share/man";
 
   # Parallel building is broken in OpenSSL.
   #enableParallelBuilding = true;
@@ -70,6 +74,18 @@ stdenv.mkDerivation {
       if [ -n "$(echo $out/lib/*.so $out/lib/*.dylib)" ]; then
           rm $out/lib/*.a
       fi
+
+      mkdir -p $bin
+      mv $out/bin $bin/
+
+      rm -rf $out/etc/ssl/misc
+
+      mkdir $dev
+      mv $out/include $dev/
+
+      # OpenSSL installs readonly files, which otherwise we can't strip.
+      # FIXME: Can remove this after the next stdenv merge.
+      chmod -R +w $out
     ''; # */
 
   crossAttrs = {
@@ -80,14 +96,6 @@ stdenv.mkDerivation {
       export configureFlags="--libdir=lib --cross-compile-prefix=${stdenv.cross.config}- shared ${opensslCrossSystem}"
     '';
 
-    postInstall = ''
-      # Openssl installs readonly files, which otherwise we can't strip.
-      # This could at some stdenv hash change be put out of crossAttrs, too
-      chmod -R +w $out
-
-      # Remove references to perl, to avoid depending on it at runtime
-      rm $out/bin/c_rehash $out/ssl/misc/CA.pl $out/ssl/misc/tsget
-    '';
     configureScript = "./Configure";
   };
 
diff --git a/pkgs/development/libraries/pango/default.nix b/pkgs/development/libraries/pango/default.nix
index 1acb3639f06..2de9d98e579 100644
--- a/pkgs/development/libraries/pango/default.nix
+++ b/pkgs/development/libraries/pango/default.nix
@@ -9,6 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "08aqis6j8nd1lb4f2h4h9d9kjvp54iwf8zvqzss0qn4v7nfcjyvx";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" ];
+
   NIX_CFLAGS_COMPILE = "-I${cairo}/include/cairo";
 
   buildInputs = stdenv.lib.optionals stdenv.isDarwin [ gettext fontconfig ];
@@ -19,8 +21,6 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  postInstall = "rm -rf $out/share/gtk-doc";
-
   meta = {
     description = "A library for laying out and rendering of text, with an emphasis on internationalization";
 
diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix
index e59c249348a..d7d13c6de4c 100644
--- a/pkgs/development/libraries/pcre/default.nix
+++ b/pkgs/development/libraries/pcre/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "5778a02535473c7ee7838ea598c19f451e63cf5eec0bf0307a688301c9078c3c";
   };
 
+  outputs = [ "dev" "out" "bin" "doc" "man" ];
+
   # The compiler on Darwin crashes with an internal error while building the
   # C++ interface. Disabling optimizations on that platform remedies the
   # problem. In case we ever update the Darwin GCC version, the exception for
@@ -19,6 +21,12 @@ stdenv.mkDerivation rec {
 
   doCheck = !stdenv.isCygwin;                   # XXX: test failure on Cygwin
 
+  postInstall =
+    ''
+      mkdir $dev/bin
+      mv $bin/bin/pcre-config $dev/bin/
+    '';
+
   meta = {
     homepage = "http://www.pcre.org/";
     description = "A library for Perl Compatible Regular Expressions";
diff --git a/pkgs/development/libraries/speex/default.nix b/pkgs/development/libraries/speex/default.nix
index 93a01a3d2bc..6aceef78eea 100644
--- a/pkgs/development/libraries/speex/default.nix
+++ b/pkgs/development/libraries/speex/default.nix
@@ -2,11 +2,18 @@
 
 stdenv.mkDerivation rec {
   name = "speex-1.2rc1";
-  
+
   src = fetchurl {
     url = "http://downloads.us.xiph.org/releases/speex/${name}.tar.gz";
     sha256 = "19mpkhbz3s08snvndn0h1dk2j139max6b0rr86nnsjmxazf30brl";
   };
-  
+
   buildInputs = [ libogg ];
+
+  outputs = [ "dev" "out" "bin" "doc" ];
+
+  meta = {
+    homepage = http://www.speex.org/;
+    description = "A audio compression codec designed for speech";
+  };
 }
diff --git a/pkgs/development/tools/misc/libtool/libtool2.nix b/pkgs/development/tools/misc/libtool/libtool2.nix
index 4c3500c65a2..0252750bf12 100644
--- a/pkgs/development/tools/misc/libtool/libtool2.nix
+++ b/pkgs/development/tools/misc/libtool/libtool2.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, m4, perl, lzma }:
 
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   name = "libtool-2.4.2";
 
   src = fetchurl {
@@ -10,6 +10,8 @@ stdenv.mkDerivation (rec {
 
   nativeBuildInputs = [ lzma m4 perl ];
 
+  outputs = [ "out" "lib" ];
+
   # Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
   # "fixed" path in generated files!
   dontPatchShebangs = true;
@@ -18,6 +20,10 @@ stdenv.mkDerivation (rec {
   # leads to the failure of a number of tests.
   doCheck = false;
 
+  # Don't run the native `strip' when cross-compiling.  This breaks at least
+  # with `.a' files for MinGW.
+  dontStrip = stdenv ? cross;
+
   meta = {
     description = "GNU Libtool, a generic library support script";
 
@@ -38,11 +44,3 @@ stdenv.mkDerivation (rec {
     maintainers = [ stdenv.lib.maintainers.ludo ];
   };
 }
-
-//
-
-# Don't run the native `strip' when cross-compiling.  This breaks at least
-# with `.a' files for MinGW.
-(if (stdenv ? cross)
- then { dontStrip = true; }
- else { }))
diff --git a/pkgs/development/tools/misc/patchelf/default.nix b/pkgs/development/tools/misc/patchelf/default.nix
index 857aa1cabcf..65edd1a5187 100644
--- a/pkgs/development/tools/misc/patchelf/default.nix
+++ b/pkgs/development/tools/misc/patchelf/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "fc7e7fa95f282fc37a591a802629e0e1ed07bc2a8bf162228d9a69dd76127c01";
   };
 
+  doCheck = true;
+
   meta = {
     homepage = http://nixos.org/patchelf.html;
     license = "GPL";
diff --git a/pkgs/misc/cups/default.nix b/pkgs/misc/cups/default.nix
index ad25b4180b5..471fbcdc464 100644
--- a/pkgs/misc/cups/default.nix
+++ b/pkgs/misc/cups/default.nix
@@ -13,6 +13,9 @@ stdenv.mkDerivation {
     md5 = "de3006e5cf1ee78a9c6145ce62c4e982";
   };
 
+  # FIXME: Split off the cups client library.
+  outputs = [ "dev" "out" "doc" "man" ];
+
   buildInputs = [ pkgconfig zlib libjpeg libpng libtiff libusb1 ]
     ++ stdenv.lib.optionals stdenv.isLinux [ pam dbus.libs acl ] ;
 
@@ -38,6 +41,14 @@ stdenv.mkDerivation {
       "CUPS_PRIMARY_SYSTEM_GROUP=root"
     ];
 
+  postInstall =
+    ''
+      mkdir $dev/bin
+      mv $out/bin/cups-config $dev/bin/
+
+      chmod -R +w $out
+    '';
+
   meta = {
     homepage = "http://www.cups.org/";
     description = "A standards-based printing system for UNIX";
diff --git a/pkgs/os-specific/linux/pam/default.nix b/pkgs/os-specific/linux/pam/default.nix
index 43300425c00..5545b5c16d6 100644
--- a/pkgs/os-specific/linux/pam/default.nix
+++ b/pkgs/os-specific/linux/pam/default.nix
@@ -8,10 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "1hlz2kqvbjisvwyicdincq7nz897b9rrafyzccwzqiqg53b8gf5s";
   };
 
+  outputs = [ "out" "doc" "man" "modules" ];
+
   nativeBuildInputs = [ flex ];
 
   buildInputs = [ cracklib ];
 
+  enableParallelBuilding = true;
+
   crossAttrs = {
     propagatedBuildInputs = [ flex.crossDrv cracklib.crossDrv ];
     preConfigure = preConfigure + ''
@@ -30,6 +34,11 @@ stdenv.mkDerivation rec {
   postInstall = ''
     mv -v $out/sbin/unix_chkpwd{,.orig}
     ln -sv /var/setuid-wrappers/unix_chkpwd $out/sbin/unix_chkpwd
+
+    rm -rf $out/etc
+
+    mkdir -p $modules/lib
+    mv $out/lib/security $modules/lib/
   '';
 
   preConfigure = ''
diff --git a/pkgs/os-specific/linux/systemd/default.nix b/pkgs/os-specific/linux/systemd/default.nix
index 77126e5ffdc..e7184aa27b9 100644
--- a/pkgs/os-specific/linux/systemd/default.nix
+++ b/pkgs/os-specific/linux/systemd/default.nix
@@ -53,11 +53,11 @@ stdenv.mkDerivation rec {
       for i in src/remount-fs/remount-fs.c src/core/mount.c src/core/swap.c src/fsck/fsck.c units/emergency.service.in units/rescue.service.m4.in src/journal/cat.c; do
         test -e $i
         substituteInPlace $i \
-          --replace /bin/mount ${utillinux}/bin/mount \
-          --replace /bin/umount ${utillinux}/bin/umount \
-          --replace /sbin/swapon ${utillinux}/sbin/swapon \
-          --replace /sbin/swapoff ${utillinux}/sbin/swapoff \
-          --replace /sbin/fsck ${utillinux}/sbin/fsck \
+          --replace /bin/mount ${utillinux.bin}/bin/mount \
+          --replace /bin/umount ${utillinux.bin}/bin/umount \
+          --replace /sbin/swapon ${utillinux.bin}/sbin/swapon \
+          --replace /sbin/swapoff ${utillinux.bin}/sbin/swapoff \
+          --replace /sbin/fsck ${utillinux.bin}/sbin/fsck \
           --replace /bin/echo ${coreutils}/bin/echo \
           --replace /bin/cat ${coreutils}/bin/cat \
           --replace /sbin/sulogin ${sysvtools}/sbin/sulogin
diff --git a/pkgs/os-specific/linux/util-linux/default.nix b/pkgs/os-specific/linux/util-linux/default.nix
index d42424e6fc8..84cb42693f1 100644
--- a/pkgs/os-specific/linux/util-linux/default.nix
+++ b/pkgs/os-specific/linux/util-linux/default.nix
@@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0vf3ifb45gr4cd27pmmxk8y5b3r0920mv16fv0vfwz5705xa2qvl";
   };
 
+  outputs = [ "dev" "out" "bin" ];
+
   crossAttrs = {
     # Work around use of `AC_RUN_IFELSE'.
     preConfigure = "export scanf_cv_type_modifier=ms";
@@ -29,6 +31,8 @@ stdenv.mkDerivation rec {
     ${if ncurses == null then "--without-ncurses" else ""}
   '';
 
+  makeFlags = "usrbin_execdir=$(bin)/bin usrsbin_execdir=$(bin)/sbin";
+
   buildInputs =
     [ zlib pam ]
     ++ stdenv.lib.optional (ncurses != null) ncurses
diff --git a/pkgs/servers/http/apache-httpd/2.2.nix b/pkgs/servers/http/apache-httpd/2.2.nix
index 23454d048b7..450936d343c 100644
--- a/pkgs/servers/http/apache-httpd/2.2.nix
+++ b/pkgs/servers/http/apache-httpd/2.2.nix
@@ -20,6 +20,8 @@ stdenv.mkDerivation rec {
     sha1 = "f73bce14832ec40c1aae68f4f8c367cab2266241";
   };
 
+  outputs = [ "dev" "out" "doc" ];
+
   buildInputs = [perl apr aprutil pcre] ++
     stdenv.lib.optional sslSupport openssl;
 
@@ -42,11 +44,19 @@ stdenv.mkDerivation rec {
     --with-mpm=${mpm}
   '';
 
+  preConfigure =
+    ''
+      makeFlagsArray+=("installbuilddir=$dev/share/build")
+    '';
+
   enableParallelBuilding = true;
 
+  stripDebugList = "lib modules bin";
+
   postInstall = ''
-    echo "removing manual"
-    rm -rf $out/manual
+    mkdir -p $doc/share/doc/httpd
+    mv $out/manual $doc/share/doc/httpd
+    mkdir -p $out/share # FIXME, hack
   '';
 
   passthru = {
diff --git a/pkgs/servers/x11/xorg/builder.sh b/pkgs/servers/x11/xorg/builder.sh
index 6ba50d24507..733d04e787a 100644
--- a/pkgs/servers/x11/xorg/builder.sh
+++ b/pkgs/servers/x11/xorg/builder.sh
@@ -9,7 +9,7 @@ postInstall() {
     if test -n "$origPostInstall"; then eval "$origPostInstall"; fi
 
     local r p requires
-    requires=$(grep "Requires:" $out/lib/pkgconfig/*.pc | \
+    requires=$(grep "Requires:" ${dev:-$out}/lib/pkgconfig/*.pc | \
         sed "s/Requires://" | sed "s/,/ /g")
 
     echo "propagating requisites $requires"
@@ -31,10 +31,6 @@ postInstall() {
             done
         fi
     done
-
-    mkdir -p "$out/nix-support"
-    echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs"
-    echo "$propagatedNativeBuildInputs" > "$out/nix-support/propagated-native-build-inputs"
 }
 
 
diff --git a/pkgs/servers/x11/xorg/default.nix b/pkgs/servers/x11/xorg/default.nix
index 3a523469248..18a24100851 100644
--- a/pkgs/servers/x11/xorg/default.nix
+++ b/pkgs/servers/x11/xorg/default.nix
@@ -579,13 +579,14 @@ let
     buildInputs = [pkgconfig windowswmproto libX11 libXext xextproto ];
   })) // {inherit windowswmproto libX11 libXext xextproto ;};
 
-  libX11 = (stdenv.mkDerivation ((if overrides ? libX11 then overrides.libX11 else x: x) {
+  libX11 = (stdenvMulti.mkDerivation ((if overrides ? libX11 then overrides.libX11 else x: x) {
     name = "libX11-1.6.0";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libX11-1.6.0.tar.bz2;
       sha256 = "1yhrf36is2f2h28x8wjd87wmdhslmzg06jg1gwq55hiy6h9184sk";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig inputproto kbproto libxcb xextproto xf86bigfontproto xproto xtrans ];
   })) // {inherit inputproto kbproto libxcb xextproto xf86bigfontproto xproto xtrans ;};
 
@@ -599,13 +600,14 @@ let
     buildInputs = [pkgconfig scrnsaverproto libX11 libXext xextproto ];
   })) // {inherit scrnsaverproto libX11 libXext xextproto ;};
 
-  libXau = (stdenv.mkDerivation ((if overrides ? libXau then overrides.libXau else x: x) {
+  libXau = (stdenvMulti.mkDerivation ((if overrides ? libXau then overrides.libXau else x: x) {
     name = "libXau-1.0.7";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/X11R7.7/src/everything/libXau-1.0.7.tar.bz2;
       sha256 = "12d4f7sdv2pjxhk0lcay0pahccddszkw579dc59daqi37r8bllvi";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig xproto ];
   })) // {inherit xproto ;};
 
@@ -619,13 +621,14 @@ let
     buildInputs = [pkgconfig libX11 libXext xextproto libXmu libXpm xproto libXt ];
   })) // {inherit libX11 libXext xextproto libXmu libXpm xproto libXt ;};
 
-  libXcomposite = (stdenv.mkDerivation ((if overrides ? libXcomposite then overrides.libXcomposite else x: x) {
+  libXcomposite = (stdenvMulti.mkDerivation ((if overrides ? libXcomposite then overrides.libXcomposite else x: x) {
     name = "libXcomposite-0.4.3";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/X11R7.7/src/everything/libXcomposite-0.4.3.tar.bz2;
       sha256 = "1b8sniijb85v4my6v30ma9yqnwl4hkclci9l1hqxnipfyhl4sa9j";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig compositeproto libX11 libXfixes xproto ];
   })) // {inherit compositeproto libX11 libXfixes xproto ;};
 
@@ -649,33 +652,36 @@ let
     buildInputs = [pkgconfig damageproto fixesproto libX11 xextproto libXfixes xproto ];
   })) // {inherit damageproto fixesproto libX11 xextproto libXfixes xproto ;};
 
-  libXdmcp = (stdenv.mkDerivation ((if overrides ? libXdmcp then overrides.libXdmcp else x: x) {
+  libXdmcp = (stdenvMulti.mkDerivation ((if overrides ? libXdmcp then overrides.libXdmcp else x: x) {
     name = "libXdmcp-1.1.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/X11R7.7/src/everything/libXdmcp-1.1.1.tar.bz2;
       sha256 = "13highx4xpgkiwykpcl7z2laslrjc4pzi4h617ny9p7r6116vkls";
     };
+    outputs = [ "dev" "out" "doc" ];
     buildInputs = [pkgconfig xproto ];
   })) // {inherit xproto ;};
 
-  libXext = (stdenv.mkDerivation ((if overrides ? libXext then overrides.libXext else x: x) {
+  libXext = (stdenvMulti.mkDerivation ((if overrides ? libXext then overrides.libXext else x: x) {
     name = "libXext-1.3.2";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXext-1.3.2.tar.bz2;
       sha256 = "1q1j0kjyhmy24wqr6mdkrrciffyqhmc8vn95za2w1ka6qrdhfagq";
     };
+    outputs = [ "dev" "out" "man" "doc" ];
     buildInputs = [pkgconfig libX11 xextproto xproto ];
   })) // {inherit libX11 xextproto xproto ;};
 
-  libXfixes = (stdenv.mkDerivation ((if overrides ? libXfixes then overrides.libXfixes else x: x) {
+  libXfixes = (stdenvMulti.mkDerivation ((if overrides ? libXfixes then overrides.libXfixes else x: x) {
     name = "libXfixes-5.0.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXfixes-5.0.1.tar.bz2;
       sha256 = "0rs7qgzr6dpr62db7sd91c1b47hzhzfr010qwnpcm8sg122w1gk3";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig fixesproto libX11 xextproto xproto ];
   })) // {inherit fixesproto libX11 xextproto xproto ;};
 
@@ -689,33 +695,36 @@ let
     buildInputs = [pkgconfig libfontenc fontsproto freetype xproto xtrans zlib ];
   })) // {inherit libfontenc fontsproto freetype xproto xtrans zlib ;};
 
-  libXft = (stdenv.mkDerivation ((if overrides ? libXft then overrides.libXft else x: x) {
+  libXft = (stdenvMulti.mkDerivation ((if overrides ? libXft then overrides.libXft else x: x) {
     name = "libXft-2.3.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/X11R7.7/src/everything/libXft-2.3.1.tar.bz2;
       sha256 = "1gdv6559cdz1lfw73x7wsvax1fkvphmayrymprljhyyb5nwk5kkz";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig fontconfig freetype libX11 xproto libXrender ];
   })) // {inherit fontconfig freetype libX11 xproto libXrender ;};
 
-  libXi = (stdenv.mkDerivation ((if overrides ? libXi then overrides.libXi else x: x) {
+  libXi = (stdenvMulti.mkDerivation ((if overrides ? libXi then overrides.libXi else x: x) {
     name = "libXi-1.7.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXi-1.7.1.tar.bz2;
       sha256 = "1ib6026bh4bcc2q0y04klqsvjl9pwabxnr8ybkh52g65d5mxnap9";
     };
+    outputs = [ "dev" "out" "man" "doc" ];
     buildInputs = [pkgconfig inputproto libX11 libXext xextproto libXfixes xproto ];
   })) // {inherit inputproto libX11 libXext xextproto libXfixes xproto ;};
 
-  libXinerama = (stdenv.mkDerivation ((if overrides ? libXinerama then overrides.libXinerama else x: x) {
+  libXinerama = (stdenvMulti.mkDerivation ((if overrides ? libXinerama then overrides.libXinerama else x: x) {
     name = "libXinerama-1.1.3";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXinerama-1.1.3.tar.bz2;
       sha256 = "1qlqfvzw45gdzk9xirgwlp2qgj0hbsyiqj8yh8zml2bk2ygnjibs";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig libX11 libXext xextproto xineramaproto ];
   })) // {inherit libX11 libXext xextproto xineramaproto ;};
 
@@ -749,23 +758,25 @@ let
     buildInputs = [pkgconfig libX11 libXext xextproto xproto libXt ];
   })) // {inherit libX11 libXext xextproto xproto libXt ;};
 
-  libXrandr = (stdenv.mkDerivation ((if overrides ? libXrandr then overrides.libXrandr else x: x) {
+  libXrandr = (stdenvMulti.mkDerivation ((if overrides ? libXrandr then overrides.libXrandr else x: x) {
     name = "libXrandr-1.4.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXrandr-1.4.1.tar.bz2;
       sha256 = "01dr1wvyxq2y4yq4hilgglkjlvn551dmnl4l65nfm8nh1x4s056r";
     };
+    outputs = [ "dev" "out" "man" ];
     buildInputs = [pkgconfig randrproto renderproto libX11 libXext xextproto xproto libXrender ];
   })) // {inherit randrproto renderproto libX11 libXext xextproto xproto libXrender ;};
 
-  libXrender = (stdenv.mkDerivation ((if overrides ? libXrender then overrides.libXrender else x: x) {
+  libXrender = (stdenvMulti.mkDerivation ((if overrides ? libXrender then overrides.libXrender else x: x) {
     name = "libXrender-0.9.8";
     builder = ./builder.sh;
     src = fetchurl {
       url = mirror://xorg/individual/lib/libXrender-0.9.8.tar.bz2;
       sha256 = "0qpwyjhbpp734vnhca992pjh4w7ijslidkzx1pcwbbk000pv050x";
     };
+    outputs = [ "dev" "out" "doc" ];
     buildInputs = [pkgconfig renderproto libX11 xproto ];
   })) // {inherit renderproto libX11 xproto ;};
 
@@ -889,13 +900,14 @@ let
     buildInputs = [pkgconfig ];
   })) // {inherit ;};
 
-  libxcb = (stdenv.mkDerivation ((if overrides ? libxcb then overrides.libxcb else x: x) {
+  libxcb = (stdenvMulti.mkDerivation ((if overrides ? libxcb then overrides.libxcb else x: x) {
     name = "libxcb-1.9.1";
     builder = ./builder.sh;
     src = fetchurl {
       url = http://xcb.freedesktop.org/dist/libxcb-1.9.1.tar.bz2;
       sha256 = "0brn7vw66widc5mw7gynwy8dln3gmzym2fqqyzk6k58bxgs5yjnl";
     };
+    outputs = [ "dev" "out" "doc" "man" ];
     buildInputs = [pkgconfig libxslt libpthreadstubs python libXau xcbproto libXdmcp ];
   })) // {inherit libxslt libpthreadstubs python libXau xcbproto libXdmcp ;};
 
diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix
index 84af23a263c..8714afa0358 100644
--- a/pkgs/stdenv/linux/default.nix
+++ b/pkgs/stdenv/linux/default.nix
@@ -7,7 +7,7 @@
 # The function defaults are for easy testing.
 { system ? builtins.currentSystem
 , allPackages ? import ../../top-level/all-packages.nix
-, platform ? null, config }:
+, platform ? null, config ? {} }:
 
 rec {
 
@@ -193,9 +193,9 @@ rec {
   stdenvLinuxGlibc = stdenvLinuxBoot2Pkgs.glibc;
 
 
-  # 6) Construct a third stdenv identical to the 2nd, except that
-  #    this one uses the Glibc built in step 3.  It still uses
-  #    the recent binutils and rest of the bootstrap tools, including GCC.
+  # 6) Construct a third stdenv identical to the 2nd, except that this
+  #    one uses the Glibc built in step 3.  It still uses the recent
+  #    binutils and the rest of the bootstrap tools, including GCC.
   stdenvLinuxBoot3 = stdenvBootFun {
     gcc = wrapGCC {
       binutils = stdenvLinuxBoot1Pkgs.binutils;
@@ -286,7 +286,7 @@ rec {
     extraAttrs = {
       inherit (stdenvLinuxBoot3Pkgs) glibc;
       inherit platform bootstrapTools;
-      shellPackage = stdenvLinuxBoot4Pkgs.bash; 
+      shellPackage = stdenvLinuxBoot4Pkgs.bash;
     };
 
     overrides = pkgs: {
@@ -295,7 +295,7 @@ rec {
       inherit (stdenvLinuxBoot4Pkgs)
         gzip bzip2 xz bash coreutils diffutils findutils gawk
         gnumake gnused gnutar gnugrep gnupatch patchelf
-        attr acl;
+        attr acl pcre;
     };
   };
 
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 782e83d1948..da533493520 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -344,6 +344,10 @@ let
       inherit stdenv perl cpio contents ubootChooser compressor;
     };
 
+  stdenvMulti = stdenv // {
+    mkDerivation = import ../build-support/multiple-outputs.nix { inherit (pkgs) stdenv; };
+  };
+
   makeWrapper = makeSetupHook { } ../build-support/setup-hooks/make-wrapper.sh;
 
   makeModulesClosure = {kernel, rootModules, allowMissing ? false}:
@@ -2292,6 +2296,7 @@ let
   }));
 
   gcc46_real = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.6 {
+    stdenv = stdenvMulti;
     inherit noSysDirs;
 
     # bootstrapping a profiled compiler does not work in the sheevaplug:
@@ -3034,6 +3039,7 @@ let
   perl514 = callPackage ../development/interpreters/perl/5.14 { };
 
   perl516 = callPackage ../development/interpreters/perl/5.16 {
+    stdenv = stdenvMulti;
     fetchurl = fetchurlBoot;
   };
 
@@ -3465,7 +3471,9 @@ let
 
   libtool_1_5 = callPackage ../development/tools/misc/libtool { };
 
-  libtool_2 = callPackage ../development/tools/misc/libtool/libtool2.nix { };
+  libtool_2 = callPackage ../development/tools/misc/libtool/libtool2.nix {
+    stdenv = stdenvMulti;
+  };
 
   lsof = callPackage ../development/tools/misc/lsof { };
 
@@ -3612,7 +3620,9 @@ let
 
   aalib = callPackage ../development/libraries/aalib { };
 
-  acl = callPackage ../development/libraries/acl { };
+  acl = callPackage ../development/libraries/acl {
+    stdenv = stdenvMulti;
+  };
 
   activemq = callPackage ../development/libraries/apache-activemq { };
 
@@ -3629,7 +3639,9 @@ let
 
   amrwb = callPackage ../development/libraries/amrwb { };
 
-  apr = callPackage ../development/libraries/apr { };
+  apr = callPackage ../development/libraries/apr {
+    stdenv = stdenvMulti;
+  };
 
   aprutil = callPackage ../development/libraries/apr-util {
     bdbSupport = true;
@@ -3651,7 +3663,9 @@ let
 
   attica = callPackage ../development/libraries/attica { };
 
-  attr = callPackage ../development/libraries/attr { };
+  attr = callPackage ../development/libraries/attr {
+    stdenv = stdenvMulti;
+  };
 
   aqbanking = callPackage ../development/libraries/aqbanking { };
 
@@ -3894,7 +3908,9 @@ let
   freeglut = if stdenv.isDarwin then darwinX11AndOpenGL else
     callPackage ../development/libraries/freeglut { };
 
-  freetype = callPackage ../development/libraries/freetype { };
+  freetype = callPackage ../development/libraries/freetype {
+    stdenv = stdenvMulti;
+  };
 
   fribidi = callPackage ../development/libraries/fribidi { };
 
@@ -3975,6 +3991,7 @@ let
       }));
 
   glibc217 = callPackage ../development/libraries/glibc/2.17 {
+    stdenv = stdenvMulti;
     kernelHeaders = linuxHeaders;
     installLocales = config.glibc.locales or false;
     machHeaders = null;
@@ -4043,7 +4060,9 @@ let
     inherit (ocamlPackages) lablgl findlib camlimages ocaml_mysql mlgmp;
   };
 
-  gmime = callPackage ../development/libraries/gmime { };
+  gmime = callPackage ../development/libraries/gmime {
+    stdenv = stdenvMulti;
+  };
 
   gmm = callPackage ../development/libraries/gmm { };
 
@@ -4155,31 +4174,44 @@ let
   glib = callPackage ../development/libraries/glib {
     stdenv = if stdenv.isDarwin
       then overrideGCC stdenv gccApple
-      else stdenv;
+      else stdenvMulti;
   };
+
   glibmm = callPackage ../development/libraries/glibmm { };
 
   glib_networking = callPackage ../development/libraries/glib-networking {};
 
-  atk = callPackage ../development/libraries/atk { };
+  atk = callPackage ../development/libraries/atk {
+    stdenv = stdenvMulti;
+  };
+
   atkmm = callPackage ../development/libraries/atkmm { };
 
   pixman = callPackage ../development/libraries/pixman { };
 
   cairo = callPackage ../development/libraries/cairo {
+    stdenv = stdenvMulti;
     glSupport = lib.elem system lib.platforms.mesaPlatforms;
   };
+
   cairo_1_12_2 = callPackage ../development/libraries/cairo/1.12.2.nix { };
+
   cairomm = callPackage ../development/libraries/cairomm { };
 
-  pango = callPackage ../development/libraries/pango { };
+  pango = callPackage ../development/libraries/pango {
+    stdenv = stdenvMulti;
+  };
+
   pangomm = callPackage ../development/libraries/pangomm/2.28.x.nix { };
 
   pangox_compat = callPackage ../development/libraries/pangox-compat { };
 
-  gdk_pixbuf = callPackage ../development/libraries/gdk-pixbuf { };
+  gdk_pixbuf = callPackage ../development/libraries/gdk-pixbuf {
+    stdenv = stdenvMulti;
+  };
 
   gtk2 = callPackage ../development/libraries/gtk+/2.x.nix {
+    stdenv = stdenvMulti;
     cupsSupport = config.gtk2.cups or stdenv.isLinux;
   };
 
@@ -4292,7 +4324,9 @@ let
     inherit mesa SDL SDL_image SDL_mixer;
   };
 
-  jasper = callPackage ../development/libraries/jasper { };
+  jasper = callPackage ../development/libraries/jasper {
+    stdenv = stdenvMulti;
+  };
 
   jama = callPackage ../development/libraries/jama { };
 
@@ -4552,7 +4586,9 @@ let
   libre = callPackage ../development/libraries/libre {};
   librem = callPackage ../development/libraries/librem {};
 
-  libsamplerate = callPackage ../development/libraries/libsamplerate { };
+  libsamplerate = callPackage ../development/libraries/libsamplerate {
+    stdenv = stdenvMulti;
+  };
 
   libspectre = callPackage ../development/libraries/libspectre { };
 
@@ -4584,9 +4620,15 @@ let
 
   libiptcdata = callPackage ../development/libraries/libiptcdata { };
 
-  libjpeg_original = callPackage ../development/libraries/libjpeg { };
-  libjpeg_turbo = callPackage ../development/libraries/libjpeg-turbo { };
-  libjpeg = if (stdenv.isLinux) then libjpeg_turbo else libjpeg_original; # some problems, both on FreeBSD and Darwin
+  libjpeg_original = callPackage ../development/libraries/libjpeg {
+    stdenv = stdenvMulti;
+  };
+
+  libjpeg_turbo = callPackage ../development/libraries/libjpeg-turbo {
+    stdenv = stdenvMulti;
+  };
+
+  libjpeg = if stdenv.isLinux then libjpeg_turbo else libjpeg_original; # some problems, both on FreeBSD and Darwin
 
   libjpeg62 = callPackage ../development/libraries/libjpeg/62.nix {
     libtool = libtool_1_5;
@@ -4654,7 +4696,9 @@ let
 
   libofx = callPackage ../development/libraries/libofx { };
 
-  libogg = callPackage ../development/libraries/libogg { };
+  libogg = callPackage ../development/libraries/libogg {
+    stdenv = stdenvMulti;
+  };
 
   liboggz = callPackage ../development/libraries/liboggz { };
 
@@ -4704,7 +4748,9 @@ let
   # To bootstrap SBCL, I need CLisp 2.44.1; it needs libsigsegv 2.5
   libsigsegv_25 = callPackage ../development/libraries/libsigsegv/2.5.nix { };
 
-  libsndfile = callPackage ../development/libraries/libsndfile { };
+  libsndfile = callPackage ../development/libraries/libsndfile {
+    stdenv = stdenvMulti;
+  };
 
   libsoup = callPackage ../development/libraries/libsoup { };
 
@@ -4718,7 +4764,9 @@ let
 
   libtheora = callPackage ../development/libraries/libtheora { };
 
-  libtiff = callPackage ../development/libraries/libtiff { };
+  libtiff = callPackage ../development/libraries/libtiff {
+    stdenv = stdenvMulti;
+  };
 
   libtiger = callPackage ../development/libraries/libtiger { };
 
@@ -4779,7 +4827,9 @@ let
 
   libvterm = callPackage ../development/libraries/libvterm { };
 
-  libvorbis = callPackage ../development/libraries/libvorbis { };
+  libvorbis = callPackage ../development/libraries/libvorbis {
+    stdenv = stdenvMulti;
+  };
 
   libwebp = callPackage ../development/libraries/libwebp { };
 
@@ -5023,6 +5073,7 @@ let
   openscenegraph = callPackage ../development/libraries/openscenegraph {};
 
   openssl = callPackage ../development/libraries/openssl {
+    stdenv = stdenvMulti;
     fetchurl = fetchurlBoot;
     cryptodevHeaders = linuxPackages.cryptodev.override {
       fetchurl = fetchurlBoot;
@@ -5041,6 +5092,7 @@ let
   };
 
   pcre = callPackage ../development/libraries/pcre {
+    stdenv = stdenvMulti;
     unicodeSupport = config.pcre.unicode or true;
   };
 
@@ -5242,7 +5294,9 @@ let
 
   speech_tools = callPackage ../development/libraries/speech-tools {};
 
-  speex = callPackage ../development/libraries/speex { };
+  speex = callPackage ../development/libraries/speex {
+    stdenv = stdenvMulti;
+  };
 
   sphinxbase = callPackage ../development/libraries/sphinxbase { };
 
@@ -5695,6 +5749,7 @@ let
   apacheHttpd = pkgs.apacheHttpd_2_2;
 
   apacheHttpd_2_2 = callPackage ../servers/http/apache-httpd/2.2.nix {
+    stdenv = stdenvMulti;
     sslSupport = true;
   };
 
@@ -5936,7 +5991,7 @@ let
   xinetd = callPackage ../servers/xinetd { };
 
   xorg = recurseIntoAttrs (import ../servers/x11/xorg/default.nix {
-    inherit fetchurl fetchgit stdenv pkgconfig intltool freetype fontconfig
+    inherit fetchurl fetchgit stdenv stdenvMulti pkgconfig intltool freetype fontconfig
       libxslt expat libdrm libpng zlib perl mesa_drivers
       xkeyboard_config dbus libuuid openssl gperf m4
       autoconf libtool xmlto asciidoc udev flex bison python mtdev pixman;
@@ -6481,7 +6536,9 @@ let
 
   nss_ldap = callPackage ../os-specific/linux/nss_ldap { };
 
-  pam = callPackage ../os-specific/linux/pam { };
+  pam = callPackage ../os-specific/linux/pam {
+    stdenv = stdenvMulti;
+  };
 
   # pam_bioapi ( see http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader )
 
@@ -6639,10 +6696,12 @@ let
   utillinux = lowPrio (callPackage ../os-specific/linux/util-linux {
     ncurses = null;
     perl = null;
+    stdenv = stdenvMulti;
   });
 
   utillinuxCurses = utillinux.override {
     inherit ncurses perl;
+    stdenv = stdenvMulti;
   };
 
   v4l_utils = callPackage ../os-specific/linux/v4l-utils {
@@ -7393,7 +7452,9 @@ let
 
   firefox21Wrapper = lowPrio (wrapFirefox { browser = firefox21Pkgs.firefox; });
 
-  flac = callPackage ../applications/audio/flac { };
+  flac = callPackage ../applications/audio/flac {
+    stdenv = stdenvMulti;
+  };
 
   flashplayer = callPackage ../applications/networking/browsers/mozilla-plugins/flashplayer-11 {
     debug = config.flashplayer.debug or false;
@@ -9335,7 +9396,9 @@ let
 
   auctex = callPackage ../tools/typesetting/tex/auctex { };
 
-  cups = callPackage ../misc/cups { };
+  cups = callPackage ../misc/cups {
+    stdenv = stdenvMulti;
+  };
 
   cups_pdf_filter = callPackage ../misc/cups/pdf-filter.nix { };