From 501ceef268d1a08c035a77ae39d4d07f81b37f7c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 18 Oct 2006 12:50:04 +0000 Subject: [PATCH] * A function `useDietLibC' that returns a modified stdenv that uses dietlibc to produce small, statically linked binaries. This stdenv also passes `-Os' to GCC automatically to optimise for size. It also tries to prevent builders from linking against dynamic libraries (which dietlibc doesn't support). * A function `addAttrsToDerivation' that returns a modified stdenv that always adds the specified attributes to the derivations that it produces. Example (from curl): curlDiet = import ../tools/networking/curl { inherit fetchurl zlib; stdenv = addAttrsToDerivation { CFLAGS = "-DHAVE_INET_NTOA_R_2_ARGS=1"; } (useDietLibC stdenv); }; (This is needed to get curl to build with dietlibc. Also note the stacking of stdenv-modifying functions.) * curl-diet: no longer necessary. svn path=/nixpkgs/trunk/; revision=6761 --- .../linux/dietlibc-wrapper/builder.sh | 13 ------- .../linux/dietlibc-wrapper/default.nix | 11 ------ .../curl-diet/configure-cxxcpp.patch | 21 ----------- pkgs/tools/networking/curl-diet/default.nix | 17 --------- pkgs/tools/networking/curl/builder.sh | 9 ----- pkgs/tools/networking/curl/default.nix | 4 +- pkgs/top-level/all-packages.nix | 37 +++++++++++++++---- 7 files changed, 33 insertions(+), 79 deletions(-) delete mode 100644 pkgs/os-specific/linux/dietlibc-wrapper/builder.sh delete mode 100644 pkgs/os-specific/linux/dietlibc-wrapper/default.nix delete mode 100644 pkgs/tools/networking/curl-diet/configure-cxxcpp.patch delete mode 100644 pkgs/tools/networking/curl-diet/default.nix delete mode 100644 pkgs/tools/networking/curl/builder.sh diff --git a/pkgs/os-specific/linux/dietlibc-wrapper/builder.sh b/pkgs/os-specific/linux/dietlibc-wrapper/builder.sh deleted file mode 100644 index 976cebada832..000000000000 --- a/pkgs/os-specific/linux/dietlibc-wrapper/builder.sh +++ /dev/null @@ -1,13 +0,0 @@ -source $stdenv/setup - -ensureDir "$(dirname $out/bin/diet)" - -cat > $out/bin/gcc << END -#! $SHELL -e -export NIX_GLIBC_FLAGS_SET=1 -exec $dietlibc/bin/diet $gcc/bin/gcc "\$@" -END - -chmod +x $out/bin/gcc - -ln -s $out/bin/gcc $out/bin/cc diff --git a/pkgs/os-specific/linux/dietlibc-wrapper/default.nix b/pkgs/os-specific/linux/dietlibc-wrapper/default.nix deleted file mode 100644 index 07ef920fe65f..000000000000 --- a/pkgs/os-specific/linux/dietlibc-wrapper/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{stdenv, dietlibc, gcc, langC ? true, langCC ? true, langF77 ? false}: - -stdenv.mkDerivation { - name = dietlibc.name; - - builder = ./builder.sh; - - inherit dietlibc gcc langC langCC langF77; - #NIX_GLIBC_FLAGS_SET=1; - -} diff --git a/pkgs/tools/networking/curl-diet/configure-cxxcpp.patch b/pkgs/tools/networking/curl-diet/configure-cxxcpp.patch deleted file mode 100644 index 5b8bc85cb15d..000000000000 --- a/pkgs/tools/networking/curl-diet/configure-cxxcpp.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -ruN curl-7.12.2/configure curl-7.12.2-new/configure ---- curl-7.12.2/configure 2004-10-18 00:22:10.000000000 +0200 -+++ curl-7.12.2-new/configure 2004-12-09 13:58:57.670095179 +0100 -@@ -6835,11 +6835,12 @@ - if $ac_preproc_ok; then - : - else -- { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check --See \`config.log' for more details." >&5 --echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check --See \`config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } -+ #{ { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -+#See \`config.log' for more details." >&5 -+#echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -+#See \`config.log' for more details." >&2;} -+ #{ (exit 1); exit 1; }; } -+ : - fi - - ac_ext=cc diff --git a/pkgs/tools/networking/curl-diet/default.nix b/pkgs/tools/networking/curl-diet/default.nix deleted file mode 100644 index c72bde195049..000000000000 --- a/pkgs/tools/networking/curl-diet/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{stdenv, fetchurl, zlib, sslSupport ? false, openssl ? null, dietgcc}: - -assert sslSupport -> openssl != null; - -stdenv.mkDerivation { - name = "curl-7.15.5"; - src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/curl-7.15.5.tar.bz2; - md5 = "594142c7d53bbdd988e8cef6354eeeff"; - }; - buildInputs = [zlib (if sslSupport then openssl else null)]; - patches = [./configure-cxxcpp.patch]; - configureFlags = "--enable-shared=no" + (if sslSupport then "--with-ssl" else "--without-ssl"); - NIX_GCC = dietgcc; - NIX_GLIBC_FLAGS_SET=1; - NIX_CFLAGS_COMPILE="-D_BSD_SOURCE=1 -DHAVE_INET_NTOA_R_2_ARGS=1"; -} diff --git a/pkgs/tools/networking/curl/builder.sh b/pkgs/tools/networking/curl/builder.sh deleted file mode 100644 index dd693683cb0d..000000000000 --- a/pkgs/tools/networking/curl/builder.sh +++ /dev/null @@ -1,9 +0,0 @@ -source $stdenv/setup - -if test "$sslSupport"; then - configureFlags="--with-ssl=$openssl" -else - configureFlags="--without-ssl" -fi - -genericBuild diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix index 71cfc6e4e149..f05194e7b2ca 100644 --- a/pkgs/tools/networking/curl/default.nix +++ b/pkgs/tools/networking/curl/default.nix @@ -4,12 +4,14 @@ assert sslSupport -> openssl != null; stdenv.mkDerivation { name = "curl-7.15.5"; - builder = ./builder.sh; src = fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/curl-7.15.5.tar.bz2; md5 = "594142c7d53bbdd988e8cef6354eeeff"; }; buildInputs = [zlib (if sslSupport then openssl else null)]; patches = [./configure-cxxcpp.patch]; + configureFlags = " + ${if sslSupport then "--with-ssl=${openssl}" else "--without-ssl"} + "; inherit sslSupport openssl; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bd9e82b09359..9f720e747aab 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -61,6 +61,9 @@ rec { ); }; + addAttrsToDerivation = extraAttrs: stdenv: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); }; + # Override the setup script of stdenv. Useful for testing new # versions of the setup script without causing a rebuild of # everything. @@ -71,6 +74,30 @@ rec { # }; overrideSetup = stdenv: setup: stdenv.regenerate setup; + # Return a modified stdenv that uses dietlibc to create small + # statically linked binaries. + useDietLibC = stdenv: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { + NIX_CFLAGS_LINK = "-static"; + + # These are added *after* the command-line flags, so we'll + # always optimise for size. + NIX_CFLAGS_COMPILE = "-Os -s"; + + configureFlags = + (if args ? configureFlags then args.configureFlags else "") + + " --disable-shared"; # brrr... + + NIX_GCC = import ../build-support/gcc-wrapper { + inherit stdenv binutils; + gcc = gcc.gcc; + glibc = dietlibc; + nativeTools = false; + nativeGlibc = false; + }; + }); + }; + # Applying this to an attribute set will cause nix-env to look # inside the set for derivations. recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;}; @@ -196,8 +223,9 @@ rec { curl = if stdenv ? curl then stdenv.curl else (assert false; null); - curlDiet = import ../tools/networking/curl-diet { - inherit fetchurl stdenv zlib dietgcc; + curlDiet = import ../tools/networking/curl { + inherit fetchurl zlib; + stdenv = addAttrsToDerivation {CFLAGS = "-DHAVE_INET_NTOA_R_2_ARGS=1";} (useDietLibC stdenv); }; dhcp = import ../tools/networking/dhcp { @@ -1988,11 +2016,6 @@ rec { # arch = "arm"; #}; - dietlibcWrapper = import ../os-specific/linux/dietlibc-wrapper { - inherit stdenv dietlibc; - gcc = stdenv.gcc; - }; - e2fsprogs = import ../os-specific/linux/e2fsprogs { inherit fetchurl stdenv gettext; };