From f36f99e3689289c8d9743738aecd6922fc7ced17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 6 Mar 2010 21:41:01 +0000 Subject: [PATCH 001/282] Making gcc cross-buildable, at least for glibc. svn path=/nixpkgs/branches/stdenv-updates/; revision=20454 --- .../gcc-cross-wrapper/builder.sh | 25 ++++++++-- pkgs/development/compilers/gcc-4.4/builder.sh | 35 ++++++++++++-- .../development/compilers/gcc-4.4/default.nix | 48 ++++++++++++++++++- pkgs/stdenv/adapters.nix | 4 +- pkgs/top-level/release.nix | 3 ++ 5 files changed, 105 insertions(+), 10 deletions(-) diff --git a/pkgs/build-support/gcc-cross-wrapper/builder.sh b/pkgs/build-support/gcc-cross-wrapper/builder.sh index aaf52cd7745d..8d4aa7178183 100644 --- a/pkgs/build-support/gcc-cross-wrapper/builder.sh +++ b/pkgs/build-support/gcc-cross-wrapper/builder.sh @@ -1,5 +1,8 @@ source $stdenv/setup +mkdir $out +mkdir $out/bin +mkdir $out/nix-support # Force gcc to use ld-wrapper.sh when calling ld. cflagsCompile="-B$out/bin/" @@ -9,6 +12,23 @@ if test -z "$nativeLibc"; then ldflags="$ldflags -L$libc/lib" ldflagsBefore="-dynamic-linker $libc/lib/ld-linux.so.?" #ldflagsBefore="-dynamic-linker $libc/lib/ld-uClibc.so.0" + + # The same as above, but put into files, useful for the gcc builder. + dynamicLinker="$libc/lib/$dynamicLinker" + echo $dynamicLinker > $out/nix-support/dynamic-linker + + if test -e $libc/lib/32/ld-linux.so.2; then + echo $libc/lib/32/ld-linux.so.2 > $out/nix-support/dynamic-linker-m32 + fi + + echo "$cflagsCompile -B$libc/lib/ -idirafter $libc/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags + + echo "-L$libc/lib" > $out/nix-support/libc-ldflags + + # The dynamic linker is passed in `ldflagsBefore' to allow + # explicit overrides of the dynamic linker by callers to gcc/ld + # (the *last* value counts, so ours should come first). + echo "-dynamic-linker $dynamicLinker" > $out/nix-support/libc-ldflags-before fi if test -n "$nativeTools"; then @@ -21,11 +41,6 @@ else fi -mkdir $out -mkdir $out/bin -mkdir $out/nix-support - - doSubstitute() { local src=$1 local dst=$2 diff --git a/pkgs/development/compilers/gcc-4.4/builder.sh b/pkgs/development/compilers/gcc-4.4/builder.sh index b9724e7ad50e..abe14b457ab2 100644 --- a/pkgs/development/compilers/gcc-4.4/builder.sh +++ b/pkgs/development/compilers/gcc-4.4/builder.sh @@ -61,10 +61,39 @@ if test "$noSysDirs" = "1"; then EXTRA_LDFLAGS_TARGET="-Wl,-L${libcCross}/lib" fi else - EXTRA_FLAGS_TARGET="$EXTRA_FLAGS" - EXTRA_LDFLAGS_TARGET="$EXTRA_LDFLAGS" + if test -z "$NIX_GCC_CROSS"; then + EXTRA_FLAGS_TARGET="$EXTRA_FLAGS" + EXTRA_LDFLAGS_TARGET="$EXTRA_LDFLAGS" + else + # This the case of cross-building the gcc. + # We need special flags for the target, different than those of the build + # Assertion: + test -e $NIX_GCC_CROSS/nix-support/orig-libc + + # Figure out what extra flags to pass to the gcc compilers + # being generated to make sure that they use our glibc. + extraFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-cflags)" + extraLDFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-ldflags) $(cat $NIX_GCC_CROSS/nix-support/libc-ldflags-before)" + + # 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). + NIX_FIXINC_DUMMY_CROSS=$(cat $NIX_GCC_CROSS/nix-support/orig-libc)/include + + # The path to the Glibc binaries such as `crti.o'. + glibc_libdir="$(cat $NIX_GCC_CROSS/nix-support/orig-libc)/lib" + + extraFlags="-g0 -O2 -I$NIX_FIXINC_DUMMY_CROSS $extraFlags" + extraLDFlags="--strip-debug -L$glibc_libdir -rpath $glibc_libdir $extraLDFlags" + + EXTRA_FLAGS_TARGET="$extraFlags" + for i in $extraLDFlags; do + EXTRA_LDFLAGS_TARGET="$EXTRA_LDFLAGS_TARGET -Wl,$i" + done + fi fi + # CFLAGS_FOR_TARGET are needed for the libstdc++ configure script to find # the startfiles. # FLAGS_FOR_TARGET are needed for the target libraries to receive the -Bxxx @@ -160,7 +189,7 @@ postInstall() { } -if test -z "$targetConfig"; then +if test -z "$targetConfig" && test -z "$crossConfig"; then if test -z "$profiledCompiler"; then buildFlags="bootstrap $buildFlags" else diff --git a/pkgs/development/compilers/gcc-4.4/default.nix b/pkgs/development/compilers/gcc-4.4/default.nix index 358e52124072..4307cbc7ccff 100644 --- a/pkgs/development/compilers/gcc-4.4/default.nix +++ b/pkgs/development/compilers/gcc-4.4/default.nix @@ -115,7 +115,9 @@ stdenv.mkDerivation ({ inherit noSysDirs profiledCompiler staticCompiler langJava crossStageStatic libcCross; - buildInputs = [ texinfo gmp mpfr gettext which ] + buildNativeInputs = [ texinfo which ]; + + buildInputs = [ gmp mpfr gettext ] ++ (optional (ppl != null) ppl) ++ (optional (cloogppl != null) cloogppl) ++ (optionals langTreelang [bison flex]) @@ -165,6 +167,50 @@ stdenv.mkDerivation ({ LD = "ld"; CC = "gcc"; + crossAttrs = { + AR = "${stdenv.cross.config}-ar"; + LD = "${stdenv.cross.config}-ld"; + CC = "${stdenv.cross.config}-gcc"; + CXX = "${stdenv.cross.config}-gcc"; + AR_FOR_TARGET = "${stdenv.cross.config}-ar"; + LD_FOR_TARGET = "${stdenv.cross.config}-ld"; + CC_FOR_TARGET = "${stdenv.cross.config}-gcc"; + NM_FOR_TARGET = "${stdenv.cross.config}-nm"; + CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; + # If we are making a cross compiler, cross != null + NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; + configureFlags = " + ${if enableMultilib then "" else "--disable-multilib"} + ${if enableShared then "" else "--disable-shared"} + ${if ppl != null then "--with-ppl=${ppl.hostDrv}" else ""} + ${if cloogppl != null then "--with-cloog=${cloogppl.hostDrv}" else ""} + ${if langJava then "--with-ecj-jar=${javaEcj.hostDrv}" else ""} + ${if javaAwtGtk then "--enable-java-awt=gtk" else ""} + ${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.hostDrv}" else ""} + --with-gmp=${gmp.hostDrv} + --with-mpfr=${mpfr.hostDrv} + --disable-libstdcxx-pch + --without-included-gettext + --with-system-zlib + --enable-languages=${ + concatStrings (intersperse "," + ( optional langC "c" + ++ optional langCC "c++" + ++ optional langFortran "fortran" + ++ optional langJava "java" + ++ optional langTreelang "treelang" + ++ optional langAda "ada" + ++ optional langVhdl "vhdl" + ) + ) + } + ${if langAda then " --enable-libada" else ""} + ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} + ${if cross != null then crossConfigureFlags else ""} + --target=${stdenv.cross.config} + "; + }; + # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find # the library headers and binaries, regarless of the language being # compiled. diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 5282e30e3157..67a09a9cc45c 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -179,7 +179,9 @@ rec { in buildDrv // { inherit hostDrv buildDrv; }; - } // { inherit cross; }; + } // { + inherit cross gccCross binutilsCross; + }; /* Modify a stdenv so that the specified attributes are added to diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index 1df7507906ee..99bcfb6ab2e4 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -725,6 +725,7 @@ in { linuxPackages_2_6_32.kernel = linux; linuxPackages_2_6_33.kernel = linux; gdbCross = nativePlatforms; + gcc44_real.gcc = linux; }); }) // ( @@ -760,6 +761,7 @@ in { linuxPackages_2_6_32.kernel = linux; linuxPackages_2_6_33.kernel = linux; gdbCross = nativePlatforms; + gcc44_real.gcc = linux; }); }) // ( @@ -796,5 +798,6 @@ in { linuxPackages_2_6_32.kernel = linux; linuxPackages_2_6_33.kernel = linux; gdbCross = nativePlatforms; + gcc44_real.gcc = linux; }); }) From d9b48d35fbd884bc9682362197f92e7571433f61 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 9 Mar 2010 16:07:00 +0000 Subject: [PATCH 002/282] svn path=/nixpkgs/branches/stdenv-updates/; revision=20504 --- pkgs/top-level/release-lib.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/release-lib.nix b/pkgs/top-level/release-lib.nix index b65296b5ea23..91f99c59bfe2 100644 --- a/pkgs/top-level/release-lib.nix +++ b/pkgs/top-level/release-lib.nix @@ -9,14 +9,14 @@ rec { crossMaintainers = with pkgs.lib.maintainers; [ viric ]; /* Set the Hydra scheduling priority for a job. The default - priority (100) should be used for most jobs. A different + priority (10) should be used for most jobs. A different priority should only be used for a few particularly interesting jobs (in terms of giving feedback to developers), such as stdenv. */ prio = level: job: toJob job // { schedulingPriority = level; }; toJob = x: if builtins.isAttrs x then x else - { type = "job"; systems = x; schedulingPriority = 10; }; + { type = "job"; systems = x; schedulingPriority = 5; }; /* Perform a job on the given set of platforms. The function `f' is called by Hydra for each platform, and should return some job From 6f9a7832326b7a695ecadcd66b3b8c7acb8dd632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 9 Mar 2010 18:05:38 +0000 Subject: [PATCH 003/282] Trying to get coreutils cross-built with uclibc. This involved fixing some buildInputs/buildNativeInputs in acl/attr, and adding a libiconv in some places. svn path=/nixpkgs/branches/stdenv-updates/; revision=20510 --- pkgs/development/libraries/acl/default.nix | 3 ++- pkgs/development/libraries/attr/default.nix | 3 ++- pkgs/development/libraries/gettext/default.nix | 5 +++++ pkgs/os-specific/linux/uclibc/default.nix | 7 ++++++- pkgs/tools/misc/coreutils/default.nix | 10 +++++++++- pkgs/top-level/all-packages.nix | 2 +- 6 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix index 06dd8cb2fb97..9bf407d61ff1 100644 --- a/pkgs/development/libraries/acl/default.nix +++ b/pkgs/development/libraries/acl/default.nix @@ -8,7 +8,8 @@ stdenv.mkDerivation { sha256 = "1j39g62fki0iyji9s62slgwdfskpkqy7rmjlqcnmsvsnxbxhc294"; }; - buildInputs = [gettext attr libtool]; + buildNativeInputs = [gettext]; + buildInputs = [attr libtool]; configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip ECHO=echo SED=sed AWK=gawk"; diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix index 532f97a9fdf3..0f38cb27c0db 100644 --- a/pkgs/development/libraries/attr/default.nix +++ b/pkgs/development/libraries/attr/default.nix @@ -9,7 +9,8 @@ stdenv.mkDerivation { sha256 = "1gy5zspj8ynxv6q29r24d18cfvq06zirg1pxcdg27bg2ncrv4n6k"; }; - buildInputs = [libtool gettext]; + buildNativeInputs = [gettext]; + buildInputs = [libtool]; configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk"; diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index 6b094fdc8394..826dae2d314a 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -21,6 +21,11 @@ stdenv.mkDerivation (rec { fi ''; + crossAttrs = { + buildInputs = stdenv.lib.optional (stdenv.gccCross.libc ? libiconv) + stdenv.gccCross.libc.libiconv.hostDrv; + }; + meta = { description = "GNU gettext, a well integrated set of translation tools and documentation"; diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix index 0811e8e3e80f..8787e345451a 100644 --- a/pkgs/os-specific/linux/uclibc/default.nix +++ b/pkgs/os-specific/linux/uclibc/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, linuxHeaders, cross ? null, gccCross ? null}: +{stdenv, fetchurl, linuxHeaders, libiconv, cross ? null, gccCross ? null}: assert stdenv.isLinux; assert cross != null -> gccCross != null; @@ -58,6 +58,11 @@ stdenv.mkDerivation { (cd $out/include && ln -s $(ls -d ${linuxHeaders}/include/* | grep -v "scsi$") .) sed -i s@/lib/@$out/lib/@g $out/lib/libc.so ''; + + passthru = { + # Derivations may check for the existance of this attribute, to know what to link to. + inherit libiconv; + }; meta = { homepage = http://www.uclibc.org/; diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index d588c49e5c38..431684829b5b 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -8,7 +8,15 @@ stdenv.mkDerivation rec { sha256 = "0zq11lykc7hfs9nsdnb8gqk354l82hswqj38607mvwj3b0zqvc4b"; }; - buildInputs = [ perl gmp ] ++ stdenv.lib.optional aclSupport acl; + buildNativeInputs = [ perl ]; + buildInputs = [ gmp ] ++ stdenv.lib.optional aclSupport acl; + + crossAttrs = { + buildInputs = [ gmp ] + ++ stdenv.lib.optional aclSupport acl.hostDrv + ++ stdenv.lib.optional (stdenv.gccCross.libc ? libiconv) + stdenv.gccCross.libc.libiconv.hostDrv; + }; # The tests are known broken on Cygwin # (http://thread.gmane.org/gmane.comp.gnu.core-utils.bugs/19025), diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 04f2d450f1bc..153ca8b1bd9f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6401,7 +6401,7 @@ let */ uclibcCross = import ../os-specific/linux/uclibc { - inherit fetchurl stdenv; + inherit fetchurl stdenv libiconv; linuxHeaders = linuxHeadersCross; gccCross = gccCrossStageStatic; cross = assert crossSystem != null; crossSystem; From 9665611c9ef7caa8119451c4b4fb5a0c211593c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 9 Mar 2010 18:17:30 +0000 Subject: [PATCH 004/282] Updating from trunk, to get the main evaluation fix about libcCross. svn path=/nixpkgs/branches/stdenv-updates/; revision=20512 --- pkgs/os-specific/linux/util-linux-ng/default.nix | 6 +++--- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/os-specific/linux/util-linux-ng/default.nix b/pkgs/os-specific/linux/util-linux-ng/default.nix index 3ab1c5808379..166c9358759a 100644 --- a/pkgs/os-specific/linux/util-linux-ng/default.nix +++ b/pkgs/os-specific/linux/util-linux-ng/default.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, ncurses ? null, ... }: stdenv.mkDerivation rec { - name = "util-linux-ng-2.16.2"; + name = "util-linux-ng-2.17.1"; src = fetchurl { - url = "mirror://kernel/linux/utils/util-linux-ng/v2.16/${name}.tar.bz2"; - sha256 = "1sx3z64z8z95v93k0c9lczcp04zw4nm3d2rkhczkyxcpdfcgbhxi"; + url = "mirror://kernel/linux/utils/util-linux-ng/v2.17/${name}.tar.bz2"; + sha256 = "140k32jqg9192vskdb3p98q99qgr14029h975nw21p426zm1kh79"; }; configureFlags = '' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 153ca8b1bd9f..128958e0fa67 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3747,7 +3747,7 @@ let else if (name == "uclibc") then uclibcCross else throw "Unknown libc"; - libcCross = libcCrossChooser crossSystem.libc; + libcCross = assert crossSystem != null; libcCrossChooser crossSystem.libc; eglibc = import ../development/libraries/eglibc { inherit fetchsvn stdenv; From dfaee7994d1f476da00dbf9c7772ba7b6e074125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 9 Mar 2010 20:36:56 +0000 Subject: [PATCH 005/282] Little update on uclibc: enable ftw. svn path=/nixpkgs/branches/stdenv-updates/; revision=20513 --- pkgs/os-specific/linux/uclibc/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix index 8787e345451a..4cd7980ce9af 100644 --- a/pkgs/os-specific/linux/uclibc/default.nix +++ b/pkgs/os-specific/linux/uclibc/default.nix @@ -31,12 +31,14 @@ stdenv.mkDerivation { sha256 = "0wr4hlybssiyswdc73wdcxr31xfbss3lnqiv5lcav3rg3v4r4vmb"; }; + # 'ftw' needed to build acl, a coreutils dependency configurePhase = '' make defconfig ${archMakeFlag} sed -e s@/usr/include@${linuxHeaders}/include@ \ -e 's@^RUNTIME_PREFIX.*@RUNTIME_PREFIX="/"@' \ -e 's@^DEVEL_PREFIX.*@DEVEL_PREFIX="/"@' \ -e 's@.*UCLIBC_HAS_WCHAR.*@UCLIBC_HAS_WCHAR=y@' \ + -e 's@.*UCLIBC_HAS_FTW.*@UCLIBC_HAS_FTW=y@' \ -e 's@.*DO_C99_MATH.*@DO_C99_MATH=y@' \ -e 's@.*UCLIBC_HAS_PROGRAM_INVOCATION_NAME.*@UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y@' \ ${configArmEABI} \ From d3292f42a2ee80198812b01e5a612a237bd449c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Mar 2010 23:24:56 +0000 Subject: [PATCH 006/282] GMP 5.0.0. svn path=/nixpkgs/branches/stdenv-updates/; revision=20586 --- pkgs/development/libraries/gmp/default.nix | 35 +++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index 0b608fb4aada..e414a5f2a734 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -1,15 +1,17 @@ {stdenv, fetchurl, m4, cxx ? true}: stdenv.mkDerivation rec { - name = "gmp-4.3.2"; + name = "gmp-5.0.0"; src = fetchurl { url = "mirror://gnu/gmp/${name}.tar.bz2"; - sha256 = "0x8prpqi9amfcmi7r4zrza609ai9529pjaq0h4aw51i867064qck"; + sha256 = "0kwqhyvw48yzxjp29c721m9v498115dh6li9adk7b84mbh7gv2gh"; }; buildNativeInputs = [m4]; + # Prevent the build system from using sub-architecture-specific + # instructions (e.g., SSE2 on i686). preConfigure = "ln -sf configfsf.guess config.guess"; configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; @@ -17,9 +19,34 @@ stdenv.mkDerivation rec { doCheck = true; meta = { - description = "A free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers"; + description = "GMP, the GNU multiple precision arithmetic library"; + + longDescription = + '' GMP is a free library for arbitrary precision arithmetic, operating + on signed integers, rational numbers, and floating point numbers. + There is no practical limit to the precision except the ones implied + by the available memory in the machine GMP runs on. GMP has a rich + set of functions, and the functions have a regular interface. + + The main target applications for GMP are cryptography applications + and research, Internet security applications, algebra systems, + computational algebra research, etc. + + GMP is carefully designed to be as fast as possible, both for small + operands and for huge operands. The speed is achieved by using + fullwords as the basic arithmetic type, by using fast algorithms, + with highly optimised assembly code for the most common inner loops + for a lot of CPUs, and by a general emphasis on speed. + + GMP is faster than any other bignum library. The advantage for GMP + increases with the operand sizes for many operations, since GMP uses + asymptotically faster algorithms. + ''; + homepage = http://gmplib.org/; - license = "LGPL"; + license = "LGPLv3+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; platforms = stdenv.lib.platforms.all; }; } From e7f9d4e03f40e7c5dd4947da36a0aa704be9f263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Mar 2010 23:25:03 +0000 Subject: [PATCH 007/282] Try GMP 5 on Darwin. svn path=/nixpkgs/branches/stdenv-updates/; revision=20587 --- pkgs/top-level/all-packages.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 128958e0fa67..4794e0568801 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3793,8 +3793,8 @@ let inherit fetchurl stdenv; }; - gmp = - if stdenv.system == "i686-darwin" then + gmp = + if false then # XXX: stdenv.system == "i686-darwin" then # GMP 4.3.2 is broken on Darwin, so use 4.3.1. makeOverridable (import ../development/libraries/gmp/4.3.1.nix) { inherit stdenv fetchurl m4; From c7bc6359833f904afe32e67baa5e865ef655ccd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 27 Mar 2010 18:23:41 +0000 Subject: [PATCH 008/282] Trying to disable ppl in the cross-gcc. ppl does not build since the gmp update. svn path=/nixpkgs/branches/stdenv-updates/; revision=20839 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4794e0568801..bf09b758d2ec 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1964,7 +1964,7 @@ let }; gcc44_realCross = makeOverridable (import ../development/compilers/gcc-4.4) { - inherit stdenv fetchurl texinfo gmp mpfr ppl cloogppl noSysDirs + inherit stdenv fetchurl texinfo gmp mpfr /* ppl cloogppl */ noSysDirs gettext which; binutilsCross = binutilsCross; libcCross = libcCross; From 2d261d1c1ed28e396ec0305075ccffb25b416abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 4 Apr 2010 18:05:58 +0000 Subject: [PATCH 009/282] Making glibc-2.11.1 search the locale archive not in LOCALE_ARCHIVE, but LOCALE_ARCHIVE_2_11 Then, next updates of glibc versions should involve also a change in the LOCALE_ARCHIVE_X_XX variable name, and this way nixos would deal properly with locales and old-glibc packages. I welcome other solutions. This looks simple enough, so that's why I go on it. svn path=/nixpkgs/branches/stdenv-updates/; revision=20944 --- pkgs/development/libraries/glibc-2.11/locale-override.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.11/locale-override.patch b/pkgs/development/libraries/glibc-2.11/locale-override.patch index 108d0e35dacf..72340993c337 100644 --- a/pkgs/development/libraries/glibc-2.11/locale-override.patch +++ b/pkgs/development/libraries/glibc-2.11/locale-override.patch @@ -11,7 +11,7 @@ diff -rc glibc-2.9-20081208-orig/locale/loadarchive.c glibc-2.9-20081208/locale/ + open_locale_archive () + { + int fd = -1; -+ char *path = getenv ("LOCALE_ARCHIVE"); ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); + if (path) + fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); + if (fd < 0) @@ -66,7 +66,7 @@ diff -rc glibc-2.9-20081208-orig/sysdeps/generic/unsecvars.h glibc-2.9-20081208/ "LD_SHOW_AUXV\0" \ "LD_USE_LOAD_BIAS\0" \ "LOCALDOMAIN\0" \ -+ "LOCALE_ARCHIVE\0" \ ++ "LOCALE_ARCHIVE_2_11\0" \ "LOCPATH\0" \ "MALLOC_TRACE\0" \ "NIS_PATH\0" \ From 19b98110126fde7cbb1127af7e3fe1568eacad3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 4 Apr 2010 18:10:42 +0000 Subject: [PATCH 010/282] Making a bunch of basic programs cross-buildable. After this, the 'bootstrap-tools' can be cross-built. svn path=/nixpkgs/branches/stdenv-updates/; revision=20945 --- pkgs/applications/editors/ed/default.nix | 4 +++ pkgs/os-specific/linux/klibc/default.nix | 34 ++++++++++++++++++++---- pkgs/tools/compression/bzip2/default.nix | 10 +++++++ pkgs/tools/misc/coreutils/default.nix | 4 +++ pkgs/tools/misc/findutils/default.nix | 7 ++++- pkgs/tools/text/diffutils/default.nix | 2 +- pkgs/tools/text/gnupatch/default.nix | 4 +++ pkgs/tools/text/replace/default.nix | 4 +++ pkgs/top-level/all-packages.nix | 2 +- 9 files changed, 63 insertions(+), 8 deletions(-) diff --git a/pkgs/applications/editors/ed/default.nix b/pkgs/applications/editors/ed/default.nix index 9f26c0a2886e..905cde880edd 100644 --- a/pkgs/applications/editors/ed/default.nix +++ b/pkgs/applications/editors/ed/default.nix @@ -10,6 +10,10 @@ stdenv.mkDerivation rec { doCheck = true; + crossAttrs = { + compileFlags = [ "CC=${stdenv.cross.config}-gcc" ]; + }; + meta = { description = "GNU ed, an implementation of the standard Unix editor"; diff --git a/pkgs/os-specific/linux/klibc/default.nix b/pkgs/os-specific/linux/klibc/default.nix index 8bd911ee0805..0a2747eb1657 100644 --- a/pkgs/os-specific/linux/klibc/default.nix +++ b/pkgs/os-specific/linux/klibc/default.nix @@ -1,8 +1,11 @@ -{stdenv, fetchurl, perl, bison, mktemp, linuxHeaders}: +{stdenv, fetchurl, perl, bison, mktemp, linuxHeaders, linuxHeadersCross}: assert stdenv.isLinux; -let version = "1.5.15"; in +let + version = "1.5.15"; + baseMakeFlags = ["V=1" "prefix=$out" "SHLIBDIR=$out/lib"]; +in stdenv.mkDerivation { name = "klibc-${version}"; @@ -12,15 +15,36 @@ stdenv.mkDerivation { sha256 = "1x401wmjca6zkyikf9xz45b3wb1hnj0m2s9in1sg6xdhi3pk8lwb"; }; - makeFlags = ["V=1" "prefix=$out" "SHLIBDIR=$out/lib"]; + makeFlags = baseMakeFlags; + + inherit linuxHeaders; + + crossAttrs = { + name = "klibc-1.5.17"; + src = fetchurl { + url = "mirror://kernel/linux/libs/klibc/Testing/klibc-1.5.17.tar.bz2"; + sha256 = "1jmiszf9pdlzj9f72nkv50d7aqrzz12hrmw792xnd2lmn5nrfyx6"; + }; + + makeFlags = baseMakeFlags ++ [ "CROSS_COMPILE=${stdenv.cross.config}-" + "KLIBCARCH=${stdenv.cross.arch}" ]; + + patchPhase = '' + sed -i /KLIBCKERNELSRC/d scripts/Kbuild.install + ''; + + linuxHeaders = linuxHeadersCross; + }; + # The AEABI option concerns only arm systems, and does not affect the build for + # other systems. preBuild = '' sed -i /CONFIG_AEABI/d defconfig echo "CONFIG_AEABI=y" >> defconfig makeFlags=$(eval "echo $makeFlags") mkdir linux - cp -prsd ${linuxHeaders}/include linux/ + cp -prsd $linuxHeaders/include linux/ chmod -R u+w linux/include/ ''; # */ @@ -32,5 +56,5 @@ stdenv.mkDerivation { cp usr/dash/sh $dir/ ''; - buildInputs = [perl bison mktemp]; + buildNativeInputs = [ perl bison mktemp ]; } diff --git a/pkgs/tools/compression/bzip2/default.nix b/pkgs/tools/compression/bzip2/default.nix index 0523067cbade..e8ac6c6418cb 100644 --- a/pkgs/tools/compression/bzip2/default.nix +++ b/pkgs/tools/compression/bzip2/default.nix @@ -10,6 +10,16 @@ stdenv.mkDerivation { sha256 = "08py2s9vw6dgw457lbklh1vsr3b8x8dlv7d8ygdfaxlx61l57gzp"; }; + crossAttrs = { + patchPhase = '' + sed -i -e 's/CC=gcc/CC=${stdenv.cross.config}-gcc/' \ + -e 's/AR=ar/AR=${stdenv.cross.config}-ar/' \ + -e 's/RANLIB=ranlib/RANLIB=${stdenv.cross.config}-ranlib/' \ + -e 's/bzip2recover test/bzip2recover/' \ + Makefile* + ''; + }; + sharedLibrary = !stdenv.isDarwin && !(stdenv ? isDietLibC) && !(stdenv ? isStatic) && stdenv.system != "i686-cygwin" && !linkStatic; diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index 431684829b5b..6f7c0923d99f 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -16,6 +16,10 @@ stdenv.mkDerivation rec { ++ stdenv.lib.optional aclSupport acl.hostDrv ++ stdenv.lib.optional (stdenv.gccCross.libc ? libiconv) stdenv.gccCross.libc.libiconv.hostDrv; + + # Needed for fstatfs() + # I don't know why it is not properly detected cross building with glibc. + configureFlags = [ "fu_cv_sys_stat_statfs2_bsize=yes" ]; }; # The tests are known broken on Cygwin diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix index 2350ab260492..887f400b8c59 100644 --- a/pkgs/tools/misc/findutils/default.nix +++ b/pkgs/tools/misc/findutils/default.nix @@ -8,7 +8,7 @@ stdenv.mkDerivation rec { sha256 = "0f61phan4q8w5i1lz768q973c1spfqgvc470jc89rpg0gxfvi9bp"; }; - buildInputs = [coreutils]; + buildNativeInputs = [coreutils]; patches = [ ./findutils-path.patch ./change_echo_path.patch ] # Note: the dietlibc patch is just to get findutils to compile. @@ -17,6 +17,11 @@ stdenv.mkDerivation rec { doCheck = true; + crossAttrs = { + # http://osdir.com/ml/bug-findutils-gnu/2009-08/msg00026.html + configureFlags = [ "gl_cv_func_wcwidth_works=yes" ]; + }; + meta = { homepage = http://www.gnu.org/software/findutils/; description = "GNU Find Utilities, the basic directory searching utilities of the GNU operating system"; diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix index 44b7715607c8..d75485cf0473 100644 --- a/pkgs/tools/text/diffutils/default.nix +++ b/pkgs/tools/text/diffutils/default.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation { }; /* If no explicit coreutils is given, use the one from stdenv. */ - buildInputs = [coreutils]; + buildNativeInputs = [coreutils]; meta = { homepage = http://www.gnu.org/software/diffutils/diffutils.html; diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix index cd2a67f69933..e6383f40a7c1 100644 --- a/pkgs/tools/text/gnupatch/default.nix +++ b/pkgs/tools/text/gnupatch/default.nix @@ -17,6 +17,10 @@ stdenv.mkDerivation rec { buildInputs = (stdenv.lib.optional doCheck ed); + crossAttrs = { + configureFlags = [ "ac_cv_func_strnlen_working=yes" ]; + }; + doCheck = true; meta = { diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix index 0182a3bb48df..339bf510c4b2 100644 --- a/pkgs/tools/text/replace/default.nix +++ b/pkgs/tools/text/replace/default.nix @@ -10,6 +10,10 @@ stdenv.mkDerivation { makeFlags = ["TREE=\$(out)"]; + crossAttrs = { + makeFlags = [ "TREE=\$(out)" "CC=${stdenv.cross.config}-gcc" ]; + }; + postInstall = "mv \$out/bin/replace \$out/bin/replace-literal"; patches = [./malloc.patch]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bf09b758d2ec..c1f37aaca9aa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6143,7 +6143,7 @@ let }; klibc = makeOverridable (import ../os-specific/linux/klibc) { - inherit fetchurl stdenv perl bison mktemp; + inherit fetchurl stdenv perl bison mktemp linuxHeadersCross; linuxHeaders = glibc.kernelHeaders; }; From 99d51d0e9287609b453549d36bcfb53e17dacbea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 13 Apr 2010 08:37:54 +0000 Subject: [PATCH 011/282] Assorted GNU updates. svn path=/nixpkgs/branches/stdenv-updates/; revision=21047 --- .../tools/misc/binutils/as-pr10856.patch | 83 ------------------- .../tools/misc/binutils/default.nix | 6 +- pkgs/development/tools/misc/gnum4/default.nix | 6 +- pkgs/tools/archivers/gnutar/default.nix | 6 +- pkgs/tools/misc/findutils/default.nix | 4 +- pkgs/tools/text/gnugrep/default.nix | 6 +- pkgs/tools/text/gnused/default.nix | 16 ++-- pkgs/tools/text/gnused/gettext-fix.patch | 32 ------- 8 files changed, 21 insertions(+), 138 deletions(-) delete mode 100644 pkgs/development/tools/misc/binutils/as-pr10856.patch delete mode 100644 pkgs/tools/text/gnused/gettext-fix.patch diff --git a/pkgs/development/tools/misc/binutils/as-pr10856.patch b/pkgs/development/tools/misc/binutils/as-pr10856.patch deleted file mode 100644 index 695d3e356706..000000000000 --- a/pkgs/development/tools/misc/binutils/as-pr10856.patch +++ /dev/null @@ -1,83 +0,0 @@ -Fix a regression in GNU as: -http://sourceware.org/bugzilla/show_bug.cgi?id=10856 . - -The bug appears to be responsible for invalid code generated for -Crypto++: -http://groups.google.com/group/cryptopp-users/browse_thread/thread/7ce734e479586640/29c6649b7c7adee2?#29c6649b7c7adee2 . - -diff -u -r1.77.2.1 -r1.77.2.2 ---- a/gas/expr.c 2009/09/11 15:28:43 1.77.2.1 -+++ b/gas/expr.c 2009/10/28 08:23:48 1.77.2.2 -@@ -1997,6 +1997,7 @@ - /* Help out with CSE. */ - valueT final_val = expressionP->X_add_number; - symbolS *add_symbol = expressionP->X_add_symbol; -+ symbolS *orig_add_symbol = add_symbol; - symbolS *op_symbol = expressionP->X_op_symbol; - operatorT op = expressionP->X_op; - valueT left, right; -@@ -2078,6 +2079,7 @@ - left = right; - seg_left = seg_right; - add_symbol = op_symbol; -+ orig_add_symbol = expressionP->X_op_symbol; - op = O_symbol; - break; - } -@@ -2122,18 +2124,19 @@ - { - if (op == O_bit_exclusive_or || op == O_bit_inclusive_or) - { -- if (seg_right != absolute_section || right != 0) -+ if (!(seg_right == absolute_section && right == 0)) - { - seg_left = seg_right; - left = right; - add_symbol = op_symbol; -+ orig_add_symbol = expressionP->X_op_symbol; - } - op = O_symbol; - break; - } - else if (op == O_left_shift || op == O_right_shift) - { -- if (seg_left != absolute_section || left != 0) -+ if (!(seg_left == absolute_section && left == 0)) - { - op = O_symbol; - break; -@@ -2149,6 +2152,7 @@ - seg_left = seg_right; - left = right; - add_symbol = op_symbol; -+ orig_add_symbol = expressionP->X_op_symbol; - op = O_symbol; - break; - } -@@ -2158,11 +2162,11 @@ - op = O_symbol; - break; - } -- else if (left != right -- || ((seg_left != reg_section || seg_right != reg_section) -- && (seg_left != undefined_section -- || seg_right != undefined_section -- || add_symbol != op_symbol))) -+ else if (!(left == right -+ && ((seg_left == reg_section && seg_right == reg_section) -+ || (seg_left == undefined_section -+ && seg_right == undefined_section -+ && add_symbol == op_symbol)))) - return 0; - else if (op == O_bit_and || op == O_bit_inclusive_or) - { -@@ -2233,7 +2237,8 @@ - op = O_constant; - else if (seg_left == reg_section && final_val == 0) - op = O_register; -- else if (add_symbol != expressionP->X_add_symbol) -+ else if (seg_left == undefined_section -+ && add_symbol != orig_add_symbol) - final_val += left; - expressionP->X_add_symbol = add_symbol; - } diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 1bb110e35fd3..3e3dedd1e833 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -1,14 +1,14 @@ {stdenv, fetchurl, noSysDirs, cross ? null}: let - basename = "binutils-2.20"; + basename = "binutils-2.20.1"; in stdenv.mkDerivation rec { name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; src = fetchurl { url = "mirror://gnu/binutils/${basename}.tar.bz2"; - sha256 = "1c3m789p5rwmmnck5ms4zcnc40axss3gxzivz571al1vmbq0kpz1"; + sha256 = "1y7nwsprhr4hvx9ps2l0l0ivb6k41rcrx1invmzqxs475mr892r2"; }; patches = [ @@ -16,8 +16,6 @@ stdenv.mkDerivation rec { # RUNPATH instead of RPATH on binaries. This is important because # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. ./new-dtags.patch - - ./as-pr10856.patch ]; inherit noSysDirs; diff --git a/pkgs/development/tools/misc/gnum4/default.nix b/pkgs/development/tools/misc/gnum4/default.nix index 0c73ba1f738d..717a48f11e6d 100644 --- a/pkgs/development/tools/misc/gnum4/default.nix +++ b/pkgs/development/tools/misc/gnum4/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "gnum4-1.4.13"; + name = "gnum4-1.4.14"; src = fetchurl { - url = mirror://gnu/m4/m4-1.4.13.tar.bz2; - sha256 = "01pcrajrk2rqhxbrij3j07ywyxlq7ih43a8pzvhdlxhlwfazxipw"; + url = mirror://gnu/m4/m4-1.4.14.tar.bz2; + sha256 = "1ljddxjqw1642b26qzk87fahkv9rsv2cn2ygn6b3ldan6alzz188"; }; doCheck = !stdenv.isDarwin; diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix index a49b4de52b0f..437f96663885 100644 --- a/pkgs/tools/archivers/gnutar/default.nix +++ b/pkgs/tools/archivers/gnutar/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation rec { - name = "gnutar-1.22"; + name = "gnutar-1.23"; src = fetchurl { - url = "mirror://gnu/tar/tar-1.22.tar.bz2"; - sha256 = "0kdaadflxa6wznbbrp0xlxk9926hrr4yg7wr6m98ygvs35zvdvrw"; + url = "mirror://gnu/tar/tar-1.23.tar.bz2"; + sha256 = "0dmyxsh0171m6nv8aw74dps1l4b1r7pkqkly9kcv3yv2vdr86cn9"; }; patches = [./implausible.patch]; diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix index 887f400b8c59..11ed1cf07b56 100644 --- a/pkgs/tools/misc/findutils/default.nix +++ b/pkgs/tools/misc/findutils/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, coreutils}: stdenv.mkDerivation rec { - name = "findutils-4.4.1"; + name = "findutils-4.4.2"; src = fetchurl { url = "mirror://gnu/findutils/${name}.tar.gz"; - sha256 = "0f61phan4q8w5i1lz768q973c1spfqgvc470jc89rpg0gxfvi9bp"; + sha256 = "0amn0bbwqvsvvsh6drfwz20ydc2czk374lzw5kksbh6bf78k4ks3"; }; buildNativeInputs = [coreutils]; diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 609213aaa677..17d69404e0c7 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -1,13 +1,13 @@ {stdenv, fetchurl, pcre}: -let version = "2.5.4"; in +let version = "2.6.3"; in stdenv.mkDerivation { name = "gnugrep-${version}"; src = fetchurl { - url = "mirror://gnu/grep/grep-${version}.tar.bz2"; - sha256 = "0800lj1ywf43x5jnjyga56araak0f601sd9k5q1vv3s5057cdgha"; + url = "mirror://gnu/grep/grep-${version}.tar.gz"; + sha256 = "0rnnljzcpb2sl5zabww7gbzk9r6kp8kycsqrf909d6jdak8yah53"; }; buildInputs = [pcre]; diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix index cea26999be08..6bfea5f103fe 100644 --- a/pkgs/tools/text/gnused/default.nix +++ b/pkgs/tools/text/gnused/default.nix @@ -1,15 +1,12 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "gnused-4.1.5"; - + name = "gnused-4.2.1"; + src = fetchurl { - url = mirror://gnu/sed/sed-4.1.5.tar.gz; - md5 = "7a1cbbbb3341287308e140bd4834c3ba"; + url = mirror://gnu/sed/sed-4.2.1.tar.gz; + md5 = "0q1hzjvr6pzhaagidg7pj76k1fzz5nl15np7p72w9zcpw0f58ww7"; }; - - # !!! hack: this should go away in gnused > 4.1.5 - patches = [./gettext-fix.patch]; meta = { homepage = http://www.gnu.org/software/sed/; @@ -24,6 +21,9 @@ stdenv.mkDerivation { multiple occurrences of a string within a file. ''; - license = "GPLv2+"; + license = "GPLv3+"; + + platforms = stdenv.lib.platforms.all; + maintainers = [ stdenv.lib.maintainers.ludo ]; }; } diff --git a/pkgs/tools/text/gnused/gettext-fix.patch b/pkgs/tools/text/gnused/gettext-fix.patch deleted file mode 100644 index 8ef7e8b5ce47..000000000000 --- a/pkgs/tools/text/gnused/gettext-fix.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff -rc sed-4.1.5-orig/configure sed-4.1.5/configure -*** sed-4.1.5-orig/configure Fri Feb 3 10:24:40 2006 ---- sed-4.1.5/configure Fri Jul 14 12:50:13 2006 -*************** -*** 11265,11277 **** - esac - done ;; - gettext-fix ) -! sed -e '/^mkinstalldirs *=/a\' \ -! -e "install_sh=$install_sh" \ - -e 's/^mkinstalldirs *=.*/mkinstalldirs=$(MKINSTALLDIRS)/' \ - intl/Makefile > intl/Makefile.tmp - mv intl/Makefile.tmp intl/Makefile -! sed -e '/^mkinstalldirs *=/a\' \ -! -e "install_sh=$install_sh" \ - -e 's/^mkinstalldirs *=.*/mkinstalldirs=$(MKINSTALLDIRS)/' \ - po/Makefile > po/Makefile.tmp - mv po/Makefile.tmp po/Makefile ;; ---- 11265,11277 ---- - esac - done ;; - gettext-fix ) -! sed -e "/^mkinstalldirs *=/a\\ -! install_sh=$install_sh" \ - -e 's/^mkinstalldirs *=.*/mkinstalldirs=$(MKINSTALLDIRS)/' \ - intl/Makefile > intl/Makefile.tmp - mv intl/Makefile.tmp intl/Makefile -! sed -e "/^mkinstalldirs *=/a\\ -! install_sh=$install_sh" \ - -e 's/^mkinstalldirs *=.*/mkinstalldirs=$(MKINSTALLDIRS)/' \ - po/Makefile > po/Makefile.tmp - mv po/Makefile.tmp po/Makefile ;; From 6d62947d71342aa29441a720d4eeb2f003126c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 22 Apr 2010 21:17:57 +0000 Subject: [PATCH 012/282] Making glibc build without any LOCALE_ARCHIVE* environment variable anymore, setting glibc to look for the locale-archive in the usual nixos /var/run/current-system/sw/lib/locale path. This solution may give us less problems. The last problem involved was the lack of locale-archive in setuid/setgid programs, due to the risk of letting them take the LOCALE_ARCHIVE variable contents from the caller. svn path=/nixpkgs/branches/stdenv-updates/; revision=21249 --- .../libraries/glibc-2.11/common.nix | 4 +- .../glibc-2.11/locale-override.patch | 72 ------------------- 2 files changed, 1 insertion(+), 75 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.11/locale-override.patch diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index fcdccd90f2ec..4fe261c7fdc6 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -44,9 +44,6 @@ stdenv.mkDerivation ({ failure to find mdns4_minimal. */ ./nss-skip-unavail.patch - /* Make it possible to override the locale-archive in NixOS. */ - ./locale-override.patch - /* Have rpcgen(1) look for cpp(1) in $PATH. */ ./rpcgen-path.patch @@ -60,6 +57,7 @@ stdenv.mkDerivation ({ configureFlags = [ "-C" "--enable-add-ons" + "--localedir=/var/run/current-system/sw/lib/locale" (if kernelHeaders != null then "--with-headers=${kernelHeaders}/include" else "--without-headers") diff --git a/pkgs/development/libraries/glibc-2.11/locale-override.patch b/pkgs/development/libraries/glibc-2.11/locale-override.patch deleted file mode 100644 index 72340993c337..000000000000 --- a/pkgs/development/libraries/glibc-2.11/locale-override.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff -rc glibc-2.9-20081208-orig/locale/loadarchive.c glibc-2.9-20081208/locale/loadarchive.c -*** glibc-2.9-20081208-orig/locale/loadarchive.c 2005-09-09 18:56:52.000000000 +0200 ---- glibc-2.9-20081208/locale/loadarchive.c 2009-04-19 13:54:26.000000000 +0200 -*************** -*** 124,129 **** ---- 124,142 ---- - } - - -+ static int -+ open_locale_archive () -+ { -+ int fd = -1; -+ char *path = getenv ("LOCALE_ARCHIVE_2_11"); -+ if (path) -+ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); -+ if (fd < 0) -+ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); -+ return fd; -+ } -+ -+ - /* Find the locale *NAMEP in the locale archive, and return the - internalized data structure for its CATEGORY data. If this locale has - already been loaded from the archive, just returns the existing data -*************** -*** 203,209 **** - archmapped = &headmap; - - /* The archive has never been opened. */ -! fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); - if (fd < 0) - /* Cannot open the archive, for whatever reason. */ - return NULL; ---- 216,222 ---- - archmapped = &headmap; - - /* The archive has never been opened. */ -! fd = open_locale_archive (); - if (fd < 0) - /* Cannot open the archive, for whatever reason. */ - return NULL; -*************** -*** 394,400 **** - if (fd == -1) - { - struct stat64 st; -! fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); - if (fd == -1) - /* Cannot open the archive, for whatever reason. */ - return NULL; ---- 407,413 ---- - if (fd == -1) - { - struct stat64 st; -! fd = open_locale_archive (); - if (fd == -1) - /* Cannot open the archive, for whatever reason. */ - return NULL; -diff -rc glibc-2.9-20081208-orig/sysdeps/generic/unsecvars.h glibc-2.9-20081208/sysdeps/generic/unsecvars.h -*** glibc-2.9-20081208-orig/sysdeps/generic/unsecvars.h 2006-10-11 18:24:05.000000000 +0200 ---- glibc-2.9-20081208/sysdeps/generic/unsecvars.h 2009-04-19 13:55:34.000000000 +0200 -*************** -*** 16,21 **** ---- 16,22 ---- - "LD_SHOW_AUXV\0" \ - "LD_USE_LOAD_BIAS\0" \ - "LOCALDOMAIN\0" \ -+ "LOCALE_ARCHIVE_2_11\0" \ - "LOCPATH\0" \ - "MALLOC_TRACE\0" \ - "NIS_PATH\0" \ From bbb833cf8b23a49ec2e255c2235ef761209affcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 22 Apr 2010 21:45:56 +0000 Subject: [PATCH 013/282] Fixing the gnused fetchurl hash type, for stdenv-updates to evaluate well svn path=/nixpkgs/branches/stdenv-updates/; revision=21252 --- pkgs/tools/text/gnused/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix index 6bfea5f103fe..66fcb3d19290 100644 --- a/pkgs/tools/text/gnused/default.nix +++ b/pkgs/tools/text/gnused/default.nix @@ -5,7 +5,7 @@ stdenv.mkDerivation { src = fetchurl { url = mirror://gnu/sed/sed-4.2.1.tar.gz; - md5 = "0q1hzjvr6pzhaagidg7pj76k1fzz5nl15np7p72w9zcpw0f58ww7"; + sha256 = "0q1hzjvr6pzhaagidg7pj76k1fzz5nl15np7p72w9zcpw0f58ww7"; }; meta = { From 8f995b2e50fb584985e046e26dfd7ea22cb60744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 23 Apr 2010 09:11:23 +0000 Subject: [PATCH 014/282] GNU tar: Remove obsolete patch. svn path=/nixpkgs/branches/stdenv-updates/; revision=21262 --- pkgs/tools/archivers/gnutar/default.nix | 7 ++++--- pkgs/tools/archivers/gnutar/implausible.patch | 20 ------------------- 2 files changed, 4 insertions(+), 23 deletions(-) delete mode 100644 pkgs/tools/archivers/gnutar/implausible.patch diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix index 437f96663885..a74b60d95174 100644 --- a/pkgs/tools/archivers/gnutar/default.nix +++ b/pkgs/tools/archivers/gnutar/default.nix @@ -2,13 +2,11 @@ stdenv.mkDerivation rec { name = "gnutar-1.23"; - + src = fetchurl { url = "mirror://gnu/tar/tar-1.23.tar.bz2"; sha256 = "0dmyxsh0171m6nv8aw74dps1l4b1r7pkqkly9kcv3yv2vdr86cn9"; }; - - patches = [./implausible.patch]; meta = { homepage = http://www.gnu.org/software/tar/; @@ -30,5 +28,8 @@ stdenv.mkDerivation rec { ''; license = "GPLv3+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; }; } diff --git a/pkgs/tools/archivers/gnutar/implausible.patch b/pkgs/tools/archivers/gnutar/implausible.patch deleted file mode 100644 index a3522c743505..000000000000 --- a/pkgs/tools/archivers/gnutar/implausible.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -rc tar-1.16.1-orig/src/extract.c tar-1.16.1/src/extract.c -*** tar-1.16.1-orig/src/extract.c 2006-12-07 14:26:00.000000000 +0100 ---- tar-1.16.1/src/extract.c 2007-05-24 11:39:47.000000000 +0200 -*************** -*** 194,200 **** - static void - check_time (char const *file_name, struct timespec t) - { -! if (t.tv_sec <= 0) - WARN ((0, 0, _("%s: implausibly old time stamp %s"), - file_name, tartime (t, true))); - else if (timespec_cmp (volume_start_time, t) < 0) ---- 194,200 ---- - static void - check_time (char const *file_name, struct timespec t) - { -! if (0 /* t.tv_sec <= 0 */) - WARN ((0, 0, _("%s: implausibly old time stamp %s"), - file_name, tartime (t, true))); - else if (timespec_cmp (volume_start_time, t) < 0) From 2452930b762e6ed9b7a169f84d75d426dbbe0dee Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 May 2010 14:41:04 +0000 Subject: [PATCH 015/282] Upgrade acl, new homepage svn path=/nixpkgs/branches/stdenv-updates/; revision=21578 --- pkgs/development/libraries/acl/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix index 9bf407d61ff1..f5d418b37790 100644 --- a/pkgs/development/libraries/acl/default.nix +++ b/pkgs/development/libraries/acl/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, gettext, attr, libtool}: -stdenv.mkDerivation { - name = "acl-2.2.47"; +stdenv.mkDerivation rec { + name = "acl-2.2.49"; src = fetchurl { - url = http://nixos.org/tarballs/acl_2.2.47-1.tar.gz; - sha256 = "1j39g62fki0iyji9s62slgwdfskpkqy7rmjlqcnmsvsnxbxhc294"; + url = "mirror://savannah/acl/${name}.src.tar.gz"; + sha256 = "1mg5nxr0r9y08lmyxmm2lfss5jz1xzbs0npsc8597x2f5rsz9ixr"; }; buildNativeInputs = [gettext]; @@ -16,7 +16,7 @@ stdenv.mkDerivation { installTargets = "install install-lib install-dev"; meta = { - homepage = ftp://oss.sgi.com/projects/xfs/cmd_tars/; + homepage = http://savannah.nongnu.org/projects/acl; description = "Library and tools for manipulating access control lists"; }; } From 646d7a2eb05f38d81c36aa62146116b9da81b0d9 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 May 2010 14:41:19 +0000 Subject: [PATCH 016/282] Upgrade attr, moved to savannah svn path=/nixpkgs/branches/stdenv-updates/; revision=21579 --- pkgs/development/libraries/attr/default.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix index 0f38cb27c0db..643b4cdaae55 100644 --- a/pkgs/development/libraries/attr/default.nix +++ b/pkgs/development/libraries/attr/default.nix @@ -1,12 +1,11 @@ {stdenv, fetchurl, libtool, gettext}: -stdenv.mkDerivation { - name = "attr-2.4.43"; +stdenv.mkDerivation rec { + name = "attr-2.4.44"; src = fetchurl { - # The SGI site throws away old versions, so don't use it. - url = mirror://gentoo/distfiles/attr_2.4.43-1.tar.gz; - sha256 = "1gy5zspj8ynxv6q29r24d18cfvq06zirg1pxcdg27bg2ncrv4n6k"; + url = "mirror://savannah/attr/${name}.src.tar.gz"; + sha256 = "16244r2vrd57i5fnf7dz3yi2mcckc47jr9y539jvljrzwnw18qlz"; }; buildNativeInputs = [gettext]; @@ -17,7 +16,7 @@ stdenv.mkDerivation { installTargets = "install install-lib install-dev"; meta = { - homepage = ftp://oss.sgi.com/projects/xfs/cmd_tars/; + homepage = http://savannah.nongnu.org/projects/attr/; description = "Library and tools for manipulating extended attributes"; }; } From c2c499005728846f123eb9c4263c946633984a34 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 May 2010 15:47:58 +0000 Subject: [PATCH 017/282] Remove C++-style comment from sys/acl.h svn path=/nixpkgs/branches/stdenv-updates/; revision=21581 --- pkgs/development/libraries/acl/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix index f5d418b37790..d3a3bbd38c53 100644 --- a/pkgs/development/libraries/acl/default.nix +++ b/pkgs/development/libraries/acl/default.nix @@ -11,6 +11,13 @@ stdenv.mkDerivation rec { buildNativeInputs = [gettext]; buildInputs = [attr libtool]; + # Upstream use C++-style comments in C code. Remove them. + # This comment breaks compilation if too strict gcc flags are used. + patchPhase = '' + echo "Removing C++-style comments from include/acl.h" + sed -e '/^\/\//d' -i include/acl.h + ''; + configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip ECHO=echo SED=sed AWK=gawk"; installTargets = "install install-lib install-dev"; From d15d6267fa396eb8db3412f6a364ddaedce98c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 10 May 2010 12:33:43 +0000 Subject: [PATCH 018/282] GNU gettext 0.18. svn path=/nixpkgs/branches/stdenv-updates/; revision=21702 --- pkgs/development/libraries/gettext/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index 826dae2d314a..fc425571a373 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, libiconv }: stdenv.mkDerivation (rec { - name = "gettext-0.17"; + name = "gettext-0.18"; src = fetchurl { url = "mirror://gnu/gettext/${name}.tar.gz"; - sha256 = "1fipjpaxxwifdw6cbr7mkxp1yvy643i38nhlh7124bqnisxki5i0"; + sha256 = "1rbgm6sxgq218pridn2vji5nlj3hdf4vs75rz00wc0wcw4fjqd02"; }; configureFlags = "--disable-csharp"; @@ -51,6 +51,7 @@ stdenv.mkDerivation (rec { homepage = http://www.gnu.org/software/gettext/; maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; }; } From 5a928cc58431e0099d9070a66bf1a721c7324fd3 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 20 May 2010 10:32:56 +0000 Subject: [PATCH 019/282] pkgs/development/libraries/pcre: updated to version 8.02 svn path=/nixpkgs/branches/stdenv-updates/; revision=21908 --- pkgs/development/libraries/pcre/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index 3d3385c83f83..f139bce100db 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -1,13 +1,13 @@ {stdenv, fetchurl, unicodeSupport ? false, cplusplusSupport ? true}: stdenv.mkDerivation { - name = "pcre-7.8"; - + name = "pcre-8.02"; + src = fetchurl { - url = mirror://sourceforge/pcre/pcre-7.8.tar.bz2; - sha256 = "1zsqk352mx2zklf9bgpg9d88ckfdssbbbiyslhrycfckw8m3qpvr"; + url = mirror://sourceforge/pcre/pcre-8.02.tar.bz2; + sha256 = "1gafmkmkbpdqjbdl85q2z5774gw4gfqjf238icz7gqf3v4v90xd4"; }; - + configureFlags = '' ${if unicodeSupport then "--enable-unicode-properties" else ""} ${if !cplusplusSupport then "--disable-cpp" else ""} From d15811bf78eda2aacfa5274822ba07a911d9bca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 20 May 2010 12:33:55 +0000 Subject: [PATCH 020/282] Trying to fix stdenv updates build (I broke glibc at the merge resolution I did with it in the last update from trunk) svn path=/nixpkgs/branches/stdenv-updates/; revision=21919 --- pkgs/development/libraries/glibc-2.11/common.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index 30e26326d373..e7e9738140aa 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -28,7 +28,7 @@ stdenv.mkDerivation ({ inherit (stdenv) is64bit; - patches = + patches = stdenv.lib.optional (fetchgit == null) /* Fix for NIXPKGS-79: when doing host name lookups, when nsswitch.conf contains a line like @@ -52,14 +52,13 @@ stdenv.mkDerivation ({ does work because "status" will contain UNAVAIL after the failure to find mdns4_minimal. */ ./nss-skip-unavail.patch - + ++ [ /* Have rpcgen(1) look for cpp(1) in $PATH. */ ./rpcgen-path.patch /* Make sure `nscd' et al. are linked against `libssp'. */ ./stack-protector-link.patch ] - ++ stdenv.lib.optional (fetchgit == null) /* MOD_NANO definition, for ntp (taken from glibc upstream) */ ./mod_nano.patch; From 85e1bc7d34b2f9902c3deaec2363c38323449910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 25 May 2010 20:41:53 +0000 Subject: [PATCH 021/282] Fixing coreutils - I did not merge that well enough svn path=/nixpkgs/branches/stdenv-updates/; revision=21976 --- pkgs/tools/misc/coreutils/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index 2bd24b302bea..a5631079fbb1 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -2,7 +2,7 @@ assert aclSupport -> acl != null; -stdenv.mkDerivation (rec { +stdenv.mkDerivation rec { name = "coreutils-8.4"; src = fetchurl { @@ -22,13 +22,14 @@ stdenv.mkDerivation (rec { # Needed for fstatfs() # I don't know why it is not properly detected cross building with glibc. configureFlags = [ "fu_cv_sys_stat_statfs2_bsize=yes" ]; + doCheck = false; }; # The tests are known broken on Cygwin # (http://thread.gmane.org/gmane.comp.gnu.core-utils.bugs/19025), # Darwin (http://thread.gmane.org/gmane.comp.gnu.core-utils.bugs/19351), # and {Open,Free}BSD. - doCheck = (stdenv ? glibc) && (cross == null); + doCheck = (stdenv ? glibc); meta = { homepage = http://www.gnu.org/software/coreutils/; From 249f35e20c9d5b4fc6ec54b6b2150ebeaf5d3120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 25 May 2010 20:46:56 +0000 Subject: [PATCH 022/282] As Ludovic just told me in irc, I make the glibc builder2.sh from trunk its only builder.sh svn path=/nixpkgs/branches/stdenv-updates/; revision=21977 --- .../libraries/glibc-2.11/builder.sh | 20 ++++++- .../libraries/glibc-2.11/builder2.sh | 58 ------------------- .../libraries/glibc-2.11/default.nix | 3 - 3 files changed, 17 insertions(+), 64 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.11/builder2.sh diff --git a/pkgs/development/libraries/glibc-2.11/builder.sh b/pkgs/development/libraries/glibc-2.11/builder.sh index f8da3b8bbe2e..11cd9dbd9687 100644 --- a/pkgs/development/libraries/glibc-2.11/builder.sh +++ b/pkgs/development/libraries/glibc-2.11/builder.sh @@ -22,10 +22,24 @@ postInstall() { test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache - # Include the Linux kernel headers in Glibc, except the `scsi' - # subdirectory, which Glibc provides itself. - (cd $out/include && ln -s $(ls -d $kernelHeaders/include/* | grep -v 'scsi$') .) + # FIXME: Use `test -n $linuxHeaders' when `kernelHeaders' has been + # renamed. + 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$') .) + 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" + fi + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink # "lib64" to "lib". if test -n "$is64bit"; then diff --git a/pkgs/development/libraries/glibc-2.11/builder2.sh b/pkgs/development/libraries/glibc-2.11/builder2.sh deleted file mode 100644 index f156e647e0b4..000000000000 --- a/pkgs/development/libraries/glibc-2.11/builder2.sh +++ /dev/null @@ -1,58 +0,0 @@ -### XXX: This file should replace `builder.sh' in the `stdenv-updates' -### branch! - -# Glibc cannot have itself in its RPATH. -export NIX_NO_SELF_RPATH=1 - -source $stdenv/setup - -postConfigure() { - # Hack: get rid of the `-static' flag set by the bootstrap stdenv. - # This has to be done *after* `configure' because it builds some - # test binaries. - export NIX_CFLAGS_LINK= - export NIX_LDFLAGS_BEFORE= - - export NIX_DONT_SET_RPATH=1 - unset CFLAGS -} - - -postInstall() { - if test -n "$installLocales"; then - make 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 - # renamed. - 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$') .) - 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" - fi - - # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink - # "lib64" to "lib". - if test -n "$is64bit"; then - ln -s lib $out/lib64 - fi - - # 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 -} - - -genericBuild diff --git a/pkgs/development/libraries/glibc-2.11/default.nix b/pkgs/development/libraries/glibc-2.11/default.nix index a9d82e677b17..7063008fe913 100644 --- a/pkgs/development/libraries/glibc-2.11/default.nix +++ b/pkgs/development/libraries/glibc-2.11/default.nix @@ -50,9 +50,6 @@ in # thing. inherit propagatedBuildInputs; }; - - # XXX: Remove this hack in `stdenv-updates'. - builder = ./builder2.sh; } else { }) From bd9c968158ec34cf81149110b993ca30e93ff203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 25 May 2010 20:51:01 +0000 Subject: [PATCH 023/282] Removing any rest of the trunk's stdenv2, that has a fix in ld-wrapper to make it properly put the rpath for directly passed .so files, and additionally it works much faster than the old ld-wrapper. svn path=/nixpkgs/branches/stdenv-updates/; revision=21978 --- pkgs/build-support/gcc-wrapper/default2.nix | 72 -------- pkgs/build-support/gcc-wrapper/ld-wrapper.sh | 30 ++-- pkgs/build-support/gcc-wrapper/ld-wrapper2.sh | 154 ------------------ pkgs/top-level/all-packages.nix | 31 +--- 4 files changed, 24 insertions(+), 263 deletions(-) delete mode 100644 pkgs/build-support/gcc-wrapper/default2.nix delete mode 100644 pkgs/build-support/gcc-wrapper/ld-wrapper2.sh diff --git a/pkgs/build-support/gcc-wrapper/default2.nix b/pkgs/build-support/gcc-wrapper/default2.nix deleted file mode 100644 index efade01963b7..000000000000 --- a/pkgs/build-support/gcc-wrapper/default2.nix +++ /dev/null @@ -1,72 +0,0 @@ -# The Nix `gcc' stdenv.mkDerivation is not directly usable, since it doesn't -# know where the C library and standard header files are. Therefore -# the compiler produced by that package cannot be installed directly -# in a user environment and used from the command line. This -# stdenv.mkDerivation provides a wrapper that sets up the right environment -# variables so that the compiler and the linker just "work". - -{ name ? "", stdenv, nativeTools, nativeLibc, nativePrefix ? "" -, gcc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? "" -, zlib ? null -}: - -assert nativeTools -> nativePrefix != ""; -assert !nativeTools -> gcc != null && binutils != null && coreutils != null; -assert !nativeLibc -> libc != null; - -# For ghdl (the vhdl language provider to gcc) we need zlib in the wrapper -assert (gcc != null && gcc ? langVhdl && gcc.langVhdl) -> zlib != null; - -let - - gccVersion = (builtins.parseDrvName gcc.name).version; - gccName = (builtins.parseDrvName gcc.name).name; - -in - -stdenv.mkDerivation { - name = - (if name != "" then name else gccName + "-wrapper") + - (if gcc != null && gccVersion != "" then "-" + gccVersion else ""); - - builder = ./builder.sh; - setupHook = ./setup-hook.sh; - gccWrapper = ./gcc-wrapper.sh; - gnatWrapper = ./gnat-wrapper.sh; - gnatlinkWrapper = ./gnatlink-wrapper.sh; - ldWrapper = ./ld-wrapper2.sh; - utils = ./utils.sh; - addFlags = ./add-flags; - - inherit nativeTools nativeLibc nativePrefix gcc; - libc = if nativeLibc then null else 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; - - langC = if nativeTools then true else gcc.langC; - langCC = if nativeTools then true else gcc.langCC; - langFortran = if nativeTools then false else gcc ? langFortran; - langAda = if nativeTools then false else gcc ? langAda && gcc.langAda; - langVhdl = if nativeTools then false else gcc ? langVhdl && gcc.langVhdl; - zlib = if (gcc != null && gcc ? langVhdl) then zlib else null; - shell = if shell == "" then stdenv.shell else shell; - - meta = - let gcc_ = if gcc != null then gcc else {}; in - (if gcc_ ? meta then removeAttrs gcc.meta ["priority"] else {}) // - { description = - stdenv.lib.attrByPath ["meta" "description"] "System C compiler" gcc_ - + " (wrapper script)"; - }; - - # The dynamic linker has different names on different Linux platforms. - dynamicLinker = - if !nativeLibc then - (if stdenv.system == "i686-linux" then "ld-linux.so.2" else - if stdenv.system == "x86_64-linux" then "ld-linux-x86-64.so.2" else - if stdenv.system == "armv5tel-linux" then "ld-linux.so.3" else - if stdenv.system == "powerpc-linux" then "ld.so.1" else - abort "don't know the name of the dynamic linker for this platform") - else ""; -} diff --git a/pkgs/build-support/gcc-wrapper/ld-wrapper.sh b/pkgs/build-support/gcc-wrapper/ld-wrapper.sh index 3ca9e815a8f1..99ba3968ae33 100644 --- a/pkgs/build-support/gcc-wrapper/ld-wrapper.sh +++ b/pkgs/build-support/gcc-wrapper/ld-wrapper.sh @@ -82,6 +82,13 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then rpath="$rpath $1 " } + libs="" + addToLibs() { + libs="$libs $1" + } + + rpath="" + # First, find all -L... switches. allParams=("${params[@]}" ${extra[@]}) n=0 @@ -93,6 +100,11 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then elif test "$p" = "-L"; then addToLibPath ${p2} n=$((n + 1)) + elif test "$p" = "-l"; then + addToLibs ${p2} + n=$((n + 1)) + elif test "${p:0:2}" = "-l"; then + addToLibs ${p:2} elif [[ "$p" =~ ^[^-].*\.so($|\.) ]]; then # This is a direct reference to a shared library, so add # its directory to the rpath. @@ -105,24 +117,14 @@ if test "$NIX_DONT_SET_RPATH" != "1"; then # Second, for each directory in the library search path (-L...), # see if it contains a dynamic library used by a -l... flag. If # so, add the directory to the rpath. - rpath="" - for i in $libPath; do - n=0 - while test $n -lt ${#allParams[*]}; do - p=${allParams[n]} - p2=${allParams[$((n+1))]} - if test "${p:0:2}" = "-l" -a -f "$i/lib${p:2}.so"; then - addToRPath $i - break - elif test "$p" = "-l" -a -f "$i/lib${p2}"; then - # I haven't seen `-l foo', but you never know... - addToRPath $i + for i in $libs; do + for j in $libPath; do + if test -f "$j/lib$i.so"; then + addToRPath $j break fi - n=$((n + 1)) done - done diff --git a/pkgs/build-support/gcc-wrapper/ld-wrapper2.sh b/pkgs/build-support/gcc-wrapper/ld-wrapper2.sh deleted file mode 100644 index 99ba3968ae33..000000000000 --- a/pkgs/build-support/gcc-wrapper/ld-wrapper2.sh +++ /dev/null @@ -1,154 +0,0 @@ -#! @shell@ -e - -if test -n "$NIX_LD_WRAPPER_START_HOOK"; then - source "$NIX_LD_WRAPPER_START_HOOK" -fi - -if test -z "$NIX_GCC_WRAPPER_FLAGS_SET"; then - source @out@/nix-support/add-flags.sh -fi - -source @out@/nix-support/utils.sh - - -# Optionally filter out paths not refering to the store. -params=("$@") -if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE" \ - -a \( -z "$NIX_IGNORE_LD_THROUGH_GCC" -o -z "$NIX_LDFLAGS_SET" \); then - rest=() - n=0 - while test $n -lt ${#params[*]}; do - p=${params[n]} - p2=${params[$((n+1))]} - if test "${p:0:3}" = "-L/" && badPath "${p:2}"; then - skip $p - elif test "$p" = "-L" && badPath "$p2"; then - n=$((n + 1)); skip $p2 - elif test "$p" = "-rpath" && badPath "$p2"; then - n=$((n + 1)); skip $p2 - elif test "$p" = "-dynamic-linker" && badPath "$p2"; then - n=$((n + 1)); skip $p2 - elif test "${p:0:1}" = "/" && badPath "$p"; then - # We cannot skip this; barf. - echo "impure path \`$p' used in link" >&2 - exit 1 - else - rest=("${rest[@]}" "$p") - fi - n=$((n + 1)) - done - params=("${rest[@]}") -fi - - -extra=() -extraBefore=() - -if test -z "$NIX_LDFLAGS_SET"; then - extra=(${extra[@]} $NIX_LDFLAGS) - extraBefore=(${extraBefore[@]} $NIX_LDFLAGS_BEFORE) -fi - - -# Add all used dynamic libraries to the rpath. -if test "$NIX_DONT_SET_RPATH" != "1"; then - - libPath="" - addToLibPath() { - local path="$1" - if test "${path:0:1}" != "/"; then return 0; fi - case "$path" in - *..*|*./*|*/.*|*//*) - local path2 - if path2=$(readlink -f "$path"); then - path="$path2" - fi - ;; - esac - case $libPath in - *\ $path\ *) return 0 ;; - esac - libPath="$libPath $path " - } - - addToRPath() { - # If the path is not in the store, don't add it to the rpath. - # This typically happens for libraries in /tmp that are later - # copied to $out/lib. If not, we're screwed. - if test "${1:0:${#NIX_STORE}}" != "$NIX_STORE"; then return 0; fi - case $rpath in - *\ $1\ *) return 0 ;; - esac - rpath="$rpath $1 " - } - - libs="" - addToLibs() { - libs="$libs $1" - } - - rpath="" - - # First, find all -L... switches. - allParams=("${params[@]}" ${extra[@]}) - n=0 - while test $n -lt ${#allParams[*]}; do - p=${allParams[n]} - p2=${allParams[$((n+1))]} - if test "${p:0:3}" = "-L/"; then - addToLibPath ${p:2} - elif test "$p" = "-L"; then - addToLibPath ${p2} - n=$((n + 1)) - elif test "$p" = "-l"; then - addToLibs ${p2} - n=$((n + 1)) - elif test "${p:0:2}" = "-l"; then - addToLibs ${p:2} - elif [[ "$p" =~ ^[^-].*\.so($|\.) ]]; then - # This is a direct reference to a shared library, so add - # its directory to the rpath. - path="$(dirname "$p")"; - addToRPath "${path}" - fi - n=$((n + 1)) - done - - # Second, for each directory in the library search path (-L...), - # see if it contains a dynamic library used by a -l... flag. If - # so, add the directory to the rpath. - - for i in $libs; do - for j in $libPath; do - if test -f "$j/lib$i.so"; then - addToRPath $j - break - fi - done - done - - - # Finally, add `-rpath' switches. - for i in $rpath; do - extra=(${extra[@]} -rpath $i) - done -fi - - -# Optionally print debug info. -if test "$NIX_DEBUG" = "1"; then - echo "original flags to @ld@:" >&2 - for i in "${params[@]}"; do - echo " $i" >&2 - done - echo "extra flags to @ld@:" >&2 - for i in ${extra[@]}; do - echo " $i" >&2 - done -fi - -if test -n "$NIX_LD_WRAPPER_EXEC_HOOK"; then - source "$NIX_LD_WRAPPER_EXEC_HOOK" -fi - -exec @ld@ ${extraBefore[@]} "${params[@]}" ${extra[@]} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c50acf1ef8c7..bb386b1d2375 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2623,14 +2623,6 @@ let wrapGCC = wrapGCCWith (import ../build-support/gcc-wrapper) glibc; - # To be removed on stdenv-updates - # By now this has at least the fix of setting the proper rpath when a file "libbla.so" - # is passed directly to the linker. - # This is of interest to programs built by cmake, because this is a common practice - # in cmake builds. - wrapGCC2 = wrapGCCWith (import ../build-support/gcc-wrapper/default2.nix) glibc; - stdenv2 = if (gcc.nativeTools) then stdenv else (overrideGCC stdenv (wrapGCC2 gcc.gcc)); - wrapGCCCross = {gcc, libc, binutils, cross, shell ? "", name ? "gcc-cross-wrapper"}: @@ -4954,11 +4946,10 @@ let }; opencv = import ../development/libraries/opencv { - inherit fetchurl cmake libjpeg libpng libtiff jasper ffmpeg + inherit stdenv fetchurl cmake libjpeg libpng libtiff jasper ffmpeg pkgconfig xineLib; inherit (gtkLibs) gtk glib; inherit (gst_all) gstreamer; - stdenv = stdenv2; }; # this ctl version is needed by openexr_viewers @@ -7179,11 +7170,10 @@ let }; avidemux = import ../applications/video/avidemux { - inherit fetchurl cmake pkgconfig libxml2 qt4 gettext SDL libxslt x264 + inherit stdenv fetchurl cmake pkgconfig libxml2 qt4 gettext SDL libxslt x264 alsaLib lame faac faad2 libvorbis; inherit (gtkLibs) gtk; inherit (xlibs) libXv pixman libpthreadstubs libXau libXdmcp; - stdenv = stdenv2; }; awesome = import ../applications/window-managers/awesome { @@ -7239,19 +7229,17 @@ let }; blender = import ../applications/misc/blender/2.49.nix { - inherit fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr + inherit stdenv fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr libsamplerate libtiff ilmbase freetype; inherit (xlibs) libXi; python = python26Base; - stdenv = stdenv2; }; blender_2_50 = lowPrio (import ../applications/misc/blender { - inherit fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr + inherit stdenv fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr libsamplerate libtiff ilmbase; inherit (xlibs) libXi; python = python31Base; - stdenv = stdenv2; }); bmp = import ../applications/audio/bmp { @@ -8257,7 +8245,7 @@ let }; openoffice = import ../applications/office/openoffice { - inherit fetchurl pam python tcsh libxslt perl zlib libjpeg + inherit stdenv fetchurl pam python tcsh libxslt perl zlib libjpeg expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron curl libsndfile flex zip unzip libmspack getopt file cairo which icu jdk ant cups openssl bison boost gperf cppunit; @@ -8266,11 +8254,10 @@ let inherit (perlPackages) ArchiveZip CompressZlib; inherit (gnome) GConf ORBit2; neon = neon026; - stdenv = stdenv2; }; go_oo = import ../applications/office/openoffice/go-oo.nix { - inherit fetchurl pam python tcsh libxslt perl zlib libjpeg + inherit stdenv fetchurl pam python tcsh libxslt perl zlib libjpeg expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron curl libsndfile flex zip unzip libmspack getopt file cairo which icu jdk ant cups openssl bison boost gperf cppunit; @@ -8279,7 +8266,6 @@ let inherit (perlPackages) ArchiveZip CompressZlib; inherit (gnome) GConf ORBit2; neon = neon026; - stdenv = stdenv2; inherit autoconf openldap postgresql; }; @@ -8308,8 +8294,7 @@ let }; paraview = import ../applications/graphics/paraview { - inherit fetchurl cmake qt4; - stdenv = stdenv2; + inherit stdenv fetchurl cmake qt4; }; partitionManager = import ../tools/misc/partition-manager { @@ -9263,7 +9248,7 @@ let kde44 = makeOverridable (import ../desktops/kde-4.4) (pkgs // { openexr = openexr_1_6_1; - stdenv = stdenv2; + inherit stdenv; }); xfce = xfce4; From 5a9be6d9d97bedc760d473710c7076ff5bae0ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 26 May 2010 07:06:02 +0000 Subject: [PATCH 024/282] Merged from trunk svn path=/nixpkgs/branches/stdenv-updates/; revision=21983 --- .../networking/browsers/rekonq/default.nix | 2 +- .../networking/browsers/rekonq/source.nix | 9 +++++---- pkgs/applications/office/openoffice/go-oo.nix | 13 ++++++------- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkgs/applications/networking/browsers/rekonq/default.nix b/pkgs/applications/networking/browsers/rekonq/default.nix index f011009c1112..fc6c5c0013af 100644 --- a/pkgs/applications/networking/browsers/rekonq/default.nix +++ b/pkgs/applications/networking/browsers/rekonq/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, fetchgit, cmake, qt4, kdelibs, automoc4, phonon, perl -, v ? "0.4.0" }: +, v ? "0.4.90" }: stdenv.mkDerivation ( builtins.getAttr v (import ./source.nix { inherit fetchurl fetchgit; }) diff --git a/pkgs/applications/networking/browsers/rekonq/source.nix b/pkgs/applications/networking/browsers/rekonq/source.nix index a30de7bfbeeb..5faeddaaf2a5 100644 --- a/pkgs/applications/networking/browsers/rekonq/source.nix +++ b/pkgs/applications/networking/browsers/rekonq/source.nix @@ -3,12 +3,13 @@ builtins.listToAttrs [ { - name = "0.4.0"; + name = "0.4.90"; value = rec { - name = "rekonq-0.4.0"; + name = "rekonq-0.4.90"; src = fetchurl { - url = "mirror://sourceforge/rekonq/${name}.tar.bz2"; - sha256 = "1dxpzkifqy85kwj94mhazan6f9glxvl7i02c50n3f0a12wiywwvy"; + url = "http://kde-apps.org/CONTENT/content-files/94258-${name}.tar.bz2"; + name = "${name}.tar.bz2"; + sha256 = "1dmdx54asv0b4xzc8p5nadn92l8pks9cl1y9j8a46lsslwsjw3ws"; }; }; } diff --git a/pkgs/applications/office/openoffice/go-oo.nix b/pkgs/applications/office/openoffice/go-oo.nix index bdf0939d64e1..ccf9238533fe 100644 --- a/pkgs/applications/office/openoffice/go-oo.nix +++ b/pkgs/applications/office/openoffice/go-oo.nix @@ -4,17 +4,18 @@ , bison, flex, zip, unzip, gtk, libmspack, getopt, file, cairo, which , icu, boost, jdk, ant, libXext, libX11, libXtst, libXi, cups , libXinerama, openssl, gperf, cppunit, GConf, ORBit2 -, autoconf, openldap, postgresql +, autoconf, openldap, postgresql, bash , langs ? [ "en-US" "ca" "ru" "eo" "fr" "nl" "de" "en-GB" ] }: -let version = "3.2.0"; in +let + langsSpaces = stdenv.lib.concatStringsSep " " langs; +in stdenv.mkDerivation rec { name = "go-oo-3.2.0.10"; # builder = ./builder.sh; downloadRoot = "http://download.services.openoffice.org/files/stable"; - versionDirs = true; src = fetchurl { url = "http://download.go-oo.org/OOO320/ooo-build-3.2.0.10.tar.gz"; @@ -25,7 +26,7 @@ stdenv.mkDerivation rec { # Multi-CPU: --with-num-cpus=4 configurePhase = '' - sed -i -e '1s,/bin/bash,${stdenv.bash}/bin/bash,' $(find bin -type f) + sed -i -e '1s,/bin/bash,${bash}/bin/bash,' $(find bin -type f) sed -i -e '1s,/usr/bin/perl,${perl}/bin/perl,' download.in bin/ooinstall bin/generate-bash-completion echo "$distroFlags" > distro-configs/SUSE-11.1.conf.in @@ -128,13 +129,11 @@ stdenv.mkDerivation rec { ant autoconf openldap postgresql ]; - langsSpaces = stdenv.lib.concatStringsSep " " langs; - meta = { description = "Go-oo - Novell variant of OpenOffice.org"; homepage = http://go-oo.org/; license = "LGPL"; maintainers = [ stdenv.lib.maintainers.viric ]; - platforms = [ stdenv.lib.platforms.linux ]; + platforms = stdenv.lib.platforms.linux; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bb386b1d2375..57d22b4c2373 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8260,7 +8260,7 @@ let inherit stdenv fetchurl pam python tcsh libxslt perl zlib libjpeg expat pkgconfig freetype fontconfig libwpd libxml2 db4 sablotron curl libsndfile flex zip unzip libmspack getopt file cairo - which icu jdk ant cups openssl bison boost gperf cppunit; + which icu jdk ant cups openssl bison boost gperf cppunit bash; inherit (xlibs) libXaw libXext libX11 libXtst libXi libXinerama; inherit (gtkLibs) gtk; inherit (perlPackages) ArchiveZip CompressZlib; From ead4a8acbcc018cf3efd3e745b5d8b3609b04dcb Mon Sep 17 00:00:00 2001 From: David Guibert Date: Fri, 28 May 2010 06:16:11 +0000 Subject: [PATCH 025/282] lvm2: upstream version is now 2.02.65. svn path=/nixpkgs/branches/stdenv-updates/; revision=22029 --- pkgs/os-specific/linux/lvm2/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/lvm2/default.nix b/pkgs/os-specific/linux/lvm2/default.nix index a03463362735..da2292848dc8 100644 --- a/pkgs/os-specific/linux/lvm2/default.nix +++ b/pkgs/os-specific/linux/lvm2/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl, udev }: let - v = "2.02.64"; + v = "2.02.65"; in stdenv.mkDerivation { @@ -9,7 +9,7 @@ stdenv.mkDerivation { src = fetchurl { url = "ftp://sources.redhat.com/pub/lvm2/LVM2.${v}.tgz"; - sha256 = "130yg8a9l0266hraklalm2k26n25a8kb2nvhj13cnczfxbz5a4m0"; + sha256 = "1lbskrj4pxbipq8f0qhql3p1nqa796v4i1cy6n2fmmbs3fwmfh9a"; }; configureFlags = "--disable-readline --enable-udev_rules --enable-udev_sync"; From bf11f132e01e00a72c0c748797bfe50fe214d0db Mon Sep 17 00:00:00 2001 From: David Guibert Date: Fri, 28 May 2010 11:06:52 +0000 Subject: [PATCH 026/282] gnupatch: fix broken url svn path=/nixpkgs/branches/stdenv-updates/; revision=22042 --- pkgs/tools/text/gnupatch/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix index e6383f40a7c1..ce4924a6de21 100644 --- a/pkgs/tools/text/gnupatch/default.nix +++ b/pkgs/tools/text/gnupatch/default.nix @@ -8,8 +8,8 @@ stdenv.mkDerivation rec { then fetchurl { # Temporary fix for # http://lists.gnu.org/archive/html/bug-patch/2010-01/msg00004.html . - url = "ftp://alpha.gnu.org/gnu/patch/patch-2.6.1-2-g2c4e3ec.tar.gz"; - sha256 = "1rspyzrik5cnav3m2fxr8146bsq4mc0yw4x0r8nkl2x7i052yr2c"; + url = "ftp://alpha.gnu.org/gnu/patch/patch-2.6.1.85-423d.tar.gz"; + sha256 = "13dddh7m8g48rvxldm9i5xp9m7h76zqp7s327m5k8k39kg146xvw"; } else fetchurl { url = "mirror://gnu/patch/${name}.tar.gz"; sha256 = "1fc1jyq80nswkf492fiqdbl2bhvlw2wb44ghqlfd3zngx4qkfmni"; From 21aae800af08d5957ad37a65aaea9241fcc694e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 14 Jun 2010 09:30:31 +0000 Subject: [PATCH 027/282] Trying to make gcc 4.5 the default svn path=/nixpkgs/branches/stdenv-updates/; revision=22255 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 37d513a92467..d2449a503609 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2031,7 +2031,7 @@ let inherit fetchurl stdenv builderDefsPackage; }; - gcc = gcc44; + gcc = gcc45; gcc295 = wrapGCC (import ../development/compilers/gcc-2.95 { inherit fetchurl stdenv noSysDirs; From 4afd41a6b69a558442e6bacaf540d38171af3c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 14 Jun 2010 12:16:37 +0000 Subject: [PATCH 028/282] Fixing the stdenv-updates evaluation (a stdenv2 reference got in updating from trunk) svn path=/nixpkgs/branches/stdenv-updates/; revision=22257 --- pkgs/top-level/all-packages.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d2449a503609..88106087be67 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8552,8 +8552,7 @@ let }; simgrid = import ../applications/misc/simgrid { - inherit fetchurl cmake ruby; - stdenv = stdenv2; + inherit fetchurl stdenv cmake ruby; }; skype_linux = import ../applications/networking/skype { From 0feaada94a35c3041757f53d4e6532a2aff0244c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 14 Jun 2010 14:02:14 +0000 Subject: [PATCH 029/282] Adding a new gcc in the middle of the linux stdenv build, so we can have a final stdenv gcc with ppl. svn path=/nixpkgs/branches/stdenv-updates/; revision=22258 --- pkgs/stdenv/linux/default.nix | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index dd5647bec456..2a58a9de0cf3 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -132,6 +132,11 @@ rec { stdenv = stdenvLinuxBoot0; }; + # Helper function to override the compiler in stdenv for specific packages. + overrideGCC = stdenv: gcc: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; }); + }; + # Create the first "real" standard environment. This one consists # of bootstrap tools only, and a minimal Glibc to keep the GCC @@ -180,6 +185,17 @@ rec { stdenvLinuxBoot2Pkgs = allPackages { inherit system; bootStdenv = stdenvLinuxBoot2; + config = { + packageOverrides = pkgs : { + # The stdenv's gcc will not be built with 'ppl' + # but the resulting 'gcc' attribute of these pkgs will. + # (that allows bootstrapping from bootstrapTools with old gmp) + stdenv = overrideGCC pkgs.stdenv (pkgs.wrapGCC (pkgs.gcc.gcc.override { + ppl = null; + cloogppl = null; + })); + }; + }; }; From d30ede1a13642bffce7643f8f32be5c58f8b4f44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 14 Jun 2010 21:40:11 +0000 Subject: [PATCH 030/282] Reverting r22258. I got confused; we don't need a new gcc build in stdenvLinux, but an up to date ppl package (because the current does not build with such a new gmp) svn path=/nixpkgs/branches/stdenv-updates/; revision=22267 --- pkgs/stdenv/linux/default.nix | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 2a58a9de0cf3..dd5647bec456 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -132,11 +132,6 @@ rec { stdenv = stdenvLinuxBoot0; }; - # Helper function to override the compiler in stdenv for specific packages. - overrideGCC = stdenv: gcc: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; }); - }; - # Create the first "real" standard environment. This one consists # of bootstrap tools only, and a minimal Glibc to keep the GCC @@ -185,17 +180,6 @@ rec { stdenvLinuxBoot2Pkgs = allPackages { inherit system; bootStdenv = stdenvLinuxBoot2; - config = { - packageOverrides = pkgs : { - # The stdenv's gcc will not be built with 'ppl' - # but the resulting 'gcc' attribute of these pkgs will. - # (that allows bootstrapping from bootstrapTools with old gmp) - stdenv = overrideGCC pkgs.stdenv (pkgs.wrapGCC (pkgs.gcc.gcc.override { - ppl = null; - cloogppl = null; - })); - }; - }; }; From e31361657c1296a62a40db296e33a27a83ffd2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 14 Jun 2010 21:44:38 +0000 Subject: [PATCH 031/282] Updating gmp and ppl (this last, mandatory, to match the gmp version). I chose a snapshot of the future 0.11 ppl (that had to be released one or two months ago, I think), waiting for the 0.11 to be frozen. Only 0.11 supports building with gmp 5.x svn path=/nixpkgs/branches/stdenv-updates/; revision=22268 --- pkgs/development/libraries/gmp/default.nix | 4 ++-- pkgs/development/libraries/ppl/default.nix | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index e414a5f2a734..e2f8a900bda3 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, m4, cxx ? true}: stdenv.mkDerivation rec { - name = "gmp-5.0.0"; + name = "gmp-5.0.1"; src = fetchurl { url = "mirror://gnu/gmp/${name}.tar.bz2"; - sha256 = "0kwqhyvw48yzxjp29c721m9v498115dh6li9adk7b84mbh7gv2gh"; + sha256 = "1yrr14l6vvhm1g27y8nb3c75j0i4ii4k1gw7ik08safk3zq119m2"; }; buildNativeInputs = [m4]; diff --git a/pkgs/development/libraries/ppl/default.nix b/pkgs/development/libraries/ppl/default.nix index ed4cc7f24978..d681fa44cf95 100644 --- a/pkgs/development/libraries/ppl/default.nix +++ b/pkgs/development/libraries/ppl/default.nix @@ -1,12 +1,12 @@ { fetchurl, stdenv, gmpxx, perl, gnum4 }: -let version = "0.10.2"; in +let version = "0.11pre24"; in stdenv.mkDerivation rec { name = "ppl-${version}"; src = fetchurl { - url = "ftp://ftp.cs.unipr.it/pub/ppl/releases/${version}/${name}.tar.bz2"; - sha256 = "0xz2f3lny4l9ji1ilg6pxv34sh4cbh535cnm68smynzp01wgnh7y"; + url = "ftp://ftp.cs.unipr.it/pub/ppl/snapshots/${version}/${name}.tar.bz2"; + sha256 = "1w6v5wxj13mnp311aaglhdyzxlx13g84054bsp7sym3ryjjyg0gx"; }; buildInputs = [ perl gnum4 ]; From 3f77d3da03f7fc439a566e36b61f8cdc75fd8c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 15 Jun 2010 09:14:16 +0000 Subject: [PATCH 032/282] I downgrade ppl again to the stable release, and I make gmp 4.3.2 the default gmp; we can update all once we have stable ppl 0.11 and a working cloog-ppl with all that. This way we should at least gcc4.5 building with ppl/cloog-ppl svn path=/nixpkgs/branches/stdenv-updates/; revision=22271 --- pkgs/development/libraries/gmp/4.nix | 52 ++++++++++++++++++++++ pkgs/development/libraries/ppl/default.nix | 6 +-- pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 pkgs/development/libraries/gmp/4.nix diff --git a/pkgs/development/libraries/gmp/4.nix b/pkgs/development/libraries/gmp/4.nix new file mode 100644 index 000000000000..8dffdcd7e6d5 --- /dev/null +++ b/pkgs/development/libraries/gmp/4.nix @@ -0,0 +1,52 @@ +{stdenv, fetchurl, m4, cxx ? true}: + +stdenv.mkDerivation rec { + name = "gmp-4.3.2"; + + src = fetchurl { + url = "mirror://gnu/gmp/${name}.tar.bz2"; + sha256 = "0x8prpqi9amfcmi7r4zrza609ai9529pjaq0h4aw51i867064qck"; + }; + + buildNativeInputs = [m4]; + + # Prevent the build system from using sub-architecture-specific + # instructions (e.g., SSE2 on i686). + preConfigure = "ln -sf configfsf.guess config.guess"; + + configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; + + doCheck = true; + + meta = { + description = "GMP, the GNU multiple precision arithmetic library"; + + longDescription = + '' GMP is a free library for arbitrary precision arithmetic, operating + on signed integers, rational numbers, and floating point numbers. + There is no practical limit to the precision except the ones implied + by the available memory in the machine GMP runs on. GMP has a rich + set of functions, and the functions have a regular interface. + + The main target applications for GMP are cryptography applications + and research, Internet security applications, algebra systems, + computational algebra research, etc. + + GMP is carefully designed to be as fast as possible, both for small + operands and for huge operands. The speed is achieved by using + fullwords as the basic arithmetic type, by using fast algorithms, + with highly optimised assembly code for the most common inner loops + for a lot of CPUs, and by a general emphasis on speed. + + GMP is faster than any other bignum library. The advantage for GMP + increases with the operand sizes for many operations, since GMP uses + asymptotically faster algorithms. + ''; + + homepage = http://gmplib.org/; + license = "LGPLv3+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; + }; +} diff --git a/pkgs/development/libraries/ppl/default.nix b/pkgs/development/libraries/ppl/default.nix index d681fa44cf95..9b52958b3e5e 100644 --- a/pkgs/development/libraries/ppl/default.nix +++ b/pkgs/development/libraries/ppl/default.nix @@ -1,12 +1,12 @@ { fetchurl, stdenv, gmpxx, perl, gnum4 }: -let version = "0.11pre24"; in +let version = "0.10.2"; in stdenv.mkDerivation rec { name = "ppl-${version}"; src = fetchurl { - url = "ftp://ftp.cs.unipr.it/pub/ppl/snapshots/${version}/${name}.tar.bz2"; - sha256 = "1w6v5wxj13mnp311aaglhdyzxlx13g84054bsp7sym3ryjjyg0gx"; + url = "mirror://gcc/infrastructure/ppl-${version}.tar.gz"; + sha256 = "0lly44sac4jd72klnhhil3wha15vak76r6gy88sh0zjsaww9hf6h"; }; buildInputs = [ perl gnum4 ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 88106087be67..faf47050e5a7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4019,7 +4019,9 @@ let cxx = false; } else - makeOverridable (import ../development/libraries/gmp) { + # We temporarily leave gmp 4 here, waiting for a new ppl/cloog-ppl that + # would build well with gmp 5. + makeOverridable (import ../development/libraries/gmp/4.nix) { inherit stdenv fetchurl m4; cxx = false; }; From 0bc91e632273a239927aec6b96d5a93944ec074a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 15 Jun 2010 11:55:19 +0000 Subject: [PATCH 033/282] Fixing the attributes of gcc44 and gcc45, so the proper one is taken from stdenv svn path=/nixpkgs/branches/stdenv-updates/; revision=22274 --- pkgs/top-level/all-packages.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index faf47050e5a7..c029b3a6b261 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2067,8 +2067,6 @@ let profiledCompiler = false; }); - gcc44 = useFromStdenv "gcc" gcc44_real; - gcc43 = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc-4.3) { inherit stdenv fetchurl texinfo gmp mpfr noSysDirs; profiledCompiler = true; @@ -2096,6 +2094,8 @@ let cross = assert crossSystem != null; crossSystem; }); + gcc45 = useFromStdenv "gcc" gcc45_real; + gcc45_realCross = lib.addMetaAttrs { platforms = []; } (makeOverridable (import ../development/compilers/gcc-4.5) { inherit fetchurl stdenv texinfo gmp mpfr mpc libelf zlib @@ -2154,13 +2154,13 @@ let enableMultilib = true; })); - gcc44_real = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc-4.4) { + gcc44 = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc-4.4) { inherit fetchurl stdenv texinfo gmp mpfr /* ppl cloogppl */ gettext which noSysDirs; profiledCompiler = true; })); - gcc45 = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc-4.5) { + gcc45_real = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc-4.5) { inherit fetchurl stdenv texinfo gmp mpfr mpc libelf zlib perl ppl cloogppl gettext which noSysDirs; From d84ce122f9703cde3de26e821db5ce6dc0002a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 15 Jun 2010 12:11:40 +0000 Subject: [PATCH 034/282] Uh, there were references to gcc44_real still. I hope not anymore. I decided to update gfortran to gfortran45 (it was gfortran43) svn path=/nixpkgs/branches/stdenv-updates/; revision=22276 --- pkgs/top-level/all-packages.nix | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c029b3a6b261..3e02d6776f0a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2178,7 +2178,7 @@ let texinfo = texinfo49; }); - gfortran = gfortran43; + gfortran = gfortran45; gfortran40 = wrapGCC (gcc40.gcc.override { langFortran = true; @@ -2210,7 +2210,15 @@ let profiledCompiler = false; }); - gfortran44 = wrapGCC (gcc44_real.gcc.override { + gfortran44 = wrapGCC (gcc44.gcc.override { + name = "gfortran"; + langFortran = true; + langCC = false; + langC = false; + profiledCompiler = false; + }); + + gfortran45 = wrapGCC (gcc45_real.gcc.override { name = "gfortran"; langFortran = true; langCC = false; @@ -2220,7 +2228,7 @@ let gcj = gcj45; - gcj44 = wrapGCC (gcc44_real.gcc.override { + gcj44 = wrapGCC (gcc44.gcc.override { name = "gcj"; langJava = true; langFortran = false; @@ -2248,9 +2256,22 @@ let libXrandr xproto renderproto xextproto inputproto randrproto; }); - gnat = gnat44; + gnat = gnat45; - gnat44 = wrapGCC (gcc44_real.gcc.override { + gnat44 = wrapGCC (gcc44.gcc.override { + name = "gnat"; + langCC = false; + langC = true; + langAda = true; + profiledCompiler = false; + inherit gnatboot; + # We can't use the ppl stuff, because we would have + # libstdc++ problems. + cloogppl = null; + ppl = null; + }); + + gnat45 = wrapGCC (gcc45_real.gcc.override { name = "gnat"; langCC = false; langC = true; From 4f1075c40b37600efdaf033568870bba8528b2d9 Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Tue, 15 Jun 2010 19:00:48 +0000 Subject: [PATCH 035/282] generic/setup.sh: remove duplication: - add generic showCommand function which prints a command before running it - add runMake which is using that function passing the makefile if set make all make invokations use runMake svn path=/nixpkgs/branches/stdenv-updates/; revision=22282 --- pkgs/stdenv/generic/setup.sh | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 5e2fc7b24dbe..a9f4d4dc357d 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -73,6 +73,15 @@ addToSearchPath() { addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" } +cmd(){ + echo "cmd: $@" + "$@" +} + +runMake(){ + cmd make ${makefile:+-f $makefile} "$@" +} + ###################################################################### # Initialisation. @@ -601,9 +610,7 @@ buildPhase() { return fi - echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" - make ${makefile:+-f $makefile} \ - $makeFlags "${makeFlagsArray[@]}" \ + runMake $makeFlags "${makeFlagsArray[@]}" \ $buildFlags "${buildFlagsArray[@]}" runHook postBuild @@ -613,9 +620,7 @@ buildPhase() { checkPhase() { runHook preCheck - echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}" - make ${makefile:+-f $makefile} \ - $makeFlags "${makeFlagsArray[@]}" \ + runMake $makeFlags "${makeFlagsArray[@]}" \ $checkFlags "${checkFlagsArray[@]}" ${checkTarget:-check} runHook postCheck @@ -663,8 +668,7 @@ installPhase() { ensureDir "$prefix" installTargets=${installTargets:-install} - echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}" - make ${makefile:+-f $makefile} $installTargets \ + runMake $installTargets \ $makeFlags "${makeFlagsArray[@]}" \ $installFlags "${installFlagsArray[@]}" @@ -740,8 +744,7 @@ fixupPhase() { distPhase() { runHook preDist - echo "dist flags: $distFlags ${distFlagsArray[@]}" - make ${makefile:+-f $makefile} $distFlags "${distFlagsArray[@]}" ${distTarget:-dist} + runMake $distFlags "${distFlagsArray[@]}" ${distTarget:-dist} if test "$dontCopyDist" != 1; then ensureDir "$out/tarballs" From 3c14e712caf5fe265e78fa1d54bd10b95dca98da Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Tue, 15 Jun 2010 19:00:51 +0000 Subject: [PATCH 036/282] setup.sh: add -j and -l options svn path=/nixpkgs/branches/stdenv-updates/; revision=22283 --- pkgs/stdenv/generic/setup.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index a9f4d4dc357d..644218fdbf30 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -79,9 +79,19 @@ cmd(){ } runMake(){ - cmd make ${makefile:+-f $makefile} "$@" + local optout=NO_PARALLEL_BUILD_${curPhase} + [ -n "${!optout}" ] || \ + local j="$makeFlagsParallelBuild" + cmd make ${makefile:+-f $makefile} "$@" $j } +###################################################################### +# parallel builds: opt-out +# - in a phase: set NO_PARALLEL_BUILD_${PHASE_NAME} +# - for this build: pass NUM_CORES=1 to the builder +if [ "$NUM_CORES" != 1 ]; then + makeFlagsParallelBuild="-j $NIX_MAX_PARALLELIZATION -l $NIX_TARGET_LOAD" +fi ###################################################################### # Initialisation. From 7db7857d151f143efa04ab516c6702e3317b1e1f Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Tue, 15 Jun 2010 19:00:54 +0000 Subject: [PATCH 037/282] nix num-cores.patch pass MAX_PARALLELIZATION and TARGET_LOAD to the builder. See comments svn path=/nixpkgs/branches/stdenv-updates/; revision=22284 --- .../package-management/nix/num-cores.patch | 31 +++++++++++++++++++ .../tools/package-management/nix/unstable.nix | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 pkgs/tools/package-management/nix/num-cores.patch diff --git a/pkgs/tools/package-management/nix/num-cores.patch b/pkgs/tools/package-management/nix/num-cores.patch new file mode 100644 index 000000000000..1b82631bd30d --- /dev/null +++ b/pkgs/tools/package-management/nix/num-cores.patch @@ -0,0 +1,31 @@ +commit b77e3721f19b4e5084125eb8dc7186117004dd4b +Author: Marc Weber +Date: Sun Jun 13 23:53:46 2010 +0200 + + generic/setup.sh: add -j (+1) -l (*2) options to make depending on $NUM_CORES + +diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh +index a9f4d4d..685c0ec 100644 +--- a/pkgs/stdenv/generic/setup.sh ++++ b/pkgs/stdenv/generic/setup.sh +@@ -79,9 +79,19 @@ cmd(){ + } + + runMake(){ +- cmd make ${makefile:+-f $makefile} "$@" ++ local optout=NO_PARALLEL_BUILD_${curPhase} ++ [ -n "${!optout}" ] || \ ++ local j="$makeFlagsParallelBuild" ++ cmd make ${makefile:+-f $makefile} "$@" $j + } + ++###################################################################### ++# parallel builds: opt-out ++# - in a phase: set NO_PARALLEL_BUILD_${PHASE_NAME} ++# - for this build: pass NUM_CORES=1 to the builder ++if [ "$NUM_CORES" -gt 1 ]; then ++ makeFlagsParallelBuild="-j $(( $NUM_CORES + 1 )) -l $(( 2 * $NUM_CORES ))" ++fi + + ###################################################################### + # Initialisation. diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index f45172ba426e..f1c28d17713e 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -40,4 +40,6 @@ stdenv.mkDerivation rec { homepage = http://nixos.org/; license = "LGPLv2+"; }; + + patches = [ ./num-cores.patch ]; } From 2dafd54743b5e739dc897c722c021a2c14e07a99 Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Tue, 15 Jun 2010 19:00:58 +0000 Subject: [PATCH 038/282] opt-out some failing phases svn path=/nixpkgs/branches/stdenv-updates/; revision=22285 --- pkgs/applications/audio/cdparanoia/default.nix | 2 ++ pkgs/applications/version-management/subversion/default.nix | 2 ++ pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix | 2 ++ pkgs/development/compilers/haxe/default.nix | 2 ++ pkgs/development/compilers/neko/default.nix | 3 +++ pkgs/development/compilers/ocaml/3.08.0.nix | 1 + pkgs/development/compilers/ocaml/3.09.1.nix | 1 + pkgs/development/compilers/ocaml/3.10.0.nix | 2 ++ pkgs/development/compilers/ocaml/3.11.1.nix | 2 ++ pkgs/development/libraries/gobject-introspection/default.nix | 2 ++ pkgs/development/libraries/nss/default.nix | 2 ++ pkgs/development/libraries/openssl/1.x.nix | 2 ++ pkgs/development/libraries/openssl/default.nix | 2 ++ pkgs/development/libraries/pth/default.nix | 3 +++ pkgs/development/libraries/slang/default.nix | 1 + pkgs/development/tools/parsing/flex/flex-2.5.33.nix | 1 + pkgs/development/tools/parsing/flex/flex-2.5.34.nix | 1 + pkgs/development/tools/parsing/flex/flex-2.5.35.nix | 1 + pkgs/development/tools/parsing/flex/flex-2.5.4a.nix | 1 + pkgs/tools/graphics/pstoedit/default.nix | 2 ++ pkgs/top-level/perl-packages.nix | 1 + 21 files changed, 36 insertions(+) diff --git a/pkgs/applications/audio/cdparanoia/default.nix b/pkgs/applications/audio/cdparanoia/default.nix index 6fa69beee20e..e4589bc48887 100644 --- a/pkgs/applications/audio/cdparanoia/default.nix +++ b/pkgs/applications/audio/cdparanoia/default.nix @@ -6,6 +6,8 @@ stdenv.mkDerivation { url = http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-alpha9.8.src.tgz; md5 = "7218e778b5970a86c958e597f952f193"; }; + + NO_PARALLEL_BUILD_buildPhase = 1; patches = [./fix.patch]; diff --git a/pkgs/applications/version-management/subversion/default.nix b/pkgs/applications/version-management/subversion/default.nix index da7e72669c6c..3607d9493864 100644 --- a/pkgs/applications/version-management/subversion/default.nix +++ b/pkgs/applications/version-management/subversion/default.nix @@ -74,4 +74,6 @@ stdenv.mkDerivation rec { maintainers = [ stdenv.lib.maintainers.eelco ]; platforms = stdenv.lib.platforms.all; }; + + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix b/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix index c2e49deb009e..8b88b6f648e9 100644 --- a/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix +++ b/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix @@ -14,4 +14,6 @@ stdenv.mkDerivation { wrapProgram $out/bin/xml2po --prefix PYTHONPATH : $(toPythonPath $out) \ ''${PYTHONPATH:+ --prefix PYTHONPATH : $PYTHONPATH} \ ''; + + NO_PARALLEL_BUILD_buildPhase = 1; } diff --git a/pkgs/development/compilers/haxe/default.nix b/pkgs/development/compilers/haxe/default.nix index 33260cd5469a..098e82861b3f 100644 --- a/pkgs/development/compilers/haxe/default.nix +++ b/pkgs/development/compilers/haxe/default.nix @@ -55,6 +55,8 @@ let inherit zlib; + NUM_CORES = 1; + buildPhase = '' set -x mkdir -p ocaml/{swflib,extc,extlib-dev,xml-light} neko/libs diff --git a/pkgs/development/compilers/neko/default.nix b/pkgs/development/compilers/neko/default.nix index ee8474947f85..505a7c3256a0 100644 --- a/pkgs/development/compilers/neko/default.nix +++ b/pkgs/development/compilers/neko/default.nix @@ -70,4 +70,7 @@ composableDerivation {} ( fixed : { # TODO make them optional and make them work patches = [ ./disable-modules.patch ]; + + NUM_CORES = 1; + }) diff --git a/pkgs/development/compilers/ocaml/3.08.0.nix b/pkgs/development/compilers/ocaml/3.08.0.nix index b2e7e131a817..1625e4c55346 100644 --- a/pkgs/development/compilers/ocaml/3.08.0.nix +++ b/pkgs/development/compilers/ocaml/3.08.0.nix @@ -7,6 +7,7 @@ stdenv.mkDerivation { url = http://nixos.org/tarballs/ocaml-3.08.0.tar.gz; md5 = "c6ef478362295c150101cdd2efcd38e0"; }; + NUM_CORES = 1; # both fail: build and install configureScript = ./configure-3.08.0; dontAddPrefix = "True"; configureFlags = ["-no-tk" "-x11lib" x11]; diff --git a/pkgs/development/compilers/ocaml/3.09.1.nix b/pkgs/development/compilers/ocaml/3.09.1.nix index 6e9922ccc366..9c5f7b288cee 100644 --- a/pkgs/development/compilers/ocaml/3.09.1.nix +++ b/pkgs/development/compilers/ocaml/3.09.1.nix @@ -7,6 +7,7 @@ stdenv.mkDerivation { url = http://caml.inria.fr/pub/distrib/ocaml-3.09/ocaml-3.09.1.tar.gz; md5 = "c73f4b093e27ba5bf13d62923f89befc"; }; + NUM_CORES = 1; # both fail: build and install configureScript = ./configure-3.09.1; dontAddPrefix = "True"; configureFlags = ["-no-tk" "-x11lib" x11]; diff --git a/pkgs/development/compilers/ocaml/3.10.0.nix b/pkgs/development/compilers/ocaml/3.10.0.nix index 8a8ddd7ee975..bc92ab1b6897 100644 --- a/pkgs/development/compilers/ocaml/3.10.0.nix +++ b/pkgs/development/compilers/ocaml/3.10.0.nix @@ -9,6 +9,8 @@ stdenv.mkDerivation (rec { sha256 = "1ihmx1civ78s7k2hfc05z1s9vbyx2qw7fg8lnbxnfd6zxkk8878d"; }; + NUM_CORES = 1; # both fail: build and install + prefixKey = "-prefix "; configureFlags = ["-no-tk" "-x11lib" x11]; buildFlags = "world bootstrap world.opt"; diff --git a/pkgs/development/compilers/ocaml/3.11.1.nix b/pkgs/development/compilers/ocaml/3.11.1.nix index c825830e43d9..901928ec125f 100644 --- a/pkgs/development/compilers/ocaml/3.11.1.nix +++ b/pkgs/development/compilers/ocaml/3.11.1.nix @@ -14,6 +14,8 @@ stdenv.mkDerivation (rec { sha256 = "8c36a28106d4b683a15c547dfe4cb757a53fa9247579d1cc25bd06a22cc62e50"; }; + NUM_CORES = 1; # both fail: build and install + prefixKey = "-prefix "; configureFlags = ["-no-tk"] ++ optionals useX11 [ "-x11lib" x11 ]; buildFlags = "world" + optionalString useNativeCompilers " bootstrap world.opt"; diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix index f5fed1e16049..1c82284783a0 100644 --- a/pkgs/development/libraries/gobject-introspection/default.nix +++ b/pkgs/development/libraries/gobject-introspection/default.nix @@ -8,6 +8,8 @@ in stdenv.mkDerivation rec { name = "${baseName}-${v}"; + NO_PARALLEL_BUILD_buildPhase = 1; + buildInputs = [ flex bison glib pkgconfig python cairo ]; propagatedBuildInputs = [ libffi ]; configureFlags = "--enable-gcov"; diff --git a/pkgs/development/libraries/nss/default.nix b/pkgs/development/libraries/nss/default.nix index a51c355b6448..2d1c967e692e 100644 --- a/pkgs/development/libraries/nss/default.nix +++ b/pkgs/development/libraries/nss/default.nix @@ -19,6 +19,8 @@ stdenv.mkDerivation { buildInputs = [nspr perl zlib]; + NO_PARALLEL_BUILD_buildPhase = 1; + # Based on the build instructions at # http://www.mozilla.org/projects/security/pki/nss/nss-3.11.4/nss-3.11.4-build.html diff --git a/pkgs/development/libraries/openssl/1.x.nix b/pkgs/development/libraries/openssl/1.x.nix index eae32de30e48..c64baa17431f 100644 --- a/pkgs/development/libraries/openssl/1.x.nix +++ b/pkgs/development/libraries/openssl/1.x.nix @@ -14,6 +14,8 @@ stdenv.mkDerivation (rec { sha1 = "3f800ea9fa3da1c0f576d689be7dca3d55a4cb62"; }; + NO_PARALLEL_BUILD_buildPhase = 1; + buildNativeInputs = [ perl ]; configureScript = "./config"; diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix index 4e567cf6577b..556b5079ea0d 100644 --- a/pkgs/development/libraries/openssl/default.nix +++ b/pkgs/development/libraries/openssl/default.nix @@ -14,6 +14,8 @@ stdenv.mkDerivation ( rec { sha256 = "008z1h09pa6dfxs4wgbqj5i1clw4v82b1waqvwanb1kb6wlbq6mh"; }; + NO_PARALLEL_BUILD_buildPhase = 1; + buildNativeInputs = [ perl ]; configureScript = "./config"; diff --git a/pkgs/development/libraries/pth/default.nix b/pkgs/development/libraries/pth/default.nix index 631a76224062..875123a1c33f 100644 --- a/pkgs/development/libraries/pth/default.nix +++ b/pkgs/development/libraries/pth/default.nix @@ -11,4 +11,7 @@ stdenv.mkDerivation rec { description = "The GNU Portable Threads"; homepage = http://www.gnu.org/software/pth; }; + + NO_PARALLEL_BUILD_buildPhase = 1; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/libraries/slang/default.nix b/pkgs/development/libraries/slang/default.nix index a7db634dbd04..37ead3fb9eb6 100644 --- a/pkgs/development/libraries/slang/default.nix +++ b/pkgs/development/libraries/slang/default.nix @@ -14,4 +14,5 @@ stdenv.mkDerivation { ''; configureFlags = "--with-png=${libpng} --with-z=${zlib} --with-pcre=${pcre} --with-readline=${readline}"; buildInputs = [ncurses pcre libpng zlib readline]; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.33.nix b/pkgs/development/tools/parsing/flex/flex-2.5.33.nix index 9be98689aeaa..18ae038c8cfb 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.33.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.33.nix @@ -17,4 +17,5 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.34.nix b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix index d56cf0c88a2e..d5a409a062c9 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.34.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix @@ -16,4 +16,5 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.35.nix b/pkgs/development/tools/parsing/flex/flex-2.5.35.nix index c200e4e7d2f7..b9fe7e28cda0 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.35.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.35.nix @@ -16,4 +16,5 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix index 13bb68349790..bca60808600c 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix @@ -9,4 +9,5 @@ stdenv.mkDerivation { md5 = "bd8753d0b22e1f4ec87a553a73021adf"; }; buildInputs = [yacc]; + NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/tools/graphics/pstoedit/default.nix b/pkgs/tools/graphics/pstoedit/default.nix index 6f4a41d24251..703811e6bfe1 100644 --- a/pkgs/tools/graphics/pstoedit/default.nix +++ b/pkgs/tools/graphics/pstoedit/default.nix @@ -17,4 +17,6 @@ stdenv.mkDerivation { platforms = args.lib.platforms.linux; }; + NUM_CORES = 1; + } diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index dadc86907963..b3f3dbca5e61 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -2858,6 +2858,7 @@ rec { }; XMLSAX = buildPerlPackage { + NUM_CORES=1; name = "XML-SAX-0.96"; src = fetchurl { url = mirror://cpan/authors/id/G/GR/GRANTM/XML-SAX-0.96.tar.gz; From f446814260c66591300231a8b7ba9e01edfaa7ce Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Wed, 16 Jun 2010 12:39:19 +0000 Subject: [PATCH 039/282] no longer pass -j to make without arg which means no limit on forks. This brought down the build farm svn path=/nixpkgs/branches/stdenv-updates/; revision=22293 --- pkgs/stdenv/generic/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 644218fdbf30..5a92f2d33bf8 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -90,7 +90,7 @@ runMake(){ # - in a phase: set NO_PARALLEL_BUILD_${PHASE_NAME} # - for this build: pass NUM_CORES=1 to the builder if [ "$NUM_CORES" != 1 ]; then - makeFlagsParallelBuild="-j $NIX_MAX_PARALLELIZATION -l $NIX_TARGET_LOAD" + makeFlagsParallelBuild="-j ${NIX_MAX_PARALLELIZATION:-1} ${NIX_TARGET_LOAD:+-l} $NIX_TARGET_LOAD" fi ###################################################################### From f3e7f0fdf03cb0b31479c95585781de3193ec3c8 Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Sat, 19 Jun 2010 15:52:28 +0000 Subject: [PATCH 040/282] reverting my patch series adding -j -l support for make svn path=/nixpkgs/branches/stdenv-updates/; revision=22336 --- .../applications/audio/cdparanoia/default.nix | 2 -- .../version-management/subversion/default.nix | 2 -- .../desktop/gnome-doc-utils/default.nix | 2 -- pkgs/development/compilers/haxe/default.nix | 2 -- pkgs/development/compilers/neko/default.nix | 3 -- pkgs/development/compilers/ocaml/3.08.0.nix | 1 - pkgs/development/compilers/ocaml/3.09.1.nix | 1 - pkgs/development/compilers/ocaml/3.10.0.nix | 2 -- pkgs/development/compilers/ocaml/3.11.1.nix | 2 -- .../gobject-introspection/default.nix | 2 -- pkgs/development/libraries/nss/default.nix | 2 -- pkgs/development/libraries/openssl/1.x.nix | 2 -- .../development/libraries/openssl/default.nix | 2 -- pkgs/development/libraries/pth/default.nix | 3 -- pkgs/development/libraries/slang/default.nix | 1 - .../tools/parsing/flex/flex-2.5.33.nix | 1 - .../tools/parsing/flex/flex-2.5.34.nix | 1 - .../tools/parsing/flex/flex-2.5.35.nix | 1 - .../tools/parsing/flex/flex-2.5.4a.nix | 1 - pkgs/stdenv/generic/setup.sh | 33 ++++++------------- pkgs/tools/graphics/pstoedit/default.nix | 2 -- .../package-management/nix/num-cores.patch | 31 ----------------- .../tools/package-management/nix/unstable.nix | 2 -- pkgs/top-level/perl-packages.nix | 1 - 24 files changed, 10 insertions(+), 92 deletions(-) delete mode 100644 pkgs/tools/package-management/nix/num-cores.patch diff --git a/pkgs/applications/audio/cdparanoia/default.nix b/pkgs/applications/audio/cdparanoia/default.nix index e4589bc48887..6fa69beee20e 100644 --- a/pkgs/applications/audio/cdparanoia/default.nix +++ b/pkgs/applications/audio/cdparanoia/default.nix @@ -6,8 +6,6 @@ stdenv.mkDerivation { url = http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-alpha9.8.src.tgz; md5 = "7218e778b5970a86c958e597f952f193"; }; - - NO_PARALLEL_BUILD_buildPhase = 1; patches = [./fix.patch]; diff --git a/pkgs/applications/version-management/subversion/default.nix b/pkgs/applications/version-management/subversion/default.nix index 3607d9493864..da7e72669c6c 100644 --- a/pkgs/applications/version-management/subversion/default.nix +++ b/pkgs/applications/version-management/subversion/default.nix @@ -74,6 +74,4 @@ stdenv.mkDerivation rec { maintainers = [ stdenv.lib.maintainers.eelco ]; platforms = stdenv.lib.platforms.all; }; - - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix b/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix index 8b88b6f648e9..c2e49deb009e 100644 --- a/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix +++ b/pkgs/desktops/gnome-2.28/desktop/gnome-doc-utils/default.nix @@ -14,6 +14,4 @@ stdenv.mkDerivation { wrapProgram $out/bin/xml2po --prefix PYTHONPATH : $(toPythonPath $out) \ ''${PYTHONPATH:+ --prefix PYTHONPATH : $PYTHONPATH} \ ''; - - NO_PARALLEL_BUILD_buildPhase = 1; } diff --git a/pkgs/development/compilers/haxe/default.nix b/pkgs/development/compilers/haxe/default.nix index 098e82861b3f..33260cd5469a 100644 --- a/pkgs/development/compilers/haxe/default.nix +++ b/pkgs/development/compilers/haxe/default.nix @@ -55,8 +55,6 @@ let inherit zlib; - NUM_CORES = 1; - buildPhase = '' set -x mkdir -p ocaml/{swflib,extc,extlib-dev,xml-light} neko/libs diff --git a/pkgs/development/compilers/neko/default.nix b/pkgs/development/compilers/neko/default.nix index 505a7c3256a0..ee8474947f85 100644 --- a/pkgs/development/compilers/neko/default.nix +++ b/pkgs/development/compilers/neko/default.nix @@ -70,7 +70,4 @@ composableDerivation {} ( fixed : { # TODO make them optional and make them work patches = [ ./disable-modules.patch ]; - - NUM_CORES = 1; - }) diff --git a/pkgs/development/compilers/ocaml/3.08.0.nix b/pkgs/development/compilers/ocaml/3.08.0.nix index 1625e4c55346..b2e7e131a817 100644 --- a/pkgs/development/compilers/ocaml/3.08.0.nix +++ b/pkgs/development/compilers/ocaml/3.08.0.nix @@ -7,7 +7,6 @@ stdenv.mkDerivation { url = http://nixos.org/tarballs/ocaml-3.08.0.tar.gz; md5 = "c6ef478362295c150101cdd2efcd38e0"; }; - NUM_CORES = 1; # both fail: build and install configureScript = ./configure-3.08.0; dontAddPrefix = "True"; configureFlags = ["-no-tk" "-x11lib" x11]; diff --git a/pkgs/development/compilers/ocaml/3.09.1.nix b/pkgs/development/compilers/ocaml/3.09.1.nix index 9c5f7b288cee..6e9922ccc366 100644 --- a/pkgs/development/compilers/ocaml/3.09.1.nix +++ b/pkgs/development/compilers/ocaml/3.09.1.nix @@ -7,7 +7,6 @@ stdenv.mkDerivation { url = http://caml.inria.fr/pub/distrib/ocaml-3.09/ocaml-3.09.1.tar.gz; md5 = "c73f4b093e27ba5bf13d62923f89befc"; }; - NUM_CORES = 1; # both fail: build and install configureScript = ./configure-3.09.1; dontAddPrefix = "True"; configureFlags = ["-no-tk" "-x11lib" x11]; diff --git a/pkgs/development/compilers/ocaml/3.10.0.nix b/pkgs/development/compilers/ocaml/3.10.0.nix index bc92ab1b6897..8a8ddd7ee975 100644 --- a/pkgs/development/compilers/ocaml/3.10.0.nix +++ b/pkgs/development/compilers/ocaml/3.10.0.nix @@ -9,8 +9,6 @@ stdenv.mkDerivation (rec { sha256 = "1ihmx1civ78s7k2hfc05z1s9vbyx2qw7fg8lnbxnfd6zxkk8878d"; }; - NUM_CORES = 1; # both fail: build and install - prefixKey = "-prefix "; configureFlags = ["-no-tk" "-x11lib" x11]; buildFlags = "world bootstrap world.opt"; diff --git a/pkgs/development/compilers/ocaml/3.11.1.nix b/pkgs/development/compilers/ocaml/3.11.1.nix index 901928ec125f..c825830e43d9 100644 --- a/pkgs/development/compilers/ocaml/3.11.1.nix +++ b/pkgs/development/compilers/ocaml/3.11.1.nix @@ -14,8 +14,6 @@ stdenv.mkDerivation (rec { sha256 = "8c36a28106d4b683a15c547dfe4cb757a53fa9247579d1cc25bd06a22cc62e50"; }; - NUM_CORES = 1; # both fail: build and install - prefixKey = "-prefix "; configureFlags = ["-no-tk"] ++ optionals useX11 [ "-x11lib" x11 ]; buildFlags = "world" + optionalString useNativeCompilers " bootstrap world.opt"; diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix index 1c82284783a0..f5fed1e16049 100644 --- a/pkgs/development/libraries/gobject-introspection/default.nix +++ b/pkgs/development/libraries/gobject-introspection/default.nix @@ -8,8 +8,6 @@ in stdenv.mkDerivation rec { name = "${baseName}-${v}"; - NO_PARALLEL_BUILD_buildPhase = 1; - buildInputs = [ flex bison glib pkgconfig python cairo ]; propagatedBuildInputs = [ libffi ]; configureFlags = "--enable-gcov"; diff --git a/pkgs/development/libraries/nss/default.nix b/pkgs/development/libraries/nss/default.nix index 2d1c967e692e..a51c355b6448 100644 --- a/pkgs/development/libraries/nss/default.nix +++ b/pkgs/development/libraries/nss/default.nix @@ -19,8 +19,6 @@ stdenv.mkDerivation { buildInputs = [nspr perl zlib]; - NO_PARALLEL_BUILD_buildPhase = 1; - # Based on the build instructions at # http://www.mozilla.org/projects/security/pki/nss/nss-3.11.4/nss-3.11.4-build.html diff --git a/pkgs/development/libraries/openssl/1.x.nix b/pkgs/development/libraries/openssl/1.x.nix index c64baa17431f..eae32de30e48 100644 --- a/pkgs/development/libraries/openssl/1.x.nix +++ b/pkgs/development/libraries/openssl/1.x.nix @@ -14,8 +14,6 @@ stdenv.mkDerivation (rec { sha1 = "3f800ea9fa3da1c0f576d689be7dca3d55a4cb62"; }; - NO_PARALLEL_BUILD_buildPhase = 1; - buildNativeInputs = [ perl ]; configureScript = "./config"; diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix index 556b5079ea0d..4e567cf6577b 100644 --- a/pkgs/development/libraries/openssl/default.nix +++ b/pkgs/development/libraries/openssl/default.nix @@ -14,8 +14,6 @@ stdenv.mkDerivation ( rec { sha256 = "008z1h09pa6dfxs4wgbqj5i1clw4v82b1waqvwanb1kb6wlbq6mh"; }; - NO_PARALLEL_BUILD_buildPhase = 1; - buildNativeInputs = [ perl ]; configureScript = "./config"; diff --git a/pkgs/development/libraries/pth/default.nix b/pkgs/development/libraries/pth/default.nix index 875123a1c33f..631a76224062 100644 --- a/pkgs/development/libraries/pth/default.nix +++ b/pkgs/development/libraries/pth/default.nix @@ -11,7 +11,4 @@ stdenv.mkDerivation rec { description = "The GNU Portable Threads"; homepage = http://www.gnu.org/software/pth; }; - - NO_PARALLEL_BUILD_buildPhase = 1; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/libraries/slang/default.nix b/pkgs/development/libraries/slang/default.nix index 37ead3fb9eb6..a7db634dbd04 100644 --- a/pkgs/development/libraries/slang/default.nix +++ b/pkgs/development/libraries/slang/default.nix @@ -14,5 +14,4 @@ stdenv.mkDerivation { ''; configureFlags = "--with-png=${libpng} --with-z=${zlib} --with-pcre=${pcre} --with-readline=${readline}"; buildInputs = [ncurses pcre libpng zlib readline]; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.33.nix b/pkgs/development/tools/parsing/flex/flex-2.5.33.nix index 18ae038c8cfb..9be98689aeaa 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.33.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.33.nix @@ -17,5 +17,4 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.34.nix b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix index d5a409a062c9..d56cf0c88a2e 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.34.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix @@ -16,5 +16,4 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.35.nix b/pkgs/development/tools/parsing/flex/flex-2.5.35.nix index b9fe7e28cda0..c200e4e7d2f7 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.35.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.35.nix @@ -16,5 +16,4 @@ stdenv.mkDerivation { meta = { description = "A fast lexical analyser generator"; }; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix index bca60808600c..13bb68349790 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix @@ -9,5 +9,4 @@ stdenv.mkDerivation { md5 = "bd8753d0b22e1f4ec87a553a73021adf"; }; buildInputs = [yacc]; - NO_PARALLEL_BUILD_installPhase = 1; } diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 5a92f2d33bf8..5e2fc7b24dbe 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -73,25 +73,6 @@ addToSearchPath() { addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" } -cmd(){ - echo "cmd: $@" - "$@" -} - -runMake(){ - local optout=NO_PARALLEL_BUILD_${curPhase} - [ -n "${!optout}" ] || \ - local j="$makeFlagsParallelBuild" - cmd make ${makefile:+-f $makefile} "$@" $j -} - -###################################################################### -# parallel builds: opt-out -# - in a phase: set NO_PARALLEL_BUILD_${PHASE_NAME} -# - for this build: pass NUM_CORES=1 to the builder -if [ "$NUM_CORES" != 1 ]; then - makeFlagsParallelBuild="-j ${NIX_MAX_PARALLELIZATION:-1} ${NIX_TARGET_LOAD:+-l} $NIX_TARGET_LOAD" -fi ###################################################################### # Initialisation. @@ -620,7 +601,9 @@ buildPhase() { return fi - runMake $makeFlags "${makeFlagsArray[@]}" \ + echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" + make ${makefile:+-f $makefile} \ + $makeFlags "${makeFlagsArray[@]}" \ $buildFlags "${buildFlagsArray[@]}" runHook postBuild @@ -630,7 +613,9 @@ buildPhase() { checkPhase() { runHook preCheck - runMake $makeFlags "${makeFlagsArray[@]}" \ + echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}" + make ${makefile:+-f $makefile} \ + $makeFlags "${makeFlagsArray[@]}" \ $checkFlags "${checkFlagsArray[@]}" ${checkTarget:-check} runHook postCheck @@ -678,7 +663,8 @@ installPhase() { ensureDir "$prefix" installTargets=${installTargets:-install} - runMake $installTargets \ + echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}" + make ${makefile:+-f $makefile} $installTargets \ $makeFlags "${makeFlagsArray[@]}" \ $installFlags "${installFlagsArray[@]}" @@ -754,7 +740,8 @@ fixupPhase() { distPhase() { runHook preDist - runMake $distFlags "${distFlagsArray[@]}" ${distTarget:-dist} + echo "dist flags: $distFlags ${distFlagsArray[@]}" + make ${makefile:+-f $makefile} $distFlags "${distFlagsArray[@]}" ${distTarget:-dist} if test "$dontCopyDist" != 1; then ensureDir "$out/tarballs" diff --git a/pkgs/tools/graphics/pstoedit/default.nix b/pkgs/tools/graphics/pstoedit/default.nix index 703811e6bfe1..6f4a41d24251 100644 --- a/pkgs/tools/graphics/pstoedit/default.nix +++ b/pkgs/tools/graphics/pstoedit/default.nix @@ -17,6 +17,4 @@ stdenv.mkDerivation { platforms = args.lib.platforms.linux; }; - NUM_CORES = 1; - } diff --git a/pkgs/tools/package-management/nix/num-cores.patch b/pkgs/tools/package-management/nix/num-cores.patch deleted file mode 100644 index 1b82631bd30d..000000000000 --- a/pkgs/tools/package-management/nix/num-cores.patch +++ /dev/null @@ -1,31 +0,0 @@ -commit b77e3721f19b4e5084125eb8dc7186117004dd4b -Author: Marc Weber -Date: Sun Jun 13 23:53:46 2010 +0200 - - generic/setup.sh: add -j (+1) -l (*2) options to make depending on $NUM_CORES - -diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh -index a9f4d4d..685c0ec 100644 ---- a/pkgs/stdenv/generic/setup.sh -+++ b/pkgs/stdenv/generic/setup.sh -@@ -79,9 +79,19 @@ cmd(){ - } - - runMake(){ -- cmd make ${makefile:+-f $makefile} "$@" -+ local optout=NO_PARALLEL_BUILD_${curPhase} -+ [ -n "${!optout}" ] || \ -+ local j="$makeFlagsParallelBuild" -+ cmd make ${makefile:+-f $makefile} "$@" $j - } - -+###################################################################### -+# parallel builds: opt-out -+# - in a phase: set NO_PARALLEL_BUILD_${PHASE_NAME} -+# - for this build: pass NUM_CORES=1 to the builder -+if [ "$NUM_CORES" -gt 1 ]; then -+ makeFlagsParallelBuild="-j $(( $NUM_CORES + 1 )) -l $(( 2 * $NUM_CORES ))" -+fi - - ###################################################################### - # Initialisation. diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index f1c28d17713e..f45172ba426e 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -40,6 +40,4 @@ stdenv.mkDerivation rec { homepage = http://nixos.org/; license = "LGPLv2+"; }; - - patches = [ ./num-cores.patch ]; } diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index b3f3dbca5e61..dadc86907963 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -2858,7 +2858,6 @@ rec { }; XMLSAX = buildPerlPackage { - NUM_CORES=1; name = "XML-SAX-0.96"; src = fetchurl { url = mirror://cpan/authors/id/G/GR/GRANTM/XML-SAX-0.96.tar.gz; From f1ea4d18359c13396090cd0b548de94f2fb06b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 22 Jun 2010 08:06:12 +0000 Subject: [PATCH 041/282] GNU Guile 1.8: Fix builds with GCC 4.5. svn path=/nixpkgs/branches/stdenv-updates/; revision=22369 --- .../interpreters/guile/cpp-4.5.patch | 24 +++++++++++++++++++ .../interpreters/guile/default.nix | 4 ++++ 2 files changed, 28 insertions(+) create mode 100644 pkgs/development/interpreters/guile/cpp-4.5.patch diff --git a/pkgs/development/interpreters/guile/cpp-4.5.patch b/pkgs/development/interpreters/guile/cpp-4.5.patch new file mode 100644 index 000000000000..7e7671f0da09 --- /dev/null +++ b/pkgs/development/interpreters/guile/cpp-4.5.patch @@ -0,0 +1,24 @@ +Fix doc snarfing with GCC 4.5. +From . + +diff --git a/scripts/snarf-check-and-output-texi b/scripts/snarf-check-and-output-texi +index ea33e17..8cd42e8 100755 +--- a/scripts/snarf-check-and-output-texi ++++ b/scripts/snarf-check-and-output-texi +@@ -267,6 +267,17 @@ exec ${GUILE-guile} -l $0 -c "(apply $main (cdr (command-line)))" "$@" + (set! *file* file) + (set! *line* line)) + ++ ;; newer gccs like to throw around more location markers into the ++ ;; preprocessed source; these (hash . hash) bits are what they translate to ++ ;; in snarfy terms. ++ (('location ('string . file) ('int . line) ('hash . 'hash)) ++ (set! *file* file) ++ (set! *line* line)) ++ ++ (('location ('hash . 'hash) ('string . file) ('int . line) ('hash . 'hash)) ++ (set! *file* file) ++ (set! *line* line)) ++ + (('arglist rest ...) + (set! *args* (do-arglist rest))) diff --git a/pkgs/development/interpreters/guile/default.nix b/pkgs/development/interpreters/guile/default.nix index 8dd7953a42da..dae6a69bcb64 100644 --- a/pkgs/development/interpreters/guile/default.nix +++ b/pkgs/development/interpreters/guile/default.nix @@ -9,6 +9,8 @@ stdenv.mkDerivation rec { sha256 = "1czhcrn6l63xhsw3fjmv88djflqxbdpxjhgmwwvscm8rv4wn7vmz"; }; + patches = [ ./cpp-4.5.patch ]; + buildNativeInputs = [ makeWrapper gawk ]; propagatedBuildInputs = [ readline gmp libtool ]; selfBuildNativeInput = true; @@ -31,6 +33,8 @@ stdenv.mkDerivation rec { # One test fails. # ERROR: file: "libtest-asmobs", message: "file not found" + # This is fixed here: + # . doCheck = false; setupHook = ./setup-hook.sh; From ce9cc7da1f4d3f9bd39c4450aa6c01c85cbb07b7 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Wed, 23 Jun 2010 14:34:47 +0000 Subject: [PATCH 042/282] pkgs/tools/package-management/nix/unstable.nix: added support for (impure) NIX_BUILD_CORES variable svn path=/nixpkgs/branches/stdenv-updates/; revision=22398 --- ...r-passing-an-impure-NIX_BUILD_CORES-.patch | 126 ++++++++++++++++++ .../tools/package-management/nix/unstable.nix | 1 + 2 files changed, 127 insertions(+) create mode 100644 pkgs/tools/package-management/nix/0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch diff --git a/pkgs/tools/package-management/nix/0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch b/pkgs/tools/package-management/nix/0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch new file mode 100644 index 000000000000..e5c4ba1b01e0 --- /dev/null +++ b/pkgs/tools/package-management/nix/0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch @@ -0,0 +1,126 @@ +From 9c655f52be055d06cbeb3144e14d6135a8d408e0 Mon Sep 17 00:00:00 2001 +From: Peter Simons +Date: Tue, 22 Jun 2010 16:59:03 +0200 +Subject: [PATCH] Added support for passing an (impure) NIX_BUILD_CORES variable to build expressions. + +This patch adds the configuration file variable "build-cores" and the +command line argument "--cores". These settings specify the number of +CPU cores to utilize for parallel building within a job, i.e. by passing +an appropriate "-j" flag to GNU Make. The default value is 1, which +means that parallel building is *disabled*. If the number of build cores +is specified as 0 (synonymously: "guess" or "auto"), then the actual +value is supposed to be auto-detected by builders at run-time, i.e by +calling the nproc(1) utility from coreutils. + +The environment variable $NIX_BUILD_CORES is available to builders, but +the contents of that variable does *not* influence the hash that goes +into the $out store path, i.e. the number of build cores to be utilized +can be changed at will without requiring any re-builds. +--- + nix.conf.example | 12 ++++++++++++ + src/libmain/shared.cc | 14 ++++++++++++++ + src/libstore/build.cc | 3 +++ + src/libstore/globals.cc | 1 + + src/libstore/globals.hh | 5 +++++ + 5 files changed, 35 insertions(+), 0 deletions(-) + +diff --git a/nix.conf.example b/nix.conf.example +index e17cf3c..6175d86 100644 +--- a/nix.conf.example ++++ b/nix.conf.example +@@ -59,6 +59,18 @@ + #build-max-jobs = 1 + + ++### Option `build-cores' ++# ++# This option defines the number of CPU cores to utilize in parallel ++# within a build job, i.e. by passing an appropriate `-jN' flag to ++# GNU make. The default is 1, meaning that parallel building within ++# jobs is disabled. Passing the special values `0', `auto', or ++# `guess' causes Nix to try and auto-detect the number of available ++# cores on the local host. This setting can be overridden using the ++# `--cores' command line switch. ++#build-cores = 1 ++ ++ + ### Option `build-max-silent-time' + # + # This option defines the maximum number of seconds that a builder can +diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc +index 3fbec4b..19aa1e7 100644 +--- a/src/libmain/shared.cc ++++ b/src/libmain/shared.cc +@@ -135,6 +135,12 @@ static void initAndRun(int argc, char * * argv) + /* Get some settings from the configuration file. */ + thisSystem = querySetting("system", SYSTEM); + maxBuildJobs = queryIntSetting("build-max-jobs", 1); ++ string tmp = querySetting("build-cores", "/UNDEFINED"); ++ std::transform(tmp.begin(), tmp.end(), tmp.begin(), tolower); ++ if (tmp == "auto" || tmp == "guess") ++ buildCores = 0; ++ else ++ buildCores = queryIntSetting("build-cores", 1); + maxSilentTime = queryIntSetting("build-max-silent-time", 0); + + /* Catch SIGINT. */ +@@ -226,6 +232,14 @@ static void initAndRun(int argc, char * * argv) + tryFallback = true; + else if (arg == "--max-jobs" || arg == "-j") + maxBuildJobs = getIntArg(arg, i, args.end()); ++ else if (arg == "--cores") { ++ string tmp = *(++i); ++ std::transform(tmp.begin(), tmp.end(), tmp.begin(), tolower); ++ if (tmp == "auto" || tmp == "guess") ++ buildCores = 0u; ++ else ++ buildCores = getIntArg(arg, --i, args.end()); ++ } + else if (arg == "--readonly-mode") + readOnlyMode = true; + else if (arg == "--max-silent-time") +diff --git a/src/libstore/build.cc b/src/libstore/build.cc +index f901c1f..a53c23b 100644 +--- a/src/libstore/build.cc ++++ b/src/libstore/build.cc +@@ -1411,6 +1411,9 @@ void DerivationGoal::startBuilder() + in the store or in the build directory). */ + env["NIX_STORE"] = nixStore; + ++ /* The maximum number of cores to utilize for parallel building. */ ++ env["NIX_BUILD_CORES"] = (format("%d") % buildCores).str(); ++ + /* Add all bindings specified in the derivation. */ + foreach (StringPairs::iterator, i, drv.env) + env[i->first] = i->second; +diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc +index cc0e44e..75d2f69 100644 +--- a/src/libstore/globals.cc ++++ b/src/libstore/globals.cc +@@ -22,6 +22,7 @@ bool keepGoing = false; + bool tryFallback = false; + Verbosity buildVerbosity = lvlInfo; + unsigned int maxBuildJobs = 1; ++unsigned int buildCores = 1; + bool readOnlyMode = false; + string thisSystem = "unset"; + time_t maxSilentTime = 0; +diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh +index d3388e3..a74a741 100644 +--- a/src/libstore/globals.hh ++++ b/src/libstore/globals.hh +@@ -55,6 +55,11 @@ extern Verbosity buildVerbosity; + /* Maximum number of parallel build jobs. 0 means unlimited. */ + extern unsigned int maxBuildJobs; + ++/* Number of CPU cores to utilize in parallel within a build, i.e. by passing ++ this number to Make via '-j'. 0 means that the number of actual CPU cores on ++ the local host ought to be auto-detected. */ ++extern unsigned int buildCores; ++ + /* Read-only mode. Don't copy stuff to the store, don't change the + database. */ + extern bool readOnlyMode; +-- +1.7.1 + diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index f45172ba426e..c7f690cc9a01 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -13,6 +13,7 @@ stdenv.mkDerivation rec { buildNativeInputs = [ perl ]; buildInputs = [ curl openssl ]; + patches = [ ./0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch ]; configureFlags = '' From 226e0c76468e5221b63c4987fb9d0290b6b11693 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Wed, 23 Jun 2010 14:34:59 +0000 Subject: [PATCH 043/282] pkgs/stdenv/generic/setup.sh: added support for enableParallelBuilding variable If a build expressions has set "enableParallelBuilding = true", then the generic builder may utilize more than one CPU core to build that particular expression. This feature works out of the box for GNU Make. Expressions that use other build drivers like Boost.Jam or SCons have to specify appropriate flags such as "-j${NIX_BUILD_CORES}" themselves. svn path=/nixpkgs/branches/stdenv-updates/; revision=22399 --- pkgs/stdenv/generic/setup.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 5e2fc7b24dbe..948b6ca3ad66 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -269,6 +269,23 @@ fi export NIX_INDENT_MAKE=1 +# Normalize the NIX_BUILD_CORES variable. The value might be 0, which +# means that we're supposed to try and auto-detect the number of +# available CPU cores at run-time. + +if test -z "${NIX_BUILD_CORES:-}"; then + NIX_BUILD_CORES="1" +elif test "$NIX_BUILD_CORES" -le 0; then + NIX_BUILD_CORES=$(nproc 2>/dev/null || true) + if expr >/dev/null 2>&1 "$NIX_BUILD_CORES" : "^[0-9][0-9]*$"; then + : + else + NIX_BUILD_CORES="1" + fi +fi +export NIX_BUILD_CORES + + ###################################################################### # Misc. helper functions. @@ -603,6 +620,7 @@ buildPhase() { echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" make ${makefile:+-f $makefile} \ + ${enableParallelBuilding:+-j${NIX_BUILD_CORES} -l${NIX_BUILD_CORES}} \ $makeFlags "${makeFlagsArray[@]}" \ $buildFlags "${buildFlagsArray[@]}" @@ -615,6 +633,7 @@ checkPhase() { echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}" make ${makefile:+-f $makefile} \ + ${enableParallelBuilding:+-j${NIX_BUILD_CORES} -l${NIX_BUILD_CORES}} \ $makeFlags "${makeFlagsArray[@]}" \ $checkFlags "${checkFlagsArray[@]}" ${checkTarget:-check} From 70240d36acce339b117f5eb956b3bf7a48da1cf4 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Wed, 23 Jun 2010 14:35:18 +0000 Subject: [PATCH 044/282] Enable parallel building of gcc, glibc, gmp, mpfr, coreutils, perl, git, and qt4. svn path=/nixpkgs/branches/stdenv-updates/; revision=22400 --- .../version-management/git-and-tools/git/default.nix | 2 ++ pkgs/development/compilers/gcc-4.3/default.nix | 2 ++ pkgs/development/compilers/gcc-4.4/default.nix | 2 ++ pkgs/development/compilers/gcc-4.5/default.nix | 2 ++ pkgs/development/compilers/gcc-apple/default.nix | 2 ++ pkgs/development/compilers/gcc-apple64/default.nix | 2 ++ pkgs/development/interpreters/perl-5.10/default.nix | 2 ++ pkgs/development/libraries/glibc-2.11/builder.sh | 2 +- pkgs/development/libraries/glibc-2.11/common.nix | 4 +++- pkgs/development/libraries/glibc-2.5/builder.sh | 2 +- pkgs/development/libraries/glibc-2.5/default.nix | 2 ++ pkgs/development/libraries/gmp/4.3.1.nix | 2 ++ pkgs/development/libraries/gmp/default.nix | 2 ++ pkgs/development/libraries/mpfr/default.nix | 2 ++ pkgs/development/libraries/qt-4.x/4.5/default.nix | 2 ++ pkgs/development/libraries/qt-4.x/4.6/default.nix | 2 ++ pkgs/development/libraries/qt-4.x/4.7/default.nix | 2 ++ pkgs/tools/misc/coreutils/default.nix | 2 ++ 18 files changed, 35 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/version-management/git-and-tools/git/default.nix b/pkgs/applications/version-management/git-and-tools/git/default.nix index b7d34906c4a8..3cdf200d581b 100644 --- a/pkgs/applications/version-management/git-and-tools/git/default.nix +++ b/pkgs/applications/version-management/git-and-tools/git/default.nix @@ -116,6 +116,8 @@ stdenv.mkDerivation rec { ''; + enableParallelBuilding = true; + meta = { license = "GPLv2"; homepage = http://git-scm.com/; diff --git a/pkgs/development/compilers/gcc-4.3/default.nix b/pkgs/development/compilers/gcc-4.3/default.nix index 73caa156bd01..b9d0d9bff5df 100644 --- a/pkgs/development/compilers/gcc-4.3/default.nix +++ b/pkgs/development/compilers/gcc-4.3/default.nix @@ -127,6 +127,8 @@ stdenv.mkDerivation ({ passthru = { inherit langC langCC langFortran langVhdl langTreelang enableMultilib; }; + enableParallelBuilding = true; + meta = { homepage = "http://gcc.gnu.org/"; license = "GPL/LGPL"; diff --git a/pkgs/development/compilers/gcc-4.4/default.nix b/pkgs/development/compilers/gcc-4.4/default.nix index e46ceaa0250f..bc9c2c89e1db 100644 --- a/pkgs/development/compilers/gcc-4.4/default.nix +++ b/pkgs/development/compilers/gcc-4.4/default.nix @@ -247,6 +247,8 @@ stdenv.mkDerivation ({ passthru = { inherit langC langCC langAda langFortran langTreelang langVhdl enableMultilib version; }; + enableParallelBuilding = true; + meta = { homepage = http://gcc.gnu.org/; license = "GPLv3+"; # runtime support libraries are typically LGPLv3+ diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index 0544458dfc0e..0bdd0dd900a3 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -279,6 +279,8 @@ stdenv.mkDerivation ({ passthru = { inherit langC langCC langAda langFortran langTreelang langVhdl enableMultilib version; }; + enableParallelBuilding = true; + meta = { homepage = http://gcc.gnu.org/; license = "GPLv3+"; # runtime support libraries are typically LGPLv3+ diff --git a/pkgs/development/compilers/gcc-apple/default.nix b/pkgs/development/compilers/gcc-apple/default.nix index 8006bd4426d7..3346a4e327a5 100644 --- a/pkgs/development/compilers/gcc-apple/default.nix +++ b/pkgs/development/compilers/gcc-apple/default.nix @@ -21,6 +21,8 @@ stdenv.mkDerivation ({ sha256 = "a7d8041e50e110f5a503e188a05cb217f0c99c51f248a0a1387cc07a0b6f167f"; }) ; + enableParallelBuilding = true; + sourceRoot = "gcc_42-5574/"; patches = [./pass-cxxcpp.patch ./debug_list.patch] diff --git a/pkgs/development/compilers/gcc-apple64/default.nix b/pkgs/development/compilers/gcc-apple64/default.nix index b87cd596a5b3..ec16fae79774 100644 --- a/pkgs/development/compilers/gcc-apple64/default.nix +++ b/pkgs/development/compilers/gcc-apple64/default.nix @@ -21,6 +21,8 @@ stdenv.mkDerivation ({ sha256 = "1fy6j41rhxdsm19sib9wygjl5l54g8pm13c6y5x13f40mavw1mma"; }) ; + enableParallelBuilding = true; + libstdcxx = "libstdcxx-39"; sourceRoot = "gcc-5646/"; patches = diff --git a/pkgs/development/interpreters/perl-5.10/default.nix b/pkgs/development/interpreters/perl-5.10/default.nix index 31168291e3d1..76928d104481 100644 --- a/pkgs/development/interpreters/perl-5.10/default.nix +++ b/pkgs/development/interpreters/perl-5.10/default.nix @@ -39,6 +39,8 @@ stdenv.mkDerivation rec { dontAddPrefix = true; + enableParallelBuilding = true; + preConfigure = '' configureFlags="$configureFlags -Dprefix=$out -Dman1dir=$out/share/man/man1 -Dman3dir=$out/share/man/man3" diff --git a/pkgs/development/libraries/glibc-2.11/builder.sh b/pkgs/development/libraries/glibc-2.11/builder.sh index 11cd9dbd9687..9a1c1490019a 100644 --- a/pkgs/development/libraries/glibc-2.11/builder.sh +++ b/pkgs/development/libraries/glibc-2.11/builder.sh @@ -17,7 +17,7 @@ postConfigure() { postInstall() { if test -n "$installLocales"; then - make localedata/install-locales + 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 diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index f227db3c632d..4888308aaf3f 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -29,7 +29,9 @@ stdenv.mkDerivation ({ inherit (stdenv) is64bit; - patches = + enableParallelBuilding = true; + + patches = stdenv.lib.optional (fetchgit == null) /* Fix for NIXPKGS-79: when doing host name lookups, when nsswitch.conf contains a line like diff --git a/pkgs/development/libraries/glibc-2.5/builder.sh b/pkgs/development/libraries/glibc-2.5/builder.sh index 695a3a1ab3da..4cd0132e3700 100644 --- a/pkgs/development/libraries/glibc-2.5/builder.sh +++ b/pkgs/development/libraries/glibc-2.5/builder.sh @@ -38,7 +38,7 @@ postConfigure() { postInstall() { if test -n "$installLocales"; then - make localedata/install-locales + make -j${NIX_BUILD_CORES:-1} -l${NIX_BUILD_CORES:-1} localedata/install-locales fi rm $out/etc/ld.so.cache (cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1 diff --git a/pkgs/development/libraries/glibc-2.5/default.nix b/pkgs/development/libraries/glibc-2.5/default.nix index abfc3d0f4395..83447d8fe8a9 100644 --- a/pkgs/development/libraries/glibc-2.5/default.nix +++ b/pkgs/development/libraries/glibc-2.5/default.nix @@ -30,6 +30,8 @@ stdenv.mkDerivation { # the symbol __i686.get_pc_thunk.dx to be mangled. NIX_CFLAGS_COMPILE = "-U__i686"; + enableParallelBuilding = true; + meta = { homepage = http://www.gnu.org/software/libc/; description = "The GNU C Library"; diff --git a/pkgs/development/libraries/gmp/4.3.1.nix b/pkgs/development/libraries/gmp/4.3.1.nix index 17455b9f1dd4..5f83d9ae46dc 100644 --- a/pkgs/development/libraries/gmp/4.3.1.nix +++ b/pkgs/development/libraries/gmp/4.3.1.nix @@ -16,6 +16,8 @@ stdenv.mkDerivation rec { doCheck = true; + enableParallelBuilding = true; + meta = { description = "A free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers"; homepage = http://gmplib.org/; diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index e2f8a900bda3..08a03d715c2f 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -18,6 +18,8 @@ stdenv.mkDerivation rec { doCheck = true; + enableParallelBuilding = true; + meta = { description = "GMP, the GNU multiple precision arithmetic library"; diff --git a/pkgs/development/libraries/mpfr/default.nix b/pkgs/development/libraries/mpfr/default.nix index dea0113cc69f..1bfd14482003 100644 --- a/pkgs/development/libraries/mpfr/default.nix +++ b/pkgs/development/libraries/mpfr/default.nix @@ -12,6 +12,8 @@ stdenv.mkDerivation rec { doCheck = true; + enableParallelBuilding = true; + meta = { homepage = http://www.mpfr.org/; description = "GNU MPFR, a library for multiple-precision floating-point arithmetic"; diff --git a/pkgs/development/libraries/qt-4.x/4.5/default.nix b/pkgs/development/libraries/qt-4.x/4.5/default.nix index d7d69a3fa8e5..bee2c4e46793 100644 --- a/pkgs/development/libraries/qt-4.x/4.5/default.nix +++ b/pkgs/development/libraries/qt-4.x/4.5/default.nix @@ -74,6 +74,8 @@ stdenv.mkDerivation { ${if keepDocumentation == false then "rm -rf $out/doc" else ""} ''; + enableParallelBuilding = true; + meta = { homepage = http://www.qtsoftware.com/downloads/opensource/appdev/linux-x11-cpp; description = "A cross-platform application framework for C++"; diff --git a/pkgs/development/libraries/qt-4.x/4.6/default.nix b/pkgs/development/libraries/qt-4.x/4.6/default.nix index 707f261f6001..914d629e5c00 100644 --- a/pkgs/development/libraries/qt-4.x/4.6/default.nix +++ b/pkgs/development/libraries/qt-4.x/4.6/default.nix @@ -89,6 +89,8 @@ stdenv.mkDerivation rec { postInstall = if useDocs then "rm -rf $out/share/doc/${name}/{html,src}" else ""; + enableParallelBuilding = true; + meta = { homepage = http://qt.nokia.com/products; description = "A cross-platform application framework for C++"; diff --git a/pkgs/development/libraries/qt-4.x/4.7/default.nix b/pkgs/development/libraries/qt-4.x/4.7/default.nix index 0bb61a07bcb6..d02f96766522 100644 --- a/pkgs/development/libraries/qt-4.x/4.7/default.nix +++ b/pkgs/development/libraries/qt-4.x/4.7/default.nix @@ -96,6 +96,8 @@ stdenv.mkDerivation rec { postInstall = if useDocs then "rm -rf $out/share/doc/${name}/{html,src}" else ""; + enableParallelBuilding = true; + meta = { homepage = http://qt.nokia.com/products; description = "A cross-platform application framework for C++"; diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index a5631079fbb1..2d1052e3a0f9 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -31,6 +31,8 @@ stdenv.mkDerivation rec { # and {Open,Free}BSD. doCheck = (stdenv ? glibc); + enableParallelBuilding = true; + meta = { homepage = http://www.gnu.org/software/coreutils/; description = "The basic file, shell and text manipulation utilities of the GNU operating system"; From 815b121dfb84b4f80eb2875420bb91603e31e3aa Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 15 Jul 2010 14:56:55 +0000 Subject: [PATCH 045/282] pkgs/tools/package-management/nix/unstable.nix: updated to latest version svn path=/nixpkgs/branches/stdenv-updates/; revision=22613 --- pkgs/tools/package-management/nix/unstable.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index c7f690cc9a01..ffc91922688b 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -4,16 +4,15 @@ }: stdenv.mkDerivation rec { - name = "nix-0.16pre22206"; + name = "nix-0.16pre22611"; src = fetchurl { - url = "http://hydra.nixos.org/build/437136/download/4/${name}.tar.bz2"; - sha256 = "1gh2bqgllkxnlz8yzrj31z6libwx2whw0b18hvamm3ryg4b5wadj"; + url = "http://hydra.nixos.org/build/486717/download/4/${name}.tar.bz2"; + sha256 = "1dazafq1flfyha9j5v31n46wh2bwg0iq59bwwgdk7n2xa8y7dz93"; }; buildNativeInputs = [ perl ]; buildInputs = [ curl openssl ]; - patches = [ ./0001-Added-support-for-passing-an-impure-NIX_BUILD_CORES-.patch ]; configureFlags = '' From 9f8ff9f714bfb3c158a018c74151f4e8adcc8680 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 20 Jul 2010 13:13:30 +0000 Subject: [PATCH 046/282] pkgs/development/interpreters/python/2.6/default.nix: enable parallel building svn path=/nixpkgs/branches/stdenv-updates/; revision=22673 --- pkgs/development/interpreters/python/2.6/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/interpreters/python/2.6/default.nix b/pkgs/development/interpreters/python/2.6/default.nix index 8865738b0d75..3fd035b09bb8 100644 --- a/pkgs/development/interpreters/python/2.6/default.nix +++ b/pkgs/development/interpreters/python/2.6/default.nix @@ -88,6 +88,8 @@ stdenv.mkDerivation ( { libPrefix = "python${majorVersion}"; }; + enableParallelBuilding = true; + meta = { platforms = stdenv.lib.platforms.all; }; From aec027e2ecfaf96a7e02d2d06765fc058f08027c Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 20 Jul 2010 13:14:03 +0000 Subject: [PATCH 047/282] pkgs/development/libraries/ncurses: enable parallel building for ncurses svn path=/nixpkgs/branches/stdenv-updates/; revision=22674 --- pkgs/development/libraries/ncurses/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/ncurses/default.nix b/pkgs/development/libraries/ncurses/default.nix index 344db123801a..dd3d60e48129 100644 --- a/pkgs/development/libraries/ncurses/default.nix +++ b/pkgs/development/libraries/ncurses/default.nix @@ -14,7 +14,9 @@ stdenv.mkDerivation ( rec { ''; selfBuildNativeInput = true; - + + enableParallelBuilding = true; + preBuild = ''sed -e "s@\([[:space:]]\)sh @\1''${SHELL} @" -i */Makefile Makefile''; # When building a wide-character (Unicode) build, create backward From ba58eb8e22fe8108900a7b7426994928a3ea3700 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 20 Jul 2010 13:14:17 +0000 Subject: [PATCH 048/282] pkgs/stdenv/generic: added isSunOS attribute, similar to isLinux, isDarwin, etc. svn path=/nixpkgs/branches/stdenv-updates/; revision=22675 --- pkgs/stdenv/generic/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 4b988ef524a8..f1355c2a208b 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -95,6 +95,7 @@ let || result.system == "x86_64-linux" || result.system == "powerpc-linux" || result.system == "armv5tel-linux"; + isSunOS = result.system == "i386-sunos"; isi686 = result.system == "i686-linux" || result.system == "i686-darwin" || result.system == "i686-freebsd" From 937578d5ef19a8e7e1a4d39ec91003c44d321a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 20:57:13 +0000 Subject: [PATCH 049/282] Some first changes to get some evaluation working on the fuloong2f svn path=/nixpkgs/branches/stdenv-updates/; revision=22840 --- .../libraries/glibc-2.11/common.nix | 7 ++- .../linux/kernel-headers/2.6.28.nix | 1 + .../linux/kernel-headers/2.6.32.nix | 1 + pkgs/stdenv/generic/default.nix | 3 +- pkgs/stdenv/linux/make-bootstrap-tools.nix | 2 +- pkgs/top-level/all-packages.nix | 4 +- pkgs/top-level/platforms.nix | 52 +++++++++++++++++++ 7 files changed, 63 insertions(+), 7 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index 4888308aaf3f..5a76566c7bc9 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -61,6 +61,9 @@ stdenv.mkDerivation ({ /* Make sure `nscd' et al. are linked against `libssp'. */ ./stack-protector-link.patch + + /* Fix for the check of -fgnu89-inline compiler flag */ + ./gnu89-inline.patch ] ++ stdenv.lib.optional (fetchgit == null) /* MOD_NANO definition, for ntp (taken from glibc upstream) */ @@ -86,7 +89,7 @@ stdenv.mkDerivation ({ "--build=arm-linux-gnueabi" "--without-fp" ]; - + buildInputs = stdenv.lib.optionals (cross != null) [ gccCross ] ++ stdenv.lib.optional (mig != null) mig; @@ -149,7 +152,7 @@ stdenv.mkDerivation ({ mkdir ../build cd ../build - configureScript="../$sourceRoot/configure" + configureScript="`pwd`/../$sourceRoot/configure" ${preConfigure} ''; diff --git a/pkgs/os-specific/linux/kernel-headers/2.6.28.nix b/pkgs/os-specific/linux/kernel-headers/2.6.28.nix index 82840f8a51fe..a85e6f79bf1b 100644 --- a/pkgs/os-specific/linux/kernel-headers/2.6.28.nix +++ b/pkgs/os-specific/linux/kernel-headers/2.6.28.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation { if stdenv.system == "x86_64-linux" then "x86_64" else if stdenv.system == "powerpc-linux" then "powerpc" else if stdenv.system == "armv5tel-linux" then "arm" else + if stdenv.system == "mips64-linux" then "mips" else abort "don't know what the kernel include directory is called for this platform"; buildInputs = [perl]; diff --git a/pkgs/os-specific/linux/kernel-headers/2.6.32.nix b/pkgs/os-specific/linux/kernel-headers/2.6.32.nix index 893c26dc29cb..f08af39c701b 100644 --- a/pkgs/os-specific/linux/kernel-headers/2.6.32.nix +++ b/pkgs/os-specific/linux/kernel-headers/2.6.32.nix @@ -26,6 +26,7 @@ stdenv.mkDerivation { if stdenv.system == "x86_64-linux" then "x86_64" else if stdenv.system == "powerpc-linux" then "powerpc" else if stdenv.system == "armv5tel-linux" then "arm" else + if stdenv.platform ? kernelArch then stdenv.platform.kernelArch else abort "don't know what the kernel include directory is called for this platform"; buildInputs = [perl]; diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index f1355c2a208b..6cd2f1c7f32d 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -94,7 +94,8 @@ let isLinux = result.system == "i686-linux" || result.system == "x86_64-linux" || result.system == "powerpc-linux" - || result.system == "armv5tel-linux"; + || result.system == "armv5tel-linux" + || result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; isSunOS = result.system == "i386-sunos"; isi686 = result.system == "i686-linux" || result.system == "i686-darwin" diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 3f68738c3108..9a337de9b218 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -80,7 +80,7 @@ rec { cp ${bzip2}/bin/bzip2 $out/bin cp -d ${gnumake}/bin/* $out/bin cp -d ${patch}/bin/* $out/bin - cp ${patchelf05}/bin/* $out/bin + cp ${patchelf}/bin/* $out/bin cp ${replace}/bin/* $out/bin cp -d ${gnugrep.pcre}/lib/libpcre*.so* $out/lib # needed by grep diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3e02d6776f0a..ba874683f26e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6258,7 +6258,7 @@ let inherit fetchurl stdenv bison flex autoconf automake; }; - linuxHeaders = linuxHeaders_2_6_28; + linuxHeaders = linuxHeaders_2_6_32; linuxHeaders26Cross = forceBuildDrv (import ../os-specific/linux/kernel-headers/2.6.32.nix { inherit stdenv fetchurl perl; @@ -6849,11 +6849,9 @@ let inherit fetchurl stdenv unzip; }; -/* uclibc = import ../os-specific/linux/uclibc { inherit fetchurl stdenv linuxHeaders; }; -*/ uclibcCross = import ../os-specific/linux/uclibc { inherit fetchurl stdenv libiconv; diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index cb35db579b75..6f0584e30d52 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -152,4 +152,56 @@ rec { uboot = "upstream"; ubootConfig = "integratorcp_config"; }; + + fuloong2f_n32 = { + name = "fuloong2f_n32"; + kernelMajor = "2.6"; + kernelHeadersBaseConfig = "fuloong2e_defconfig"; + kernelBaseConfig = "fuloong2e_defconfig"; + kernelArch = "mips"; + kernelAutoModules = false; + kernelExtraConfig = + '' + BLK_DEV_RAM y + BLK_DEV_INITRD y + BLK_DEV_CRYPTOLOOP m + BLK_DEV_DM m + DM_CRYPT m + MD y + REISERFS_FS m + EXT4_FS m + USB_STORAGE_CYPRESS_ATACB m + + IP_PNP y + NFS_FS y + ROOT_NFS y + TUN m + NFS_V4 y + NFS_V4_1 y + NFS_FSCACHE y + NFSD m + NFSD_V2_ACL y + NFSD_V3 y + NFSD_V3_ACL y + NFSD_V4 y + + # Fail to build + DRM n + SCSI_ADVANSYS n + USB_ISP1362_HCD n + SND_SOC n + SND_ALI5451 n + FB_SAVAGE n + SCSI_NSP32 n + ATA_SFF n + SUNGEM n + IRDA n + ATM_HE n + SCSI_ACARD n + BLK_DEV_CMD640_ENHANCED n + + FUSE_FS m + ''; + kernelTarget = "vmlinux"; + }; } From 8c0e984f9178abb0f9363b2b69d2987858760ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:00:22 +0000 Subject: [PATCH 050/282] The gettext update 0.18 yes builds on mips. svn path=/nixpkgs/branches/stdenv-updates/; revision=22841 --- pkgs/top-level/all-packages.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ba874683f26e..2c2129da7065 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3890,10 +3890,12 @@ let use_svn = stdenv.system == "x86_64-linux"; }; - gettext = import ../development/libraries/gettext { + gettext_0_17 = import ../development/libraries/gettext { inherit fetchurl stdenv libiconv; }; + gettext = gettext_0_18; + # XXX: Remove me when `stdenv-updates' is merged. gettext_0_18 = import ../development/libraries/gettext/0.18.nix { inherit fetchurl stdenv libiconv; From 5cc46602ce65fb841fdca4917491e63301e9ce66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:01:54 +0000 Subject: [PATCH 051/282] Updating gettext to that decided in nixpkgs trunk (0.17 to 0.18) svn path=/nixpkgs/branches/stdenv-updates/; revision=22842 --- pkgs/development/libraries/gettext/0.18.nix | 66 ------------------- .../development/libraries/gettext/default.nix | 6 +- pkgs/top-level/all-packages.nix | 9 +-- 3 files changed, 5 insertions(+), 76 deletions(-) delete mode 100644 pkgs/development/libraries/gettext/0.18.nix diff --git a/pkgs/development/libraries/gettext/0.18.nix b/pkgs/development/libraries/gettext/0.18.nix deleted file mode 100644 index f7f0cb0018ca..000000000000 --- a/pkgs/development/libraries/gettext/0.18.nix +++ /dev/null @@ -1,66 +0,0 @@ -# XXX: Remove me when `stdenv-updates' is merged. - -{ stdenv, fetchurl, libiconv }: - -stdenv.mkDerivation (rec { - name = "gettext-0.18.1.1"; - - src = fetchurl { - url = "mirror://gnu/gettext/${name}.tar.gz"; - sha256 = "1sa3ch12qxa4h3ya6hkz119yclcccmincl9j20dhrdx5mykp3b4k"; - }; - - configureFlags = "--disable-csharp"; - - # On cross building, gettext supposes that the wchar.h from libc - # does not fulfill gettext needs, so it tries to work with its - # own wchar.h file, which does not cope well with the system's - # wchar.h and stddef.h (gcc-4.3 - glibc-2.9) - preConfigure = '' - if test -n "$crossConfig"; then - echo gl_cv_func_wcwidth_works=yes > cachefile - configureFlags="$configureFlags --cache-file=`pwd`/cachefile" - fi - ''; - - crossAttrs = { - buildInputs = stdenv.lib.optional (stdenv.gccCross.libc ? libiconv) - stdenv.gccCross.libc.libiconv.hostDrv; - }; - - meta = { - description = "GNU gettext, a well integrated set of translation tools and documentation"; - - longDescription = '' - Usually, programs are written and documented in English, and use - English at execution time for interacting with users. Using a common - language is quite handy for communication between developers, - maintainers and users from all countries. On the other hand, most - people are less comfortable with English than with their own native - language, and would rather be using their mother tongue for day to - day's work, as far as possible. Many would simply love seeing their - computer screen showing a lot less of English, and far more of their - own language. - - GNU `gettext' is an important step for the GNU Translation Project, as - it is an asset on which we may build many other steps. This package - offers to programmers, translators, and even users, a well integrated - set of tools and documentation. Specifically, the GNU `gettext' - utilities are a set of tools that provides a framework to help other - GNU packages produce multi-lingual messages. - ''; - - homepage = http://www.gnu.org/software/gettext/; - - maintainers = [ stdenv.lib.maintainers.ludo ]; - platforms = stdenv.lib.platforms.all; - }; -} - -// - -(if (!stdenv.isLinux) # any non-GNU system - then { - buildInputs = [ libiconv ]; - } - else {})) diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index fc425571a373..f7f0cb0018ca 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -1,11 +1,13 @@ +# XXX: Remove me when `stdenv-updates' is merged. + { stdenv, fetchurl, libiconv }: stdenv.mkDerivation (rec { - name = "gettext-0.18"; + name = "gettext-0.18.1.1"; src = fetchurl { url = "mirror://gnu/gettext/${name}.tar.gz"; - sha256 = "1rbgm6sxgq218pridn2vji5nlj3hdf4vs75rz00wc0wcw4fjqd02"; + sha256 = "1sa3ch12qxa4h3ya6hkz119yclcccmincl9j20dhrdx5mykp3b4k"; }; configureFlags = "--disable-csharp"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2c2129da7065..68f0b6ed74cb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3890,14 +3890,7 @@ let use_svn = stdenv.system == "x86_64-linux"; }; - gettext_0_17 = import ../development/libraries/gettext { - inherit fetchurl stdenv libiconv; - }; - - gettext = gettext_0_18; - - # XXX: Remove me when `stdenv-updates' is merged. - gettext_0_18 = import ../development/libraries/gettext/0.18.nix { + gettext = import ../development/libraries/gettext/default.nix { inherit fetchurl stdenv libiconv; }; From eb7ad28899e3602c4618ddc3c75fb26147ace047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:02:30 +0000 Subject: [PATCH 052/282] Patches for mpfr to work on mips with gcc newer or equal to 4.4 svn path=/nixpkgs/branches/stdenv-updates/; revision=22843 --- pkgs/development/libraries/mpfr/default.nix | 2 + pkgs/development/libraries/mpfr/patch01.patch | 184 ++++++++++++++++++ pkgs/development/libraries/mpfr/patch02.patch | 75 +++++++ 3 files changed, 261 insertions(+) create mode 100644 pkgs/development/libraries/mpfr/patch01.patch create mode 100644 pkgs/development/libraries/mpfr/patch02.patch diff --git a/pkgs/development/libraries/mpfr/default.nix b/pkgs/development/libraries/mpfr/default.nix index 1bfd14482003..94cf6e3cea55 100644 --- a/pkgs/development/libraries/mpfr/default.nix +++ b/pkgs/development/libraries/mpfr/default.nix @@ -10,6 +10,8 @@ stdenv.mkDerivation rec { buildInputs = [ gmp ]; + patches = [ ./patch01.patch ./patch02.patch ]; + doCheck = true; enableParallelBuilding = true; diff --git a/pkgs/development/libraries/mpfr/patch01.patch b/pkgs/development/libraries/mpfr/patch01.patch new file mode 100644 index 000000000000..2721517c4281 --- /dev/null +++ b/pkgs/development/libraries/mpfr/patch01.patch @@ -0,0 +1,184 @@ +diff -Naurd mpfr-2.4.2-a/PATCHES mpfr-2.4.2-b/PATCHES +--- mpfr-2.4.2-a/PATCHES 2009-12-07 13:37:12.000000000 +0000 ++++ mpfr-2.4.2-b/PATCHES 2009-12-07 13:37:12.000000000 +0000 +@@ -0,0 +1 @@ ++sin_cos_underflow +diff -Naurd mpfr-2.4.2-a/VERSION mpfr-2.4.2-b/VERSION +--- mpfr-2.4.2-a/VERSION 2009-11-30 02:43:08.000000000 +0000 ++++ mpfr-2.4.2-b/VERSION 2009-12-07 13:37:12.000000000 +0000 +@@ -1 +1 @@ +-2.4.2 ++2.4.2-p1 +diff -Naurd mpfr-2.4.2-a/mpfr.h mpfr-2.4.2-b/mpfr.h +--- mpfr-2.4.2-a/mpfr.h 2009-11-30 02:43:08.000000000 +0000 ++++ mpfr-2.4.2-b/mpfr.h 2009-12-07 13:37:12.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 2 + #define MPFR_VERSION_MINOR 4 + #define MPFR_VERSION_PATCHLEVEL 2 +-#define MPFR_VERSION_STRING "2.4.2" ++#define MPFR_VERSION_STRING "2.4.2-p1" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-2.4.2-a/sin_cos.c mpfr-2.4.2-b/sin_cos.c +--- mpfr-2.4.2-a/sin_cos.c 2009-11-30 02:43:09.000000000 +0000 ++++ mpfr-2.4.2-b/sin_cos.c 2009-12-07 13:37:12.000000000 +0000 +@@ -82,17 +82,19 @@ + if (y != x) + /* y and x differ, thus we can safely try to compute y first */ + { +- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (y, x, -2 * expx, 2, 0, rnd_mode, +- { inexy = _inexact; +- goto small_input; }); ++ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( ++ y, x, -2 * expx, 2, 0, rnd_mode, ++ { inexy = _inexact; ++ goto small_input; }); + if (0) + { + small_input: + /* we can go here only if we can round sin(x) */ +- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (z, __gmpfr_one, -2 * expx, +- 1, 0, rnd_mode, +- { inexz = _inexact; +- goto end; }); ++ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( ++ z, __gmpfr_one, -2 * expx, 1, 0, rnd_mode, ++ { inexz = _inexact; ++ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); ++ goto end; }); + } + + /* if we go here, one of the two MPFR_FAST_COMPUTE_IF_SMALL_INPUT +@@ -101,18 +103,19 @@ + else /* y and x are the same variable: try to compute z first, which + necessarily differs */ + { +- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (z, __gmpfr_one, -2 * expx, +- 1, 0, rnd_mode, +- { inexz = _inexact; +- goto small_input2; }); ++ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( ++ z, __gmpfr_one, -2 * expx, 1, 0, rnd_mode, ++ { inexz = _inexact; ++ goto small_input2; }); + if (0) + { + small_input2: + /* we can go here only if we can round cos(x) */ +- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (y, x, -2 * expx, 2, 0, +- rnd_mode, +- { inexy = _inexact; +- goto end; }); ++ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( ++ y, x, -2 * expx, 2, 0, rnd_mode, ++ { inexy = _inexact; ++ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); ++ goto end; }); + } + } + m += 2 * (-expx); +@@ -207,7 +210,6 @@ + mpfr_clear (xr); + + end: +- /* FIXME: update the underflow flag if need be. */ + MPFR_SAVE_EXPO_FREE (expo); + mpfr_check_range (y, inexy, rnd_mode); + mpfr_check_range (z, inexz, rnd_mode); +diff -Naurd mpfr-2.4.2-a/tests/tsin_cos.c mpfr-2.4.2-b/tests/tsin_cos.c +--- mpfr-2.4.2-a/tests/tsin_cos.c 2009-11-30 02:43:08.000000000 +0000 ++++ mpfr-2.4.2-b/tests/tsin_cos.c 2009-12-07 13:37:12.000000000 +0000 +@@ -382,23 +382,56 @@ + consistency (void) + { + mpfr_t x, s1, s2, c1, c2; ++ mp_exp_t emin, emax; + mp_rnd_t rnd; ++ unsigned int flags_sin, flags_cos, flags, flags_before, flags_ref; ++ int inex_sin, inex_cos, inex, inex_ref; + int i; + ++ emin = mpfr_get_emin (); ++ emax = mpfr_get_emax (); ++ + for (i = 0; i <= 10000; i++) + { + mpfr_init2 (x, MPFR_PREC_MIN + (randlimb () % 8)); + mpfr_inits2 (MPFR_PREC_MIN + (randlimb () % 8), s1, s2, c1, c2, + (mpfr_ptr) 0); +- tests_default_random (x, 256, -5, 50); +- rnd = RND_RAND (); +- mpfr_sin (s1, x, rnd); +- mpfr_cos (c1, x, rnd); +- mpfr_sin_cos (s2, c2, x, rnd); +- if (!(mpfr_equal_p (s1, s2) && mpfr_equal_p (c1, c2))) ++ if (i < 8 * GMP_RND_MAX) + { +- printf ("mpfr_sin_cos and mpfr_sin/mpfr_cos disagree on %s,\nx = ", +- mpfr_print_rnd_mode (rnd)); ++ int j = i / GMP_RND_MAX; ++ if (j & 1) ++ mpfr_set_emin (MPFR_EMIN_MIN); ++ mpfr_set_si (x, (j & 2) ? 1 : -1, GMP_RNDN); ++ mpfr_set_exp (x, mpfr_get_emin ()); ++ rnd = (mpfr_rnd_t) (i % GMP_RND_MAX); ++ flags_before = 0; ++ if (j & 4) ++ mpfr_set_emax (-17); ++ } ++ else ++ { ++ tests_default_random (x, 256, -5, 50); ++ rnd = RND_RAND (); ++ flags_before = (randlimb () & 1) ? ++ (unsigned int) (MPFR_FLAGS_ALL ^ MPFR_FLAGS_ERANGE) : ++ (unsigned int) 0; ++ } ++ __gmpfr_flags = flags_before; ++ inex_sin = mpfr_sin (s1, x, rnd); ++ flags_sin = __gmpfr_flags; ++ __gmpfr_flags = flags_before; ++ inex_cos = mpfr_cos (c1, x, rnd); ++ flags_cos = __gmpfr_flags; ++ __gmpfr_flags = flags_before; ++ inex = !!mpfr_sin_cos (s2, c2, x, rnd); ++ flags = __gmpfr_flags; ++ inex_ref = inex_sin || inex_cos; ++ flags_ref = flags_sin | flags_cos; ++ if (!(mpfr_equal_p (s1, s2) && mpfr_equal_p (c1, c2)) || ++ inex != inex_ref || flags != flags_ref) ++ { ++ printf ("mpfr_sin_cos and mpfr_sin/mpfr_cos disagree on %s," ++ " i = %d\nx = ", mpfr_print_rnd_mode (rnd), i); + mpfr_dump (x); + printf ("s1 = "); + mpfr_dump (s1); +@@ -408,9 +441,16 @@ + mpfr_dump (c1); + printf ("c2 = "); + mpfr_dump (c2); ++ printf ("inex_sin = %d, inex_cos = %d, inex = %d (expected %d)\n", ++ inex_sin, inex_cos, inex, inex_ref); ++ printf ("flags_sin = 0x%x, flags_cos = 0x%x, " ++ "flags = 0x%x (expected 0x%x)\n", ++ flags_sin, flags_cos, flags, flags_ref); + exit (1); + } + mpfr_clears (x, s1, s2, c1, c2, (mpfr_ptr) 0); ++ mpfr_set_emin (emin); ++ mpfr_set_emax (emax); + } + } + +diff -Naurd mpfr-2.4.2-a/version.c mpfr-2.4.2-b/version.c +--- mpfr-2.4.2-a/version.c 2009-11-30 02:43:08.000000000 +0000 ++++ mpfr-2.4.2-b/version.c 2009-12-07 13:37:12.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "2.4.2"; ++ return "2.4.2-p1"; + } diff --git a/pkgs/development/libraries/mpfr/patch02.patch b/pkgs/development/libraries/mpfr/patch02.patch new file mode 100644 index 000000000000..bc2f267acc05 --- /dev/null +++ b/pkgs/development/libraries/mpfr/patch02.patch @@ -0,0 +1,75 @@ +From http://www.mpfr.org/mpfr-2.4.2/: +Due to a change in GCC 4.4 internals for MIPS, the MPFR build fails on MIPS processors with GCC 4.4 and later. The longlong.h patch (written by Aurélien Jarno) solves this problem. +[Changeset: 6638] + +diff -Naurd mpfr-2.4.2-a/PATCHES mpfr-2.4.2-b/PATCHES +--- mpfr-2.4.2-a/PATCHES 2009-12-18 12:03:30.000000000 +0000 ++++ mpfr-2.4.2-b/PATCHES 2009-12-18 12:05:19.000000000 +0000 +@@ -0,0 +1 @@ ++longlong.h +diff -Naurd mpfr-2.4.2-a/VERSION mpfr-2.4.2-b/VERSION +--- mpfr-2.4.2-a/VERSION 2009-12-07 13:37:12.000000000 +0000 ++++ mpfr-2.4.2-b/VERSION 2009-12-18 12:05:09.000000000 +0000 +@@ -1 +1 @@ +-2.4.2-p1 ++2.4.2-p2 +diff -Naurd mpfr-2.4.2-a/mpfr-longlong.h mpfr-2.4.2-b/mpfr-longlong.h +--- mpfr-2.4.2-a/mpfr-longlong.h 2009-11-30 02:43:08.000000000 +0000 ++++ mpfr-2.4.2-b/mpfr-longlong.h 2009-12-18 12:04:29.000000000 +0000 +@@ -1011,7 +1011,15 @@ + #endif /* __m88000__ */ + + #if defined (__mips) && W_TYPE_SIZE == 32 +-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 ++#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) ++#define umul_ppmm(w1, w0, u, v) \ ++ do { \ ++ UDItype _r; \ ++ _r = (UDItype) u * v; \ ++ (w1) = _r >> 32; \ ++ (w0) = (USItype) _r; \ ++ } while (0) ++#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) + #else +@@ -1024,7 +1032,16 @@ + #endif /* __mips */ + + #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 +-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 ++#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) ++typedef unsigned int UTItype __attribute__ ((mode (TI))); ++#define umul_ppmm(w1, w0, u, v) \ ++ do { \ ++ UTItype _r; \ ++ _r = (UTItype) u * v; \ ++ (w1) = _r >> 64; \ ++ (w0) = (UDItype) _r; \ ++ } while (0) ++#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 + #define umul_ppmm(w1, w0, u, v) \ + __asm__ ("dmultu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) + #else +diff -Naurd mpfr-2.4.2-a/mpfr.h mpfr-2.4.2-b/mpfr.h +--- mpfr-2.4.2-a/mpfr.h 2009-12-07 13:37:12.000000000 +0000 ++++ mpfr-2.4.2-b/mpfr.h 2009-12-18 12:05:09.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 2 + #define MPFR_VERSION_MINOR 4 + #define MPFR_VERSION_PATCHLEVEL 2 +-#define MPFR_VERSION_STRING "2.4.2-p1" ++#define MPFR_VERSION_STRING "2.4.2-p2" + + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-2.4.2-a/version.c mpfr-2.4.2-b/version.c +--- mpfr-2.4.2-a/version.c 2009-12-07 13:37:12.000000000 +0000 ++++ mpfr-2.4.2-b/version.c 2009-12-18 12:05:09.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +- return "2.4.2-p1"; ++ return "2.4.2-p2"; + } From 878792cadeddf1127542ec15920c0b4ff13e1a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:03:53 +0000 Subject: [PATCH 053/282] Patch (already upstream on glibc master) for configure in glibc to get the gnu89-inline gcc flag right svn path=/nixpkgs/branches/stdenv-updates/; revision=22844 --- .../libraries/glibc-2.11/gnu89-inline.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 pkgs/development/libraries/glibc-2.11/gnu89-inline.patch diff --git a/pkgs/development/libraries/glibc-2.11/gnu89-inline.patch b/pkgs/development/libraries/glibc-2.11/gnu89-inline.patch new file mode 100644 index 000000000000..16d8f914a192 --- /dev/null +++ b/pkgs/development/libraries/glibc-2.11/gnu89-inline.patch @@ -0,0 +1,26 @@ +diff --git a/configure b/configure +index ce76653..fba6de2 100755 +--- a/configure ++++ b/configure +@@ -6891,7 +6891,7 @@ fi + $as_echo "$libc_cv_gnu89_inline" >&6; } + if test $libc_cv_gnu89_inline = yes; then + libc_cv_gnu89_inline=-fgnu89-inline +-else ++elif test $libc_cv_gnu89_inline = no; then + libc_cv_gnu89_inline= + fi + +diff --git a/configure.in b/configure.in +index 182c683..b867371 100644 +--- a/configure.in ++++ b/configure.in +@@ -1777,7 +1777,7 @@ fi + rm -f conftest*]) + if test $libc_cv_gnu89_inline = yes; then + libc_cv_gnu89_inline=-fgnu89-inline +-else ++elif test $libc_cv_gnu89_inline = no; then + libc_cv_gnu89_inline= + fi + AC_SUBST(libc_cv_gnu89_inline) From 212161482ff18471ecb51823060505ffa9291605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:05:32 +0000 Subject: [PATCH 054/282] Setting the proper kernel headers in platforms svn path=/nixpkgs/branches/stdenv-updates/; revision=22845 --- pkgs/top-level/platforms.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index 6f0584e30d52..a72f264b4fc0 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -157,7 +157,7 @@ rec { name = "fuloong2f_n32"; kernelMajor = "2.6"; kernelHeadersBaseConfig = "fuloong2e_defconfig"; - kernelBaseConfig = "fuloong2e_defconfig"; + kernelBaseConfig = "fuloong2f_defconfig"; kernelArch = "mips"; kernelAutoModules = false; kernelExtraConfig = From fbad1b3a56c4885702739d89b9b80397c5f6d512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:06:45 +0000 Subject: [PATCH 055/282] Trying to make busybox more configurable svn path=/nixpkgs/branches/stdenv-updates/; revision=22846 --- pkgs/misc/busybox/default.nix | 57 ++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/pkgs/misc/busybox/default.nix b/pkgs/misc/busybox/default.nix index 1d190cf661d2..c3afdb4b71f1 100644 --- a/pkgs/misc/busybox/default.nix +++ b/pkgs/misc/busybox/default.nix @@ -1,12 +1,37 @@ -{stdenv, fetchurl, enableStatic ? false}: +{stdenv, fetchurl, enableStatic ? false, extraConfig ? ""}: let - basicConfigure = '' - make defconfig - sed -i 's,.*CONFIG_PREFIX.*,CONFIG_PREFIX="'$out'",' .config - sed -i 's,.*CONFIG_INSTALL_NO_USR.*,CONFIG_INSTALL_NO_USR=y,' .config - '' + - (if enableStatic then '' + configParser = '' + function parseconfig { + set -x + while read LINE; do + NAME=`cut -d \ -f 1 $LINE` + OPTION=`cut -d \ -f 2 $LINE` + + if test -z "$NAME"; then + continue + fi + + if test "$NAME" == "CLEAR"; then + echo > .config + fi + + sed -i /^$NAME=/d .config + + if test "$OPTION" != n; then + echo "$NAME=$OPTION" >> .config + fi + done + set +x + } + ''; + + nixConfig = '' + CONFIG_PREFIX "$out" + CONFIG_INSTALL_NO_USR n + ''; + + staticConfig = (if enableStatic then '' sed -i 's,.*CONFIG_STATIC.*,CONFIG_STATIC=y,' .config '' else ""); @@ -20,14 +45,24 @@ stdenv.mkDerivation { sha256 = "1n738zk01yi2sjrx2y36hpzxbslas8b91vzykcifr0p1j7ym0lim"; }; - configurePhase = basicConfigure; + configurePhase = '' + set -x + make defconfig + ${configParser} + cat << EOF | parseconfig + ${extraConfig} + ${nixConfig} + $extraCrossConfig + EOF + set +x + ''; crossAttrs = { - configurePhase = basicConfigure + '' - sed -i 's,.*CONFIG_CROSS_COMPILER_PREFIX.*,CONFIG_CROSS_COMPILER_PREFIX="'$crossConfig-'",' .config + extraCrossConfig = '' + CONFIG_CROSS_COMPILER_PREFIX "$crossConfig-" '' + (if (stdenv.cross.platform.kernelMajor == "2.4") then '' - sed -i 's,.*CONFIG_IONICE.*,CONFIG_IONICE=n,' .config + CONFIG_IONICE n '' else ""); }; } From 2954596106c5d6e96c9f121573a05baf4bc8630d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:17:29 +0000 Subject: [PATCH 056/282] Making gnugrep cross-build for mips svn path=/nixpkgs/branches/stdenv-updates/; revision=22847 --- pkgs/tools/text/gnugrep/default.nix | 2 ++ pkgs/tools/text/gnugrep/malloc.patch | 15 +++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 pkgs/tools/text/gnugrep/malloc.patch diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 17d69404e0c7..1cd73a8814ce 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -5,6 +5,8 @@ let version = "2.6.3"; in stdenv.mkDerivation { name = "gnugrep-${version}"; + patches = [ ./malloc.patch ]; + src = fetchurl { url = "mirror://gnu/grep/grep-${version}.tar.gz"; sha256 = "0rnnljzcpb2sl5zabww7gbzk9r6kp8kycsqrf909d6jdak8yah53"; diff --git a/pkgs/tools/text/gnugrep/malloc.patch b/pkgs/tools/text/gnugrep/malloc.patch new file mode 100644 index 000000000000..b645c64a09e1 --- /dev/null +++ b/pkgs/tools/text/gnugrep/malloc.patch @@ -0,0 +1,15 @@ +http://www.mail-archive.com/bug-grep@gnu.org/msg02537.html + +diff --git a/src/kwset.c b/src/kwset.c +index 050562e..995be79 100644 +--- a/src/kwset.c ++++ b/src/kwset.c +@@ -40,7 +40,7 @@ + #ifdef GREP + # include "xalloc.h" + # undef malloc +-# define malloc(s) xmalloc(s) ++# define malloc xmalloc + #endif + + #define NCHAR (UCHAR_MAX + 1) From da3ba13fb57d4c9415f42906772c180f7ac9486c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:21:26 +0000 Subject: [PATCH 057/282] Trying to make gcc 4.5 cross-buildable svn path=/nixpkgs/branches/stdenv-updates/; revision=22848 --- pkgs/development/compilers/gcc-4.5/builder.sh | 55 ++++++++++++++++--- .../development/compilers/gcc-4.5/default.nix | 50 ++++++++++++++++- .../libraries/cloog-ppl/default.nix | 4 ++ .../development/libraries/gettext/default.nix | 2 + pkgs/development/libraries/ppl/default.nix | 2 +- pkgs/os-specific/linux/klibc/default.nix | 15 ++--- pkgs/os-specific/linux/uclibc/default.nix | 4 ++ pkgs/top-level/all-packages.nix | 2 +- 8 files changed, 114 insertions(+), 20 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.5/builder.sh b/pkgs/development/compilers/gcc-4.5/builder.sh index 6c3ced85d754..adcb03ef4dd7 100644 --- a/pkgs/development/compilers/gcc-4.5/builder.sh +++ b/pkgs/development/compilers/gcc-4.5/builder.sh @@ -54,11 +54,52 @@ if test "$noSysDirs" = "1"; then EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,$i" done - if test -z "$targetConfig"; then - EXTRA_TARGET_CFLAGS="$EXTRA_FLAGS" - EXTRA_TARGET_LDFLAGS="$EXTRA_LDFLAGS" + if test -n "$targetConfig"; then + # Cross-compiling, we need gcc not to read ./specs in order to build + # the g++ compiler (after the specs for the cross-gcc are created). + # Having LIBRARY_PATH= makes gcc read the specs from ., and the build + # breaks. Having this variable comes from the default.nix code to bring + # gcj in. + unset LIBRARY_PATH + unset CPATH + if test -z "$crossStageStatic"; then + EXTRA_TARGET_CFLAGS="-g0 -O2 -B${libcCross}/lib -idirafter ${libcCross}/include" + EXTRA_TARGET_LDFLAGS="-Wl,-L${libcCross}/lib" + fi + else + if test -z "$NIX_GCC_CROSS"; then + EXTRA_TARGET_CFLAGS="$EXTRA_FLAGS" + EXTRA_TARGET_LDFLAGS="$EXTRA_LDFLAGS" + else + # This the case of cross-building the gcc. + # We need special flags for the target, different than those of the build + # Assertion: + test -e $NIX_GCC_CROSS/nix-support/orig-libc + + # Figure out what extra flags to pass to the gcc compilers + # being generated to make sure that they use our glibc. + extraFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-cflags)" + extraLDFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-ldflags) $(cat $NIX_GCC_CROSS/nix-support/libc-ldflags-before)" + + # 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). + NIX_FIXINC_DUMMY_CROSS=$(cat $NIX_GCC_CROSS/nix-support/orig-libc)/include + + # The path to the Glibc binaries such as `crti.o'. + glibc_libdir="$(cat $NIX_GCC_CROSS/nix-support/orig-libc)/lib" + + extraFlags="-g0 -O2 -I$NIX_FIXINC_DUMMY_CROSS $extraFlags" + extraLDFlags="--strip-debug -L$glibc_libdir -rpath $glibc_libdir $extraLDFlags" + + EXTRA_TARGET_CFLAGS="$extraFlags" + for i in $extraLDFlags; do + EXTRA_TARGET_LDFLAGS="$EXTRA_TARGET_LDFLAGS -Wl,$i" + done + fi fi + # CFLAGS_FOR_TARGET are needed for the libstdc++ configure script to find # the startfiles. # FLAGS_FOR_TARGET are needed for the target libraries to receive the -Bxxx @@ -68,17 +109,17 @@ if test "$noSysDirs" = "1"; then NATIVE_SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ CFLAGS_FOR_BUILD="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ - CFLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS" \ + CFLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ FLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ LDFLAGS_FOR_BUILD="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ - LDFLAGS_FOR_TARGET="$EXTRA_TARGET_LDFLAGS" \ + LDFLAGS_FOR_TARGET="$EXTRA_TARGET_LDFLAGS $EXTRA_TARGET_LDFLAGS" \ ) if test -z "$targetConfig"; then makeFlagsArray=( \ "${makeFlagsArray[@]}" \ BOOT_CFLAGS="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ - BOOT_LDFLAGS="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ + BOOT_LDFLAGS="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ ) fi @@ -161,7 +202,7 @@ postInstall() { } -if test -z "$targetConfig"; then +if test -z "$targetConfig" && test -z "$crossConfig"; then if test -z "$profiledCompiler"; then buildFlags="bootstrap $buildFlags" else diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index 0bdd0dd900a3..4c3fd8079afe 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -169,8 +169,9 @@ stdenv.mkDerivation ({ inherit noSysDirs profiledCompiler staticCompiler langJava crossStageStatic libcCross crossMingw; - buildInputs = [ texinfo gmp mpfr mpc libelf gettext which ] - ++ (optional (perl != null) perl) + buildNativeInputs = [ texinfo which ] + ++ optional (perl != null) perl; + buildInputs = [ gmp mpfr mpc libelf gettext ] ++ (optional (ppl != null) ppl) ++ (optional (cloogppl != null) cloogppl) ++ (optionals langTreelang [bison flex]) @@ -225,6 +226,51 @@ stdenv.mkDerivation ({ targetConfig = if (cross != null) then cross.config else null; + crossAttrs = { + AR = "${stdenv.cross.config}-ar"; + LD = "${stdenv.cross.config}-ld"; + CC = "${stdenv.cross.config}-gcc"; + CXX = "${stdenv.cross.config}-gcc"; + AR_FOR_TARGET = "${stdenv.cross.config}-ar"; + LD_FOR_TARGET = "${stdenv.cross.config}-ld"; + CC_FOR_TARGET = "${stdenv.cross.config}-gcc"; + NM_FOR_TARGET = "${stdenv.cross.config}-nm"; + CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; + # If we are making a cross compiler, cross != null + NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; + configureFlags = " + ${if enableMultilib then "" else "--disable-multilib"} + ${if enableShared then "" else "--disable-shared"} + ${if ppl != null then "--with-ppl=${ppl.hostDrv}" else ""} + ${if cloogppl != null then "--with-cloog=${cloogppl.hostDrv}" else ""} + ${if langJava then "--with-ecj-jar=${javaEcj.hostDrv}" else ""} + ${if javaAwtGtk then "--enable-java-awt=gtk" else ""} + ${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.hostDrv}" else ""} + --with-gmp=${gmp.hostDrv} + --with-mpfr=${mpfr.hostDrv} + --disable-libstdcxx-pch + --without-included-gettext + --with-system-zlib + --enable-languages=${ + concatStrings (intersperse "," + ( optional langC "c" + ++ optional langCC "c++" + ++ optional langFortran "fortran" + ++ optional langJava "java" + ++ optional langTreelang "treelang" + ++ optional langAda "ada" + ++ optional langVhdl "vhdl" + ) + ) + } + ${if langAda then " --enable-libada" else ""} + ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} + ${if cross != null then crossConfigureFlags else ""} + --target=${stdenv.cross.config} + "; + }; + + # Needed for the cross compilation to work AR = "ar"; LD = "ld"; diff --git a/pkgs/development/libraries/cloog-ppl/default.nix b/pkgs/development/libraries/cloog-ppl/default.nix index b1372d79cb50..5738f76682a8 100644 --- a/pkgs/development/libraries/cloog-ppl/default.nix +++ b/pkgs/development/libraries/cloog-ppl/default.nix @@ -12,6 +12,10 @@ stdenv.mkDerivation rec { configureFlags = "--with-ppl=${ppl}"; + crossAttrs = { + configureFlags = "--with-ppl=${ppl.hostDrv}"; + }; + doCheck = true; meta = { diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index f7f0cb0018ca..ddcfc327a9ee 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -26,6 +26,8 @@ stdenv.mkDerivation (rec { crossAttrs = { buildInputs = stdenv.lib.optional (stdenv.gccCross.libc ? libiconv) stdenv.gccCross.libc.libiconv.hostDrv; + # Gettext fails to guess the cross compiler + configureFlags = "CXX=${stdenv.cross.config}-g++"; }; meta = { diff --git a/pkgs/development/libraries/ppl/default.nix b/pkgs/development/libraries/ppl/default.nix index 9b52958b3e5e..cbe6ee21ecd6 100644 --- a/pkgs/development/libraries/ppl/default.nix +++ b/pkgs/development/libraries/ppl/default.nix @@ -9,7 +9,7 @@ let version = "0.10.2"; in sha256 = "0lly44sac4jd72klnhhil3wha15vak76r6gy88sh0zjsaww9hf6h"; }; - buildInputs = [ perl gnum4 ]; + buildNativeInputs = [ perl gnum4 ]; propagatedBuildInputs = [ gmpxx ]; # Beware! It took ~6 hours to compile PPL and run its tests on a 1.2 GHz diff --git a/pkgs/os-specific/linux/klibc/default.nix b/pkgs/os-specific/linux/klibc/default.nix index c3f5db58303f..5a27816472db 100644 --- a/pkgs/os-specific/linux/klibc/default.nix +++ b/pkgs/os-specific/linux/klibc/default.nix @@ -3,7 +3,7 @@ assert stdenv.isLinux; let - version = "1.5.15"; + version = "1.5.18"; baseMakeFlags = ["V=1" "prefix=$out" "SHLIBDIR=$out/lib"]; in @@ -11,8 +11,8 @@ stdenv.mkDerivation { name = "klibc-${version}"; src = fetchurl { - url = "mirror://kernel/linux/libs/klibc/klibc-${version}.tar.bz2"; - sha256 = "1x401wmjca6zkyikf9xz45b3wb1hnj0m2s9in1sg6xdhi3pk8lwb"; + url = "mirror://kernel/linux/libs/klibc/1.5/klibc-${version}.tar.bz2"; + sha256 = "0ik4ddkfzjrrhpb50i31f2zihqlcnm82yqnl5ci59wx56j5ly474"; }; makeFlags = baseMakeFlags; @@ -20,17 +20,14 @@ stdenv.mkDerivation { inherit linuxHeaders; crossAttrs = { - name = "klibc-1.5.17"; - src = fetchurl { - url = "mirror://kernel/linux/libs/klibc/Testing/klibc-1.5.17.tar.bz2"; - sha256 = "1jmiszf9pdlzj9f72nkv50d7aqrzz12hrmw792xnd2lmn5nrfyx6"; - }; - makeFlags = baseMakeFlags ++ [ "CROSS_COMPILE=${stdenv.cross.config}-" "KLIBCARCH=${stdenv.cross.arch}" ]; patchPhase = '' + sed -i 's/-fno-pic -mno-abicalls/& -mabi=32/' usr/klibc/arch/mips/MCONFIG sed -i /KLIBCKERNELSRC/d scripts/Kbuild.install + # Wrong check for __mips64 in klibc + sed -i s/__mips64__/__mips64/ usr/include/fcntl.h ''; linuxHeaders = linuxHeadersCross; diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix index 445a7f90fb62..5c941f064109 100644 --- a/pkgs/os-specific/linux/uclibc/default.nix +++ b/pkgs/os-specific/linux/uclibc/default.nix @@ -42,6 +42,10 @@ stdenv.mkDerivation { -e 's@.*UCLIBC_HAS_RPC.*@UCLIBC_HAS_RPC=y@' \ -e 's@.*DO_C99_MATH.*@DO_C99_MATH=y@' \ -e 's@.*UCLIBC_HAS_PROGRAM_INVOCATION_NAME.*@UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y@' \ + -e 's@.*CONFIG_MIPS_ISA_1.*@#CONFIG_MIPS_ISA_1=y@' \ + -e 's@.*CONFIG_MIPS_ISA_3.*@CONFIG_MIPS_ISA_3=y@' \ + -e 's@.*CONFIG_MIPS_O32_ABI.*@#CONFIG_MIPS_O32_ABI=y@' \ + -e 's@.*CONFIG_MIPS_N32_ABI.*@CONFIG_MIPS_N32_ABI=y@' \ ${configArmEABI} \ ${configBigEndian} \ -i .config diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 68f0b6ed74cb..56b361f6e807 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -187,7 +187,7 @@ let gccCrossStageFinal; stdenv = - if bootStdenv != null then bootStdenv else + if bootStdenv != null then (bootStdenv // {inherit platform;}) else let changer = getConfig ["replaceStdenv"] null; in if changer != null then changer { From 40405d03ac383c8c6e45dec59eaad307d03e4c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:22:51 +0000 Subject: [PATCH 058/282] Trying to add the fuloong2f for bootstrap-files. It bootstraps fine (boostrap-files cross-built) svn path=/nixpkgs/branches/stdenv-updates/; revision=22849 --- pkgs/build-support/gcc-wrapper/default.nix | 1 + pkgs/stdenv/default.nix | 1 + pkgs/stdenv/linux/bootstrap/loongson2f/bzip2 | Bin 0 -> 146364 bytes pkgs/stdenv/linux/bootstrap/loongson2f/cpio | Bin 0 -> 88564 bytes .../linux/bootstrap/loongson2f/curl.bz2 | Bin 0 -> 172614 bytes .../linux/bootstrap/loongson2f/default.nix | 13 ++++++++ pkgs/stdenv/linux/bootstrap/loongson2f/ln | Bin 0 -> 59552 bytes pkgs/stdenv/linux/bootstrap/loongson2f/mkdir | Bin 0 -> 59548 bytes pkgs/stdenv/linux/bootstrap/loongson2f/sh | Bin 0 -> 155016 bytes pkgs/stdenv/linux/default.nix | 1 + .../linux/scripts/unpack-bootstrap-tools.sh | 30 ++++++++++++------ 11 files changed, 36 insertions(+), 10 deletions(-) create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/bzip2 create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/cpio create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/curl.bz2 create mode 100644 pkgs/stdenv/linux/bootstrap/loongson2f/default.nix create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/ln create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/mkdir create mode 100755 pkgs/stdenv/linux/bootstrap/loongson2f/sh diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix index c97fd4eb495d..2c7ef16674ba 100644 --- a/pkgs/build-support/gcc-wrapper/default.nix +++ b/pkgs/build-support/gcc-wrapper/default.nix @@ -67,6 +67,7 @@ stdenv.mkDerivation { if stdenv.system == "x86_64-linux" then "ld-linux-x86-64.so.2" else if stdenv.system == "armv5tel-linux" then "ld-linux.so.3" else if stdenv.system == "powerpc-linux" then "ld.so.1" else + if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "ld.so.1" else abort "don't know the name of the dynamic linker for this platform") else ""; } diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 40acb8cfece4..037a60da7e68 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -55,6 +55,7 @@ rec { if stdenvType == "i686-linux" then stdenvLinux else if stdenvType == "x86_64-linux" then stdenvLinux else if stdenvType == "armv5tel-linux" then stdenvLinux else + if stdenvType == "ict_loongson-2_v0.3_fpu_v0.1-linux" then stdenvLinux else if stdenvType == "powerpc-linux" then /* stdenvLinux */ stdenvNative else if stdenvType == "i686-mingw" then stdenvMinGW else if stdenvType == "i686-darwin" then stdenvNix else diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/bzip2 b/pkgs/stdenv/linux/bootstrap/loongson2f/bzip2 new file mode 100755 index 0000000000000000000000000000000000000000..f86964d119c2807748d279f2c550513e9149e6fa GIT binary patch literal 146364 zcmb<-^>JflWMqH=CI$`$5YK^;LBNE8fnkmX6N5U#LIo2B1qK!d4F(YgVUW^-9SjT% zI~W)QKv;r-fdPbB7#J8h7#P6%L5dg{7z99g2|E)52(y9(8Nu=({t|X(0T2!lVqkFb zU|?W_$_G9zNdYs_2zCYr29O;f;cx5=n?N)&{xFqU;KTpD>I@8f{0u9V80x~uqrp{59X_(m`2^GgCuh1~FKfDN{kAq?VeFla-_c<6I zFbgn%?10#;%kY31uJ;7OY~3FW3||^s`WYCO_Omc7Q~vOuQAOp&Lgp7u?fqLCJNk7! z92j&17BF)(&Fo*42(jb;e{gs~42F^y!2a3rpIJb_Mgin60T~+yDW*vp4Ez6s{2;-w z`M&_ervLH`4k8>38~-y42-`3V2-z?T2->V+FIL;Y9;D_XrPQZ9A(*Lof)K<1|3PZn z5BUWENnx0htLh+e2!p3bO!<%@+2i9uAPY#+m(W3<|=a zIM~A8q5_H!4h98yT!8o>IrR8pXIPv83ParpP}*Fi&d#t_T{mF?^Z)-V)pY|L7#J89 z=P)oV{;w;sfKk^1y1-uz_K^cl+!2$*bj|qwv%?u#< z|Nos-v^3Hfe*Iq{!ocui0m!eQum!pL5Ca2;Zo~lwkY8cx1d&EI{uf}_@L#u~fkCHn zX8*ScPsmB0fYgA@i8#Gf1*8Y01|)COoCH z!ob3Sl*bVH3gkCkg9YI5I?yz;pMiy4rQ+;Tm5;t4Ke#~s>fFP^kRZXxz^nrD>#sP7 zTn!_rxOQFx@~Of9z3QMaH~=kURxoS?hus3Gn@=$8|No`AsecE<=KmWQHvMN{aOx3b za29ybII*9BL1_{fgM$DlTz#5AVe8Su%D^D`0L=F6(Gt*L)Ms!Iv1xAV2dM#ty_UoT z24-m3gZ#RZTa2Dh~mmZK`@*#HiY-42L0EG)A zzp&cC^2vhpOF?BRIIcndfw&2xHvy_wgpq*<6b4O<3_OhBJi>rd&PXt9{IA>5zyK;^ zKxrFP&af~vh=9_!1``8E04UBH92i&_nEL+yhm;3=Obk4_3ZVL&X&t0IQDDMWo^UX* zsC6cs>Co0cgG3@rx2AUOq4d&vou_8J^CSQr#FQW+Q+mQGP%SZV+&=RtKZsN8?^ zzd-Jl!6b|z4{s;J=1ps2yj1gcLM7}_RiDWo&}`VT7Wmn~2fSkC0q*xJv);IIG`KMV{m zeGCjv>p=cE|Gz;5 z9^|wJDv#0AtHlM}>2(X#4CHkB;QwBAP#Z-68n+w_8^CE@f?@yvIn5LL85o%Rgcy=g z%7P1*5&366)J&MWKQV)08x^_!0p&-Kd7yd-WFE*|28Mv1Gg!>La1&xCC{Kd&3Mei?<+KF2u2*1&wL3uW z1-S+0X5{dF(J-?=*+-CN!M&v_pthrS0}}(NJbvZ{YHK(!NHFZbuPea71adbA*xU!q zFn60UH1&YY*3|%&D|`Nf+U%h45CqjTQ|G7)Ff{c@Ff{jQOE@z~fZMXppgc4|fMM~P zJV(EjW zB~ZM>%2SZJurOp`fVB5PaRn-8KxJ!!lz!Fg^}mA1mj4nWoBwl&Z2TV~vhDl7KtYxOkuBf-7#u`EYJUZS zw6(#NY&KMT>yKkc)vurKfRb|EwU8de@!|hArx9%;0*1$(X@GLCR3~jy=U~{X&cm=p{Y=x$ei4Qx>LB%u3~Va877Lhl9S$(*dMsed5D{e2 z4QK%C{q>(&g^R&i;O~EC6*dNEf$#sBRX7-&1wd`nX-o_}9`{>RK=~V1=fL8_09t;4 z>|tR**sH4mb0Y%-vYp;YcHaE&AOg|{^6yNLUlkmfUjBCwk$}{9OnU+aS^obQRC)40 zP~Z$W?45c#8JvVn8fW&)g2GC{f$8pl2XMbQ2^_8t;QaZ|6B3_ynwtBs{tpyjU`SX4 zvI7*R^?{(cNLX|Jzk>)UFMkHBWncp3p;P~zLH&IOP&_6wI7l!sEa_)vXb@pxSk|A* za6kam2IpW{+|QK8#=zvm#=yg{yq`&kje+SL3j@;;76zs&76y5SHH(=9glw1uIBet? zRxXxcSgQV?p~XO!VbNlyIA#W>5M~C31q)o5yqFo7%GenuJa@Rpl*7)zl*G<3<2lpS z{|w0nx&jLrWEhq$R$$nuF3qrWu@u9O#gYu`7fUcKS**^mZm}A}+Qq62YZj|8EMKh5 zuzIl)!>YxK3@aDAvoLTdFf3jSiYEpJmkA6KEiRz?H&LR&O@ddU=+}QGF(w8jH--%h zTtIc92E$5qko}=73>+Z4A^MyrFi14R_053j69wthRZw8`VA!C(gMoqPgYe4#pfm+y zgTfV*-kmp?xPi)+3D2Fb=>{+`fyxk$`%6_m2(P>kYMU|%Fxf14?r;S}I|?YeF>O$A zYhG&R#>`;i#;`%ng@HlcWd%r{L&5E%7bu=ITs%bf-**t%bKgQ_`+WnEZTB@qw%%6| z*>Yb(Wb=IikxlnGL^j@M5ZQ1)LS)+ZyLH;hdu~)r99a63&sBitRyP^SHu5_sH|KFg#4_u}csBizD zp}y^Zg!-2M0qUFod#G>v@1VZ%zlHjS|1SdsSvVLLtWN`vW324wU|6KCJA;A2rFlyK z4B-vx0t}nfmo!f6|NUQ3g@r*}g@<9Ex{CUu^*P`&U;(qP#sVe=hPFOk2L`4D5s=@H zPXg5y3hIm2GcYXb=LeM+jWhcXurP2iG8C(U#!Eo%W`XH9a9~nUU)sM`RFI`Zm|X>= z=iC24aQ!UOIJ2LHVTpQ$s2~eS4Ff|{pAiG3{{T|Q$>5~I&fu)W!jK@sB*1I~3NKKe zH+ayZ(jdUZVDKziMNuG$0n}&WU;wpQ85myu4;Nto=hFqux&{ZBLFQ_S39_iDFYgDL zIT0KVOZzz)7D(_gEbG^W<}5{pLkx-%OiZA3$-vMu;rD-65e9~o1t2%-DlB03hr4l6 ze*@TzmHpfQD~N)^2~u`0U`m3DZ)9QM0EvUr94M_dG`074+()!q62NK5t>+>OsGqo~ zAHB>1rCE?)L1_b&x5Yu_V*>-jf%`2g3&G`tdryZtxc+5oP~UgILVeHu0`=|pGt{@; zPf*`_KSF)W{Q&jN_dV1%-FHymc;7;O19-e>g8E+d4sajNsfU?ikr1eyx#SlF@B%ue5kUrt_{|*9-3<4_XZc%1nQ{i~fq5>(e+alc1e8}C@p3{>mTHN3d)DN3lRMrP+rvSSik_vvmkeY@+~aSg7P#h&w}#n zUw=q`y$)>y{PYL;p@Hc#G;Q&K^6v&v{+*7Lf9Li8{x7V;!XT;w%DbREuAz>chZ~p} z7@mRia6Y(=aD1{4gM$Dp4};nlpme^I6_kgsse$sZFheOgXMo&$1MCI`rcL1beo?;| zm}X!=&*NJ}V0nCTzX3xrSpVDq3E;f`_P>J!C@t$MIDp#~pmy~;Q2baZFl}aK-~ibJ zvR92E6rO)Uc~?b!S-+L2Ad3bx|K0?L1L^rUUIbRgEb2c2He+S~4wU@cz+?#(U&IQ@ zzXu?7`vhSI2a%Y@nf;(J0+m-jNM_+Gqck2u$|xT!Wz-dLI&5H4W&`DakgpjSVBrF4 zZ^DmO#_oHgM-MK=1Khw3{HLQ3`*cO%p0(r0+Sg7W*bIVp@Hd)JE;95prXeR zAOJEe0IFV#0n$b)f%4U$_Jhn;WKaT^H+$Vd=~;mZ)CQ7c2mrT%7#JS)f$|=xjminu zlduLoufy_TVgRTPBES6eW`oqfure35Y+$5M}jO50HI`{xf>N6j7cwf&JGC z_Fn@NtX;?q^>;m3Tmf9pUig1V2vj!0%Gxt1Wi7-FpgQ9Rk~=O#-4V$KDQ{tVS;6Cf z6Z%1Y9#B6S*6sz>J)kfI`DX^$9JangU^5_nru*(7eSpoGw+>QsdeO(g)Hn2-aiVr#vHx3DoCNU|>?^?!m8 zBZGh%s1FY6i{qMKQTV@C{Q`81;{bH*b_aCq_6EcL|DZ9{6AYXFe`%iBU&GKK02<=~ z`5zSiUz#WNM=&z*Bs>JAC#60n24%++`?J{@I3yl{{0JGJ1^ET!?+mcNo%&Ay4*=Hz9ZeJZ zL4Bkveju}0`aGIv_DhC<$^!?6a0UkvklPp-1p8dT<3~(=JPZyJATdzfg3@tAQ(J$; zqopbWkaXO43e?pB&5<_G><Cy)piv_uB5(}tb?yx4D!9kz}T#hsKaWFVYfcyzc z+pxA3GXtAS!lM=yZ*aPC@43OS|NaGrJ@-#AY`TAdVdMQB(D9Q8&~YD-UQoU7@CcGG z7#NiMKy9a{|4HC52FZDV%KoMnaNO%^Ffj43gUWfQK2S*y3VTr4po^o2eKu0q?*XS_ zmmW}=016LKSb+Qp3j2bGOI1MSv95yy17wWcx##@<1R0P&^1${6faf7*G*0NZX`Tp< zw;kYkVd>ikE(6s17#P%$#?4v!K0I8ivK>@jSsZ|yxeID0D9u95h0Je&_zVor3qbba z3pYr(Bg(c3U^hUnA;Rc^mnGdxKVh_aqpz?>2l~tvIkxd0w2Eob;(6|n$JO!0S zPa0?TYq)~O_FKT?#{d5_setM=1MvJRs|_gJ8r%d~G9H1(mmCCi8ywKa%MkOcpmOR@ z!_58_E}%53!1M-`&cXB53=9GP_o^>|mJ6VAa0PVUSf^=b{|gsL{sfiHpzs0b(+|l8 z3=PQ^+7iqRE5PG(2@DIM^WGa6_NwDE?+VmB(3~G=%vpkAaX)Ad6q`Aqab0Es#5_cT z6v&^DIc?A!&tIrnpfVYKZWmT2gVHI(|GnxTp#IwdE%#0^Z2qr1qk-WExZIoA|AJxr z{|5}){@-BO`u_sMmj4GBHvQkgu;G6KxExei^rd-1KNAC!3TSNCpCL(rnSn_~nITC4 zlwV>Pk_15gP(}tJ6)uJ%a9a^p?%6QH`hZM*|Nc9vFflmkq%$~(fZWf*kO1$acrk+J zs6hP{kv@>wA&gBzAh(0;Y-DH>0*Ns)HVJ|3yU)-h1gfiH`FF!(Nd5)oM_r8sCT0Oq z8{G+@g%#o|p!_Mou~iLJjzi>xZ9rlQ9K~vi5}TMn;)()AObiSqJq!$CJzp3Ycyu)y zm~7X#Hjj10mmg@KT?nA6{p)P#H6c`z@R8m#2^gr4<&%z2eJc{2hyNv3!L7e^-?$^ ztX^{N0mVoE|0EGuySfKDXZ3>}R8})Ebo_S^fVFG7p>Yc<)3!k8S${C>zyE<@&;1t+ z+wVVM*mnO0!`Ay37`EI$!La%M0ftTYcQ9QFt0gG)&2I4c^OC+hO;h`I6%v>j z8N^gTW3yM9L35^Ni)vUwe%iE77Cg7MU>zuoK>lZCOaiBMkbP(VgU0d{7D38J*j)F_ zeo$NY#N!r~W#D;2_a0LH49Wur;C?(PEhH>rUHb;K6-u3zyzv~S3Fv(^1@Y+ z1ymn{##b7_b%z5J%xwWsw}I*fi2ES*D7t;wNcMron?d80sP#X>zB5q!V0M^8?SPmc z1ol5D??cjbdq2bDr7EEE2xKN`E_;tFD1C$0eL%|54gZ?NKxHT>9f8VZP&osd^M&PG zGibXMl$L(FK*~1;29RDMl?DGMiNVwffzv(%gB%AaFEB8~gX2R4Tt0!q7}-rP9)sGC zkoLd~sC%w+FmQn45#$aYs2Qr@HXLXTLrRYgcr8O(4=5~s!E*wfHcSGXHU*C~RY86Q znGcEwP`EX_3bG_TUaA5Mqj&!xX{3`AH0HsqqRR;?JDt~n^nmn&=KC#>+*Ay86HNa- zH2sjacSz5X|C5A3VV3~*E2urpVgqUuRzTZ}YoXyK{~x-p13G`S1=^Oi0Owm!o^_h= z?Vp1PD2x|C%hgZ+AoD0(Tp+iCLWO|=JsgqSRc>f*-UxLwa=LiH$-q%?R#O#Z4tg3q z<%~%4($F*y3Kv)yfyUQCX};s}QWb4z8l3zu0o)Hh>RM zgW?L^d{Ey)7-~K&{Oh28fyEz84@mz7a9;$HmRO--0CR`H|GnxDpzRt^n+4S01hrW} zYb#!W+ci`ALG2k(TL;vh0kwVH!0nlaMPHgHL)$aSeSy&Sj4HG};sfI~n{fI&zN)XxFQLD~)qO!vWU2LZL8|AoXLF281KCc)Y zL_qa9C|%hyIDy+WlNp@A?V3UcCm~Ro3TxL)c!FrxfZ7G1eg-K2!q}kt-Nzr2XF+8E zDBKtrlKT{%EKyN-LR_1qjtkNz0l5kr zkbaPzApIb_9FoEinX3%(;f&&9P zBcxyH&!`{-N`o%ozMxYNq^_TYQP)?xfXYG_l)C-^c)T9ex17`u@++th0dg+`L(`%f zaQ+Qg2dZB|emcnjs^1;fF)%bNdcm;&{sV?Rc-tr+p#4gaUqF5UwNXL&iW@wq9SE); z1E7An_}@VQg4Q61 zuMaeQ!S!Q@1H%hY{n+5Zu<^fw7{vajen?q?7%SNCgeWTnz+-gi^`ip3epCRt#Q`!W zy3+{~XRv&|8RjkqW)+Crkn2Z;eT$Lo`vUH}-<1-YM}f8 zDlo*wWGk$`HNa8dg2u5xbu9>Et8bS(qt>^!&@d0=hSayP`VKUH z1{yPi)O$`74F5ywyvI(E@Y98^9YFL=l_nW7I0%6J0je8sIzh^^$>6vIg@I7twttYY z?E{N3FhJ_&pq|bD1Hg6jG;nx6;K+4g&oKakpDsE^YAcmfa-jZen_4~v{`RCBJ!j*G>?GngXssAGqC#G8sskr z2Zq!C6~sX8R+t<2a6{S$=w=^AGFt>{Hpo5bW`o+pDp0dw{@L{pQue_718N^}Ku;o8!o{gJqRK2b1QfvPSioj*3xJj~r>p~+yM-Y^ z0F?d&7&fhE=Vjo~osa+u00tI@puXn}4niO|F)+BJgoUoc1BUZHf-DjY%m3eHa1fAS zSbm>@;ZXx9Tt5DH76BQ+$nd1$-T!8AyArf!6_jQ{{hssxTU0>nc)S=|bwn5zfXC25 zWdX?DpfUoqR_?=-r7F%&pfcX2=LZw0FUHabTCeUGEXV>|C%5>2g8(SpLGjAKVA6L0 z8mA2kEDRaXmZ~T!EMZ_^XzAf#XaG3}w7;XDfq@k~_6-_01BEvzyah=BZW$k3v~ z$_r|f2K6y8Jm~|i*A3$ZwQHWNV`gAgfv{7-`j<4e^h5mEx&R{X4z4#JfcF$Nz{M9W7vYNH8q=|AdKw2bAtW=|O^F(S49! zP?&&BlaDD}~%aZy)X|N7Dr^U_aECBK+Xlx5K*VW7bTep_n2TEtm3@HL2 zdl?uOtOL<5j4lG8auFnVlOaU_G%(0ftTeA`DyB>n=!O_{qz_0m{c9S!kKChJ|5D->&}+ z;BjWq+C~P3Nqr!5cRX=bxd%4efoao!2LX^6C|!ffu^ZlkEF4dls=WK}AOLC)BFll+ z(@H#DssfrT0E;s)seA*c-6U{4!^}ADEy$vQqz;t-v8mhZEy!YlRo$V*V1EdJ=0F^n zHhT-QI6Pgd!pqxM zxs;`kg`q)!g+Z|IOT*0mFW|lj0|SWt5!|n0VEXo7K}@$nfeECigJJ*u28Mn2D;W0N zFJRbypMfE%Cxc9F>_+`-ogT~f=C2%>h09;P=qxt78k^T{3 zU=V_|`4HvAYw%ingnwRP@s9y`O!CmW*HHg}_@ML&F)L|8EI3bW=>O0FDubGOKf!h?Iw6VuakR{>iQWa325;|_bWLfca zsS0Q>8_0Z6J^|S~$xD#sz*ErtqyyMqPV)Ed4kEf14onKXpfxI>xk^w-GBB7hboQ_aaM@TewDo+L>ZQuha6sZegSue? zQ&SIUj<=)HqZg!-NskGa?L~5N9n#9W_wV1M!kJAyaJGYGb{p3HY^Ma1U^i4Qu)#l3EsmC z+Fu6>V^I2m?XwMNhU^6vQaD-w5})vYuQ~@qQ%?l6ukFFG4ZMFVfnneO|NrGw0vNXc zXJ!yr>1dqR@4&G2|9=Ki6$@~Gn}NZAVe@|`24NKqhE4xL^Uw+m8~-yf3aWtiKY_;4 zGZ^;&XJA+W?ho2B1POrlfB*d-3~r;bFtGKxFtGOBV7Lqx=V4&!^I+iU(-K(0uoGG~ zg62wD7?OInLit<43EUrIU_7SN&2Rv0KFDkn2Bviu z3_|NbbvFw`dJhK!XpYE9<^TWZDvS)rR6zZ87KZdSEDQ%kI2h8_@POrysqiqQt@;1I zMMcYC1w%i>0RbKcmUVp$4+Iz)*j0LtRRNH>AiEO< z7&t5#*w!&HF!cp6F!zZtxPbRl%R=@0FtGG#DWou@L-{%kEPWvJ1sI%q6eXG&7#NZ# zfY#F>>la{f>jCX6lwfe}31DDe2XZ6GK1PP6Dk2OnYXlhF);#~eKtzJUb&U*zYY#~L z>Hh{183xxiJ`7BKpgyw1u%X`U|fE<%|CR*F|!enAU;fuOGb65mcrz^)WCy z>FkA%T`um=VAy{@fnneM2!=iP0~og7R~2Yx@?h9@-+^K4eQg0I1`CEQ_YD{}-`8N+ zbYFpC<9*0JxChJy413iRm{|J$GaNQhG+<*=Vc_UvvSVRjPy+4cWMx#dNM~rU0G%gr zoQZ+qc~1nxr3GpVPZ$!ISk^HxEM5SL3s5=$r6rIXL1_#WE}-~vVPIVc8vE+tXW-#r zSo9xRO`HG&2M5EV`>=4@{{Ij-+(2e*1@F~F`11s~epuXZ!NAnF?!SW!C@c>PFmQnU z42n}wUms+Ss>EXkA%@EWpf!;obNIn$03ggMgNBy?ct6BZ3y|AP7zEcbGAz|O%q_@b z!N9PNgF$GWlK^P!lu5+}6sHaz46zIhf*?Jhw8FyR)UyQY9*{Z?2BtnsK?V+xzd`Y7 z!NAgI%rFTY=M0R`bvzgzh=A;2U`Xo$t?7V;7bxGbfa`)|Dj+|A$_NIAwl$#jMxc0S zVQ5|>!vH#8qG=5%&mM=`2^t?|VQA_(^xr{1R{}If(AHzZz~0BeaA?AV|L)Md!rZ6H zPzuf~p!5tf8)PrY9t#HMbs&2|c7g2SU}yr{`RqSvO-=I}9)_kKkUEeY$X`4RO=}?O zK0s~;r4djVfzk#8LtBr& zAOi=s^Z`<%B?w6ypm2-j7G#0s2SmJp(t$I0O~>MXZvh4l&>l-r8Uv~46$G_;+4?~1 z*mMmb=P)n{u*28Wg4VKac)nDn;N^1_(3~V>OU|0%qj{D zpgoEQ7$AGh7l8MegUW8uo@@h#E&sV0K>N%${|D_$28|OMFl@Q6!La$h0>h^J5)6p5 zDL{LYLFRt@zd!<{mWyGL#urc;5J+J7{Qm(9NZ)UUM;afXVk!(XdqCr-tPBd`To&#O z3<69x9S%+^x+g&U37ghvFfjFj#u-5384gY=8VpS9KxO2Ho2(|FeS)0eb5xf92ki&E z0Wx!j0|O(2hz&>$NM40OvTs4#6f@Ad2LcQZYlIe<6p1i6tdU@FSOe1ApdrElQme$! zss>UE($k>9$^eoRU`SdA5@TUtg`3C1uv7&kC&G}lPJkh`kAY$NeO-nH0ul^K>qHom z`_#eXp$rVF3=RTs|4&glhf>R5%z?*0C_8tSewD zT<5`1vMz(EXq^E=`Z^7U)O9)x3F{OXQr9Uk2(RN{U|7e)z_3n&fnl8t1H(EKhU9gi zJu4Or3F}-K64v=JB&-WyNLZJ^l)O$+A_=@_>F<9xa5)WXL+eT~Fl-WJ;K*T0TBpGv z*#~kz$j>4SsePcf0w}(a#U*fvgVcc5zrpl_%mjryNIxhYgZ3o<`!ApZT6f9L&>$kf zu<<`=k1S;G@y7eedyf?uCieXNuOI}HXJAn3`}W^Ogpq+m1r$~+4D2ePb+{}H%6%RT zDc~}SnIT1k4O&Nn{PgmFlEDA}0xEVw3>=`fo}e_Z$dDqy!oZ^P=zod`NDS0QzyE)+ z2uK|dgGwI@gLBWF|IH#GJ2eDAV{I-ypfm&G^Drp&UH$JM0-9ShVNe3sTcGg-kl!pA zl={v?%5$aw2IW2<2BkhNfh2|#Q1u}9urNT}!or}m4m1XK5Y66wP+DFQ;|2{T5H({|8v@Z#ymxaM#9mwyXwbh&q3&3H-&#(eab2BUfm#-lIvM{Kx z^A%#?;9*c+2eTWb2bAYQ`nejC7(g^A-XQAL;Oaqs2gU2Z|4b^NxCNC5ptxm2idz8& z%y|6;k5}cs@BdT4ZV_NmMM`Tk!RH_8FtqfDpok;VrUVXgP#OfKT~HcSU|{V7<)^Je zp#7u_;C2ecz04}0{Q;mo*PwD#x8nc2077liOQtO?+8SmVRvuttZ$Va*dE z1`Y#;pf#{^@v9I6hYCZ}8c=!oLkM)n2GcrF`2q?HP##h=NMdj{U}I>oU}I3USk3@y z4{2GnGjItUXW*7N&Y*0N#PI$92@#MwSifMw|GnxS(6&D)u0iP`0y^Ioz_9PX1H<9)D!2AC$BB1hug+ZwgRE~rC6CI87 z`k5HSR2Z0qRrWMa?N{7k!UQVQjTwUkxEP!@_!+{$>HaTxj*5Z7pm}D$xdLcDNr4Hp zo*UG@HD+W2k5Pfl{rDfE-cp!>17xoTgVLl5CdgVU0S2W>mW-fsfJX)79%cp(6%hvK z9yeyl91{4C<3WdUzN#``|Nm>Mg4(DO49-1@7RQ+(ZH(tVkoJ4B3J-(kIyHl53<*4H>jW5F*MQpc5B?{J zNH93BkzsHKxB2sh88~DZoYy$~dfDf|qT9#Fps9L+VWps!gf8Q}{|O?0{tKw6FsSue zFevxgFlhDhFc_^9GPqKpt&qmx!rUOh!JxH>fssW8)CW`4XlHQNU}X?sT&>a&!Ofr; zq0Pj?klm{lkZWYD0Kb`72uO`Rl9WMDWw)qzEK9h*cmBR@m30fP)PgQ`R}!`lD4f))(Q>;5x5 zH(+LP7X;-qkbi6#)YoZSq%p`aKM>$yFk8pK$PIB{LOP>!0uO@#W1nh60Uv{6fgTeJ z!?|9qf;kfWm3Ds$#)91{Q{1L&b`I1_p-16B!uZ zOm$$!iSOD!-r8hK%Md1{~%Gt0Ch;%1TZr=crY`7!XFYgUWTACB1VR6RR)IU zi7X7yRTvmF!EWMVP+!L;;f&<2Oa^U(G=|Mg2LwQI$iT?1qHDmwpy=_8!P$e8L4Z+9 zwIP6uK`}s!iG{(dS1TZkfy+RPk=sIxQQ6}e!?*uNq9Cs3rR%cz{t z#;9G;$H>BPKv04~XRQo_PA?-vkE#rV&RX3J2ZjV5jddIh+KYG?RMt7LD6O+$P+jN4 zqqPoXmH>nLS`h}dwGO{Pdk&pc&i-2@3Tium>gLn`97I6nLjsR_p8&fq+m!lT^B$H1b( z0&;@_Gs7WyP@ZUJP!mXEh!$qxNa0ahXCchM0cxv&%ma;Gg2ulic+~nfyj`kt-3nx` zOHZi?s4f8Q|55_at8hTqC&ARm@Tm2jc)L_3g-5;b6jV|ChClzAR6zD{ zH#jqZ$|_LV#?M4b*`|S`Y~vtMwrLP7+m?x7mTfctL&~=Ff3UJm1zNVLLd&)(1)y}v z%XC11gF$r>s9mk=z`&qrae~3wf}KHt@s$cjx^#HOz-{n~LD}L2!?*vRL_lgoc+~rx z0wCo_0FN5DY-3@_HWXn{?o$kS#h_Slj)8%}ek5L(Nk)b&3q}SnT{Qns?w`h*;&6lgnmFkWV45QLYJ zAb%EQFgh3TF$gf8S8b@^XHcxrXJTP^->X&O&&cI)o{>A^Jfm_!2IIH?mqZl{G8ml- zxELBDxELHjd9~mj1IUkx0jC%k7|u;(VDO*H7LbSJH-AQMBK*e0P%H}an*@WxI%NN4 z;PBtc|E%CL7TI5O!T!>Ll(mE0Uq*0$Wm+&YXzHptaDwA)GTdJpeL@OT3bZv?7}FUS zK+0?l1_s3dRcM**t%_RTax-#icr$W)crz*os6xwZRYoTd4u*yZ4h9DY4u<~>s|*x9 zUNW#Sq#7zZoM2#J(45G?z%i9gVj1}h`NAIp&Zq1M+R!Nvd@--P%hwMT+MZJh{%>N+Nd%ObiG z3mB07!N`z`V$x z_gp3F-*Q1MiMI?IfAN=n=NKSmpAU~(UxNcP1GvlrrxC7RCMPZiNcp6JrF;UV2~hc@ zv95;!R6a34%cm9K@@f137Xl6}8tWJtvMm@HvUSx0ycz#9co{M?xC#nIOep}l*@gjB zk81U4M|d-?VMqX%O_1^yRHk_MG6iu%;}TRp>hv{8@GyYtW=LFu%10e=`N+gD8LbTA z0J~ut+zrq&G9U}=h6n#$ML})=l_4Ozd%<>VuA`>i<#4;xEf^V|>!?|zGlJSqB@9o& z{SAo!)z>kJGH`&>AZVOTg+a5=;n$nK1Rjk(4hHQ>A`EYPco%NFU+3idw;G z#{d71sX*Gp=a?B7&h>VQF>t6koM6;aXkwiErvcpF*!H(cP+K9B!JVN&pg{uE=38w5 z8Y@+laApLZ_xYb8#Xy*0i2#!nGXrQ`a`oQ>0-$+hCN+eej113JKz6Aqq%eZkeJLs& zVFs=FnhCbAgF#CS;_nO*1`bePMXucz{$Uai~Jd)^upO1jGreu`qzzsSrC=)=4m+mxC$La!>_Y4uZypVf8PEDkDP* zl6}oOY8s0fAn8>VX`F=eaUCBX?BhBCDB_559Z(+<+n6J^aUE@O#JJ9e|9jOPpyLye zdB+0`pm|2n*f{7c9oSr>2gCmVkom|40nmIT14F|a3kC(D|NooRI2oLDOc@*melsxX z8Z$TuurfT-0j(Veomm1}W5mF){J)|d=)9d3|3Txr7U1(=R@?`jb$Uh^w4QJI|J5!C zc@BmZ_d)CGL3;(67#M_f4IY5Hj_c$Y*j0`QJFEk(JDVcxqIN>qVG(FQFt-HrMy3a^<2Rc`;PaHI#$_!2)Apd~YL@_WhtplxL zSmiFrazxl^9Y_txo|{m8pfN6x7|1S==RxC00nm5?#SiFAMNr&;PWR2s5n% z_0s|v_S}cfCF1foXv_&@9>@&PxF!RG(z*}-8NlODAU?z_6ByK>^BESj)uV0A)L@)qt*BI3mo{Ck-tRSQtdrrU;9vbqI@q z&*TG{rmJv(3A8?Tg|NuFCBmZXVEzK74+(}<|3PIFXfN~M|4u3(zk&7*W<&kALRb!z zX7ruF=bA2Hdi%dz3}hZCErZes%&dDhkT3$71u_G4MwkS{s{71PKg|(l0-syV4E5In zFrR5HGt_TuzU3Ug3+6OLa6 zW?1}I{%;U~=>wTTNH0hqWbC^Ey3UlnPx-?e!pmLN2G#CoHNuv*RPAJT*jnFU!nbU@5&Pwon z!>aq)VEqgXh&*V#E=U4Yb_lQ2^umgDB6r!GGqN0Qoc#e~ifkU-N*lFFb|DGZ& z3@HnAH4ZR<>f2jF3_PH^SP{I3)r%n-eSqEz4o)C6fG(*^V9jLAZ)syID z2B=Qm|6f566i45n^&ChoYQ2hD&VclQ-1iEq9#o&EN`le>GbrB+fzmguF1_vwsY^lf zpt|%fR1c^w1&M*`Qqb9>0&n)JA9&|9;ejyZyw4lLp#4n@3_FA&=OBaT<6a2w|9?Sv z^ZygVoBkgV-uR!BVZmZ9h6Rhc85S(&VOX%3mtnzTK86L0IT#i#=4V*2SO6@3KtzyX z!QvOfpfe*Im>vl4xqm}=%l!+&o9~|x-gN(f@W%T)gg1cCi2NW7yMyIWLlc98KrsW0 z$`sHUARP=0pnV>k48khq44f)O4BRT9@vd+N7Xb$eCWc@JPk{^nJyiS|yahmQZw7{> zDI5$=2HZ247(sn`28KfoU;aCYfcBVhFlU_K1Ndwh*goQ|p!it; zTA$+}1lm7k$B-b!#gME8T5HNR!x?mbJu_(kudYD?6KGx~K%9X`j)6l(cYy=L^8XED zpl}B5;{~0?wfH}i5Qq;k+o@;4eoWd$-t3t9~2&-HUa}vk|}5nN(0k-ke&v}`KO?BjzH`G+)YsBKx#ny ziy`g?oqeppB*CykT}+aJN7sXa0p#`ysM{H(7&svAXJGg)30iX`tO5#qP`rWC04Usb zI~W*1X#o^3JM1BG2y!DRj6vZIiUVZ#KKQ>^9d>RLXigbaMuEyKP#Gl#ozDif1wd<) zj|eYV1Cj@|0T6A0MQcFw_5#o|lVJ0t#^yFL=NJnqvmJ9n{W&%rh@w z0Iiz=-DLo}#{lGZ&>40hzXd|mn?JOD>&xH(zK#jhzJ;BS0V?+)eucDeL1BDE7_^2F zlwTc~h`AR)gTXe}&H(AMy2sAa(ctL(Vg2W>63Utq}sX13)yWj0Uv@i18oD4p4g?)DGPV%AXTJYe4tk2Z@37 zgTf1B9-;da6c`};=|JXz+zv7i_NM1!~KSfZN9)^Fi%Mkoh1QIZQxuFuOtS2H6Rc z2Z_luED!+AUmp=(+`|DrO90d^Ky4R;((n=CMc{S}F9T%!h@0U7c#H*<_CV%<(%uZ= z#XVDm7xjSh69dEJH4F@g)`0Ya_4b)1}ftM7`EK^VAy=$fnn2q3xIFU5CEzD@}EHxY!p4-BU5!BDtVOX&K_J0QvQ27R$ z{{pE6wWAprHmw(6*sz|3Ve@)W8(M^6(R$FijO+}~0-&@2I&&VR7Svt^>2;8XtQ~-f z{rE4U0uuwB0Vo1GZ(ksZ0i+%j=P)_YI_m_6&Hw-X7gmXYhFbtM+&qxN4YXz&v~E;a zAb}}?Ve|b6hE4Ya7&hMbfQA`pJuE1EK;Z^b2MMTr0*kAc)bIMR{|5r zy}B9-j0OzL|LYnsFoMDf6h5Ff6DVv97?$6E2nwGWp!!3p52PLuHp|z8$^=l@fX@E` zg$oaZvj9j9sO$vwH~OR@>s>+q=K-A)p|F4%B=_^bunJ5LIeb8Jpzwjof%rd=)PmYU zptM-<5_ES90|V#|CQu#QBMF)-WmVA?Xn=@;?{{HW0g3BsI56lsEMPby+zPqdLZX2I zv@Q%(&w$Q_;sA{!3NSF}Y9xT`?jk8rdl7V9-r{~%h6IuS|5-q5*ud={P}vU(XBLKJ zi#O5?9NYq+Icf$5Q2hn68*~?sZo>hvIbgSGfX@&7ze}8f2XsdQXw5IEECpDX3l%U;x!w8~;xbZUUb@%)l_Q2NdQmAa`ppFhS~O zrye#2CGgoVpmqlAoY|*_pt4GV3309|Vy!0VZV`|yp!k~4y&Kg_-%nYDA?id&rtpS}2yMx_HMOng`0pvf>y89TW zW>ER1kpnu{(~p(GhoPe$Nyv%P#Yg~PaFqB zl127(hQ|wHn3{S(ZirxN?)mZGNd+{P&mhIjz`@`KHp7PjWX}Nskba0g zZYs(Gj~GDV$0Fd$pbCvUkbI~N0|zL4K;Z{6mxIAsLy92*yspoOp{)mGhYmwK#D0Tk zptUVf`yp}=`;VzW?1%WlhoNoFr~eO#vi~^P{$_A^#xOO2>#PVSNWa~Mp|hvp?_PCK z7-cX)`bip0kULf?m>}m|7BKDmpTM;Je+1LE{{c)}|9dcP`R~BA`M(9zrvC;^8~=AO zZTT+Epdi`6xO9CAQ&Ud@Q+rPiQ(KRN0~5m`aV7@Px(`(cCPpTP!x{-p?Q7H=*cq7^ z5=2s%I@b6wG_1*BVgjET532u>*KS;Rw^Sw52sBpU(qqv)v!6#7louJ8To^d}L>QR* za+sL=6a_pPbQqY{f!2@;G9-c5;5#v}s>CoctlK2Rz!Sm50N$GbVn>0-B@`H#K6_6Mx3_xZpvMWe}#6e<)NO~NR*pWzVH6(U05*wr@fr+)xK?c+g zWMGP5V(D{~W#EWmV(J6!Bhg_1xgT`jg6jew2IfAHJV*|-mLIe)0~GH*49x2ym{``u zFfpwIrJIlc69ky_SQtQaL!kR~LLug@Lp9HhH1o_@7&sW1RU{bPR1_FE`cxRW`*asD zFflN)t0@a4F=#Ld_3275FzN1KV2EL2TL((tAq))bR27;SKyHg*NCNL22Bq%^#_|P> z4Byp47{u3s{PE*|x(Fk~Q#E#m1uRSqkJUhBHE3Q*QGtnxg~3VX?|)~J3Z{lN3JiZ(1U+|q}ptDnNvn>#1Vn|j2?aXIn z@HP1Ie}O3I&Z!Epo&>O-`LYZg6->PA`b67A90G(H8rV7~l`yXDR}AoCQej-zAHl@Y z$H3q{RVYBeFoubxPsqcfupxn)K`~$zqoT)2M#TtkM#TgjMh1rLiDzX&V<0`fpnXm{ z3>&wbsP-68Xx~J5CqMG zGBV_aLC|gP>wjw2vVb%;mgDlk;BNquy(4d12-c`Z$knvgJOm+)D5dA zzN3;Gm?&@qzZ`YKftdm~7*NR#EEKpQkVB^Llc$U zAVz^37E{R$;uN^y2$kF*L4g~dQppXH6u5y+kve%(iUK#NQ^^g|6u7~IN^X#$zzvyH za)T@dZs?+t8{{Z(!)hwIL7oCPoS~8%6ew`RTPnFhkpegHDN(0|^PHfwe7P7LL>d^^L+`9-weewK>jUjo7x)0Wcf_SfM_Z6Z+2A?@NDV*3 z15waiWChdy`vpwVqTZ40-h&br^v8qvLeG`bLk1IbAIRMe0!$2w3NB2F0!&N{ z46RF;8ImlY#l`b4+fBZpgCDk7%?!oF3?ga zX87~JK?D{ipZ*^QuURNzV(w#ONRT>qhB{dfl2p61CwqB z1H+2vAy;%4C@|@6U|{(FKTnO3fnSB6fk#ERgMmqRg#(j_LUzFy#stRy|1YQsGBikl z*86D*@G*hbR?cBKqy`Q{0VO6ORZzS-scR1_w&ng}T*6@t^GLMwx!f(nzJD(DQm78OqD zo)u6yGcYtP(9#G7@4p14OD&Bs2GANcEdwU-ntcX_9w0^=#CKKHW3z(Q0zN@h@FstM+u3ZmGgSs0QFyCNYw_ahg zoXHi&Me9{2Gns(IOBffeFJN5J4+=wF1qMcFc&*XW2xR#4e}M>Se=2C77Z*c<6bB2N zO2S4?6VQGIA%SHDpmic3GeBVqy1(S_|LG#2Gypn7NK0TN!zbwZ_3XUL;Qd)8Ok918 zybh9JyH&CnpKo8Z9U@Pmm#n8ATT@kcz9 zuD}Ck-5(8L{R|AgQ*;v!FzFUBFeqm1V^qxGWny7itIEKzb0Q+43W_Ht z22E9vzZErDnIm*S=7Z{KRwf3hnP2}m2r@9NT?4w4MN7d8wC-O76waXf22^LJ@qq5I zodJn^2L^@`#%28t8lbbBIaF^juIv|NU{{&ZJhLB^u75DD_^+sNh=GaGNd>g0Kv6@L zak7da%Lm3q|9>#9xc`B1(S0oiLB@Cg8$>{9HHUFcKPv;13Md@X|2K)|Fs@l2?6yb? zR9=DNA5_Mrz7}NJ&CQ|$;tMcrQ&*HY#Kgdm1YVn>B>_r*2_hgd5rzdq0t|~MU-DsB z1MM$bxAWNqE{4MbpmZt7ut?ohje!GnJ}3w?FgQ<8)(B%@U~pOR`~P8RIm@BS!0>bd zs2=$6UsP0pVe#S;#vT0zGnq_uKQJ(W*5H8Bu?pj&^*M|?)`#*WNHH-=swhmBH&I|< z1D|aqB=NHde9nYKJp*XX3kw5ik3-S~P}&ET?OGa>8MHheF=#osF>qUWGW__zK!n@C zgF%Slk%keE1Gvp%$#XzpFE@)y4&%~(T?f#8tl!mC7}xhVG|ud2V%(vksPK=GgXNz3 zR#ib3kUO*lJ~G__t$WotzyvOHz-x23R0Kdrtub<{CN*@diuNM6Jp8>941Q?E~eExq@1QZ574B~zA44j~Kj4HYY511Gj7ELhcaR94} zVPftBtsw;McLbRg0XkDx;QwfoVSx~6P1+?N4mEiOE)_-wP8G$76-*2a ztP_B<(x``<;U! z6`FP&7;;(viu zg>Ht&{~f^bsHO0fA%wdDyq*x`77hk44G{(hQRM(7a6L}g9gw^PS)0tX4&*0L_&~}c zs5=6b82|rYsseULfDfaV1SmZ*ty5L#Vld-Q5CEm8Rq6~JAic^OO$>$%yeg9a)`~DQ z_^L25@~JQ~_^UW1FoDnkL%a$LgO3UW!~3ZY9-N?auBJL9@Gv<1kY`X~+_|2eAyNfY-zzY# zT@TU^YR9O6`eGn+z-@q@sfrb#qwD`qkI<1&S1ee^5TWy4wc&sSLxj#bRgfFN=WZR4 zU;>@V0$PWt_+vkVVg)~w2IJ24ptho7!Wsqz#-05RjQiI|==7+nFs@w>KC>@lC&&%` ziU~YS5jtyC8!~tq6i@7A0JW7sZew7O>}O=KS65-&*&m@}38L3CFvzdhVBFvDz__Dd z@kBgRgpRzr3geD`1_sON4L{@=6o1Gwf!wCRxN|)xL!^odWT*3v- zuH|O%R{{CQgK@`t9k4rgGB7YmOb6+8VcglT!?=FE2IKmE1;!ogLFV%?M5=@^?pz(?Sbr{$8gW^_$asB!bC_994{dxt) z_5F$m)-!<22gL`-ui*GTAi<;nRSV*S)G{!f?`33ougbu1el18J$R3ay2gddN9*pby zLGcQTPmmoxjO+V#7}u=_+35pyzYl1wtIm5>P+9`10lCSAaozd|op-7r`$6#y(!3`kh?(UIxwzV53=8faqW6g`UdF}VDM830J#yQK7)@5q!#2hm|B>+0LFFwAU4Q7 zf>1p|41OvRQ1d~0K<0tW2eCowV0u92M?m$1)H5*jLEYN7R+zz0C4q6>dXQR>KA2h% z8>BV?q%VPwL4?6iC53SvI6r~b3xm!mN?=^G{tn~1^`Z=ZDlv@f){8OtsTeS>Tb}~e z69e*7f)7&)s1)n z^n=_2Qg?@OT|X#{A26<4FUjBs3gh(;7}xbPF!Zej#f<{v8gLka^1K4$y7izquwY!X zUJ7J4sC)pOH=5wX1d3m220s-W#x?6rKz%yKb^Rt#dqD2ffa(RgLk6lBPgHDxmZLDuY1f4M;u6>S3o5~$1sm5~K} z3_Xl%)~ho3sDSKdV6b1W!VsyV%n%PYa{?%hosa~Vksvb_Ped|-+&PDF&3X+6AC(!5 zJJ*BCCXoG8827JNV~AG)sRQ{3Tu%ImXJTNGT(8Lxp`y+ZslveUuGis!1j7Qx{p+QN04nu^>8BkjI5zhqDvxITydToYCl?{yh*MrIq z28K6l^%#6qbU}5(3D6e7`@JA{>|ornUY{XC#Q=2H6UdLCdf@P%-~csree;n7qE2F~fAaw7m#1}3awhyazN8EY95829%p3M^s(mGz)< zUD0DD0|UdmsS!F(Dxh+ofq{QIsH~6B(Ntw%u$T@W>q+1Nm95i3Wq*SQCqoL@3??Q} z`K0K<$pk8^!1c|69pL&0R8KH4Ki3=BM=dZr(u zmS;T!gHFE<;|?faXFUVMn|>3lqk)dNLUI_g6sU38WX~2L=Y8HK6!l zU^vvvz`z5JgBGw^PAZ_fn}OlbS_THCUQm33$_`K*g6eFTKN%PfO=VzsH@yQKo-e0@ z;ujRJpfmuAKL&=M(?M}x!??d66h5Hz0FLvD^$eh}0F5;$3NSH&+Z7(144`@q6knit z1;sNc{$X(oif2&W4T@t8#{KJiK#)u2=S>Y&9Z zq4)*G4+8@vZXs+)yh7NJ_*}raqkjqG&i)mQ`}^lGu7}3A4`^>QI4&6&bf>Rj+|j=Q zoE8xAshF`AoMu6BIs;rcuLYl@3`z&ExCP}!1_q_Iu=w2q4o}?iyMqSty9X_P4}jeO ziQgkoHZ0E~$1^DJg7PpZ{|?spJp+#~{BaD4Z%CX%@*E^To&eYJps^TG9G#pBDw9EZ z3zY97bW~MAd9Fc&l>waBG+4o7xC{&{dmv@b$~6qoyODmWg67y<*BCPJtDOARFA5sx z1NApR{SHt+gN-2qQon)flmb2mP``wMVg6K5eFExRfa*}to+MEF5>yv~`Y51tfp^CzFz#Qkz_=gW?grIWpz;`0hl0up z2gd#VAbT}HbyYz;69+@QN(88W_;G^))P@JU_kaWw$i1LG0;r4uxkUj~=N*(_2w~i@ ze#*%oy$*~!)_Z`=0M{=&*3abGp~{fS%P`~Q``!S?9qU1P25d*hSx}z<;g$mtOd$7z z%w}Ma=m(h{!MLLz^el zGkNsY8BR)q`XTET!R0Ui^ccn+{Rxcw*Mr=l2yNSBFz#5-%@Cnt!?=IF3D|%8do37u z^v^iCwzr0H=lTrBo&70{``5>S`kxs$7z{xE{Q-^#P@UZmihm2Re=MfY%eghYF~r;U5Y>6F@xHIptcIA%`)ZWx?YeSiYM%uL%{vTb?ZTWN>KmIgK_P89tK~P z43M2C?3qo#X=dko8&DthhdhG`GuKfaTZEE{tCu5>jN0q^oM}# z|M7-7f^khhEbS`(c*6|J3%m^RDl<-6_M0%S?e~F(lVXA|QwHPy^&q!^@(n02nSlGX zJNp$gZZasIkY@sgJp+SfKg@kLjQjfo7np(hzWwXL?yLC8 zIOXI{aJW@K<2!RAC$Ji?mHmKjBwwM^`J2T z2dMiLfBawuWUqBLF4*An8ws zan1S+#x-DfDkjWi1of>z;Rs4^uy6#Ww*} z1i1s`PEZ~P#UUsSg2E6MR-kks#NZ1a_kx8duJ8k;zZewvA<|z4j`RmA*Fbd)EPg@h zFNARiI8O^R_^Ke>3rTx0H-p>?awEu1pfCfu8I~4txet`Sd{Ep6NsFL#27XioTJ7&=M2Eu*sm`P55Sn~%Y%|Y@9BHe-F6;y_R%b$dqNcm&U zdI!)L1T=qu(xC_Anto8ciK2ub_Vfozd!RH33r|p3;tD@v(jO@8fzlnwy)KOF`w{u$ zJu{^5yAxDKg6kYmc!Kh?7&ts3>VQ~zKTTojF5r9Du)02H^NbO-8x zBjWQ1xcCXW)ZUv9u zcg&!EFerW{P~sPo{$ODT3onqHK<)&ED+9whc>Mt`pV7)cc>03750Vy<%Rf-Og33Tx zyn@O?7sfU4@)?x=LZEfBB#QgUNPk%K2c*n{t^arYYU7&R@sD1_2!!Wmj_%L^X+zAS6 zkQ-oSAS{1?^0y2)f1H~NaxW-6afKhb>CcC84Y+LwatA2=f!c(i_?1P8Ur73cxf$eE zkQ+g60>vpPTtVd^KKH@X7d(GJ(ju<<7ZfI-^arbhA?|z64627g@hXSnJ~GlD*8Bmf zb0PU-$9m*?7oI+m+JB(5h^zjUM{yta^alzrP#T1VCnzj&#V;}G57hPpr8`jm0JZNB z`QsfktR9A?K~Q*t;#mQlKOp5FC>~*P42oM=nMaKKNKJpBvJY1Gg3=wR-i5gh#D}>9 zxR*)M( zVF+?3C|p71ASk|Z#VT6KFescrC@gV>A2I0Rnhkg3=qP-UY=oEDeIf6BN&?;QRq8|3L8wi(^pS!pb~i+(&Bq1C@QSx))aO!rTVp z!`uOKCp>>tK>A3av>RpgKKtAio#d&dl_he7eGf#NJV9ZJEBuH_f5`n0P`!)DACP(%6wk0U2ntV7JZpjT z2c-N1#Um_^L2(N!^N4XDsp$_?_QC32P`U&4dtq(^@nP-&xf7m0(E1;sbf68+AGGU# zfa+mH`x#OXgYu;gO8i37AI#0L@B)P)C{97)3MvOd@r^5fi7Ed;ZC+zZd2<5Fh3akUQb|qX4!30Hp&1aQ?vE{{YQ@fW~_bkj8f*{c}iJh_C+( zT8{#%he7o&$Q_{c2dalb`4Zt)%(MrJS5TON#>hc)D)2b{DG#560F{fNbOstb1&w{r zI}5i|y^ z!nl4ts1K}|0UDQII~7zH>wwo;?O*TkgA+V%uXy4-XilOZG=E`(G=Gu82ubq+;JJqV z{h;+}p#INH9)9pxvkiFN6=Otuq zG*&`&)M<*5mavFud;t&D(&|%uJq{;CTwr{K=G)lAv`x z>vh0mAnVs#Fs|y-<=S<4oWhB;w}NYrVZp*#RN&FnLIne^JXA-C?=d?0FPg1@G^nwLC{zeXuTOI z{6TzBJWV-yzBhnz{rVXv&-H@(p&++_=Fuz|*RG$*^A2i7qvW}IPwtbO8PGGJWO4_em+ntKC<2`KM?);|owV#)!n4cfUJq=%_Q zf`N%)?Q)PixER(gXG-B`U}0Fl{DLY22OGnh<>38B9t;eib;XA**coydm-SD058BJf z0^g7ET}F`Q1>?&9FBn(e|G~K8K4{;?jK=x>Aia?JWVT)w1`bt_83(|6pTPCLK++4+ zrzK#>_~E~U2*@1Jx@OQF@jZ<*`*$gW*0Q_yFsVWIAnoC1QDIGL6#qk%l|Vl zExUjE^8t|`jLYwX_H=;uH-O~dA<4(7F>rw7L3=4cY|uJ!-4zTB|5O<`KhU}N^0z~BSAKh#Nu!G@iI!Gw)L z)kB9-)#5dSssZS3$Idk@4DD+;7~0mn`@da8fT2ZYt||iuXx|ZNzXE7q1ML2y2qyME zUGTmJratgl&k8OK3=Hi^YtxyaYtx^oF<3D%a4=*+*QP`EHRuXFVEFLgK`?@eeVwv` zG9zfMIEz9DWKFt&3&UJB(0Y8Pb(f65H2B_~7$(*}4u(Y<2sg0wfz}seu4iWLgRJ!i zxnU_}zk(9T4Qn-Gm{{TKszGOcfB3&Z5VTfVS)vuZu9`(6n*pRoRlu3y1k??mp>6=J z*9NUK7iLHh0oe;$TTP91-Jms%j0~Xl-yEu15|x9HAbU;yo}WMp8n zQD6{LF=Sv;gs zp8OBWo1p!MJof}yK>H10dkaDN5R_+MFfIj`7goj$9H6~hAp1e?1f6Az&kbA9+yF{H zFf8zYuR0e4lgbR}odGNiEj>4&_piNR*#G|l!@mEZv*Rx?Z2y0PVcY)$3|s&2VA%41 z1Ho`hfiJrWE{*XR6l?J4->)FZ>NbiD$@qV?bY zx2R|`H0gMQ&W9IZvH_KE3;9`85*QZ$k6>8wKY(H7e-DOL|1%g?|1V%z^S^;%?f(jf zb^q7j6=dmPSpOfSe$8D$mPHUf_d$DxBN$fP4`5h%--BV*{S1cH_X`--+;3o5d%uEV z-Te-R_4h$x3G%xJ!;*dxhNbjHkUtPA-iv@YV8=(?C+yz3Hv@vlqy#kwxz7yG)LUrg%?elf3m!2r6~s`x_WG-(SJ7>HY$SjrV6j?|=9Jz1I%37rfwulZqm^ zOl|7nU;rQ9&j9k50_YBm3I+xl5S_um0ICN-@hk!2PhemW0nr5v44^%gBEKBgfcEC; zMldjd?t=jD)stXgkN}AXFff411<+j)p#99CyMAOq;trsDf*2SCK<0QbFevMj0@!10K0?0kN>Rduz0ekVtCyEyUhi|Z5dFvz4-?T zFJ3I}+RWx4018V`cu7$)y#9gRgc)7|P&Xa_2MI4dsGDHvdHH|T^!$~Tdg)oo6q26N zcXDKu4HH=Uxxfm_|18k_@6uz> z3M-pjk;*1eIlTJBSJ!EFe(3|?kNhP8&OE4DIY-3H6IbI|ffAO&tiZ(kk5;Wj6z+y4E5)Z5%pHzDWS9e*M9 zB&gojVS$w;l(%!m~5GE@TD8^>T1rt3%xm3eQ()@%)dO z{5*{w&r;^FJdNMoEAhB{4HLrMs(9Refr{?-fV-Qm57b6wWH_X%z`(MOO`(l}k)h9k zOT&*rw_pLo|Nny`xKGvV`X5{ zPGy0lKUkjarXWnv^Fjo$=F*4j!*I`)P z|Do?O zcrfg^uO)Gf*@0mZNP$p7&)*5CPTsx)TzZbR7;b>CR|i(p~U?Nri#6 zkCB1d26S#s1`k&s0}G4Fg0^H6A&JEWj0|3?0t|~moAVhIC1Ce4xrjJ0B&^Z(U|{;s z&#vtz_0tQTQezFvf3Q@;u{?qTJRmVgkm30nMfQ!)N|EFgJ#-|q%+eZs^rQAG~w z22eS|%)q40#o{3F7pXt>nu+|f1U>!fKm-AZ|X2C?Pp+E zut0|aRK{tl3NR>Xg8I`Y;P&Nm@I6}$jI1i4@B-b(1?oTk{qHK0!_%+;l%^F0IGJ*I zohC3r!%%kt0|SE~CxfCu2>7hH93CeX9fn2gWublsnFI3oOJ)XnMg|rYSe{!)fuGUy zc^1^q3JffLQ1^k|Aj80}!otA5ZqNS)8Ab+>pFrabZaw`>2Lw16T2vSq+jK;D zx&~yoG}O)){^h^jCw?^gkhxh1qR zIw-I*NHZJ|2g!lP_O%3x86ODmPW~Q8t>?UU(vVrs59y$LB94t&KpgaZ2e~Jn$ zOhycHDm8XbRl)g919C2xqQxTyP=4cKSlR>0Z_C#!Ff4=Sx253x_W%Dqbx<1_G}Z%( zcTj%oW=1V<^(lyZ^z{A$92PF%@K=V0fAqfwng9QfszTD5TaPdWVUHf)Y?h$>4T^78 za9ZO_g`{@{1{M_-2GH3o3=BUR7s!CpJjbu!yfloSp00uIby)-JV<{^v zVq#)!()sk$K>#wwzNjBG1`ip3@9z1?lqJZ-kfeL~pM!`1!;*e2fhSDQenQH!|Nm1| z1sIxi#F!lfm<(AMYUEh^nk+zPb+IrBGbAvWFf3o+V8G6x!?1KcXiOPY?-?*GU9YI& z&S1c>yuXHT=LAK8*9?jWn3zEK&(`ossB2jkpH+C8U%zS7{G1;g$HOZ0o0ZPjq`%)Z$<{! z1)%d*LG39Wh9&)q0xV25e31)4`(rg2*e2ERs!kSQSftVbJ|7lzHZ17wU?&v;X3(AG zO=|*pSo$0U#2FxG?7A)i)d`@pw_tU`6lgfox=zqQ%D=FB;WkPdbM0BlK)rTQo)xH^ zc3A_O&jaNpQ2qtk3z~Nb`U5GmK>g1i23UWC^8RNJ*v?056c||hjF9{b%1?(Fz-b%W z{&DNcV<5jyK+jLB!1jXb1eQKA6nmRAHbCbTV0BRd*k0fQ(*?EZ@2VOj^OM?rNQD6V7}KK#Z~b zw}S|1T<6U115%(fb#pc{oBa7HVWPXEfeAFO0XpMWcR>OZXl)>9-W@ciG3O++iS7&s zCXk#C!{YU49x|JN*ai%X*C(uouuT{iub=Q+LCQfvj)6f+jv-++y9wx=UPXmw@L8^) zF&#yPb_P%%iGiURJl_Fow`*A_Gin(WF>rgNGyMF&QG|O!8pA4cQ2tob5Ar)GuY>Z| zwLjo8VV#2l2Lpo;2e@7a)%l7Fp5XNbpmlGG0xk@{tQj~GR{JfGVG!#B|Xvx4K&%mStvV)O9R7LrK5Hrh)P$p3L{r|sJ4K(*`ZO*`< zvO<&@pPET#2sNN_ay9`bW{`U|8C(QFX6Z11&b^(Y1{x0l_3s53nzY#eIEaAy`5-rg z#u0w}b`SxDJ?Na_3?7Dcc{U6j42*0l89bo75S&zY{dNP-_bX~JG3D?qo$&Mj0s%!0 z7A8>m)$lG_kZr@jk-@{V4xc-Dp?(3i<3RVj`&)p{nR&DTG_JwOz^)PvvXf!?0#I8D zG=2|jTSk8e*S|Ij45)2OP`lFL59I9N8adE>TaPNJT?LAh8a}59V4Bx;0(u)uQJ{&D zhXK;Y3jf<632T?O{BsZhwYNa|Ky9x@V0XDL@d2w{-mfL_oT>7kgFu6T zID-!lOCPe@wGg#y6hY-7=p1=y`&bL^hvm@r@e_t$mLUIk_dvo!Q&mgAn2~|u3;3+) zM~t93!{zI_7!F9m;sw+WQdC&N%*f!X0y+ozKf@ve(0TH|{x1*#-JfuiF+qwil}!z_ zu91P^&;&(=Ma(P=pz!IK@YIHZ12jGY68rzZbpohO3MyNFgU?BC1>4EMuwwDLohKH2 z`2Sf1G3x)g@s`qXgq_F zkyXWk!3}(;fd`A*nm_+r!Dq7T3NSE%#&8%J*;G7O+iPNKkwr`35fjJ_pfU=S$G~fK zK<8;oFff3|8e!u63@rw8*l(yb2uOg(xIkk+iV8~@Ky7g?izN)~3=afq_#!7%^MTGy za-RUIQyCfD7l7Oj3M0@tV<7i}$|4>H7Ihv5*7bk>w}Qu>7#Ny*Kx3UCb=`c+CxG$> z14GlAKmS`)zWqNSQ^U7>0VrMm|L>v#vad#tWgWxc1`$vnK-T~^9xI_D%%H%$L+((I zq5?Y;=st%Uz7`cw+U*9rDRKg+?*p=ffnnx?-~V@rfZPZgll{-fs=~z_2cXhiM%X1Ct5|1H&RF zh87J;h6WK({SKL_kila08skz zU|;~HYeq&E6&DuQUQpTO!Qs00&wm#Y76va>klcs=oGJl4Y<&(2pmX8f4HONIFfcG2 zogl!pRHZ?I6a1H0%$(7q8oc0Lqu3Gsi${!S*yZ_5WvRH(=6Y0ngJpu&}L@U|?GZYJ*!au&x8; z4Mv703lRpEb&L#7I%)!sz->nx2Bvk$@yVcwh*N%s=LVoSoofq9*GCozFfdKBVBlQm z#o!Q^EjaO zly9#<)?ZjKu=R!TaP@)8S&-WTcqIB9SS0(L1lSlFEZ7)C7+Cup4A>YzXsQtD;lsdgW6dP3{Ddm8PwGo7>-Q=wYMBt*w=yDTxR^IVS$JR1E~GY-UkZD1`W`CIL}oS1zZ_G_nt5?F{wx}u&)zgU|Yw;@JK{g;{XFF z4nXAvC=Nhj%*e3FLIm8e0flW7JZxcM1c^gP*ev`Cs%P0$hz*-%(69m7W5K}E2Z}F{ z-$4Eag^`m03qykj3j-*ez~Q9;8rylqz{0TH02EFjH-f?ll=c}Jl+;1tp{T&Z3=0ni zhL$M~EKKXz1fDX0!UYsQkg$RDFF;`f(hJHrp!C7du+%_RV+q4aaJq0^0P16b(ksM| zkaU^>^&@IJb?O17OOQYQGq@Nq2{AF)FtDrx)gd4|K>a{ae*iRo%fi624pbk4>qQUH z{Q;?#pu2t)1zH$SSTJyKC4l0Ffg#|_UUe1*4$T?dd;YTs$k-HcZ~m`4;{ihk_a^W< zWZek|7!tTQ{@3kjV2I$}@L#uK0mBOJ{r?wm@B2T2d;9+m?rr}YxVQeV;NJ3oG82QK z1NVyc3hc|(Rk)X^>q^gB?=F zDX=eF1G+)LNHaIfrFGqvG3SJA^V8F_t zz}~t>Q9+FfR6l~sU@e7UhA;mcL_l?>JVUA)14EjYu7U%oJ;A`Gk;de#$;!ZM&%nXN z0P6oYtO3>iS_ZBRfBqi;->bpE@>~U!zZn=(dO-JKI192cuqd=a&NdWq0+pvdpmOy4 z|8x=1I#XSN1SSWDOf`@mXGKtb;;O=8;l=JYHSQ!`? zI(if(oS9TD*cllZ+Sh>WQc-ASc>mv1gnbrG|No1t{QobfV#B>)eWX38 zefL=nG>!pE3!ruM&XU3m@(f8v4GPQ*EE*wTzcDbh^r&dGGJO5NKm_ET|Nm3fv=o*x zs4_MP7;rCL53-9zA%p?sZw7|s9uVWQN3*chV^+;f3W_YWr7@)<(z~IxX zC6URfE1UM1gP`@mJvB86jLD55#iGe|Wi_HB^~y{!b8KU|6$8nQ?)T0r#T*WQIjr`3#V|Xa4_Rq^5gf0TaZJiQ zK}1=CpIKSJf>BGunSoovm4TZfK|)zTnGs^95)%W%(O$@U3b!5xhGT147|yAJ%FLht z6Tp2PWr=h~Wq~IQj0{<-ATziGQW^Ld93((#L>bg3kl=)rWfICviUJ_>(!gaY1A|8o z14G6dP?^WT;I;;IZx|?z{r~?+RZ*b}bXOCDvPCI0K8s7iby)mCsH+DgsFiKmUW;9N*PIWdcYohz6AnzyCRifXW3>`LK%NfB>jp zV!^!_T&_AuFf(WgG&8U;IEYwqFJ2ESGZy|^AOb3XLF)H191t+!-rTRN!N35j)3pRH zGb{x8Ux1ZCQDPCZ0&_|aH$wxs&UE2k(hn+E8bIkpqL~3y#)IMj6uy7{Hwb|9g8-;5 zQ0@bT8L00C>NBt~7^*2SgXY1QnPxkH+M%wX#yA55LvwF~05iC+2})zi0$vQDJ6k|y zC8!U|$RME(iBHg)h1RtU49;sncW`MrFmSLi^r-&%?;z12!NTzWf0N2p2hhEQ%HaD? z7#P@k|Nnok0&0IUFr=+vU|?OVrP0ao=YO(F)c*w{|Nn#fucf&G=X z#*HCFKv5u{u|a^Fp#hwKK(yn479=81sn83l%7HBj9H2?tPIyY&42 zKTiN8{@{PH8mLYJsZ&u{!Vv$jK>$<_;jOO}mN5JP-&kWoSbYl$4`%@;hW8E( z9H8(3?JESW@3!Gy)*tb4sfsQiWM5&Q0|N&r{W35v)zD;EAh3da|NRBr`|i)+-gAEf z_xAf8+}rLqaBsa|!M){v0r%$n8Qh!hCvb1PAHluhKIrbx4cvRxVP;!!FY9;sxKu?9 zY<5bIB{)2mK<^(#^xYL1*i;HWwy4C2g52QVGYb^w8Vn4eyu>7cP$$j6rlRn%MI{KT z?wlP12dJ$HDg)j!v#5aF2y!c7cPcQ0+zCqS25&*_Uro&&LXh@vhtQ_~x)T~08iY1N z+P@tS7%GGy?cNhY`~M#h+V_8h(Dwf;gtq-(Ahh-W452OmCkSo+uOPH?y@b%R^$bEQ z*2i-w2tE;9wVs6m)VE`{`Tw6q1(KIQclm+tL~~g4_kW5AXr7lrXi+}{1M?(szK~*O zU}gx`5adV@6A@apoLjMx}dCDIrg!0j1O zTm3{2Xw3fee|HfEh7)TfgcgI^uS`k|>?$C86%|q#Kuzsq*)~hYDy8PE{h6p+SS00VD@% zi!d-O1CP&v`sJX$i=u`*=$^SXpmg!?f9nKh26qj-`XbmEAo{$S7#LQq`TM_h0$%k2 zF!f$c3=AvR{Q2KH0W=1PtOvzi9x(NuOsD=o5MW?fu?Cc0LFw_&e^(XI8iPOokEk?h zurh$x8VEFj?v!NNz`9c%T$U*?F@gNbz|b-QG)D%yV++z&RRP^E3vMSgSb*v*P@fCr z_og+Vc>eU?O$4+q5M&Ox-^a+RqAQ`mEF-jYy`loBU6usCFBeqz{r>MN0=l~ta*ran z3Nr(VH2(Z|5YUZyz|c^^ z&Y+v|fI&Hdok6iepBYpxfbKrgRan5t$Z%M-L5Po`K?+n?DlsWafa*D?9tMW2o^B@w z4&?wRaQj+UA%Q_rq6a(<2a01wkCn`d0!x`UusZcHGPtWW7%?$4Sg|uG8mKWr^2f0r zP#;R!;2DFqfg9s?h64gx4%rNE|1$_~U{zWR>Jx+NI2MNYs(1eH5Z%DKZq0@NC8BFM zSE_H|T%oQav|zo4(8l!!LMzsr2(4T%Bec3-Luh0F3&92J85pvA8-%zSID}TO2bDWI zLW|aa5Cq+m!ocuCa7#aj(2o9m))_)C1XuKb5Zu|Xz`$a|z@XHxBH_Z2%9_y4on{QrN< zTHe2i?SX)R(29N@p^g1a3@j=FLTmdKSeC43VBEO=hTz8aj0}P*Uz`{?CNQl9um9B& zkYvNs#+%NW@+fyuW=fyJfghTzWiHv|{; z|NpP7rfjf?QH0@;Mka%U$OFN}>-ia)G}0JA?%2`~y8i@p&kU$t)NnwAK~Z80Bj{Xs zX9-Z!VC@Ijzo2_jB%GN*^Jt)Y7&KN38aq?e0F7U+o&c(!6(v#_v^BgLSQr+FFfb%f z0JYb21riu_BNi}dYh;7O1#SrL?AMKOV9*wDX5fxUV$gM1z^Gfmz^tpWfKf34G;gJ^ z4oZ*z|G!ez5?IBs<-danD9jib4)-bwG&6$iR2J}N0Ns5IQU_^kSgJ$Z4{6gw+HUVv zm7GCsH&FYYf#El}{l?1h|NkNtS7%WB%^BS8U|>-1{r{gs735Y>JB5KkZLOBUDscO4 z%Krn<_FGy{g9ir#Xnsf0qK%P(;rRq*i`NVv{yz`^-O0wo@PI|jVikjTd{OW%wburJspmoeCqvS{3C4btYvCb_U&w1q_M_t&HF`5dmIIpz{xe85)=r6MUfI z8QJ^ef3vEtfdiwi#{))12Nh;620>MB25wbG1_@Or202y54nd|3f~(gvGl;9QFo>zL zGKi|45Zt()jX^|}ok3W2gW$$~4hA7r#Rv{2#TBAViVH-T6lVxCDNYb#;$+}Z1F z5Zt<6@q-+b;tp}9J%U@-gUnRiAjWh+aP#^jf}7S~5!|?bgW!tw3=G9RiVo_G3=D-6 z6=zIlP@Evl#J~_ViJvu4Om{^BlrK1$ks)XjH*27nc83uYM9sy?ObkJj*kEEEAbp=E zF*6uW;$bxs)9wglQUr@#n#96jIEfu9wnK1BKS-RF!Eh1-!=y=!Q1LxbaW<&P(F0%5N2>#AjF{9agjlB!4(Du2E%Dkb<;rVwnEi0 zG8C#YGK8ps<7ik z8Nn_63=D>SKmJcq1LYY|p0W_yxSm01W54o(5+?1ALZ&Z*Th@cb-+xqs3pP6D98*NL*2QKg(0N(&;Mps z76uPhMT02}Yz&uF7#S|BFfm+JVP?3d0xD-&7_O_ZGTc*PXSk`t!Ei%`i{Z4&4#7?9 zxfxEXfY!-^%3w~0ODdqVa6tEd?GfC$9$ZGR5M??bxMMx2EC!X$8$fl>2RWuAf~(h` z5L~&QfuXWTF@lXr(LIGs?q#kJ)sEn1Rs@Uvn8d=6J#hz$*p11o4A~Pm zL&bIouI`7JnLY7>;Og~k4BV412=3@#4VB*`xT7Cr))~Ro>lqj%KyvHZ8L}rXhRPqn zBG18)J#jWveuLnSeooL`q!AKKFnb_oaZf%YxTAj}RNWCQ<}fm3Pwa%spTHu|#E?C) z5h}kyaCJX3gQfZv!4>NzgjVzi2<=?Y%uu1qAhfzaK?roGYPKqi(CYO<5ey8%3<-<@ zLOc2sgjV;1&bkA|9mwwt43?A62!ifPtegmPTP2I6IH*hyfSA$maDtlwbpMg!2}wr9 z2nj~eeNRyJQ$gx;(bR+bAmH(|6WmN7KVJZ)hX@HKkUejp_Pi0?(H{@hcSdk^KPc=8 z*%J&^4|5k2L$)dtXxxr~J+4rF#M)yCRS&a=8QiCmP*)^ik2X{vvGy=9ONztn0PQbi zVW?CE#Tht$4oET~;zt6MX4W$>R7?b!Ez43N3JO!uowX3Ppg573?hwJvpcui;ct#L( zuT;fUkXj+A+5{ocorBuyp!fjA4M@M@0dA%XpnMR)&GZGD&fh@vPJAP{y8jPzh3FT- z9qU2nI2_<+0INNK+ph1-5O;y>Vq$>U1&SYH?0QI|U3ZY|Vusqq%pjpoj9te_wCf<$ zE>Jt1g~3uC-9sTV86Inrbn%)uI(JwTCfuW&85Hv=?q&Ptk z)R|-0BDkzyx8ne#mc%)RUPe%T5VDSgA*7ds!9!J7qJeSX>VuCA==DJm6J~wj$AnoQ zc*4ZMWj~}o@MprT54=#sAoYPOR18;rU<;MURUeo_<#E*qx=?vS^?@=}9j^L78Y+*g zJ`je=BkF_2>p|m!pfpNpeQ=WrSA9^)pcqjBzW)!oJ~)e}p4j?eKU5#6yaD9{M16qW zp3PA8pnL<$Q^eK>OQHIRwPz+&Jw|8nK4R^e$Vgs&ki`TkcM{5nQnzG=2mM8wQ4? z-W3cEETA#W^S>IzK;xJKLOc3-gm(6;2rcdZAh@JoSwfN-G(Q1Zv%8ojH^X7kq2xv^6 zLuhBej?kk11_RJpzAinA0?U{;a60#>C`@6{(r9LoVOSslT5qT8;J~1$;R>4b0I%@` ztubN{0)?fMilT%&0|SG*2Dd;u189#V14H_R1_{u%I}8~a7*zXIG*&bG|Gz{<%ff|0h5;5A}fTdhs8$HW)NNn4-eL-~yhzWoAea5fR$a&&t3g%ptTCJl6g2gdod% zW)>9?A2c@tk4Gsc1_cI5a6BqXq%t%}Ff%Ah90sowP*s=-qSr7mGOK+3?<@jZ11}@A zwBJN%S^r^%WuP@$ixh+w_5WdT5I7;U|2_yG5ZZTthtQt;8-%vsUm>*Z{sN(`_h$%g zxj#W@^ZgE?P4^pwHr}rgg3S3|5ZbE_8YkpoP!Iz3lNcBZd$c@Q85Jdx7#J8Xu2K4< zAPU;kzXdcN44QspU|{(6UjaN$c1LhoKd68H#f5=Gam7gnA<)^B5em%03=E7{1XuKf z`no&}34(V7LFaN;^k_w>Ld}&}JK=AFsG8NJeD|HD)aX(ApX|1|9~` z+8Sr*+8QV5_%B;OWd6{-hk=0|d~OP4Jq&Dp%?d_k0aiwk8C(Ks4E&(AH3kk0j0}rZ z8zi_Glm*!mOHArC8&2V4@t>07*kYv<~$YS7PND$PuXkgGySilIHv(U9rVARcEVAK^*VAhoY zjc+$F=sGko>Yhko)RH(1T5BZoKyY=xZomTuU4sRTx)KfyApM{@7~PBo47v&qjJg^J z7;XqIUJp{o$e^XxAR)-W#9*k_5WvL%%HIzJ!ShD_iUF&b8w|J^K>3$}@z9zHOlQ|9 zupD2*z*x9u0#oW51(uXG42+R$Cop-eed5Hxp}^v~R@Z=mS=XY0X+~prKWMFkvIi@p ziqH!1+yMhaO7DS>OI6;p3bKIqZJc*v-~i28=?E?FzyF^Dd~OW`gL2>h{~V?a3{QGg zBr+IO6gn7`B~lpJHJlm#|K~K((pbsx=l=rm+8a<=09tbc8guynKTQR^mrLRR18B_# zXnlqNLjnuCg);*K18A-3a|3Xi5Zc%entyc&U}aEZSgD~Hp~|Efz{TjG!Oigbzk(nG zgZolN4OYfUo(voe49l0W3%D^bGKkn{34}0!_9lSlzGQ@U^c#TcI0gyze?KI}WrTLD z-|fM`0m{#yeivwd`j#UDhl2t)14#YFJ_ zJ}y-Og%v38gVx1^$^m7E;|zq$0R?7IIUr=fz@Xh>!X(UafZ?cfG?;Xrxty9Wb@c0?s3s1FU21NG_9%j$ z55ztO#)lpZ9H89>hW+;)81~$^ zVAy)!fMLsh4TjD46&N<%mtfdExJDSU#YKV^euObQ$g zZVUo#E}(RnAkg5(%)#KM$iU#n#0rXU4HpK6Mg155JA&PhI4>QsUdWVzO~vC=i;5dG z-US#~`g9E%m_YV{_Cf5hW8l$sNMN$|V&DMzALIv+yFvaZ#_b^WpnMMtV^H{l%DBVg zObj~|m>F~xni(uCSr~K`+8HdYAT+2vvRK2ypu1u!sQhEnU9p(SeuXH5@`^=FLMt{F zf#L}iZ=iUZ0dBi2>W}aO<$q9oF)$ds-mAVt1hQ7?gvkE?2Sgy}g>Mkq{(ptYw*L!6 zw*H?XvgQ8-k4 zS=#^qzn}`ke*y45r+@#Cs+fo@UC+XJR6|i=3A2p|=nM>JCPj&4CJ&J%>s>?^uQw4{ z-0vW=bUhQpQH=nQyg(9zkI16+iUK7}iVH%RLPQp=|M#C+g#mOnwZH)e0hR^p?=T#Y zP~cg-9(3L{BLg@1+$d)OZU#k%HOz_%IZTQgK1?7tu`qD2Wnq}O22^jbFs$kU&C5g9 zn=D}#U}@>mQgC5p0j&|&NMPjl0hJXAjG+4goE4ZD8a!AT8XQ;{!0R@^Z8zn$3=GV@ z4GzrUwwwS9N3WKH2jl1e45Fa%W5lXg#8h$kKjR#svZa zB8&Uig6(xJ9C2u69cGSBEa&b543hcfaP#M zDC`&*BG)o7@ULfJSlaWSq02x;VFH5!&-wNL8L|yjBnlW5c;2sLVA!}$E5Vx)v^K3F zgO!0hAcs*gV=Xi2Y&=y77e)q#!|McCmh@^VfXev>5#0y|Mh0-2WdOHx;psMko1r0q zg#i?gAh&?l#4<3r_JYVvQ_TvKCV*s2CfJD{^= zKZku*BHRv2jA9H7 zg1Q0@;C3<#gL4mP-Qpp2P`{;_0kqZzq!+ZVj)lQ_4QTE7xBnp`pt9jUxIA32{t`Qj zN`%O=|8tHCvLuKs{~sZ;?Eba?2V@dNmfr`t_khU0`#VJT+}|Lw{r(D(ZTA<5Y`s52 zWXt^tBAf4bh-|vwAhPj(g$T3{BeEB~&Zg0ufdiCZyrDF5Sb@S07FM8e6M%--K5qsN zP?&+_LE;Pyh%({oKS-It=gq(YDi=U?x+%>|jLC7{750Wx0#e18C_{SFdlU}JEQ1;wGa52&sO?I}-I;bO=F_d^vU z9)riCfBnx9ZHVAyP>eXuz`&5a78E}}{%47R*7Y!g$3%1(-~LY!0GSg5EvFR?7Bhg{ z`}cpg2m`}`HGB*XlDZP0z6RJ@21SF%;Psdc496yb+}vQm25RFoFfg3%0hO!Y|7VFX zFq~ck(gWHPB@Q*0g&_;PCzgRBy+_f)osoqhea)}`r@?-Q*v}5GCln2uq4tCJR~=X* z2-;gA!NH(wz`zLFf37I7m_bnjq{atoo_7x@t!V|QF)BxNGb&o7GyeboTE)SF9TWy@ zzW#R*1o?-Nfk{%e1y|XYZ?*XX+`OCq8jX~Mq zI0FmAvNhlSgW69^RbX)f2?+@K;QwBA0fs&QnHXej6d%lFmSEWbpMzn;|Ayo_>c!&V zJ<$vd7VHdcps|StCWes4nf*bGp!N_*f54jm{{>Ve!1q!xFbOd1xz7P@YbikQoj^C= zMuU|BW`{!Z9CbSlR)&)}?6Dxh9*}E57~MXYT^o|-sGr7Rj~og16#U<--hdQdx&{jv zIvDoO$!py9@XWDh$7g8(S(*cceZIvDofR{`(4UBDd8 zAjkshqk_bA1sIqb81~$+fQIP=hP~>bc0O`^F)%JNP+(a0ALP#qiF4F77?%GxU|8|r zf??%<2ZmMuJs4L1X92aV4Hy^{7?$;GFo5NipOEZDPM@og>;;7}$bX=)g!mCs z{^ClX4GDA96`E)EgTj-8VdH-WP(P`ofdRA+RaapF!xRQK6)PT49DzbesSji}$Xo^n zrgZ`gO7{f7`;wLVM8Ibrf#jLiDKIGYf!g>g3`%_p3{2}Z7?k={7?{>sFeu#vosAU1 zpwt(@z_c!bLFrxu1JgPO2BkjG{#q9Xr9RMpVGjnSJ_iP-bv_JAeJ%`4>jD^*`aD4U zz!{YKI2bnG_W}2x5dK0Bvo-OA{lq%N{B$FZu%9k)5AJvZr648-W*bF`N(P3wWN`T` z)0hNppMqpTsc)}3s2{Juu;D+XufF-e0mG*M8Vno%n=nl3ftA}2V&|xHF*u0nHZ(B& zX`I=Aq^Y&vf?=YHu7Lv6QV~HGU4;eATbgI~F95R@m>3wCra3S;8L)!Nh7JaXgvOcu zvYa4w3{1Km4h$L%Gy5z439_(&&kS&40rk5;X4*8i^@Gg+|DQ=kfMK&b3j@=-Ua*-7 zOd#_+LZaU!-o5y{bjlap!J>#%mxg5)j{H*HW)}9NFG#ggTz58 zV#5Eu>Ium9Gi>;u!La{-1jEMv7oz8=vokaZfYJa1LsJ7QgF}EpLwi36voJ6S9QgWN z1;jq|^|^{}!vpYsCs2LPz!2CI`(Ka+bZ*w0=9&GV@efcv=E4IKV^c9`Xzd4`p>?GZ z6rT!Apfg%dd|j%t2UK=DI51=|?7yGDu;+dR!^Zmo(6B0i*8k|?r4T(w9b_jcj3hu~ zQ4AZw?G4-if-Imt|1zMkR8U~jZE#?CAqt9@pdNk(M;1_+Ffg$6i7+s$@GvxofWn4> zL1AnENMrb<(5}qKn5)8=V55VCJ3eN-o_o^E(?D-FhI}3*W|1}sk z{Z|0zt%>lw)er^BTMB4-Ym$ntfdkVyVNjld@qpnL+#FQBqu0m!WekUTpZ#8yaP5@2BJ zlVD)()0S{%5MW3M0F@D-w9Ct&90X!>faQ`HIN@?G6aN2qR{77MWW>VI6arEsz`(pt ziGe`?#BOGAGH7IQ(&1om0Gnk3ZsRa8H8BdZG%&ELNHI8sfXWq+S|$c(0}k+hb!HVt z24@3dh6J#j1_N`S0F(`Nix8;)0dmX#|4s%H49x2o8JJZxz%*GO zFzo;Dz_9th1;eKQ3=E4JV0Azd1GCD5a7euCHXL9OWpEbIUGRXRoPk+Iguz)Lk%3u7 zn88_qlTk(qrf1bJAr|Lky%KEkzq+g5(Bde6GO8AXuq(ozyi?NPXp)3^gEo8XOob8fNx0C@_J}5?#i@z_6~7L6F6QfkjP} zp@EHA!N~{|=Zp->YM}ko7yc)SurP?MQx_0q;9zhvP!R}X-~^>H1w$inS**~&#KOR; z;vx*HC)iYu{&x@o`IkY#(1@FXK|pmvAQPzmVq|CvV^9b(69Cs!3QW2h4ove!1X;E* zvZ?I-@4y18+ZY&Frg1Ph8!;$288I^i8G-!4%n)S7pwMEV4cebGQ3$+OOLf8|25kW* z2Gt2g;6Bm;VGuirf&Cw-3=>)gsz+NuWkQDoLl!qkEVze32&4uy$0oFlfx&nk2Ln?d zKZ8REXo4CPPEw$8WC0cxb_NFl4p19UzzKB6+B$F?IXIaxf#ZW|8R*<9kY12J9R>!_ zxs;&u=GKAQqM&wYKvPpcXm1gytqInv;A9{N3ilZdOrY`rRF8tn22i;$OGuCfRF{J4 z@~J|Qx*VjY09x-)5`v@!kbJL@AWK1GOaBHebu0rz@S1iZK^6suORWRR zfy}xLs>c)*m=qWU`riL%5Zlu<6C6G^4HNr0pyoo`T>&69x+fHvia_bKv*o`4!>0d9 ze?j?THVUiGo+KNp~0Suzc7#K{}A>6(7z5>IR`w|SB?+Y+&x)187 zFhJuLTIAf?S=-11`bg9o&e6vs^GJ@ znwEgVN`S%HfSVy902HpEe6IBul)o4lI2l0W`p#=WYB(62OhEN8C~iS{p9fT4FfdKC zX_(nB1P%Xh{~bagYMJ^#{WTDKKeYY;u^FLefZAq=avag`0{Mr7p|wYVp{)nzFPLAH z4URIv{Ads~N1cV?0Jxpz(lE3Cmk205wyqIiU~tEvP$V0RtC3wCryXEmQaQkoY{0>gB;e67v)>0=cV8BT)ZL&nZ~p%mQ31*6g3c$@NMOna zg`b`)6Nuc~D1S-=&^Rl44sUiw$e#>8@D702(W6U|3`Xnp=gr0~8OSc~($cEG7UN z_8JEmKy|PXsJ!i9VE6&5=NOj$ujBxQ`vZ`B?<>z(1Zq=B=}vH92!V!kJ;PEX0ar`) z{h;#1Ac2XKAy@>IPeFAQE5iZ_P#O#Xt8HL<2kQ42Ffb{0C^3P;9MqnHgfITNP=SAY z)o(B&#{OFT=cq?C%i6(3 zHSlC)5SYNQt-pdHK|p}PS;wHErC;D%i;ALz3&a2aWer>m%qpA=hsDAf*i{xVEbdoe zNHJhyXb{n1U{?W&IWQy}Fft^BG%!3jVPkOC0kzweH;6HS_N=oqI17OC0Skk(2pfaA z3aEcLg<)~OIRm>2H-oqeh|R>1$fCd?r?P}$Uo%K88>kPR@^2(K?;T(Q%_V~T&c@)RBh26+GKFDz zKLbN*gDwM$3LC=`kp&Ek`k5GHGeEeXVVgP=!$TJ34TqUP=jMXU5@2vL5C)g^DGeZdnHgMk_!t^OKz?Rs zU{T>_a0%c9`yb>l7ZGiN?698LzHFa{gj7#NgY7zC7D zbPW<17z&oTgfw*agTlCmaYcU#sC=nd>Y}Tlz~mw-$TG!MQ*}3k0}CjxCGcML_e0whW;2Tb8b$0uFx%7SMSLx&{smUqEeEg$1Df;mlJ&Z6S*U zCfyAV44^u6DZ?Ql(A)$TBPt0L{NlVOY}7#L&P3vI{i-$O9gKSisQ1xcL7@ zcF@?K0|Uq{AoD|M=Rhf@~fegP4k<#y1Agoquc$kAzAXm#zoJIq0kbWq~H}JzXHN84Qd1 zOBi?dYbz)*Gcz;@R4^`BuPhMBP{FupeFfv9{sP8D>p|&>mEn*$D2^)_m-H7fE?BQ< z@q_`y2lZq47#u_l8fNwvFfQv?U|>}N`Lls>`F{b|nQFG6zM6spQvu`Bevtp%7+gib zd5m$vdXOHFT3rnVCWdd8>WT{H%o)uy`!iStSwQ+h>OkqifPqy7WR@1lEQ1FOAaN50 zcM*_zptUV>3=ScnG$GG$KnUapNEw~LpsR6!DHJqDV4%RH$q*I-D$m6j7z99Sm_T!T z1_ziL7}!)GX$4fKFJR^br2&fsP`g<`cZUN5#4M1U1A`OPEHQ>~uvy9*t~0&;e?Y8} z;gBB4Opsea?qv7}>OZim6fiFC=VovQt1V$%(qF;2v|q7d0)t`$D-)=Etoz3x0IDBq z{(;JhYic0(f$9;^nEwODefMuL?zw+~ar^xfjN9%XVBC6t2jiCe8yGj=U%|NP{sP90 z_h&Fd+HfBj_o}0hR~2|b#+eaw0Sg#FZ7Rt4)n;&e8dTn!vI(+0U|>^`U|{NFU=UoV z!N9Ec|GyK6zm9`}MTHY|ha~tcs+2XLb3#CKdZ2n*l|e{_mw`bbp9kCJw%|ElHfW}T?ZN`gN%1! zw!1-Nh@f^U$S)EM6MInRkr+0B=a442L)tAI3<^>{46SQG^_~pF#5EEOptB|$)^Ia` z`VI|iBp3wO!P=?FZF|_f3dltuEWyy+^Wpzq^+1LM5e|l?9)<>H8x98N5Eh2!9v_CL z9u5X)6(5G?HK6`!07KIn4u+;RAUTExCL4B!B#{7yRuydOSQwhtK*mb=RTxjZ^s#X3=^U zhDGZ^>)It4CiQ^o2GBkSP(EQ`Q0e>s-xa*)KvAQWfq`L3gQCGAW(9^L3qbXuG-GQB zsNP{?Xb7-pSg;tB7Zn&>bUyuW2m$E@i7A5Hr3?(9{IA8psZ!C<*U!bktD?%lp`ynC zy2FlL#h{_PAJld*VBk^#l}8K=ZVjvqCq+Qx+bj%i2H^F@3W^tS5>Td#>l|H*2KVYv)ADO8-wBj3uXoeiRl~+62_nZGl>7^ z|DpN+e`JFOgNC^70S5*yhU4I|Hx7mepiL1B&lntp7#Wz2xEKxyNHDBl4@$eb z6CN<$XK;|yHV9w<_em#!a;;l~7{e(MkU1cCGBPl!G<>U2Wnf@yW?EM44&^-!FApbEiFg5ct zfX<3#0G$CC1Tu?(fvIU9gS!YQ%y%<9kYr(KG61b@0oehnp9L8F*KA{u5Ch3GH1OMi z&M5@d-5`A|3_bxMb-Ef47(wmW|Nr?_KA3@#17!12n~1Zo2)d}~orR&Zeeo&OG6fyK$-)&L26mj)JwBOxF@Cxep;NH2)Z zz`)W3a#tVdOi?2?29SLjVEfz~R2ZIs?E;yb0Ww#>g+YkHMT3>0K?Eemz;eWZk)Z*a zPg?pF7?jq9e``?zolC^P(B7bB@rdE?{|6x;KFD0q{7u9+ClzIdCa^sY3M>p3-=3>@ zd~;F(ooUa&;M4-T%Y%WTr3JKqM@7JefrDYudXQd_e_`&r3Elqzaytiu>N*yNR0AFc zm31r(`s4vW3{wL*81AX_GE5Oz5b#Y+_rw9FE8wwL1_n@{!+~M(e~{RDP}@fVH2$#oKIr^U zHU@_fkbaO}(7HRt4|Yr(3|H2J#6a#p4_*@snww(~5MWU1i)fnJug0LfNP|H|je}vS z`g3N`94VU$NUnjw$$*)`K}3SVXdN2^g8(RfC@?HiS8f39(^2YcXb@mfYzSbGVNmL0 zU@%w*Di=WKEQ7*s1;hUP3mEp@pTV%_{se~Y_d6K2-EUyndcT5U%l!g|&G$1HHr-EP z*myqzI)=6ZIz9>;n*hxVfW{v{a{{1w0uu(rIM4xm-1Ap*yx{&Vcy3q{%!bTgu`?)$ zf!d@x%`^K27#95pjiU(jLdI|e7#7_JjWa;T7*NM;k;iU8B?-)ZuyHVScPiM=QJ03! zS%Su2B^jCoKy%R`_k+f)Kx0*)F)IrO$b8!;(7XY3F8eK*?Z5<5p9k)nGcfTmD2RdF zhV1UAJP>z-(m%-UAoWR5^&qwQ`~e$(0?ofe#!*3IY)#<02UPDQ*v(Pr1C8x8G%$eb zBngJ59&Ldn&{}zcnnqCnEolO%9}DX52rx9SIS!r&VqlPAU=RR}J%RiN@*`}neiztJ zkny;!V73AiXj~A~uEb_8C?A35+%`h}gY56+P=AB`46+L{#)X*A293kQ;s-rmK;aLI zvj$t->8B6uMu>Ym!E6VnH;ps?7g34%au1<-xh%%HL1K3H6U=00KOg4%PSxB%G)>ceaSg@FbG6LOq5 zk>Gcb+hFs5u=zevIDqE=K=Xm1@GxQcfCvZcIqKkX&37J|G?5GEU!3N%~6Mi zIcQ!DR3?MUP74Oax}AgEpnmO!|DZXvJ=~BvHqd$*2Jm@uOe)$8Ng^OVXzdE9U!=z1 zAOSNIG!G}huta?Ww;;=gCdeEY$Q;nv=t^$TJeIJE5V#NG(r3`%WWdW1ETRCe3mC!_ z7zEcbFa)jx&9Q*yctLYopmYkF@|Dq}&^FUz_GBXfl9<&bf;YObWUBC>Q zZ}0&7J)lPo92X1>pt&h!1_$t*9|J>DA16bQ0LUzmxfTrKY9M!7gUmH}0M3_YAhyB- z@H#D3fhHygMkfmgW+ww42GAT;QXi--lkyW(cQY`7+AyGX6red^*u0gBKqv!fz6)d* z3qz0qERK|*@duiFyakLZ-IoQM>jjk$u<;krycTGT1=J@6 zjUm9&254={2eUcq=FmAokUL@POh9c-&^#Szoyp4|ka;Rg@SO*sc|fLVpfx633<&|C zeOaJ2CL9ciwIZOg8Wx7+37|03VPFu@U|?7$!ob|e%8(KOn!AVGi`Sx}3a&d?)`9xT ztPIT|49uXhTFBfYs2%~WQ30*H0)-8zo#F8xluujwL3|zt=00AAB!QX+(E3uQbuaiJ z@h8CGAOO-Q0$zUuo>K;m?MwjmQ9$G0pn3cT(D*udo^1j1DR4WCO@#@nkAY$FWYD;e zu0R3HCP$9F7X_|MR6z`)?V0OTht za2PIH!@#h33er4d01Jb1A7q|!0mDu{Nc`zT;}0bF??1R~6!_1;Y{Uaz`>Nb0&)_WJ z(g13sD)(_PIE(yeU@`*D>CXKD3R?vxd8mE?(B4`GCL>r~4eG-%Fep!BU`#d;1NA!? zn2kX5DZ*egn89ZBK+WJ|a0md|32Nhm;t7;iAn~HKj)7srVo*5=S})gu7B3(@sPTf> ziwKGvYzC@&>dEwumzQIpfV7&t}q8wCwDY3fYuR0>Ne1s(X60#Xbi2O z@xcZMa9@Xsp#a>E2Bim({g5<)X*bAz28KsdV09QMAHm$w$l#;{n#Y9M530vN^PiwH z8C3o@7(?1zpmoulpfX~@0|rpOV_;bJUsvG)11B{9f%<|0;Jfyg-S=Z)5CZXi7!H8@ zi_#1M3||--n85pP1=1KCz-61$Gzo?a3_>dy7=&gpFhIu8oTef2sxuP{Lvjx&4nSw# zGcYJGVqkDurp=Hbq`}~@j*-Doje)@loYz5Pqo8~)z~I^^!r;`WEa1u@0G-7W}&S>Z{G>C%ckJJ)C_Zs#X8Z$JADrK-TursVRWMx<&sAO=Kfq`L7j)KNo z1_p+nEeZ;~4E79X48$1P1eGk#Feq3&WzaQfU}RuebBBXr?HvJzb$28f*56TJSaC;# zVdWhIhE;bg7*^kLU}#ZrU|6bf;D67b6aRbvT=?Jj=f?m3KM($Q{CV-e^UsI>U4P#F zUoP_FfA=4DhBF2nSj}%y;9yv)@CU4}=MNibFRH~+koy`K8Cnz=p>qHK_bdRdAq2&; zk_8I`JHvAWHiicRN(RS4YIE2b)?_Gv@7DwQr=0<0AIvWd3~O`P8P;ZSFhK134YsTI z&y)WQ0uX00292(UAT+#q) z!!a@}RRP^K&%ls^p%-FC^8^NlMH4{dYoKvrka|$Kg2u#u{!a=3)%y@W=xh;)eV}s} zlodc@#)}(3>J<%^F#G|}!yLx212pCUavx~@2gp81Kx+dT7#2^E0nf*R?s99IAPK(feencws2CGN(*zL)&}i@C36MEt1_ow^rU{@v zI5WfI3A|8sp!119d(&S2e;@)nZwIvgl9}O{0jT~2jl+Z1Zh-7!2CqkGf%?sv0TizP z{~uHN{{KJ-14GjUkl#S_2cUfX|9`Uz3&Rl|IfjN1kXcO%Aa^eZ$F~q@pBh8@0!9W1 zpAX7sg7QJ{nKBW>7RZ!obG>x?c^l zM*|d(yx@CsK`cl*1E~eM`8)UytCR(h@nnSDU+{f02^i@^A2io3z`y{SgU}XO!oUb# z6U_>`e^dbES2l(O@c6N|#3BaJS`N_qT1Z&9FfcPX8+`wt0E*X!fB)ER8XDMaKx3W% z|2;PW^#L0ij+rP5xHG7L?@R>k3r$w}^FO13kAXq(&;KNqzyC8DxEUA(|Nc)>`S(Ag zfrEiT@ZbL=mH+=U8dw<^1pog}QUTeg?T`w(Cm<9wKZWcLW$@VY1Ms5r3@aw6F)#=+GOSc#WM~G@fif~QO;84>Gf@6bn!wKB zCIHGW3Q)Za3`rBdgYS3)rAdey&^>&N4C<BC z`F{YzrvJJfp!wzl;QK^C<4YU9f$p4LI)R^Ikw8nsByc~qjv-a&*Z&0}iW(^lxh%{o zpu7iKdjnEm#lWn>$k3t#%J-o0X3+X&kUq#68ZJ%zpz{f4Fff4B8$#FWeEZL)k_&3D zSTHacG_>}E+D4!L2Z8QbVlw!?RE3X$O-1vcAd47-unMTHsx2VM04gs*?VZE_1X)xX zn3zEAd~FFPCMJf25G4j-70^5qI|G9d$SlwrCs11pw3bc$pCF53g8|e3{|t**7!rg) z_5Q9;ptcVv_JY@d_LhL^d&vHh&G!QsHr@AN*m&OoIt~uoX97|U!szj{L1T_OXx$}f z9V{%K1gu%r=KdFCF#^xm@4qi#&7>v(?(0DMO~`ZDu(mO*?UVpAuX$!as6EU9iffGp z%%HXzBZHF;Xp94tP6D7~^C0)2>sQd2qh8W9v)_VY<9`F_o-R-uTGwC!^AQd~7Tyq6 z6;V)m+~L3gT9a|3X=cA51B)7H9RLf%qJBY!rRw4gY$~9&=^PA;K>f;fJPeEadBFP* z7fmkb2dyP#S_Im|2;Ntu!N9=xPmqNZbT$ci-L(RA?d8V%2GB4>cJG0Id({n))&zpu zavF>q|64Hb|F6Kf;eUbp9CcQPMFOC`CCm&B5)BMZ8tmY;SWDM~;?DaMXpBHW1=L;x zjd6q8uAp`?XdW4KMgs>!0{G4q&|ZDe85$RwK<(Wn>dN4-RAAy~0IfX|Q2Eg~v%jOE zrC%5-4hr8ppuI`rpzZsM)<&Pk9Ja&CYEXwJO32QmqCq*xdj8CY$!HB!On)WtI}sWALc zR{^bl;9z)ez@qV(f#Jh46($ol1{Q{61}vaEMh`4fVG?0tU}A7GV9{`8;ALP|X>w*| zP_{^CIHb+W0J`G^WUsQoAqEwV6%2|Jt_%$V%nWP{$tr9LDGUk>PAbd{Ee4>wL_lr= zxuxO%UiA#5ePy7rAqq$YaqJs&mwNpz}Ad@hqOE zw*C$_Q2!e;FVM^;$imaq(*NK;lO6|yLkKqmlNuDo6tzl$H zHsfFjTEoK-w1$PjU>)e}3ebEiXl@_02Lq&*ouNPsqy}`?8w*2HA7~vr3q#VnJB%Q= zE2%LsCh393&Om2v91;*_H~_jw@_&m8=o~RA@Vb+>9tnoU|3Bp4R1XI4oml!GSq%pR zSpGgg!w~@ihNbs;7}|SS7+&;fJ7j?7c?B66ip{`l8w?s4SQw7J{r%q%!ohH? z2UI8VFdXRtjTwOMem%qR9D48Tawd=&ECS&SssbJiEDVpXJH#-?JF_!y+~Y(47e&b3pL{D(gUZNrLqM z{qGO}x`%{^p{b9HAtVHJZi>19GlPo8A_g?`)_~OA`_CW%(#yl()&q(Q6^X?R${Ga> zJPd8?I2f+15nx!R!^UtRKv5z9bj~0HESz-zL&6D^r+65e*KjbTtO4aQ21XV=(0WQx z*n#qp0Ymc|MusIOEDQl_z~L&9${+`ByQQuH$%E_^U=UN&VQA_BxfN9QYD;Wm0PP_G z*{K88&te9;R}HktM!8`F187YUs4V4Va1e-Lp4bD*v!MB8P`L=&hqdFMAj{AHENX&` z4B&BeA7;=TFB6jucx=%`Er7YXCxjWaUMqLr14470pl$f*y z1epvO90Wje8^G&WLFVU@ip9XF%mkpz_E6HH4Hf z7p}PoE(e@cK<@wZUr0rVAsBSObf3xuXC@D3=bi*+ryc=@WED{P$;jYj09qHS{Go_J z_d^1M`U(*S#Sd4QRX$v0*6ldJ%*t>;`u~4%m4@b-{p_H1yb1@HL2E=oW2;IGkHKqv zK=y#l1ewLc;2ValW}pu_~~D+w?N+JM4V7(5ovq=GAKU$Q{L z7Ge*R3J1d@Ay9by1K*YSktu;WwFh+XCMf+UFsG~mx$pmf7L{IxCqh@6TKg3xikLE( zm-T?|Q)6d%ESAB%Yz-TOiwG#qDRvk!F)|pMr7?igaN#p8$4zLrGF6nAGq9E#*o0=x(1{MB*w_lVxY~?5C94bHU!4_7a zwbY=n;$m4`AeVTiY-h+3=TpW%wO02_|K&B<$sWx$^<7+zrqYu zcd;^n?zk*s5?~0@V_|Sv!_MF!#=+pS#)bJ~A80<)h57M1c1F-z)f6=s=8x+@=_!NR zxhIF&rAJ$#8Io*(5QCH@i`OtRu$r+jxUNxdm;f%{fByxgfr2%l_D#ooNSg%Kz5%suK=W|0^)&V@ zhx_82!Y0QGnkqBKzlEh1wt4yn3>jr%u-%p z!oO!_r<@r5Y`6-_4`133PE$k3=A#s`KdKhbJRg?ejkPg0TTvh zwZH$FR8$0-7!DOMG5q^~PPL(ck3q434>b3>PS+xVfra6mDhmUv+Q0w2Du4d-s4y@r z>am25D=;uDSi{2L(Zj*u)uST8%c!UT8oS~!dw3YMds!G#M0prGdN>%kLF_<~86dN+L(jeejUR%{<6wBw!^n_k!U1kSf!0>L zt>IyCUjxc3pt=M!MgXc$KKO@+XNgK2Sdx61O^w4pZ^;~K=OB1qn$1 z9#m(8;u#d*_5UI5ZBUyY)UOA%%|UC`L3=3;sw~w(dxt@NeArwj%q-ZPbBn|r^?GQZ z1~fkp>d%1sHo?q@K8+tUq)!7X7k~U`Qe$BN-F=t>Y4d>FlC2Ef3=c$@7>*kp(qLr( z-6hM+&|(5QfbJx0F#*XlG8{7i_1kzE4v4TYWcK{{ z&(WtW;K9Jb;NHW-@T5nAp-BYP#^PW&(j&&uBm#Yh^FUrLCI%)O zZBSpEVSxy!ECkh+u=W?|EE-UG42nxW=z0VYA5sQ8gW4NCDiX~ME}(K+B85SiApvX# zD4s#_y62xDiwCny52#)Om01DIX+1ywv-C+c&Flw_&jv83tw~`{>jAk5w7wU#C%2tN zkR^pVZ4JmRpfwn`m>^{`V%`*z_Tcli|MsdYAdQa%h|N)VXlUsNtt-)B-2Y#Kal`-P zOoA*ML|asl$2}OZjC+9Wd-_|Dg^hs~w8vk>p`odNP18*9J*K)E3z(mP+AIbP3?T6U zYv&$5hJ+9h8`M4zuy$Sp8q+$`G_!v-*gh6DiN=}z+1w!WSX4mnSqc@0=wVR-nIXxL zA_CgG1R5V=VqgY|t!V&{`!O)I`~;1qu&J~#ELaa3uK~FqR91t|R_$PDhK}1fvot6$ zF@VNm8W-^sq8C zi(F`&+0O!XgDtZlOFaXN3P{~Qa9IP2K?Vl&`t5|ULFXPBI52_s zG%E^#?pSncU}Xpv0o`Q}8ZQN{yHk#t$$#fyM{GeJ4eM7zPdo(0C;S!*d4E9xP@XQ2WQ@Eu{Se z8Vdx~F%Q6J-Z87(V_*0MBI2bA6hrI{I+Z8kG72yEa@ zRyhG0djyXW@4pYKKR|n7)-W&#fX*ZOU(al_6708RljWfGUJcA9OTl|0nN=2p_>9ad z3mF&$k{Os)=7abg%qnxC{Mif)0xy`ERc3#3SJ%!*pidiKeB+kOD zk_)08m{qbtGz+szCe)mCD4hzWlc6+d-z%uxiih%Jp>#Bq28Ce+$glsCO~OEC3NWjL zFfa&wVPsYbg4!JbRqF?(eW0`#l=gtqZcy3_Z|DZKO8lXKypmB6adI9wfL1`FNmV?%Hf##aAt?dGp0_g3l0{%Jb zD$SrV`i)O_ z&w0&+CeR*U2Z0GqGy6g1A;=#yAZ4B~#Gi;f3-Uii46?2b-Mpw#n=sbx9i1Jx@NkbFdJs>tnJsX39 zFv#zq@Id%qff>{uMHPDh7Bl$2SN#Cexcmd&IqFNAoBCHUZ27-{Ve|hP44eK>VA%M- zgJHw}6Ab(R?_k*We*?qT{|pRXYe04~GAss<88R?!LUqwyGUaU||5Y8+0`mFoD*p%6C zHv;pIs)5>7Aif@iZ^ppD+_wgt9zbC&+Q-ANKuDvpssBXd%zk|a(AkEeYp#RWU9|Dot}-z&gsf@aAO>z<>n>mb?Wtk{ zr7KW6WMr74rY$gy>DPY;kp@uB#E>8a+B*!A1LcW14O99-=7IX}$}6@of!gTJD?}L- z1)7k|C|1)JD219K%n;Jp)DLnSs6G#Q4avKp@yG*E@dJ&BJO>g7r7`f_+zHS=A~$gU z0G)NX0d%g&Ur_(a0X)YBYCFN^opwtIy$1_0p-xYL&_Jc24uWcZ}umyY$IcmWTQDr@?_gkB z2bn8ZV1mq*Z@M4Au<^bJbdDD`PYzmZZ^5wqzXii`@Hv(Y49nMp+Isi@F9+|VWoCG; zW5BQse1;{cKRkhRj=BTGivJ!AEB^;Dtok3pu=+n}o`b=FjX|MlCU|}p6qcZR2sFpP z4M*G@eFaN9khlT$uR!Y~AZt@0eJs#AaFF|u&)2kISfq~Zo(~*z)Ish?cM~X#L2hz^ z#wYrj)k}%AA0z!)u!GiefX@yq;FzOsXTi=;i^GpSXm)_gbC4fFMy#Q2zx~$AbGZ9FR5Cp!WSLBs+iqe;~ln!2~{ME+1;=H*lXRa1FY75VJP?-@rac zJs3yW#6itqV1UF8K6j&=AHY6G-2%G)g_VItB_2Fqzkr#E!GVQ=5mY}f2GyVUbp;X_ zAmIS1*KqkC=3WN&IqJ8N{0vTW&~vnnC~z;#`~_@t)NkT2Uy2ImJFv}BzlOtnCKAkN zVqmdRRG7)|fVD-Xq_L?7wEh6JZW%Pj1`1P9nu3KTh(?be8wD14`rW`fN8L_=h2cC7 zcinl3nn&@a1CU)HjBXz+d>vTls9(Wh&mj`*AyghbV8LG=)Z=i&LNqtvDv!|phg=^e zut4ggY8-ZSpxHr8c%u6kbiO-E`Nxdizo0rAbRLEQ!?J!*nF%TnZ4B5L>WmC*Dk9MK45%Fsnr{K6FHn6CDzjkYsj#%g zz?iJEpt-U~SKt7HuEPTc(D_rKG^T3-8CL?8H6V=5zo6Az7Z^b2M7D}BGH`&$T|s@8 z|Nq%lKs0D>U0dKdcx|n&1?Y^x#XX>YHR!Iv28NS591IGg3}$TL`gArlY$Bj*l0ajH zpgsq)85;vL!vPTnhPDNuejw=FE6^D}iV7VJpuH$>!RtoTdKekzhA=QJUZX7V2vqLg zN3Zi>{sqmIw=`DvfcyyZ7Yw7X7X+={0G;&?+J6pOa|qi<`r$vcZP0Om0hIO`7?%DA zwb8R*fYO>Uc>Nt{ECV#|20AC6o52Bmt|(|812m^$!7y1x*C2sO?k}icwnQB?UMvZ2 zpM%b8hnx)$S|baJH_(16P#eVKHN9#Fd;x;JeKwC)!Mui+C`0m*^% zf!e^J^N&Gi?}75;|Np|EbAG3R&Z-5SS-S&z#wKWw9H?&s+V2KBw-$EBD(LKH&>Bn7 z7$+#bef$F%qX&tB<^)0OE-e_a?=6L;7uZ}N14A?Xd{GvLWP=6&AmIpFF9Yh6Ff$xv zacG{||G%Ei=Kud=CfaPE^Bq|FxELH{KxG39c)tttG#2n&8ECBz^D+*GWD^Dk=4BxL zAT^LUhqP&7?{T2+{{{OERvr%B!{2z3NtpN0FbWpr&Fl>RG zvp8V^gYJw244^*9|Nqy_G(r1r7BGO;g0Sft8~~rq&cdM52kM7PfaY5@9GF-boLCqb zl%|2sp#ZIOR-6D@`vlrA2imu&w2Xs6sZUuVi9w7ZApo?-Ok07OiIJfpKzBg`0~Z5} z3Il`lBvytL5zziU*q%9dhJ+9f(4M;gQ`DFl8o+0AfBnxO02(g`i3>0&tplw~0G&Gr zG7~kfw%s>i*m_@s0sGmu$m>x-@db-RP(KCKFJop%Gk}%55B|(i7XqE7DgatHb4UfW z|A2ub&47>LKmh3cLna0`6?q0X@Lek!3{5?<3=ScnI0Efe&|zrnVP-fW0b0Av#LzYY zboVJlPeOnQLvs%YLvxP+!-O8?2GHe5i|!~k6oA%YGwDk>Gl0$x0qwtJU|9S|xj}$| zoq>@JWG*NVc0Grb-~P}t1SF2AQ&7_dtb9eDzW|l7pg9fDekqur8JL_582&)}pB)Pr zTtI7t8xAnAFdPM+*(AVlq=%1Tu?P>tp&rn>d~Jz9$o{q&3QW2)92g+$t`nGce*&MI z2R`dvaYir$Xe?BKL3kZlk3b-U2KWrPLp@;i8V*eBLFx@aXHY=q_Ca|Qw8xf#(aAuc z!9gGeyq3v$={*t`Pu_ZgT}LHh$|I55E0?C8!=U{V$^X8O=P zvmcZeLF@BC`U61os|E>7puHxF6M~rp7=-&kXACQM7%?eNC}IMY*#Zng>pUAcouv0FndkQwHh5RPz9QM*w=-OZWvE zA8hU6VQA|C?a76uL(p8}6VTZ*4Gj#Sv*|%`4k`yg=Rtth?T9ciuj7FB#gWSdnE8nE zsR>>_fzLnw1*+E)L_l-f4IJ3cKW3Yzz;MWbo53M~ncD$hY>I4I44%5#vM1A~(Z=-hq= zZfEel2%vSopmGzmH(G{)8S9)stn38Qu<(NA3s|^a_yH=%7l7`4>nUiS**}#96b4K0 zFoXJ`5}-BXO#eW2HYi>|{U%V{V2ckvh65}N98CtGvlv14f%>q_49y~-H6Nh8T>lxI z3>cU|dn%d(K>n}+pPlxA*-n6o0lb%q5p=F5Xivd`Vw}l>v0$Bk0a}X$CdMFN_C32c9s1?jaU(0I5?G z1)a^w$iSfrT7SqO!OCE-!3tiF4l+}kVHpEhPXq%4Xx}DC41^^ZG8u&wKr9HBW=Mmm zlVD%~-A62x01*d~5)2uPpnblI5;-6)gET`MSgjCf(nkR_U%?;%S_1<&LxF(-q@IhR zTZfq;K@il&0*#9rFo4!2w=*!Pu`n>Ju`n<&xGYdrNM*S4zX5#S88d@}pe_Tm3P?Su zzJi1e*h(+~+TWnTxaYqB!+kvqT0al?mUV%#tjTB z*RwFl^|CO4?m!UlWn;Le#;{F{fq9!410%yDHqiOA3=9hv^Drd!fzBmhW=H^?_h0IFL+bMOodixx8^Y;|EM*y@r1IuABuiwi@=78gc_1&imf3$lbTELacf`&|If z(J-mlGB5~)Ff3XR(X+sX0jz$3OC~!gKY-TtIf!I5&Flxwy1Cz=W(3}_C zod`RRK-GfI8UWb`QVa4AsQmdO&cvX$pos}24sz>`#+m&FY<^cj?p?+z$YR0fk8nr9 zA{USvkRL(v3>AxAOrd6j&JYI8If24TfFWsJ0RxkY55uDMi451Yn8D}w9uNv(ShPNb zVNpK|gOds(co1g%AzZA%=ApZogE>%$kpHmO<*A0fn z|MOWv?QQ=nAU7~DsJJi)sJaBOfzGD$yTXvL1RT~J4E|RbGM2g=U|96Mm|c)%2g8Ez zHy9S*Kfti;z7m5Y%MOO+_mw3I8FW`XU;v#tp}XJ!11JnY_JZOwfVD+MQ3JHMWgXZL zAbVZeK=!V`!oZ;B!XTjT!jQ1c#h{_B{{^Vuma*K$f$f+I1H-v1AUi?!>9T{=pT7dJ zcgcMg1_zcM3`_4Tg6&tAX z{MZA{2Ov8RFs%50f??%HIhC};Tp|Bwb~9Xsf(VbI*23V4s(67}8>ptFHMXY+u{Mm80Yyd=Y- z#VQPkK>N1@Bp4PfR@7L=EX}Y~1#}jsDMO0}s4N2Q9R$sP*)c3tH(+2_0qu1H?Ux4a z9Rk&BpgQf>e|G@}hD8gk7@RbI{C5ZdsgYz@q^_;t$^g3mSc+k}Iw($cH5?c~{dtgI z7#WtRa55YcV`Nyc;LragjWY}mBIyjQDp~@E8BT)Qwi*YRK=rNij>8NfKOX`4QR4s; zGeaT^$nBtg#S9FO7J%yVGzQS!VjL;~3@g@e0L@P_tWfu1ShhZdVa0j|h8GhU8J?@K zGAvlk!mwhovO+t96oUf`DDM|AaHvEutXQw*-~u`?OEiID`Fc=0n4iHxB8Fkf`V0oh zxrr$Z%hrR!z?juZC5K_rdeGkG0)~z1pt(*^Sr)^vXuYDvBhW$`0noXOAhjtB8`VK_ zJPc`l0u09tI2aCy6fm%;2&cLR^&2TJ;kpUFP52QeH3=C@PK;tGX3~K8@ zdDDUQmJ%S6uuxaEroCfE{28x2>%fi3xm=+P(IuM?gOf<1NonWK?!UYNR2GR zA^{GD<;|ct(Pm&(QI=q4&}Cp%5ocJi7&I3u&agaYZ z8=9)1I{wH14gm%R&jsJWd+0&^IM)UL{<|;u_up9sRGu?1D6NC|Lm6y$0Qe3|=N=vg zCl%!nhnYcroj;I$(4aZ#<^>F(wH}MtgZA+$e>lYK!mwz)2*Uws4~D(#c^FdqI2c+C zK<9c2Fr@T>{KvqcypDyz4(>lt{DQ*EfPq;BbjFY3heON(42${|Kg5CKIDlc_dKZR$ z>m3+2sDs8USQte57#LXlI2hRbHZbh$2lZz_bFQHKHP{(KM0gkk)D&kVf%kxX{SP{~ zUZf9{w?KOpL1Q5x8Z?e!z_{9B%cj^7<%N{s*iahQV68fIX8uA(NP%m~`+qbQNVpeEtWpdyjZ zz{>!-OSVPj&;RBLk_@Q=fBrYA{QciNL5v|);P3w?m4E-6CkQj73jF)ur1JlN^8^8g zQ~}VK=%4?`R9F}e>Ad<6x(lqi2Q&`*|NkKsW`5sH{;ISOlJD2CdVA^|3+i zH_-Tj0K*|2P`?4v&))POG|n>T4XFQcfMFJ>>;d0<3_1f~kpTlk3ix~oQ2v+(-tPmt z11DL9kzpyQoo?{`zk`VGgar)D44DSH9SIBu3<{!64gw6!3~Yv=F)|^BLjj;WgZUT^ z2rw|D^e{89tFSU02bGsSKmI4H{P@3A1+?CW2~>wzG%$et|K~qwpZ-$NJg@+$O%B@Y z2I_w>Ff0SDfmLB)SgHcLCmLj)Aj30g-y|J$p0)@J!?GR@hLj#|hG!xi42ybr7}9&( zz-xt<_5AtIp$a-<12p#d;XmjM#HA_$49^5WVGP=T=LuRDsd0ee&wqB610I|V3JlyT zDi-MsAb&73FdK?7Bnc=-WHLhThI`fnx<3Kpt~Wib3@HLE46l0r{C^JilQMW6Acv}M zMgt@0Oak2m2gX1Dm#T<^*DrCXvM{^_<<%b0IwltI9{g85EDXz6Y#t!HGa1tqSOlXV6#zXz!Vd1}l@I#6|{Y1_2{b z8ducV1lq?v0hE5&(9+LO@cC;g;4}`>4;hEReorAR{iFAPFT9+i4jQY0j6*=yErI4i z9N!7DfW`?B$_7xm0TKt586bCp(lbaL6lTbIAC%8Q`Tsw|Mgv&h2bBX0 zUV!dnQV;^2)1uqJzyMmyz|%abp9j=80^i37x~CHnFQEAj(6~Kl4g<92L02IGyualJ zc>G%dymp3>!C3_qr=W2^eDR7NpA0YNs55}(urxsHm-qiS2Cu(g`k#Se>HQf^pmWal z+y})eXm3Br4aj3jApe5aDJg2~WZ3Y0sfr9kbB{{XBG8=i8Xbn_o`}XpJsb?6F$2(g zB#>&%^}Y?yLE~Hd|LbZrFo5nmu7S=W?PzH3*Vb@l0If>`odX04W6)TW|077h61K+) z)aK#9adsTYMs)u|((Q)-0?+5DPlMWpzIMY5Y6m&%6JX|Vcs56U4G#0=NH8B#{~+#6 z3V1e0{R8;SF3|ZOf-DRgtPEuN|JfY%3LNhH_7D=rV+J%jSU4*1*{(4LDX1JD_3pfUtr zUb%qUILweXjsp|p|9{CQp!N-D--()m2ZOo?8-t?3VFon=HAZz0(B5!o1~maCMpc1B z3@QTd3}62{2!PHo`t!eSf-u8TaGOUEI_L2Bf7=8;hNIxN4-ZuA-~YA=oD4_7Z6J22 z*#G}+6Id9Ig4;rmz-^nR9#9?vxgQjcFpOMYf!a5qGsZz>6{y_$@OX~8O!LhCIB>sp z&36fgmG?Oqmh{Io&Ftr4SlTbZu&jTNJ10XQvmnbZ4^9S9`2#9@K;;zd&L9Sc#V%kw z1s1u0>;#1!Xm1=SU2`C|y|&;l!?To1q=tw%o>$ zF2KaVt}=lk9n9YZ73W}Z>EU2l+ati>bw`51`;Gv^iaW{{y$pxb*%{O%+8LE4au^yI zax_vH8U!U6R^C~`@IZo*fk(xGA=jXyf|EhLfSExgA%{WCB7;Gs;5?(4L?(l7MFS&u z0xyHA#c@Wi3SNf)|NBz8Epi#O6V5RH|NlN!rQigkZbCn!N=wFU^w(gg5kuU|NmW6{{LrA1+DqiwphflM~#I+SK={)wnYkqH291uP`{-m zrJo@M92TJQRt|=vJ$u5q7(o5l|Np%~hlVgXGIR_4|NmU)pE?smg#-sfg#Z)7|Nl!> zR3(}j{{MGR`Tsv9Mcd;MgRX)KqqavE!{`4BqPh;CwNoH>9R9<>aC8l54-Esu;WePO z(0}BZ8MGys8Pype_rP#49O?OE&%sb7!NkDG;A&9iz`>v@@t6TLuMYBus>EW@d1@*G z3?Q?Ptl0S1>l5)96F z7#KY6a4@*v5nwp-M}pz-9|ndKe>fP9{{g#605tEl1iTmQJowyz!)x>%G8wf4oEY^T zxELq=XJiHWMPGo4LEnLc0pvz-yh$)IfZWHzaAb|X12bdSe+IDIKx#qb<+>3J45gqx zmBIo>(79L0?#=)IKme3JL20w%05>#!W-*8yxWNb->xQLIv4U&{RSS0J|Nom)LFts+ z;w+aUWE_ul+8-u4Pmm>nVVU}grkVXE%%J%_2Zk98`|nR+*mECN#&j@jyx+jE z;r;^f9%a<>hFEtB;BcofnmhTS?sQ>T)DLne*u5GIOdvNhGB{a)+9Wps-V5*Z>Y^(E5AOT4zw$J1}fi54Z;^JJ)>YU|0(dYfzX=Fs%Q+ zgJJvs4Gi1f2_g;* zi~E@vQglv&&bbDk-N&M`mca#_R}V6z2!O_1)CZw$J_<==XKhCkB<87da=F;tz9 zWYFF4m_d-?fw1-tHYRO@JVspw2S#0u1V&JQ5;Pab%5XqLcf&WP3Wn2y+6MlNp!yIb zu4}-=q`ToTlXk-e2HgfRCS3~#(76VTx)KVE>n=YpZ|r$bp;$4H5eB6Gcxe1crdK!S7BJ$|0j=^L0jN0gQ5d7qYK00 zeo$Y9je%2@oqLxHSg7)eDiDzX1ttF}oU;(WW5~#9ZWl&YfVpP?52ky^n3+OU}`tk4nI|%4n zC@^L)tXa>8Ipf%xOInWu4x*7=#An}R} zHin7>R)&A(EDRL|>bx6q&&WZVf+0J4BPInVAy&e)TUq%Smd&RVaxp)44Xmse%^`oJf0BSoV@tmZ!{UC>d@?8xs|h55@6mqnpFu!{ zVbS_q{~bg?Zc|lgWw`ObK>*}N2Bt$P41ZWuv?bgaR1BIJbS2UmK=lA&5@h zU~@s{fyxAs`7m=q^$n;j07ohV14G0Az3K%>$^a@4su?&z_fdhzGb`9Q z?tL z3$jmFVF9DQ20t^XKdx(`zzh-txj|K+n-Sdp&`4!?{$D{9I}?+3@nEY zK=BS*-wImO4@z&a{XCHKFc5W02E)et2@D(VL(aWG)G4R`yNZJRrESp1Z~}bxCIiF% z{|o{kH-OTXnt(F{$lQ~Rf-Kw$OiaX@d-H#S2rSKk+{nOm7?S1$(il_>ni)Xljjn|| z*lY!cCF^1LuMlg#0mFj-AagAk7W_Z>A9UXQg7u&@iJl%oX-|P+Be;Hnq({*Hjt!u5 zBGo@!$4rmjXz9@%oE|}Ui-YQpWE~C$&>lJ_6-ata)?r~t5UBvqnJF-}K-I$h01I`kJ8hjl7>9)P53RSgH=%#}BfDfnm*efva=C?Vp+8vwJ}8 zR8YEQQITdy0gu0e+CLHu4I&~8OZvqaKTzcquCiZ+7-i?Re00}q3PK$V67gSr9}g9C%J zfk;CDgP2Au1E{^G+@Zw8rNGR@)c`uDa^rddh9&<&d$d61+eFaVqrw7an7d(ZaSaB@ zeNPZSAj(aU9#9<&ii0Nb7~`V##Oeiw1E@a*G6Uo$kl#SzDFO;hi2??Y|F{)c8Mq}t z^-xQSO2Y)uSR%7_g8+l71T#|_*x!r)gY1L36BO3C+zPS}hM5@HY%Dh zg+YReK};fr;XecD{yNCq`j7ukDWE-&Ah{KdhkF57~ zw+;-})E$3~d68e_B*P=77vo6>w$%^$$U32!hs{gVHESEy#_a zI0f+;7#6Jo-F@{(hM55*ry>A4m&i#6CdUF^YXBMx2HnE}(h0*&J;-a&LFLDy8A{1bl=V&abbq41tJVpGlUr!8Mdma zE(l@Rqbkg>OGt!amy|GrjSefr|N5;)ssc@*K6VPIT?{(!6|^1!GzJD5qtTUkzyLa* z3{-xA`XM$dq6~}-qM-AhTo@aeR6uK(|4bKRuvsI@09tcyBf`XB!LaTA|NmRlKx>)* z|947JVAyG1#mV=1Z< z=}aL1s0bWp0L^KE`XuK-`Xm-GfYgKh1#16-{Kj;ENd+|5p}ZoLp`2lnmN_WwLHGQu z5M}59wFfj3m~<5ynCw=FGF$?cEd~pi9zf3+&^1^9zT+Nr_qOhe1crMc`Hlrlj0`S1 zAphx0q%f!mgfOVgC}vO<2nM(3RU5(>Kymt?nb}B|AxY#vBTE_s3zHFKj{%zs0~1S{ zHmICfA<6_=>#7Sjk4C%_+88t$5(M_yvM}tBVq@4N#>BvMfK3H7 zzQ)YJt^&&AJCs-$v<;FNKx4rS49nLr9sunFW?=Yd&%#gvS|8zXfC1DF2II#To&IC4WHaK!RcMAJAD6f((xZ_Q|p^>@b4Z#dzSkimE{x1IP{zhUIHi z4GuAY>KBkcP=1H#UG@i*lab2-kh|F#5(NGTGciaoEc*jeuVQcrbT%loJXp2{cX

B9s9LqI1U~Q7KQSq!E@Z8F{|bt(44e1LmH^^ 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%0Aw~Z1H(N~`Nzn>U<|1A{gb z1H&;;dIg=k%gn%F&&W<6I44~tc7!EQsFxWCMFl+$1 ziJ5_+1yr9gL()|isIFpUU;vp55-(w7U@!-z8%73(O^lFo1XRDZg33Tp+%q#Uv@NS#+q56!J1j%PaC7a2T^8$2aSvZ z4ZVy43#^$16y`Dt2!QQFaybs>2U|vg1Rn+g9VupkoLWYK3+WI)fs`v82DzDm;X@{) zKtwTvfIudLz=ySr0u!v61vX4z6lh>$68Is?4A!G1#Vk+|!6=|9#VimZ!Ytshj#1!& zJF`GQKO@*}43iiIKA1BKn1Iw-GYWi(VH7A>!zl0|icw%eAESVS2(v&1$d6MP1sLKP z1quup1sJ9=3K(!O3kXCq3Ov}xC~!fPS)fCNSwO*sQQ$=!gMfwgzi~)H4dGNHGg2fUpUpfPe*~ zKtKYcz=QRS0v3i00txwy0<)1s<$p6gZK|ARy4eC@?{kS>Qt-qkupZqrilTi~<`b zF$ysBG71<-F$+kzF$gR$W)xUp$tbWOflG1Mu7#B83m?*%wNYSV35uz@T7}TV1X@! zZaBgy@F0Ofpd+7ApumS&Kw%A|fQS^cfPfUUzy$+FfeQ=_0vq}n1p-nS1wKq+6iDcS zgug`&gFuNjv%rO1MgfJ5i~^we+pvLA;6fOqz=Fe!0u$08Y9~yAgjc{h27!X(i~<%K zi~>9$cWz)5;E;m&;er*TKt%zgK*4TCfsmDq0xVL@0vn|vS)ihuQNZ97 zqX2_6vw*{XMu7#{i~nW{`cdVP_0Isyqq-ki z-hdas{tmD_YWN}R{{WW%Kj8&9{RS|A(piECBK>&?fz1DZ0VEDfq7&2+@*hO;%U_TJ z$>VmvhBQbXHGLq5&k3+RJ4*b5`oOU850D4x$L+rdV0l#gHz1`y0|k(N-0~Gz*$ADHoA=^L04P?K319JL7&YurFK=RBe^2qvk zc;T1N@CM1Vzz3us)qkMz44C|c7?3<}_krqc1_pVQ@CWU!h3N;i zQ5YENQRI=$2i42y@edk*fa&*00ojk@bT9`d4{A3sFrelSWcv-$K>AVL_dytue?jdz z^!f=o{6Xy>1_sphiyVKTHUii|XavlCCvw2{qr?xg|2gtN^86_B$mz=>A0&@vI8y%b zARr$>K)wJXk77Tv|1W^$8F9)>6ySHC0$3ikd_peYZh+-+`;VazzxgMM@XLD?#4J`gZZ90%Va{fgwzaIPonU9)(HgF@-*8^5iI|^0)f)GL;)K)}K zU&!fqf)*D2Nc9uAkAN9`i1rhx4}nJ>)OTZGz+L}>+MW31LG4w1@}PbJy8HyB^s8V3 z@*l&56X5z6;!qU-gXK}(hpZpezC|}5IsJnAr})Ze7c-FksOb|~zl1q{c~E~2;%Zb9 zmVQ8eD+UJC`W@MSpgt42`;qepsDFU&e&q52)UQA<|B&?;ScBY;T0SC|U!Z;hy8Dpj zL47Dt`G_liKz(OapF?4<27(U=TnqzmVH+3j#pyM-6)r4;KEQF&cFDp|l^vK>AVB7qb6A zeP#6Yi7XEuw?Jz@A%`DmJO!VA(6|U*`6!V4aHl`e*b936BBxJKA00jXk=+j(!(m`R zZT}+c2aV&Pr$6NQ1C6_Y@)yqdNdUPYwR}R>4;ni_kAGx&&^Q8m{y=s=Xv_oMf5_nv z8mj@N2V59527*ftBn}#j0nz9fmcBsaQs{CZK1?1o76Ia;W0*W>tPWic#D~d)#+yKV zbPSURjZLA;f%q_a(6}FnkB(vTps^}+IS?Nv4;oiNkALL+2_7dys~?cdchI;FKK-Ea zG4%9<9KWEkEA;e%EDsugLzj0zDt|y@fgt~&W0?OyV`}JfAU;ffOFk(5f<#a;O#TA_ zdC-^{dijIgKQO2QnU7k&BBx)_xG}!)Q>X>$$6fw|#)HxIBj+#BSSp4*Quqlpg3QP5 zKG2vohJK{>5or7tJ${kP?}j#z`KaXsa{2;|jpNe~8Y@JPe`Nijv0wE58}j%SXq*)_ zW+6OS{DQ`jAtIKx3}>^n=Fr(Ze6vf1ojSeELCi2l(Vck4yg)&^!ag$tWbu{or{BJpC8&7&=<}0@;4h zyaC95T<$Xf&Bfp`A2jxl9>2)t186=0#oAG-e02TD?gPzjK((MyF#VwUA@uqi zxqJuBq2co%XnqboeKJ!6ynfTHlXbux@C=vr^e!)7h|4_#Fko^amL&O(< zpt(GJ@}M~}boZf{zaC^i?)2%f0lz$GJ`bP$;CVkJf5VtC|AXc@(cOm}e+8RB_T%n< zS!@Hzqt@S`HD)mLL36(7@sBJIn(IaHe<0V-p!r60{mAVn(3~JXdC(j!K6%jGAwGG~ z+%7(O&^$1{@Pp3#qNFe6_8nxN5;gpgPdVPeQMOdd41i!2Uf!{otpv@k&=8YT~&e?^i(WkTm)Q3a8B?#|9u3L5Ty zp_&TDdM0|t3`hbddZu~?437K^3=HXcr3{Shpf#S140^>G#U({0iAfB4MXBkai(VM? zKnKn+=#`{alrZRluJ&TkE6N9Ld}Yu}&4^DcO3Y1V&;uVS#Gsb~I$4N8FDto-K@X%v zuP8M~uP7hFVbDv@FJaIt21zjJ6(3OAki6zkM1HflP zAbANdlbeBofsKKo0JOel2LpouXpN`@k`4|A&>egX44|_pKx=A1H{OH77?h_n(A0sr zQVfu_LLhaZxpGk5umH614kXFI02&+yvp{t^%sfz>JUGS3-~pC_5FmR&EYQVuAax-3 z8JuPmFgVS~P+$X+fnZSC2V&_#?FFe@z|JJFfE{$221o{iSs)YxXq_6!JZ1(42GE+B zCG1QLFuOoXVCq1db71P$urmv+!J*C#YA?vVE$qw!TX5J5IvNaS-VSzVfgS8j44`}o zvJ-@1ZUCJm0#nDp!7Kn?6wL=x0l_f;#v$w#U=U*#U=U+s_yBSQL>V}oL4E=@S0+%aSR}{Kx|N71FDX}L5f)bq;7>NNCtvo z?gMRp0@(`@WnciQdjQI$Pyv{Ep!M7!b)Y%|Bz47{i9rd(fMSpw2!n2*{QCcYK2(_D en>p%236L6)9Ee5=1_m|@CWgr%2`C21gO~t8*Geh? literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/cpio b/pkgs/stdenv/linux/bootstrap/loongson2f/cpio new file mode 100755 index 0000000000000000000000000000000000000000..bf6fd66be238398b96290226e77bb3638e495b89 GIT binary patch literal 88564 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 ZFgJntAUDBiP?&(&AZ!xOh>{Lq>Hrqmf4cwx literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/curl.bz2 b/pkgs/stdenv/linux/bootstrap/loongson2f/curl.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..f227a24bf7188fa132666faaa96cc4d4c95071ab GIT binary patch literal 172614 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 literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/default.nix b/pkgs/stdenv/linux/bootstrap/loongson2f/default.nix new file mode 100644 index 000000000000..a87f07e00ceb --- /dev/null +++ b/pkgs/stdenv/linux/bootstrap/loongson2f/default.nix @@ -0,0 +1,13 @@ +{ + sh = ./sh; + bzip2 = ./bzip2; + mkdir = ./mkdir; + cpio = ./cpio; + ln = ./ln; + curl = ./curl.bz2; + + bootstrapTools = { + url = "file:///root/cross-bootstrap-tools.cpio.bz2"; + sha256 = "00aavbk76qjj2gdlmpaaj66r8nzl4d7pyl8cv1gigyzgpbr5vv3j"; + }; +} diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/ln b/pkgs/stdenv/linux/bootstrap/loongson2f/ln new file mode 100755 index 0000000000000000000000000000000000000000..d8afd276424f18762eac163b28346e82ea7f45bc GIT binary patch literal 59552 zcmb<-^>JflWMqH=CI$`$FprTzz=VN;!Q&YNgF3@P1rr7Z24)5g27U%Uh&)7t00RSq zz>Yf%3?R%37Gs3SKVV>Bc)%zC!WUQ>7%H?F7}%ilflo_Pz)UoPoq>UY1uFL8|6X+l zhCTn87-Vb|AIxNqNSve2!La{72gCmR3=Dhjb1*z$7GT(`&d4AL)}kxWz|15dWAh<# zj=D_4%>H1gI5v5OhME1I>QH?Q518Rz_7HRg<+ZUhyRQ!DlZl? zvoyE&OEh)#>v}ja=msocj%b?MUnT}I>;HcSPw8sh;T4${LdsHY{MiVWWyvNXv6WKSdHgFkQ&P~r9R~e z!A#8)gc$z+4^q>X2x8!7NDyFTa8hZIU}9i-rnF8`Aeo7QA+m?_hXOOmW{@6`y6^uJ zL_q3}G&S|JFgOStX`0#3D8OO^Qn%$!iwYwHlM2H#rbQYI`|m3-?71(&u=&0K!>0Qj z3>)t=Fl+#avjM|ib$EP0!?>Zbsh^#}K>!pd4UG^pnFLsEKxTr>=6JSLg-L+LM&LnH z4+n#TKu_b$el`XLVNl!&JZMn?#UlrU0yqvq?gjBdaiGeUUUKwO;0^;YWgVF&* z^UQwT2M!D%y}B9<3@~{EsJyPh0%l!{1I$|*XZC~DJa7OR1IG*g?^OrK12kP(Ff39x zU|9Aa6dw`{8~!uI&r!EvSpMIEVa0zBhL!&V7*_p{U|9X1fnm{l1_L&RdT}Nd9*}7k z>4dA{LchQ0}KoSYySTiPyvOft^flQBupXUn82`C{lWje>H?s20JUEN zoTfMYZ-|?tegucvuNYCymSEU_A7r)wI3GaFR$u_-7X}8H`JlAKz_8&z$ovk5rXE;6 zQiz+QuG`VTz{cPppxdy3;Y`!aer5(1l^zCFwFL}2^p!^%e$RME7019gb1*R%7 zK^9#N1}2cVVdlfk1DVgku;KrK*g5JIINZOB1os#G->cq$6h68J3m7^W_W!S7*zi9g zc8LVAy|OrD0~juEGN5?;t;F8~~XK4#Nh9 zJ@+f1>3jmiUUl^J!N9o406Bd;h{2vdKzR!kb_NW~`ax+5lwNEM*cj{#*cghC+>4xM zN|4+Oax1Ph!^FUBqbO0y;1iRqqR~*<0}2yR+Gb>CRY8vrke#qNF^HL?4zj-hhy5XF z_Tx)eptuKNbo*d-9f+QzegKC(RwUSi%Y1Hz1p*1tbJYL;Z&G1qaMIyma1aq-U{?X< zJtam#7Et(!F))MjrT_zj^BRy`9S--1k>DPD>G47oBt4cO*@K)O|3K>?P?>-$J%Z{f zT|DU#S9kmnGG`T`i3)+I0~-HTvgTIax^)MvrKw9bV=sn3RiX`KgyQlA3@(>fmpr9Kx1 zrgZ@fN_`#-OzT1zl=?vRt`7s#I#}HcD%a8d-n9MJmGfnl#Ydil5^bdLJJ|4b?@42#z5G|cS3 zz`&$Z!LaFn2E&H`x)T;KK>Trlfq`Msa!}i|fMMf*6NW|W0~nV6k6>8-A5_;fF)UcD z!?0kz1;Y|`Wd=bO^$r0BZGk{01%?G6b@!PV90Vd5mfzRya9}cMnAxu=AjrhQuwgw9 z!=m*93>(&qFl<;a!LVVy48x-JpgR92$gc(uKy5}L0fxo>JPb?vSs7A77#I>3{QsY< zBEYbCJxCnH2elO-ZGuhr3m7)u&w%@L)yESK zFI7R0-vuFa)Io8o(=e(3MPo}pC@w+q3W{q`-0GfiV0!gmkOh3$hq6 zh^Sm>YU*cX5LOXn0QD;ZdMp?O)dWO9@v6YY!Qc>J!XUhkgMq1!fk9-M1h{+xm03*d zKxGw34rJEl{}A;G3<7=c|1*f)Xqwp%GS{MEVm}AeTn7dx16Bry0FW9`y0Qa>mjbBm zD$w`iKSLM;1Jg86dLWb*(EYw7c#b-#eg^e%)-+A-2bH}x4HKYYu=T$J!xnJg$LPNx z3#h%Sdm@2J7nHs`KyCJro)-^9r^#~&vM@3TsVECLF);`+F{rIr#Ps5U=rWMn7Y_u~ z7#Ubp#5e?50vJT6DNk@>VwfbvptfQYQvieLG6n_{a5{##d+U7#hAmk8H=uM3idzuo zU})_TU})<>FLRX*jxvDa3sjFh2%4kL!f-$Ul$ISDX7+oDf#R=qjQ|64A1FRxb%?S+ z5=alY4+Sd6LFS`}QA5xibq$8i{}mWE{g+_a_+Nlw!+%g3(Vfx2pxXh;CrcOWHXLAZ zX_y3xFCkERW@KPh0mW?vs9kQ5z{JSFtn%Z(bHM-q0&1XmQWh|P=G)Ep6&N<%mtfd< zUjUkpL4Muvf3La&!=C>Z3|qndYuyzK7(jii28KmO1`J!^?(ksP{~zYIKY?@9LH-4` zRdg3TU=RZJA37KqY8q#P`pEzPvVqbWsMEjnzVeJk44e!JQo0iy7(Br3ZU&}$hNVUY z{FdtbLFv&Tfr*nLSVXtOfk9Wpfr*u2frPFA1A_}#Z3B}N*k24xiXBQ!9^i6Ffysek z&wUGqt@jNWw%pfX!1PxD!(MfPe|yz$Fe1hbR08Ly`!vk#Kft*4{{)7u>L(bt{a?Vi z@qYv3vi~m__y2#uxbOc3#_j)iFmCz3fpPQy6^xty&tTl}AKX4rSirP_QIJJ>Fl_1v`4`ltItcc!1Jf)j5G#ReuOkls>8kX|MgMux*p z`HV>dj0{KALKK$eV1_50OP~Q+#UOK6)VOY|yrI5n#`+q|S$j=)X z7WH$2$1t3A7#NoHEMQpLAJZ_iU)O+vX%T3Agny}lCnJNv1cq(>6$}Xi0u0VNCJin9 z2M)KWC`!06{QqCpz{S9q5Wy~`ej`T3_w-_XV-F|>6SWJ+m zfpPi&2FB(0QyOOW_cJU}2l=-a9LEQkbR`@ZKz?UqaMBTGa1fcou)LpvA+wx^vz~N*7>L1rMfy#=-cUT!11UMKL-SLnCwKvvWVPH^pVGvMq(KSe5 zU?^DT;?dCA4+`TN#ufb;4Kw>0DwewFDkv~zhzYWM;n!5%&EUWSO7B}4An8eoAwfWp zfmwxvVZnMK24@ilhNV5W3=0Gp7?!S|0uFx%mjD0RRCEm-7zDs$8Vi^~;|M*Vy3`_p zNq2(-!~g$GDoYs-34zi$4+Db$D4ke<)jBX`fz*N8Tu^nh84d|43WPB+FgPsGm2hAJ zsg-A75CDal2!pfEWQGI*VFqRum|J8S76|A{fchFs`k5FSSU`5^3N$cGXatW*Fmy03 z{(qGf)CX~30J#NZ9>^?R3kC)e1_pr+#>Mvq7?v&;WLU5mW*RoxSKRI z^@H;2hg;4np#1gWR4}x$kT@ugD;Ssb z7ceeZuW0dv0mSEEa5CUya1b$RnAu;zxU64+fmH?MPf%Ve;Gd~x`wvtODKHfW`Oj7)aq&|Fl{(&sjjGC&YaOav%iKJkrzSf!GM8P1!R^M$Si{g3?Tg` z4DKQz^B5Qw^~*6hgn-h7Ji`GYkQ*RnbOM8}#sQ|4;5b!a(qsq=0hQ-s3=9GwHB1Z+ zBDw|#m>L+^R3K>uRHiRrW(29XNC36F1ax;eKOjrUr5!s2%~0`8{CVcmD?Cp8FRVx8Fa(xb6M{#;x~vFmAcOfpPQw6^xti zFJRnwe+DCDOz;EaUUks;GxB(+fET2n1!`}B+GDyMkTyAF{1Y-34Jz+1G7GXiU|>^` z0Jkp%*J&^?tNs7)1mdsbU|><t8pGcX9SGq9^P2!QJ3CI$`$ryeZ^e*s2@V=9~s5gMEf z48lGP%{>YX9sgM!8ZUT zFU;TrRtM@6@G~TX+_;8;A?c0)xR0>t4+BHO6;Qk~Ff90@B9YA?z>ox2!@-bzhk;?y zA4s{r_z%cDkX;N6puX>-H3AGvRb&{Ndb9)%F`WMo%9DpwM8S0cYWS%zG)-V(aDuiw znixP~h#Y<#3`rrNFjvK*4itVMIZg&g7G(j@ELPJR0fwfYfB!-Cf|H4gfHQ*tL(>`s z1|}5|aJ)d~kC+(PY!nS{GJJ45ree}?sK=z?a8JMyCl!k$$twT;JE<@*xVA7eED_Mw zNMiW&e?bUH45S7muPorq0Af1}FfjxiNmfx5aApAY`573TCItN7t3HEa&;JC5jsI6L z?Ek-jVc-7=4BP*AFl_tZz_9gy1;dvA1q_@2XE1E~AHlHUzW_rsc#NKdfk_3@7Ed;q z;RYG27hqVhUW8%6deE3Ms9(*@kRT$#FsTPrH!v_X^?>pT1A|K6|NpKk4H~QriW;p9 z3=B&e6b%+JD=-{c0ICnA8Cyd@^$r_DLx4TQg2kY`sKDT&^XY#>2uLqTOcC5JWdM&e zXfbfATxjm==VIVhQDxvz(PQ9IQDIhX~03ApbEiFg5ctc!J%>#o!PGGK+zMsc9dBy9g-EcQZVYWMODBP!w3i z46*}MKMOGUui3^RAqJ9XXyCWuW@r!r)!iU{EDSyYAa%ML4;Vr1*#H0eRY2^;|3Pya zEGi&%7Y>8cCMf(|8kiZ5gn;4`q!y$P)RX!Jj#suOP#fUF;T9ET1s4V;h87JDhK2x6 z2Db)C*t;~aFdPX1@i`fsR6u$`Yz79FCXl=O7#ai^jMx}J_DLK8+2`J%!texa7sy_Vs0z3-s0g?) za4;-d4{{U8zc6>*{Qm$P{vfw=FsQC$VMsOLVNhAe!l1v7iD7|=0RxMQ0t1VR2!qPH z-~U-uR3uUu82FDFs7f4W5MWSV2kH;VFetABg3r3Ypf14BrU7{k;cMuuWF0fwmo91Qo=c^Re% zFi3w>(>-y3>B>J)dzpa&)aP(uSo|L(b{^FBQD|UtU|4)#OTZa4uNMN+57OK4L5@N3 zgB=qG!lG65MWU1o6t0~UyVU|kp_c`8VAEt^=3vv78X$3he4^Y zfdSkv5s_dpTE_{c-B zzrTQC-~Aa3d+twQ*nYo*VcY!%hOPH27`EImVAy;=gJIMC1cr_GBcS6F8=&)-u(1i) z{GtZKhX0^(2n&Wy{|y*6{!eh6qb|+R03Le*jblkNGzr{joY`-}FtLY=K|$<6Q)|CZ z)69MghDo6IK9d_isGYfhc|r5cen&9dfeEBO4ch+TVNehQjWO6X&+HdqSo9w>zGBG_ z8gpU=_aOxs7TpJ_kAkWPsfCP1Y`Sm2u<^bI)cv6G2T)0a?*0W1bJRiZ0l8~WV_QGS zFCaTC7&iYmVA%9ugJI);S$n(YoK%u5(AI@C@3(!1D7jJ zQy}5BMExBfB&;BAb65j%CrA$DM~M4bRX}5`pgFn6d=N7cVYvCe0mG*I8VnonD~+1r+X}@CSt%$Xy5d1X*-D7#Kj|3<|5Brpf)g_yk#)7=%=?x!R05S_?t_6d*8pxf~LFO7fU;?>u5{RwvfC)4ft18gM{$h)j{JAH1>N7 zI@X)gJhR{TKP0X|W6u%bH8)LDKyK!Nj{8|O%>U!sz{%0NXk0pfNaIiv&d<|&a7L*n**g)ECpgBfPh9m)9g9i*bpm7X_W&d>* z9xxOM3bHhS#&BmaFi3;PW|rNTWMB{i)idG@4nm;vQ<@=w;R_=JlaK@hgSJ2s12;IH z4^5F^2w-w)nAtC+!NBlC02JQ}OmMZ}dWt~+GzJVBcjsVmGKu~PipN7sKy%}u^b3;H z6-dB4J`C|UgcM*nqoK#pAPO3%^ePgwRZ#<*4>d{Sbs-> zVZ|K{hLv{=7*^e}U|4;}fuTjgfnlk_f&V>!PW|zzCK5|G#Ge zq^-`tpk%?qz|Qd805pfLWN;j$Hiw;IO@@NTa;SgW89?^I{KCMnHiw;IZ3YJe#IE09 zyL$gT`OhE#@h2qgK%@Y}Nex*B1#tMWGb|AJ&#=_M!ikkZRbvH%g$snXae&ZD4j^}M z7&0?32r3zzU|?Wq-J+n-!NAXO!hoHDO;E|=1cQRb69!!a21Wsf7KIQ0TmSt1-!Agw zf9oF(h7$%z`u>32#sc>H5eAUI|NUGtj&R zc{tb z>JKUlxG^v=q)hn#f2qp<|Ho7q7?v#f{r^A+s7_#J$TaX`P!MghU}9ircw+GXe~St` zLz|8|Xl}*f0fR|HTYrNB3q!(@V=9UYM?h`B9z}&Y3>*v%Ag43@_@AQk=l?Pl7KW}K z0|o{GHij1}U;d}4{P@32g@d89N0Wg;fR*8e%7_0cDqsFDQ{iFg>QQ1~5MW_=q4MT` zipq!o%TxpyI(wuU7zCIZUZ}kIpQ7^S|1uR3hAwd5iizQc%9H;oDlh&oQ;}fk>;d(E z85v%vJoulY^5p+AaQ{Yzp}ptM{}dGkhR&V`|Cg!!|NlY-Bqqafat%n21jF$)5c5v1 z0of(MaB2<69Xt#t*MQu}!EkB~$o(t~C)fP=&!Nh|(AmSlaB9ti|1BzS|1*d__pfVSsXkV*%GuFRULR3LGnBd zFV?U`cr&sU=rXEC5G}c#ejh!37Wn@eT+p5KywnH^aVk=;hsfr;_|zhn~z#^)-a zzPOr!2ZOo?XfEL}gPMUFqq+xZyvCV9O+blJRp1bVihw)A*Z&RzEDS9wfBv^k5N0?k z@aKP%iXbS>3otPJ{ogi$kKw4m-~UZ2JW#QJ|Jx>TG8`57_rFPn9V+(!f7=8WhNA-i z|2L^T`hOq;J#!CZINTL&Gr>MFDpP6#+K}&^ikihGdmL|1%o+7#IZq{7+K(`#+_ z@Bbu~fB!QYI2afN|NT!=`Tswoft7(l@c;iL6_9<}4yg=p|1*Sw#>)b0U|kLW5SFo5QlEkJX%8VXFm{yT^;GB~5HX+>QN0@4d|BeMHIZd+gs zZLeuGFmNy|1+TL$`Y*@=T5AhgtKz1jt8jp!8NAkO*?*Az91KhEgXW7E7?#}!)i?M4 zg4#I_;I;>5k!m#=bR+lLlgVv32_zzllP|*Zg2WG&=s`gVzki`f* zzPKX<`sj=DngOmIJr1JtI}SilVG&oDAL>45r$p!kCI1wrmX*FV8% zj(SN0sDHZgzX7yw3u-5V)-B)oBFMrU!m1()nu7qZfmqc4r)g%tAOnjUXxyBIVNt&z z!%}r|1~wHI2Bvi!42$|X7?{@aFf8il0k2nEG}&7Sv=)JB5opaDs2&EzEhzjr8Q4@n z?gX{NLGH9**m&On8ivU3Ws+iHU}Rvm(bh<1kYQLL5D!`({y$v>G$Sb99X2nB*MhN#NcGWqT$NG%fPJCG+29$2 zx&|wQGN}C1Siztu;mXh;z|6qLkgUR{kiwwA;H1LL&|;tn9@}{UUccV(f3JE5QXddB z4p70c|9=6)zW)gf+y6%}Z2KR;u=T$O!~ z8iMrE?70P5Vwzg|AN*(1<6v+I;bve`1GSeYd;_(W85npNm{mY+WjiJY0Z^F=nyUtl zxe71{sQmaZprXXf3L?KmZdfql4I=|Eww%4Kw?@m?38UXJ8Nj zspSH-^BI}+oCE|Ie*AY*QB-JRU}0$LVFAtMGJ@RU+yknkSs0qv2rxJZfYwd?Xlm|P zlqg`(VMtctVMyx9U~m>Vv;Z>Z!otAX$HU;#!^p7IgoS~19S=jw8V-i$HQY>~xm70> zT?Gav0Rv0*?*E{EZIDqUgM$!woma!m{$yrB7Lc1l!ET${&%$8b#{*v5ctA*H#%2a_ zhM*802B&of3`_b%7*xVQY;A>N20?~~01zAOE&&53VP zwe&x-8V&}q{C$3gBLV^pOYieAwD+(uyy($($N-Jg2{JMin}Op)kn7HOg)6{;ChI#!AjAD8w44c$I=|O;jS&flFT!n`ruy4tKBQaeC z2PQp+17VB|O=|!DH>n*E0JRaEn0OeRdsG=11pfSIQ&G`4%AjqrfkBbsK?n~+at{YX zdJhl7vmO?P!y=%xz`@`KVhbo6Y+x{Hn%N)70!eQ?43E}uFu1P~U^uP=>d%1YViYA( z8CV!ndKej6Oqv-%?cbC&iW&tBpg7}TXkEj@(7J|$VaXaEh9zrQ7z)-fG8{HxVOYFI zQDYfHIU{K8*|Iga|0jj8Fr@Z?-0Wn?#PFl3z5fiuVU-36W(Gxx#|#G+h%i9pnN<`Q zOkrS=aAwdJSj@n};1B|uqY`9D5K$3GWdO0684l@KFgOUDVK@Yx&w9kb!rKF<0gWkw#%3KPm>EF&|NeIf;9!`d#>3Fm$Hfp5!ouL(qb|VAprWye z0nNNMAa(ctGYEk6@-VpdfZ{?$VljiVMgap4L)$tIhAV3X7?$aTDF#bBtWE+E37*kQn=(xJqpEg;Bb$lxFVk`rkHtwR9K`zSCm zGq9;Jaj>iCIxsMpa0#;LdN45j|Ie(V%HS-(&fsjo!H^KZz~Hck1GHX1qL~3S=LIS& zl_iux3y=hu7?Mqx7?jOG`5shG1Td%cL@KWNdJpfEhH$5AwGX!(;Fq4agplnIN-R7#suy7?^An zJ3^QgJM5TLI!u|g1(cXTZA$?LK^sum3Ntu>=MZp(?Oo9NTn`2Yh&@ay91M?yK;iN4 zKZ}Z@z(=M8=F}b)g(aX(Hv$RFDQiIP`~ROsrI+D}(2u6penp8QrVQp~J&FcuOzaGg z#WI+etzlzu5doz+#SSATMg~K(G;m+Ha2-f2fw{GZkzttuXs+x>(>%~xt)K+vBmLS2 zkC{N}AH@C#E_aqOBrvzG0jU9rF*39mXfreffWm@}!9j?f;gL}W^PzraiN{Qe5=jgh z%!k*5#6asubw4~{;$UD_0re$7`Bw46BPLM&sVES{pePXtDkqo}7nCrlteDDF(LALe zG=HkNB9uY*L<3VUINTR7LF{oB(Uu4Yi>HId85lt8GjvxlFo=TZRG3w;g%xNm3@EI) z7@R{uZUMz-I8?u~L^y+TMcJ9excInYp zXa=SGkQ`>`H6Za6W|tmCi4=wss2pfMtpqIB+W+T2i;51zq8?DWr=rlzpuJ%l0|&za zF-Tdmcnu>1s~HP}>l)>T3E=Ym_g_#sR2kBZCO=7 za~>58`|lSp?7N@Au;+dP!}j|T4BPGpFl@c=!La4N1HK=xZS^i;W21!(*y?wHiiWvpf(*SJokXcdM7Y2++|=8$Y9uiA2eqQ8wTFdas|XLn z;ywq0QqXD3L3)D97g4P}8;4(914M>kVC~PM%Fm!;%^A|WU{P^#z!pcx80;>Q1 z{AW^85olu2W?&EiwcY;wPg83WU}NB7aModG0QHBN`#}9N(EfsQ(42z?0~2Tr4HPd7 z49)9U7?}H57@F5{fY(DeuVZC!))8h%5CO^aFfjM=Ff^|Nt(6vFXkN$8;H<;TkRSqT zuZl1*_lYnxuajV4?vr3>UdPG6tilFf&&R+Z!@$%h!_c%&fq|({fuU&~NWC>U4Ky%C zFhJ@-Wr;ur0frPEPKE{nP@F-++7%qmiXRR!voIX$2jy!%aJhJBJxE?r;UY65Lz0PV zhbj{b!^QQA63w7?`5G36q#lraIT%25*G?u1;Ca!cH8$Y1$iVcYX-fZ(|Dt^{%uRhP z4BNnKqZBtBVp802kqNv`V8bCMeCVbSE${r8Ld#S5~;ntf*1S1X^GAkP|d- z#;yV?dqfyOs|&uHDNYDwU||Sfm%`lCr#vH=p@6xmPjN#TleRz@18C1f3iGse1k%{G(Aj^;cX=)&UgTnVQsDC>_feBPbfaaq^d80evo|L3xfkXsyoS(Ft-!Q&q%plU&J#LeI=puC`oiHo5@2&6WHnW+!7H$zz< zgdu~OX&uNcYfQ?ze_7{NWFc}zH!0UlPV<kv&A`Fn z*~7!2-z&!ONR$Vxp1)Uw;gKk)JmF!`SgRQlX89e3-YHxznGcqKbfZCZl3{2}z{dW-66>wmbV^}A^!mw23Ft`oA zs0Yz61dS&;sqiqgtl?m2S(CuvqVe;8g9u2Tk%7r3gqdj_3j>pl4>Qv`7iOk)3Cv7= zDor!{J(wBRfy#^oX3(BIram18=5=xmETBE81|AGfCc>Q&IV zpNqmA^?FcU)X=~Hs|P{#Bs*xo9CTiqi5*fGg368`|C!WS7~Fao7*Zg8B5+@`m4Tb# zfd~`Baf3q|tPKDDF9nUsn1I%kF+lq@pt=DR4+-G%GigmQ!vhgepAsa`$Z*U6G_J$T za6p8GA+zVle~vz70S^Wa2KOEwh9^A|3{4`SJ{SkXksdLICJ|8F^DsPHqo}chfrH`r z8c-byY1s(D;NaG+nu_QPcp95if?O zt3zv;7?^CdH5M_bFf0%Om4l$RG^~Hd3hh6E;*t+KCkAT2LHywi>W}n*>T4HJJ5C~n z0aOQq%mBqRC|>vc6J+sVcIg4NTR}N9fH|$_$A6Z-jHa3Wpt-UD=Cm~_%xOI!H-Xk~ zf%YKfa|p7eFsH2nnFA`5``935GH6T}+qfutc`G0{M;+8o0;LZH(4M@81>iITDsMq+ zQ9yfND#3eO7BGXx$UtikirGMGf(+F_{sgT-0)+t^gOZ*Gs16Ze0I%C>=n!ORIO3$D z*bxZcN2@3h!@$7++Q-Gf5Xiu+CktBtBmkao5dy7o2)YnHd-o)_~SS|M~C8(jdXa@B!SXUcmg8SCEB`fmH>x2g9bJsULLS0%)y0 zX#auB2hjc<1_qFL0h@CVA45V2hz%O=C}4A50~)h_&@{7O7;GPl+LXqb{foiov8aID z!wVIM=wVR-nIXxLA_6iWH2%xPzzh;w(*WMH!oU#oLy%N?@fbFL&kWN;qX{hW0 zm35$f4-i=f2K2Q+0n(uTavT0b)&QZ7{esHV3(d{_pf!{X44FL+4onP+4jPOM3>;Gx z7&r`n{$~gUt#Q`3 z65(Pv23{)(602ZfQu+7)n2G{JvI#Ro61W}fV890Id#MRB9MS;or4e9YQvsQw%#f^O z2+aro|BI+dGqf>%VLZT~#2~C9uz-OZGl9lw85ow{2dzWl zU|4ql&VSHa!R7ab1Q-}@{s;95k{B2n7KAV`ELp?MpdiN3AYk*qUcl!6e*rTNh6e)L z5==~N3<(0DKIiTap!$)4K?yph4w}DVWKakL%|C+H1wqyXVeeCd)&Zf{c>$7$^>hqP zZT+D74^$6=;@%syheiQ1#_tBImz!Gp8yY}s<|2Do7!-m*WhUrs8c^7R*r4*$juldV zE@__G9|IjjZD|0dTZLdy`sMxzaX*Ny1IhympdlGh=t3|P1Fwx@#!ki!5^Gg$8kY7> zU|X!Bz>w54fo*AzIs=1%3PW;_vO^MsmIpf{A7~wj0Rw{^1A~B;!*K>h3pd6F4^9T~ z__9YQgQ5j!ovU^)1H&6oou|UUptBZ~M;RDiuTczG#GoAD%&28?g5l%;2O^3dhZy)7 z7zC6-^C=F88NlW^a4;x>%yH;oU|`Vd1Yc#m+%tjANkxIdrALLqwMPXshOdyq0Gbm9&2K3% zxU5O|zgN8jsh__?e2)5#rl$T3hAsai7&iS6VA%NIgJHw}84UaXPhi;hzky-<{|bg} z{|gwl{!d`o{2w&u#lYa&rX#Fp0$Yj-55tP}EDY1ua4@V~KY=ZE z4FkiW2GCwu(7sbE1}6(`0VW1e`cc_%h>4xaK?;;k*%%fGa402K%AeFn*iFr@Yx*wFjh@gP|3C78MV}BJf<2gQul> z2xvZ6fq@A$R{^r0m7ysFWEN-+AH)ZxHApx$_v)Sm{`35p6VOrU-V z14CQGm;Xn>^X7~UEe#+4H-Pu{fXvte4d)4LrG3&2n}iw!L>UwXn3zEO2N@V#dO8|r z_TTz0$ii`Zsfq}Lg9u0uBg0m;32de7K=Gl%kkqHZkle??kQAW6P`ZwdAr$U@6{!0` z;R^~^5T3y1tfInDv}OWZ&>E0g6WCIEI2a~{fJOi&uqDCMa1CQCcs#ZWvP`8p!GnHSO$j~YOGYC(EIbN2=e%m0Jc;s$*O z?G;R5_{iWOV!*KcK1kk{fmvk@TWF8&js;8%43C;XW7PluOR7Nj5Pw$#v6ThBGJ(eR zSr~S%2kmnN^@~C4rUV!ktzQ9IFUhFEu=qd79tDOK|0Nh!{$~b_pK2^%(qLG8A7qyT z!;1Tg3=Sd^3@h)0)?wCz+@hesD8R6!AEt(tp-BX!j)h^xdfgcf;ISc4I0-T&2yrm% z>=$HE2nXc}7KW5Q7KWxiUWTR+5TAn~rH_N5sgD!N=V3_c1I_b*(kVzDluiX0rl`Tp z1+f_!z-y-Z&i_{s6<}D_4~hp#h6Hfh7l-C8PKE5#1tlokz|X7;UaA6;2l;0Ln}M1PgHWF**k2AziULkdp!KX1*p&Ks7{Gl&m5HEzr))~=(ijrJ z@yf_>SRLe-32e@57#N;5X)r7h0IfS^VQ3Hlm7|Od-_^XqV{hSW#25|;LDuEVf%a?n zgUT0BMYpmAA5c!Jzw1wO9{)UQ@)n!?a5V$Z;&GKqmfz>0xM1?09D zU_A?%K=~T94}A?=(i+fO2hdm;3&Ud2`uH^*49R`13<&}t^B5SC)--{}=LA6e8*sK_v+teLgy$} z0hJ*W*j(0xGcX8%{A|-O9lSONl(#3aJyMfl2ei&Y>)du>#QcQJzfW@b3oxJ!jK%s$l%hz&u~Bp z_EHs?za;J~RcQse+aiGpqz}}_o5L2oMxUWM1T==l#NgDx!Qdjo$k5ybl4oW}5CEkS z&>T7k!_+mPHI<;c7qs66BoFd42Se!^&|E#FE#cfF%upoKpux<*1rJEg1pg2hF0o9WX46SQ?np^rg7*cycY#xS`o*#{%{zA%{84UaHPhi-0 zzk^}V{RW2Z_bV8--7jF+dOw3<%l!m~&G#c1Hr)?k*m&Oqx@Kkp!(Me*-(?G5vPuu= zTs8{^22lA5?!$P1+VYTd+onL}(Zy?!#2FblRY2)U;on~M3rPLX6^tAH-(cMT{{-Wf z{|6X1|KGv5>Hh}CjsFw)K;x!M*0V4ySPxp`1=@cF>eD4NFbLdW+C*@$+ zqz+nt;Lat;BE-O|62<`98!w;&>X&vfY*YueDL`j(%zXpun<_B*GdPHV%<};EXBC+A zq542+N`Zk{#gc(R;7Jqc44y^I91IR?K!7e}Zw#{R51f@9$vTbbkZm#``Ovd$b=gLe6aj#XSgv_7)?b zdpeDwNe6VsCO3nFKmyMkbnQcJpq@Og-?7zVP>gO@5Tm!GAW>&cZkyp6{r7u9~b5I&I zZw9KDPeJ)7p!6{)eFRD$g3Txa4@TY+|&nk6Nuf7 z#O^?1w<57YbrQ%AAocZ7@mi=KtD$ry$Ua79m2xOu3Z;vo?kNP1xiYKdgTz^wRdPYJ z1G7pth-P6{$%LAd4y99}G^jiP#S!S74iFs=6_16|(NG!`hM;-0|NoOs!a!yUFspj$NMptKj1_JGoEP}&7bJAvCi%qk8H3u7-XJcG(rNO}SFS3vO(8f)VKpJ$Z7fbFbX zQ2s}sFG%2+qi)g+I?EPvb|GlK05m@iYF{n^&3`sDfY;}6GdPQY<_tjnTMf|JH5v*` zXI=@iB;09HVPOaW@6!N{k01X9DO&}=YvK`S{DS5e(951D?4YsFrhZWQbA=7GJ`uEj zoLS`xoAa7CjZOUw0+4kCTbe*;jyMQxX`0y&8eakVV*+Fh1$^Ew$j`7m3t}Vt9o@eL z?4bD(h+n5POzfZ1FadmaqjG~F6R7Rm+#tZvARxd1YSSX0cl_%=Lm24%s~L##9^p9+ zO>p;s*dX*Kbn9Z+Cl0FCSFYAj#^?G5bx1X_CnI;Rda zKf0vv>;DE3eugHU1C2BLC&AWCG|cR;gU(}^Ff8f^ja@PbFsZx&w~><8#4s%G2aUA| zF(iq^Ff8g{&^WVS9J;pPNaM_Y@S2Pj4h+H!i^Mz{ruK6*&+I=Bo!?7nn%O@GlwMaj zFmOZVL1uvRgeZfvKnla+epUu&5s||F0`7-7setk;s4v05P`YMH!_@vM4b%ET=}LLSRVD_8 zkTuO4#K7}Kx(gUUd%)r6ZZk4WQPUQf23{}UARxlP%#a`iI;RenC#Ez^=?9qy>US%z z*un(bztX${G(OUVWJa-?wm>P=3}J=~jZNTlyFvAN#%qvULAlFejY1PdTmdQ1f!5`L z(gvs>0b0M$z~BZx4;*xM^O}a4{cAvLH544c`x`+0WYAb1$TVae!7$}Y0>iW`84NS7 z6fn%XQo%6iN&~~ZD*>RhPJSG6@nM+L!@)4&jsU~NI}!|&?kF%!zN5h~<&FWv)H@ao z)9yGhOuxgxFu#X|VQvpI!vYZxhI!yMwV-wyXs-jzPS{!Lur_o7bFxYV!;~)x4AZ`3 zFwFQ;z%c7e1;d;#4Gi5l@#rSkyp!3N#p&syBTE?N4P>QD9gEnoC({!LX>mgMn!sWZj1XQv$;tjQ$X8 zeFtd126TS91;cXiIqM7z%h!YEzVH8E4nEg}nc=w(@_E_|80V-vpq;f2TDJ^3Ydr@v z_XVBL1=X{ly&>Ch#LdE2u)G0@8_;|xC~lDFL_zZjAon4khXgvS8`(V!jM&fj28A)m zO)k**WI#Lry^%=!G18v}J3Re0Fw9Z6vtVba#o@;cG&_h%f9Ups*4jYQJ80iDWX&CD zK4cY=oxlG-5MbzloNMn5weuTz&Mt5bx_J<@HvB*Ee~x-Ej|wzOFz510)|p>TOsaL^luSUV;B} z)NdjA8Jy;zXZiC{;9i*d8~)8vzlp>AZ!b~PDk_ImlR39LpQU2i%q)xCiU}NaOVP6x4_QCwr0JWmIhFt0krOSKlr?L&^cb9^$(!6C0Cjt zdkq-bKxan?sPHg2uz=D(XdW4)4>YF8z!1;_!XUNZSp``X6$C-+tifmegVch`bx2-E z?Z1Hhi#}frnjcp9Jx86Hp+Q8~;Q#}u{sgt9TfpN9OV_h7>|M{ouvDFqflWmOT0er? zy`c6As15_bGMh_oQ z__KoM1%Ay@XJcp;VPpX9;|87gw}AQoe|8mcTi*e6=EHIDUR7NS&>6ss!F#fG1s*Uo zFr3ukU{DZcFk=JH-#>ls(uuL7~9}R}({|y*c{I_6O`QL$I)qf9$)&IAG_rEP$4~j2HTs>e0?K1?K2ReHg zW?sY3IqC)sTmSE9nA&f_uHv-3e0BG$q_zXM&h9fwpasn3&%~ z!b||PHg-lZ18A&9fI)a2SdTy;g9i9a%|kt)HX~@9`1?D^I5Akg0BHR+Xg-H&8Uv$~ zfj)zSz#Z@zrw&Y946G_Um?3I485{&a=f|kL1kDLCFsXvpkJIFbMa7&iq#HFk(`kP{afps}W!jS_e9>7GypT z*!%;az1bn4bv>Z7xtgq2IY5<9B98RNDro(2Vga@{0&N{ zpu7M&O9>VyDiVtrHhcr+^8^vl`jiF^@ctQvQBn%iBUb6_YC>yvjJO`HtOw&MW|3J^} z0iEXqI#(Wa2L|X&d61j~gOkaBkUY0D_-r50d=#iJ30l`L!@!JmhUNy8bI(C(8HD*5 z4zMtAG#P--h6V8%7(ruX%_5*R%Ak3v{|rtB3{1=_j10{IAbV`UXE{D#wi94t0L^uQ z)Pu@n28Km176sGcYiSFflNTK;*!7fe1z>6=sG-A`Bd$ zJy)Q;#%&A0d?q;m517vYnnMK3FM-(Cwg#kKSD=A`mEj|nl1qk(7DcjM%4VF`vzMj-_d3xcH?(je+27#I{4ni+&Z!-x2bG7AumM{MCJy}DtFFPg=f42s*8d!gTmCaJ zZvOv+VbgyL#{K^d829~GVBG#+f^pmb4-6aszX090RiNa;!64SiP@(Js$~U?z92im= zAZK8L%3ltKMT->}4x1%1FsUr~3@zVgFfeXlSh=2sL9UmDAxVURLA;lZ;hGx5HZca~ zZDI_J43F4A=V3E2ELaSh7iMB`HehB*0Ig90oslD;&A_ArnnMQ7moYFbTFj8J)rFy8 ztIHhF`P3O(To@|0xG*v-SbTy*kR^m+!Ftfx&=&9*ER%{Y=xkfiU0`563tSk$>KC|7 z<$&Z_F$M>b1x+*iLGv^qGh>=(_J26#a|LAP3wA-4AE$h;Ffb^&FbF8SFeEH;VJKMO z0#eVAvDk&7Vu1^24;CmOr!zRRfX2o^>q4f0#^d4cMA-QOY9~8`BMZnrkXn#`K;^?9 zaV7?}1x-vKaghIHKz=*zcLn6$OKgHH9H;#e?kHH~0#XC=BS@a1VzEmi)NIh1=AbcU zP*@2tB&{o8U{dj6ShPNo;hGjRcsq8h8^|LTIsf0k!W(;9i+#kWPQJvuw z=p099hAc(~0gxQX9*}bKlEWUq$VcC5p21k}149o9> z_Gjs?cmQ6jr@P<)11JnYZU@Du!l@P&MGer|l8Nhx?*y;i@O92{(AUi!c1X(mr`(FXIp+V-r)PdY+09EJBF34hW+8=BW z1B0mxgMf((Xzc(i5NCm2@V2l-_O!=n2z_i}>DO$E?dXnD^o zSQrHi7#Iu~K;gP<0VhMN255cixBrl}TZ{~vsw@mjny3Feh$J!`(gNKwg8;~En0YJ=D(g5H)YtJa7^;E9*%*$6fzHu~xr>kCKmaIwL1J18 z;S5|14N(3gCKd*zb)bB>0o=z>SqJhz2ZIvWERY^qhD8D#49lBAaiYz@s-i5x%m7-K zDbBE9F=(zsoMDkV7XzCLGXsZ;6tryss+U3e1JwR7V9-rcrN$`KEnyL zN6vM@zyIzF{{44W0hQ+r3`*-D{!j+n9l)?i9W)Na!{DT%{NXS&sITw`at;z`&Z&6; z186RH@p{lYS>+Fhm|YkatruZ9Ann1hcRgs$9tT5<0qC4z0fv-5kpCDMl-IE^*unh= zieFH88GzT{H-~`sW(F`U>R0>_2ae+ahJEW@81}7qVA!Aznk!*p5a|Q0_2FP(@7utz zvmZ2`4VqKYHE3XBX9yADVGvMLoRI`R)8OlWhY*l@P~Ng&+<*W7e_<664O$Omz_{w6p+_o_Snhn)WcDxY8& z)_;ZVTL!H?2lY=udznFdok8c&g4!{lzVd-r(DBt73m8CW(}K>31ns+d(A3&*!7xPy zaJoePC=z=h}kIZ}|yX=ML$Ig3b#D-KT?nuO@Q;6EsH!Iv-7&!42&ptIgV=cB1fC^Lf2>QI!( zU{I5AW>AqxXW(T>fS!fcJVBBn6?_)j-~Y`M#28Y+XQ2K2-#kH>Ar*Y~+5i8|69gDi z!DpU<&WvMWIHdFHKjHTUNHC;=;zEUqp?QKRL#hB1Llda~ zG(m_VRe+J933M*q1WpE50g!rFnEe5twa6d<3L6H7<_XLUsUo1T0)-7I+(6=>Fax<0 zIm|%%WkB_Z1Or2p1?WcSrU`Q3y`_sM$UygMGcq(y0QJ!s85U0vhl(*VG))j;0G+13 zcmm{J6i~mYX#zikg8(zb;t9M^b)b3&bT;10{|`i17?y(9S1>aiGXRwtAa{WKfDDT# zFf)Me`)Prm6$jeG3OQf$J2;-3pl8}SGa%2qf%2rl^Ev7u|AE?b9t<1*J1}hc51M<6 zVA%XW0Ce{r_&$sS450BcP&_)E2AwImbOJxaB7r>(lfdTy*D<8({QAEjL{TG!A(w?& z1>|@|Cg#b34%sonHWH4aDnm{Xsnk7w8v9mF?enq zRIj0^6KG-pt?^;eSj+&b7gaS<85kH`*Ff?Ls6It96HP7X+%wRbKgjA~VF#ko_h%M7 znWGMx!w2n!2kpsJVAulQ6OTOp$G{NSqq_nWz6#)d2cWgm3C&ab=e!nVv1Jfe0k>Nx zIDqbPVA4I&z@!aYcVXZFz6VNCK!^#n?}U{hScHWE)b0sV1C0-Z#6f%p27|tj{~5$| z6&8TcZn0q4e;=|>68|1{kY7L;v`#}&V<*Fc$4gaY7@B(unihfPl-B4lH1}L-T+{;! zGsu`0NHqfk`kJGH$Ds8;`~T}|G%$efXRU$GQEX{w?$_3EWdN1#^y9T9U#2g3eI2vsJ!QoM|%9lpSeo2_$Ks2m<0`ni}tS!*KUeI1&NIL~` z?!3YyNPYtCs{+lB%2DCj=75m7dW31}kqr+y|wP1q>_{nZI%^tq z-YuxVH4S_o8t9JDWEDmR(0K-n48H$&5CP30F*9Tu=yoJ97=X^7b`W4-W?(Y}rAZ-% zLjep7={>^4lw-r&#rO+ zd@eM%ii$-#1IQoD49tdN3`qjY5t)nv;4|Bv^?=s4L)`VIhm|2kfQ8{z&!7L#!F~d* zlLh-Jqk$20#;tCG1LL3nOI5_dYj`{7Xt&s+a7uFSp1?M7KL0!HUl+ARRz!)A#Zwk8Ja{`7#8=iDC97* zW#}@hD)cgNFudv!W@rY71B*fyBU^$FqpCs=1L)jC(47uE42!{MCFp86Fo42_g@GZE zB_fScfZ@5yLumN0d4TNBWMpG#hJ=$w0t4tixr8Q5^%&^dMnMJ#5zySuAMiO#tW1g$ z8yT1x1dKp^2t|!epf&sxK&aq1KrUA$_JpfY`~p4>N?Fc`{Tg-me+g-?a2e} zADq%Ov!91yX+LN`+#YvMhCXINmR%m4;PZ1qZU)V5!R}mSU|8$|u9F28fi@E`fZE2O zJ)R(Ub3oUtf$U;pXx6DhnvEAA*;^fDYyXJ=58XlGQG$YE$;$k9k)Xb_ZO zSb1j!!vhIM1|Ag$hFpV+3Qh*~0%iu0gd7Gjiwp*lg7b`G5}6FT6%CBs3A_xd7RMR6 zDtHk&8Y3b#HjD!!B_;IIsvW2JFtd>;m8^R zhC_cO7*728|KBy`|9|FGP#aX+ViCh0H5LY4iN_4u7AXwU3=hEm|Np-wrJo@M%m&R5 zaWEY1*%QXa02+7u|KA(bh-7eN=oa|@|GCaTbtZ-i2@Zw|0VW1e+f!Adnc@F`_muzt zQ&O}&9x>=Ds4!}KbTNGXuOO=H04i@m?l}C1gW>2J(3uMi42Rc%+Ngizm>IMsm>Ja> zAou8j&Rh9o&%sb7!NkDG;A&9iz`>v@@t8qZ-~a>2AF2|ILH7fw2rz)mI&me7KX!MH|T0;GlIfM+rfhY<{nUZ={m47 z!rXQHe}VwWUXcCBcI}7W-*gI`j}QI1_a9Ua?71(%;BrTT!TAmYgU1~X2KPGx3`hP* zFdY8Fz;NOZ2gC6{U^fYX=DC-E&ssSTKDYDm8hwXMM(qG6Mtuh^#tHu!SwVSGUx0~0 z-+_Yxh+{eOjWR1Q9Gh^3(2C&;eYC-dRx)BTvrJyk&g$0a|wX29WW&ZyM z0-*E>N}Cl2xS{DYi$UbT4Mx!194vi`6=XB0TCg+!|KFSnN~hcwXBo8wvGc0Lr?w|0VL4aEz1>}4N(Ej`h(EJN3H#!(L{#Rhws1C}@GeGyrYbY==Fs%75 zaRb!eUi)2uVcmC^X3+WA>%TWJZ1``>BFN&vut6Op2D)F!61?|`feBQWLi&;nOag6| z>Yx7!vLrApQ-9Gkv%iEH)c$i|fb6B)b01d5bTDkZ-@vfpK4{MzdU->vI}5I3cc(C# zJNcpRbYWQ34{|5iy&4QmAU85HI9Y()eC(ef3uw#|Q1>Gm?th0?FLBxS!aX%A7iq1*UJx2_n^uVIB zmca#F-W+5|5de)5uYvLpFr)|=Fzmb!x?@t;f`I{a{x`TCA;G{9z_9*4XiOcnE-Hdy z-F@8y3=9nn!YUvy>NfN<=>Ay8@NYX4L&XGU2JICrOce{57*r=*V$uy@VAB1upGmjj z5QDBm1Cy?Y1CwsV17=1Bdt=ZYc>mV(GyIt@$WXC>kD=;>B!ljT#|(lD4}`UMurX;H zwKF{*031Gg8o1#}rf?ZkKg9RzeO6c{rY)~sh_kWkrkOoBmM;0J>Y zgM&Z@!>WEzd*oj|XpD^kw1yij2O2}u)kt6fiC1K>F;pb5GW;`VVW=ozXQ+r^VNf+V z!|?yVm#V78J4RiB1V&wn0}LPjFJ#d*Sis20u)aZF znGYKfVQ?*9iwK=BGH(?IbI zT9@+tf0DqG#+H5+(0K?73{0RrtR|4e02+^Z@E>%R%A)nR{yT_(+@`9~%5dXXVCfcp!}Qx9yi>m{@@a3etypcy4zqqG=DEqe+}LbhRC;G z(6cTfc{f$ZjbVWZ#7)ckSr}MUTo{)2t7#l%2w`v$P+?fQo{51~B@jCHUIuMTq%oul zfYPxA!_xZ^46E*YFf8gfU|4cLfMMNz(3&%CiB$}?3<&}n42#zPlV@S5&|n3x`KwT1 zVE~O?fy6;-Od2{s_p>vA%7bbKPSAax;Q5z`>l}AM@_*7f7^)(e82A|yME?KRR8_5T zW6;m&V^BT8&ZvK26)24}YIpQ8Ff+J{YFG3!faV-P_US4tVAR*(X9o3+bS)H^L1G{` zs0ws5g4-V&sSMBmD~N*J^Pl+yc)gE01G69l%V7ghe;>3SAGC)6l-}+`_YXnNqeY~* z42F&O6Bst!hnzc$Xv3cV?G9CfMLOZ zkhvBN3;rMc&mf=yzV8(?J%Z96tR9D?N6>zZ4WMys^?(bQ>Cqc4J-UO_BLkBHxb8^S z;a~vm>0?rXq{n0(7KQ|o67U?q0#gfAEi8;+VGhc}kZ>o>eH+eWx=$I+eezH{iE&>H zR4ujKCxFF$zZp^U^LJ3ZYM_Q6Xv`5?_?b}IeFf(*!|yVh`#}5cKxGs$;m1RS`;hye z3=B)aV>qBTB&ZL{!mxDxg|nb`*|PNl3@iSF^3`VsPN<|2=OgW695 z3`^BPblKWK*Oe)F}&I}3+i|(r%Ff%wXq#9IM zurP=zq%epHBr%9c9A{7!NMhg?Xa(=6hmC`S(mv>%K#eh&pt`GyK~P14VZnd922fLN(RvPsjiB`pOg`ZC=NtZ8GdQVeGdQp) zOE58j?pv(V5MWSOU}A7!a5fNW2w)J?Xk`Gk*OWVyn79;}nYbE2^A;P|3xL*AF>C-#m^&eJ4v@1M(cKEN z4~Cf-*la97>je#NG8ll?SV=H3h)JX{{0HCv3t0>FN#)I32Sc5k-;6N9co0)qnsvx>ez5`zF#ts)k6F#8!8n(l!5-8Qz&4FCT>Pq9;F zV)$py1it6%KYNRTFgQ&vTO$ja`~1VEVj;xDU?b1Wz`?L=4Ko9qinf9?gD_}q8^f|S zjDJ{EK>dGRiv|X5180Um{||_O=3hA&mV@V-1Q-_m`OnU#!pqPm!1$*{1!NA$JXHZ_ z22lSHbcY9MEk7uYg4BZC2x?b>_zVn-)_~4M`y<250FqM?0L_^?>A>Vzz-yyG>s=Rt z*SUi9LU20eBya}31U}A9A0j=2wt>3?J5_B%(mj4P2o5AC=pz&H3hDkjF z3{&oeF@WwXpL_>&7GxrWGbqu6&V5wTU~m>t6`0JV4qE@c0<_+CY7f(aMOrbSbDJC% zX-x)+3otPJXKpqEwM}gpk_7(SZ&mxx*p#L%5yGImz=1(`MlpE2^N$!4gSJ2t==aPD zSVdqlc>NS;3=A|zqbu=%0dzkAsQdu+Pi#~~85kKvRTvl+xiB^`f$vlLGhK+mW{oHV z=uRaY5hex;hHdx%|KFOX!La52|Nl-Y3Jja?tE^beB*3uoK4>mdWyK;UP<;VfpQ*ZH z2@^;SNKAFbCMM9GTnqwRT|j#SK=A@zhr!ZhbmBkgE;=R^1}22R4}r!dzLwj zD!L5}49Y7)8Oj+JX_ND8nUC*DPGJ?z*v8gaHv7~8(%83=COrW*%x?uCzRQ9+EGVBr(VAv%k$Y5i` z#;|7{8-uC<6C)_^X|FJ40<}3+1RjIpTo2;s0}Ki(aG2qL{c{5u@VMuSHL4PA z44MoH0{d)P7QT&CZY@@JE=5 zL4sk~ACP(#gF~RZd7$ONvNgENgXSJ4hBO@+h65sya9Y;G#Bf|k0vsmnD$dZcUt5Ob z;IUv)C|?>phXNX-Xzl^cc}O#)fy)8VohBf6atkzroXMaK9m`;5I3%L2@svRwdKMoj zt%B5n6)`X{{P}+vT>rB$ECJt<4O%M=lIMbse}U$$U}B&#F%E|I9u9_OJ)ko%AN^+# z)iQX-Ajoh4yrx}(Vc8uChNe3L4DENc6%H}5F*Jw>Ff6@u=f9hXwgTwP)a48}|2GJL z*r2=%s_P(jHG|6@m>;+VKz9c$>4Dh`a?9QShrxD$#_3oXn!xklpgtPRAKc)%!v;v5 zBaz0y$&erc8dG49U}g{#IKm(zk;))ua1`7Y(bWL$Uwgo;E3p84V<~7X2Q+smCg95O z6O?{64lv*|PekJ=xNa0NI0EhmLdIaB=4mj4?v-Uw)&PxN8~~dqqOpX5Nr1@)G)Ktr zAhHMKchI~iX#S0hK}i@?#xn_k&V3bBVR#?_K6f9qF7MBO5L>eE&woR4kUv3lgs}1t z6mGD!7$7-D0ZALsT))X8$T{brF)NULi~?*nAi4klS;2ea3ho?J0p0!W%)qYlWs@a% z-x)9Htgr^qJsu7sAhj(EEY))u1X)1mvxCYJ&>9%fnQkCCP+8!z(NcX13rL<#1tey( z#Zui5bWSY8l70pT=1HJ)saY73LKp>DY(V(DIs-?;jTV&!>I^(HpfsqD29jF=<-`2o zvA|N@4%}`+T4Nv}V*?7W4~d|5`;z~lx!LcxK<(J2|Ct1sZLT~`TEoDw8_VKR|m26{@q;uHPs6p$Z4b4GWbg3bfn^PdT9|Nj3h3=IMx zy91hM_MdnIS?2&!d!lh>KgTOUmKzUUdf3p!`V z!N4E{iaU@S85kD*=U8m1J^|F{xYYuxm+vFypt&y8FoBp43ImY&Pod_6!WrZ* z(3&aG+98nnAbSE9TdH?K%?F8t>Tp;Z2Duw_hnxavyhuRC2IOXt+d*qWEj2)Kv+O_U z4ogto=l~8w2Zrj0AphXL%MuiZ;Pbzr;Ri|!ATvXnX7+19*P(#i3Ys%Sc4H#cjgWG3 z|9#{$b|7Yg;{E`*9^zow{~zSHIg2gTL2YkP8fIq*5I{E*)E}|930h+ZG7l1-DD(5s z_yX6V3JVxO?gWLwhQ^uwm5)Gi4O#aE$}^z8ASiA?^)u*BkV*{(4p7{H^1+A1WEG9( zO32yY3Jl;gzhP-ugJCInEf5RC5_ORIps^th=)TjIM$kQ)%l|tttoZN2u=0NZ!>a!g z46FaE-2&OYY&{!;BY1ByayW@Y!wGb58zep-FvHG;0EG$2KA)wQ>Y#HlKz4!3SWsF4 zjYpx|1G%$wDR_@7C{2)SP9eD5Sh^l$Kd2nhfzDHd(idp`7icet1jFY4i~_pBf#XB~G@h~LKCV5Ep!^CN7rpY-smFt1>3a!k46FZx&Q}GcMFVKw0QHSQ@dsLY$H1_3{fy?B{Zk%+&Ldg+A9P0} z$nT(Z0t$Owu-hFNK>a~TKM<1kKx0mzx&joRoSFcr!`#^Qlm8XF{F#Ev! zg%>n1fchgKdv#|lU;y=9Kx?o;^%e_*fC|V>cfk3wfeEyJ`pON+`e{}MM;4IX3=GPB zKmHd8fYgBa5Vvf(4{Fnc+Um%48mNy7O3R>d0?ieEd6?V)zQ0sJ#s+jhsqTyh2GAX) zV7E*-zyKP%!*-Xc0mH`sY2dNj4gW!V)+diq$}UbC5gpZi3y(5X0cWqWi%C zTt|cQ9Oyiv*$)L-Ess0$JGB&kmb%p zmmX#YRy9yv*#J7rQDX}Os4dU)RFFkcV-W*reHiGx7zTz#{aoPnt;f_A1>zWXYcg;! zFgP!m0NSUk5DMvI7#v{EdH~9Qi`IkexdQ4tC@3&xg5Bi`T0_zgIqom!{bFD zGZj~aGJuwU2{1Sa{r|sc5d%ZYBo1(&cuBva!UP5ehUNvJGm=4f`7tqo*7GDS0J#;E z)p zpmYc-tC#kJ!~__Y-3OJ8^5Ao%SX4mwAuV_Y^3#%j$XFw3_o6}aF{Dle=VJz86;M8g zqy>1)0Y8ee1WV`XrV0j+bp z1HOxxMUC;gAj{wXtSTZ54C@#enEE6boOL)E5<)~6nEJr?aZLzj0OflI28MP2!FSg= zGqFrCVgkv7?%M*LRSnt$16n@?QV-ql+s7aU8mn+p0j)=X+(FE|4s@=TmOvrH_5Thb zpgqT+egJ5{9H=Y-mGdkDN=z&af_)4O%vg`L4k%z}XlbiaYh zga9WMwGJhwfB%_OoOKvDxElf)3>lbgA|0JnUNJg}se#zRPAbnCmBc{ig3JVsM?7V8 z5CQRF_U5o}?gx!uXbB`SJ%GvyFtDoVZeU>GXAo5Z-A@P73%d6al=s*LHiFi88wfHu z1PCx(Qv;a=k_YQiIKafuz^uZq0lJrAsR8JYO+}4O%%HXB5e!QfFfz2LfX-$8{=Z!0 zKSPTFNdN!;Th(6u-!Ar_;hGW5EM^8)l@#_x>;L_CQekCq(%Hr6AOMr&XJA#?#^@jb z+Mf$rOBlhpSUrV(X}_XE5@?^p0#Mrd^WRkjBo@KAPhEEh1JedA1`b_`1I#Jx%lowi zjx#M|1dU@r+ztv8ko!-tFaH1izk|pL_Qm%V1-3COZn(z0Qj38jg3)OL1H+L;|Nmc8 z`}_ZJ*#G}WCMAIF+s*(wPdkFOX+Z?zqQzPQUztFA0utDl_s<2{w}F9yrAy9)iNRS7 z6qXT8+tn36{A2LZX5i2@c)-BQz^VeW^8ov@{~-HyI~bTib{}A0cK`o>cNGzaM>;hi ze<~bc0L{H2tKGrA{69!76N8HeNImEtjUDXE?=vtQ>S1Jfq5=v728KgxK=*etG8n2c zFt{wx5>RG(4bCTzbRL2H#k6QLNF5V{lfnQ0PAW&V7&t(C+d$#*7UX^f(D@nO2BCnXMLw;pCb|g>42l)*jEVuSjEWYknROXiRTKkGF(_7?XAnAYv`Dw$ z0Rsnvmnsj#dsRgTZ$=4FIAt&}g4(P?+Mx3Nz*+_d%gJmEn&OHlc$gU(dQ@u^E!7)N zNHQp%xXHl7pbEN2Petp*Vur8(6~q-!JY|CHy2;p6`X zQ5FVGRYnFEmH+kZHVp!x^-$N;KxgUx|Nq=%3(GxqMFkf|#Q-NpMS(@k3=HjSK=H}va%U|;~H)h#UCDsx(SOj6jFuJ>t` zFkxhnv?*atM7NPuem>geaHQ^+6){s*mvIN0NsHAzE2C(H(NUabZ5B;0}H5rTF0Qp z%Al&Tlo51yIjFwk=t}L;Qg8*$>4%6gfX-uN=~EVPWnj@*&H$=+{{LU9!Y1ItpaK%> zO6l38&A`!+0lKTcMMXE`0HdOYFCzoP(jG01MGU|GFA!m2Sf|R-mDj_-z~85=afDGz z;RvH*#Z$&s@c0t{I>iiKMs|Tk3=9lQdqMUvF}mo~F*FDifXWzwMGQ5HPAZ@@0=g%H zhry|biNQq&)E5Kwl~@=agn{k>*WK}e0hBgDY%PV)Oo|;!Ob!C#4E&&aVTTKYD8mCG zMFle^Ese?JArv!k79uyQv&n4H5u$n`(J1? za42rr#=ydGP3`}GLp9JC$e;hJVGIms*XeF(V9-)ozbjCNM8j7tsNg zwG0ee3YVEc_XPg`@1z1Mixm|XF-I`AOaSeZ|Nq~00t18V0+3t@`_leD|6M~sViAl> z7Aq<&Vb;&1- zU;sKlW2uUw!7~O1D^R`!?bkoiqiVs<$iQ%X4aj~ig)oK>|3Q0uQzq~-91zkHn8qXo zS|`K4sJ~%>2)GVc1YJqQ(A4)Ibl!sy6N3Un(;8L=CKb>f+bRrAYe4k}sLs}4*tP~l z|NAchuET%+7f|{AUqD5JWB+|n-KM~?@4f`bp8EnE+wXI5Y`f3EvGx8B_AU26uy4Nq zf_>Bd2kaZ~-(ZLINenpls)N?`gW7nY@hMRI4b%@)VA%9O9(=ad#{V`9lX?^wntMQZ zfXgtn^mu^hAzM^HX-9^EWu2CS8WRUYgNUNSM$ny<>p*v%DljmE?j2MC?O)gq4m(g^ zuW5k=14|#19q2eC76vs7cZLx7{q*ci91PEU)D)gDSTL}xlL6;!;i)jNulvuCWB@uF zk6DVD;o5%}0gzikbF3iqRKWHyt$Xv|K|qCp1KidFxfdh{nnN*RVD7VEVCr*FU}iWZ z&&&Y27Zucwv|wObrzVlaV8Xz>&VYfrj}^R^FBv?K0rD$I927R7{vc>yijo!s4+jId zeSV*n!9f6YCzZMc6N3f=(>joPE&*jG(AcB`19P7a150164g&|s4oG`+(|rksjrRqh z`@leLO;De4!bT<&P+K1~S36;$pb2Py3@Gl@6<8TyeMp;ymg-yrDoh*2pYEo^%ubBLo$HwfLwl`gTZwT$UQ8eb7mM8^-D0gt+}tmz#+ik zz6RWn=_q87U?^Mz>idA)0IK^rc37&*F$%IoFuJIK)PUN#2QCY;crc`>$bt4aG=SO# zkTxu+&3AsfvkE6evW^%-f&e1}iw$ccGkCmoL0gLn!=Ypo&{(Jts7_FD2CZlBcVKW? zqxxHr1(feV=7aB*VMtm7>f2<3#=sO37(i|TjX&`G2K99q7(n?0)b9o52}s`;G9L>X z>j3q4(Z|(5;RkA~+c32BfW}NfW(PsXtUzo~dWsRPQ%{*Gq%$3sn+RY+z;rg$-!GC1`AW!a_@RQE(Uutpkb6?6g$>0vfYW zaA44#;J~0RAjaU*G_{|R;kpqA!#yL=o+K9V9rV|X7zIRZmM|<@e+G08F~hd?Tr0xC z{ddsV${GgHT7X6B3m6uyU%~+Di!$4Q?2I^2sj?chR>J^v|G9$zD6A$dj8ypoKFgb> z4-{@PJ1ar^MIm!@pm{hA2L_P3hV79mpfNs>IgmIwzy#_~ym=(ZqPszXsYMsm#$#a6 z?QmcMwLwG}9*BJao#Da2(&unRkYxeG(tgmMrWK$*C<9C1^ve)2Rt5(V8PNH#3z$t9 zJ~$b$LFaWhESae`4IDNseVcU|ICK>bFex(}5N2Rl)(>(IXzWH;LxE|^qDU3i--0X= zw^~%bfX84In85o^G#nV7T^3~7z_9qg0D~ilzQ2ZHNk0>VBxoOV4-Z460LUL8duqUW zP=RR!!{Ym(d3%ufwnw17UBW8obs0EV7zDs~8E*vnRUv`lfGz_^N7Kyy6%32|L45`g z+x`kDAA{CHvw+Wx1I=H6+y^@I2ed8^WKYs>h?yYs=Yh=vot+^7Ixn|x+J6TTP+Unc zg6fV0CIQBM_c<8%+-G3ie*Xu!F#(veUB#- z{{3$b0G+|X%mA7PVYB(E%fOLv>zE2?4#fgYgXS|NL30uJLF4zJvJf;^Faq{`6;RvpR=`G~S-=dmCkEsu1{M~TCkrgqHNa^Q zI?ik00A82Ez{sh>AjiVM!N9J@>wKst7Hv-S6urUOLFfs(FFfuq#U|~oI0F`SXKFC}UTL8TG z0aCAn%m?`sGi0y_5##0HJ6gT_Gg^+5H&UiAgP_o{>HNClRC|8+ksV3uHkjCuTE-twQ3K}6*R z^Cobe0~+hS!3-MXZD7z~+5caFW&3{)mTmtTShoKEz`XhY1LlqY4Oou-w_rK`-+|@C ze-D-~S0Bpf(w(zhc00NS%Y>2)NHOhnY^7*p zKeV2K!D-SK=0och8JxiPm?=(hVgj9&#lYY^iIpKqfRVvT4Rl`>6GMs!=>BgIpMl|U zKiI4e1_lKN4i!*eWtAQShZO^xiWq}N5U5;cU}y#Re^@lsnOGQF*Dx@6PT*ir69uh7 z=3q!w0ktt8$#?crcp zAO^aJ`M7fyBZI}p>>dPm14Ee{}aT(b}=08{|Isy1FMQCgM$bM!y)yD(6l1R z&?X?m0BYyDO!)J^A%urvS)T%fik2_~XtU?x^*jtqKzEcaU{L_wOAnqG>|RYVwE)(9|w&huZ?2RgrxgJDtM53u=%*B9J!QrWa51u;p zfY-EiFfdp#u&dZJaH;4raH`lc@Tq7s@TxE|@Te5)gWB`lD%lLn!STSz;Gx3Kuu6oH z!DYgQ|1Bz949z+M3<)8iG3_F-+G8dh3@b%0{BKs_Vo25DWLOZQyCH!gilH-viQ$-u zygsNb2B}#m!ohG@{lfprD!LmIm_T}U1sE7v8J>dgE0tkLR$*YspYZ$t15r>vi;bZj zTn;cXxJ=+@Xb%D1{SMN@$dJ8&gP|8H=Rd)L;dvk9QYd9EMLs%G6R2Ucz z^>Z+Q+GkEZpz#(7hNLwh_k-j>X_tc`UnNJMfrE#kQiYje71*9^eNcW+QQ>7+DZ;^U zLS0RvpFvkcftg$52_r}jw8x!|fi+wPJXSHIhlPQ)S5o00QZoUXS3rDu(AqPGV+PZ}@gS}S zI=@c@T3>_uP@uHhds~p@1oN@~ptjYM1v^zX{SahfVsKFbjjx02W$-)03$2!Ps8EDYb(7#N=PJq7pInkIn6K=JO=JiUJh z^WpW^^g-pN!-U{5BJA1GzdWAK4rq6|4m>&@h~Lys0b)Ag)=yaY+*jq54n3h zwMRu@34@x3D}$PX3j_FUg$`9F)eaRV(3q?QLsAbY3>X=b8bI?;kov=A4Tuj~v%$&W z5&~LZz`*ddPaJedp8%7M$-zjKZU#XX5r&kW>-r2FJQ8KKz;y?@qxlb zgdw@d;P6hB{|pF!L;R7n2Gl13>0@Ac+y^>;gMq<$4Tuk#Ujx;*8<>yx>l!#P{eB|I z0@^70RzXAr-5rg@*pwLd8z;Z3xd}~Oqpk?KL0zYtYcu%eQ|(US3rSDgJu7H z1(tpHC0O>{7hu_bpMz!FeFm1T_kS>Nx&MKA^Zggho9;hg-gy58Go6T6{!6M%KM=9C1|}CXnuj= zL$U#bL$U=UL$b~e=>0hx81~#>0c}SeVA!h;>VL!L;X(87puPyG9}Zgc3u+TEFf>g7 z&G~@R`X%uEFr>`_$~)lsQ3j?-pmgPK02Z2>Y1bS4PsJ_68u zA?RGM0BCq=fchpg7#Klg2q3rXPI$l|0qzGK0Jjq(82117VA%fOfnnQ!3x=)#4H&lk z2c6;Lz>q2cauevRFk6OHf$#s5Rm2%sRsJ(18(1==3a~OH>zFenh=ArPcNs8ncr?%K zH(?ML0=3D784`pT7^be9VgM?uOZs#b5||2ZfzASczyw-v07|oB0wo1s7#o1EnR9xbzP}mK9*N3&8tPt~@R2VPKfr z_Ygcs*{}{Y&&j~h)c5H>sO`*R(_jE9o3{6ZpbF#NA)vjMdo zju|j;{QrN<1k^qRuh(FZu>q}%-7pWd9)ACSNP7>mE(f$`f)PB&&j8wA%?#?-g5p)8 zVP=2%c}QLZrFnGBh%Uguz@W{b%b>tuP{Cjj0hSdI5a8hA;sUclL`IHJR#i!16ay0r z2M1_sk%5r|B+eku%D}+S&H*~rj*$U$IvQw8EIR|7&&bX%ASfgZE_@jn81f1#BJxX9 zGSl2rUDMqY9i4-di$UfnXdCD%t9vqVFtCE|(PLl)U2_PkVmX)?*csS47#JBDS(q5X z0Hi+T_}~9$j{W`r;Mm{)Uyl9#&vE?kf0^Td{~H|t`yV8K=h5H)7aslnf8^2M|2rQ2 z{r~3C-~T0#AaWr22cQ4`ulfG>Kg*ZD|9QUr{V($6?|+#ufB&m|`TJkz%isSdU;h5L z`SSO_%a_0ZeZKttAM)kz|Cld-|EGNU`#0Bm-q@XL*eV+{~BNa{x|sg_rJy0zyBS+{{8Rs_3!@(s60r2!Pme4Q;_%| zF;Z~H*T4TKeEs`>#@E097kvHuf5q3o|2KU7`+vvRzyA+>{rmsK*T4TSeEs|X#@E09 zAAJ4$|Haq8|37^F`~Sz+zyBG&{r%7J?eBkqZxHu_?3MWT_rJ=wzyEc<{rzw9?eBk^ zZ-4*0eEa*~=iA@^As}@~ZjJf&_kYT_zyEW-{rz78lKb}ef6KSO|9igu{XgT|-~S7~ z{r$h<+u#2izWx2bGA#V{{Sfe#pl2ODa8@r5$Ow* z#zr(|VnBlm%nD2ph%SSTpTKy41s}Y@feBI7U*$l+qa4IRWD~A&AmA|$;vh^vXuIQx zj(vvAyfg++KR1TF#5@K+M?VHV1|8f1;=lwNght3uU`63KSnwe89V%)i5qyri$>uU9 zV7|ix>+FYN0ny#onGV)9`PnQ?M|iTVo1e}?7? z<-4W#ezyL8{clL1^TLXiJ5J5$RhIRMbu>P<*iHO#V3pJWo8{PGowOOrDc(lT>W74nM|QZkEDlS}f8D&aB(MfqS8 zJo8FYi;7AMN>Wo4iYtptQgaoO6LWGHJo5@lOZ4+gOA1O$AlAaQrlgi-CWDPlOi3vM zIm59iy)-v9uS6jyv$#Z|BtKsvCqFNp!L=eaSs^XIC^r#igi~S)#7!xw#mPmP1ts}K zAY+p=GILTCpiW9HW(Z0x&Mz%WPE{yL%`M0;N-WCEsZ=PL5>FpG(?QSFTX?~ z5h=7ii&42ya}uH9#SoI8uaKLVSE-O+keUY$nPP>^JZMBWvMyEAV(Hg<|gImWF{*> zdAY5953#0V(_ zV0jIkbwN%|P0R%unvz(Oh~(ao%-qx>h17}yP{1?zLy}T)Nl|KIZm|L^lNK}hCMIWO z=A|lR7K1|~KTn|~BUK?UwWK`1D4QW5F*zF)g&?~!^NLFnb8=Es82pp6Qj<$ST0rqv zk_rjzjKpGvq}0?rh2qq*R8X1Vm{OKnRFYYo3N879i*oZz^I(OTbAE1aXXQpK)LyZR&QqUyF5SExz z3Qg~zEDO!sX_%&!DKfuEAu}&IA5;o}ss&K+Csme!E35L%lvI$9ixQJd zQi~XHRD24>8Tq9-DGEucprlrkSOki*U})k46?f1$gO}W;#i>Qb48i%y*{LOAaA{Du zAj&}$;o{PQf_#YE!7hLp0@8qxL2W!B#Nh^|CFX)EUQ}IxET|+6&QB{TPb^ARNKPy*MpcuTlwVZB;Ed1&E_=c5 zPfZ24Ns>y_(o%~Qiox|IB9udl67z~dL939Omr{_QnFlUSV19(UA~l5pyE;%%BGf=z zF~zBQDGG^cC8k|7PD;)0yaG#oM#^HOqB8G_+85~xrqR!GiCP0Y*8ONX|VB3%7EBNRZD zdOano2R}%G>5um7H2CImgbivDx_8< zg9|i}xw)w+nWec3Y5ApjDGcG@3 z85nZ%AiZL%(lb-QbSa2V&Pd5D(oijiYJ<81QXMN4<>!|`YqtEN zN{}B^!Gp343=Gg3fFUU}F9l>HsK1q(2QoJ=r6ivLY7VHbhxj|#)h9Erv_b(|xPuGT z%wkXh3f9g5={G5)R%9fWf=XeKnIH_e5X50%V5o!Ax`q%&aavwduocLk5S986VFuM= z5QK7&C}`_gwHV|AP$8I^r=XgXQ>v#2A{8JV0R{$!OlSuQsvZ)lpmAzQ>l$5u3Rr&% zLcc~{W)3J!HS$VxK#TzYV9yAj$arV}pdeT05C&ach@(L9lV1StH6*AOtAkvXn46TD zUYcK83>sxemeCuC8J(M+8-{)?R|#(AWNA`T*#I?Zlo}0z(GZ|C1pfd351xmE(fG{6 zHXjL6k1P&486G5t4I`_gmORKz5QYuhzIebWVDXSqpyMH<0E`Wy6+ns@7#K93F$!pW zV-x_>AT|_(^q{*5-7iohz{&&|LHBzyFo4ZsV}h6oG8c+L_Jb875qQl5-I{=;mKY{J z^FVGjxWgb|aSMSNPA~|7Fh~x~{DuTZ1_2Ew1_6b63<4K87z6}Z83YV?83fJp!f(!&AP5s8B04oN8Cm_FZFbD)ZU=&bLV-Qf7!XR*fl|jH^ z5`#d)WCnqTS_Xj$EDQn)`V0aMQy^|S0P=f1gMi92NVsgMXAqdc#vt$nDTu6iX_s9cA0fE^J0u62q0&ku&3QP!Q5SU>A(Ie2$ zATXtgK_EbpL12LjL@c3|LBL=RgMdRCgFwSv1_6OM27!ch27v=?Oad{%3<3-q3<3^3 z3<4MQ7z7NGApU5GVh}K>Vh~_RftayiB7;CiJcGc6xeNjdQ2#%e#2}zh!65MAA)|l* zC=E?z5V*k1AmGT)z`&56SIWT14muHX2A2f2vpqH8vpH`HZo64XEnhPps&`T-FFDhox%StX{(1R#R&o5!nD^4mdX3zr@ z>3OAki6tdPnMtK3sjyxM;rz$V04X=w7#J8p@i2pdfguA)8wZpPS`Z2K97n1KOw`aDDyyZ{Ewl!e+0Dl;b>W)PTgn1MlA5-bHK zz?luy?nP3!J0@k4i^=m-(GJ`}PFbXg{K-dKmf~hlung>$H@qkf) z1BW_WBy|FyH1+_yy-rB#KzUr@0RzKTkV8P0B83Ym3_!x5l|BrQ7zG#}F)&;JIRZ%? z$c?_>d#*uuu`vi-c*-bn;VA=y22>4*0;vJf!3cE>49_6yD!?a%gJco$0a}&x_5c5T dh$sUC$UIosg2X^>g3(CMVR-NqH66gz0RZKXXMX?y literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/mkdir b/pkgs/stdenv/linux/bootstrap/loongson2f/mkdir new file mode 100755 index 0000000000000000000000000000000000000000..3a95ccf18d6e5540339a62645662d5a069b4e361 GIT binary patch literal 59548 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

kIGPMVXP<)7Hv=PRjI3D%v_=^;FZG|n$$){0 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 literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/loongson2f/sh b/pkgs/stdenv/linux/bootstrap/loongson2f/sh new file mode 100755 index 0000000000000000000000000000000000000000..f8ef0a74d6bf9fcd1dee756cd2c978fd1e7be826 GIT binary patch literal 155016 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 ei%uqV@k7n2Z)MF78iY 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�^q_V;=$=_nxysMbBmx@41;sJwZYjwAk)$3L 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 Date: Sun, 1 Aug 2010 21:24:35 +0000 Subject: [PATCH 059/282] Making uclibc receive the proper arguments (libiconv) svn path=/nixpkgs/branches/stdenv-updates/; revision=22850 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 56b361f6e807..0a4e0c20bd99 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6845,7 +6845,7 @@ let }; uclibc = import ../os-specific/linux/uclibc { - inherit fetchurl stdenv linuxHeaders; + inherit fetchurl stdenv linuxHeaders libiconv; }; uclibcCross = import ../os-specific/linux/uclibc { From fb4a1baa45008ac142c3f4255f01715691be0530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:25:19 +0000 Subject: [PATCH 060/282] Updating 'patch' for bootstrap (reference broken) svn path=/nixpkgs/branches/stdenv-updates/; revision=22851 --- pkgs/tools/text/gnupatch/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix index ce4924a6de21..ff469ddad25b 100644 --- a/pkgs/tools/text/gnupatch/default.nix +++ b/pkgs/tools/text/gnupatch/default.nix @@ -8,8 +8,8 @@ stdenv.mkDerivation rec { then fetchurl { # Temporary fix for # http://lists.gnu.org/archive/html/bug-patch/2010-01/msg00004.html . - url = "ftp://alpha.gnu.org/gnu/patch/patch-2.6.1.85-423d.tar.gz"; - sha256 = "13dddh7m8g48rvxldm9i5xp9m7h76zqp7s327m5k8k39kg146xvw"; + url = "ftp://alpha.gnu.org/gnu/patch/patch-2.6.1.87-94d8.tar.gz"; + sha256 = "0jnw8p0nvkmwi1a2z56bssqik8fvkb71zd2cpzl1sklnrg1g3b6p"; } else fetchurl { url = "mirror://gnu/patch/${name}.tar.gz"; sha256 = "1fc1jyq80nswkf492fiqdbl2bhvlw2wb44ghqlfd3zngx4qkfmni"; From 908c67b7eea5a433c2124df21a03e6dcab2b01d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:25:37 +0000 Subject: [PATCH 061/282] Fixing a bit the busybox expression and its new flexible config svn path=/nixpkgs/branches/stdenv-updates/; revision=22852 --- pkgs/misc/busybox/default.nix | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pkgs/misc/busybox/default.nix b/pkgs/misc/busybox/default.nix index c3afdb4b71f1..1ae51d64e30b 100644 --- a/pkgs/misc/busybox/default.nix +++ b/pkgs/misc/busybox/default.nix @@ -1,24 +1,27 @@ -{stdenv, fetchurl, enableStatic ? false, extraConfig ? ""}: +{stdenv, fetchurl, enableStatic ? false, extraConfig ? null}: let configParser = '' function parseconfig { set -x while read LINE; do - NAME=`cut -d \ -f 1 $LINE` - OPTION=`cut -d \ -f 2 $LINE` + NAME=`echo "$LINE" | cut -d \ -f 1` + OPTION=`echo "$LINE" | cut -d \ -f 2` if test -z "$NAME"; then continue fi if test "$NAME" == "CLEAR"; then + echo "parseconfig: CLEAR" echo > .config fi + echo "parseconfig: removing $NAME" sed -i /^$NAME=/d .config if test "$OPTION" != n; then + echo "parseconfig: setting $NAME=$OPTION" echo "$NAME=$OPTION" >> .config fi done @@ -32,7 +35,7 @@ let ''; staticConfig = (if enableStatic then '' - sed -i 's,.*CONFIG_STATIC.*,CONFIG_STATIC=y,' .config + CONFIG_STATIC y '' else ""); in @@ -46,20 +49,20 @@ stdenv.mkDerivation { }; configurePhase = '' - set -x make defconfig ${configParser} cat << EOF | parseconfig + ${staticConfig} ${extraConfig} ${nixConfig} $extraCrossConfig EOF - set +x + make oldconfig ''; crossAttrs = { extraCrossConfig = '' - CONFIG_CROSS_COMPILER_PREFIX "$crossConfig-" + CONFIG_CROSS_COMPILER_PREFIX "${stdenv.cross.config}-" '' + (if (stdenv.cross.platform.kernelMajor == "2.4") then '' CONFIG_IONICE n From 4b79027f45298a2904ae2731a3e225d76c49fc61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:26:10 +0000 Subject: [PATCH 062/282] Updating the patchelf0.6 reference, so it gets the changes to work in mips (16KiB pages) svn path=/nixpkgs/branches/stdenv-updates/; revision=22853 --- pkgs/development/tools/misc/patchelf/0.6.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/misc/patchelf/0.6.nix b/pkgs/development/tools/misc/patchelf/0.6.nix index ab531bb4c916..dfdbf792a564 100644 --- a/pkgs/development/tools/misc/patchelf/0.6.nix +++ b/pkgs/development/tools/misc/patchelf/0.6.nix @@ -4,8 +4,8 @@ stdenv.mkDerivation rec { name = "patchelf-0.6pre20950"; src = fetchurl { - url = "http://hydra.nixos.org/build/379622/download/3/patchelf-0.6pre20950.tar.gz"; - sha256 = "d308c26f304e5102846a747296f9b89a8237fa8cc3685316901db1f72e66f43c"; + url = "http://hydra.nixos.org/build/504657/download/2/patchelf-0.6pre22813.tar.bz2"; + sha256 = "1ml86wyl35ik3lixkcz2vlzvbcancj0dygwfh5ambjmazp2q19mh"; }; meta = { From 0f4673788ef286ab623d95f407d08eb38d97f057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 21:27:03 +0000 Subject: [PATCH 063/282] Fixing the gcc-4.5 cross-build (the native strip destroys the .a cross-built archives, so we disable it cross building) svn path=/nixpkgs/branches/stdenv-updates/; revision=22854 --- pkgs/development/compilers/gcc-4.5/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index 4c3fd8079afe..754cf4ed5ec8 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -238,6 +238,7 @@ stdenv.mkDerivation ({ CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; # If we are making a cross compiler, cross != null NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; + dontStrip = true; configureFlags = " ${if enableMultilib then "" else "--disable-multilib"} ${if enableShared then "" else "--disable-shared"} From 9724fb271b4cdcd18b8ff9fc4d5ff934c328e2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 1 Aug 2010 22:00:14 +0000 Subject: [PATCH 064/282] Fixing the unpack bootstrap tools script so it works not only for mips. svn path=/nixpkgs/branches/stdenv-updates/; revision=22855 --- .../linux/scripts/unpack-bootstrap-tools.sh | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh b/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh index da787d2036d3..b3f5dbb546db 100644 --- a/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh @@ -8,35 +8,43 @@ $bzip2 -d < $tarball | (cd $out && $cpio -i) # Set the ELF interpreter / RPATH in the bootstrap binaries. echo Patching the bootstrap tools... +if test -f $out/lib/ld.so.?; then + # MIPS case + LD_BINARY=$out/lib/ld.so.? +else + # i686, x86_64 and armv5tel + LD_BINARY=$out/lib/ld-*so.? +fi + # On x86_64, ld-linux-x86-64.so.2 barfs on patchelf'ed programs. So # use a copy of patchelf. -LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? $out/bin/cp $out/bin/patchelf . +LD_LIBRARY_PATH=$out/lib $LD_BINARY $out/bin/cp $out/bin/patchelf . for i in $out/bin/* $out/libexec/gcc/*/*/*; do echo patching $i if ! test -L $i; then - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ - $out/bin/patchelf --set-interpreter $out/lib/ld.so.? --set-rpath $out/lib --force-rpath $i - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ - $out/bin/patchelf --set-interpreter $out/lib/ld.so.? --set-rpath $out/lib --force-rpath $i + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ + $out/bin/patchelf --set-interpreter $LD_BINARY --set-rpath $out/lib --force-rpath $i + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ + $out/bin/patchelf --set-interpreter $LD_BINARY --set-rpath $out/lib --force-rpath $i fi done for i in $out/lib/librt* ; do echo patching $i if ! test -L $i; then - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ - $out/bin/patchelf --set-interpreter $out/lib/ld.so.? --set-rpath $out/lib --force-rpath $i - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ - $out/bin/patchelf --set-interpreter $out/lib/ld.so.? --set-rpath $out/lib --force-rpath $i + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ + $out/bin/patchelf --set-interpreter $LD_BINARY --set-rpath $out/lib --force-rpath $i + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ + $out/bin/patchelf --set-interpreter $LD_BINARY --set-rpath $out/lib --force-rpath $i fi done for i in $out/lib/libgmp* $out/lib/libppl* $out/lib/libcloog* $out/lib/libmpc*; do - echo patching $i + echo trying to patch $i if test -f $i -a ! -L $i; then - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ $out/bin/patchelf --set-rpath $out/lib --force-rpath $i - LD_LIBRARY_PATH=$out/lib $out/lib/ld.so.? \ + LD_LIBRARY_PATH=$out/lib $LD_BINARY \ $out/bin/patchelf --set-rpath $out/lib --force-rpath $i fi done From 955b962993ffa05ec9f3bdd328a6e5a8be873f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 2 Aug 2010 15:58:03 +0000 Subject: [PATCH 065/282] Updating gcc to 4.5.1. I removed two patches that don't apply anymore (dragonegg, softfp-hurd). I hope this means it's all fixed upstream. svn path=/nixpkgs/branches/stdenv-updates/; revision=22879 --- .../development/compilers/gcc-4.5/default.nix | 4 +- .../compilers/gcc-4.5/dragonegg-2.7.patch | 46 ------------------- .../compilers/gcc-4.5/softfp-hurd.patch | 32 ------------- .../development/compilers/gcc-4.5/sources.nix | 14 +++--- 4 files changed, 9 insertions(+), 87 deletions(-) delete mode 100644 pkgs/development/compilers/gcc-4.5/dragonegg-2.7.patch delete mode 100644 pkgs/development/compilers/gcc-4.5/softfp-hurd.patch diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index 7ddbfa848d11..db6417e3795a 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -41,7 +41,7 @@ assert libelf != null -> zlib != null; with stdenv.lib; with builtins; -let version = "4.5.0"; +let version = "4.5.1"; javaEcj = fetchurl { # The `$(top_srcdir)/ecj.jar' file is automatically picked up at # `configure' time. @@ -136,7 +136,7 @@ stdenv.mkDerivation ({ }; patches = - [ ./softfp-hurd.patch ./dragonegg-2.7.patch ] + [ ] ++ optional (cross != null) ./libstdc++-target.patch ++ optional noSysDirs ./no-sys-dirs.patch # The GNAT Makefiles did not pay attention to CFLAGS_FOR_TARGET for its diff --git a/pkgs/development/compilers/gcc-4.5/dragonegg-2.7.patch b/pkgs/development/compilers/gcc-4.5/dragonegg-2.7.patch deleted file mode 100644 index 6b37672ddef0..000000000000 --- a/pkgs/development/compilers/gcc-4.5/dragonegg-2.7.patch +++ /dev/null @@ -1,46 +0,0 @@ -Index: mainline/gcc/config/i386/i386.c -=================================================================== ---- mainline.orig/gcc/config/i386/i386.c 2010-04-02 09:11:58.733574308 +0200 -+++ mainline/gcc/config/i386/i386.c 2010-04-02 09:29:11.276111437 +0200 -@@ -4992,7 +4992,8 @@ - case, we return the original mode and warn ABI change if CUM isn't - NULL. */ - --static enum machine_mode -+extern enum machine_mode type_natural_mode (const_tree, CUMULATIVE_ARGS *); -+enum machine_mode - type_natural_mode (const_tree type, CUMULATIVE_ARGS *cum) - { - enum machine_mode mode = TYPE_MODE (type); -@@ -5123,7 +5124,9 @@ - See the x86-64 PS ABI for details. - */ - --static int -+extern int classify_argument (enum machine_mode, const_tree, -+ enum x86_64_reg_class [MAX_CLASSES], int); -+int - classify_argument (enum machine_mode mode, const_tree type, - enum x86_64_reg_class classes[MAX_CLASSES], int bit_offset) - { -@@ -5504,7 +5507,9 @@ - - /* Examine the argument and return set number of register required in each - class. Return 0 iff parameter should be passed in memory. */ --static int -+extern int examine_argument (enum machine_mode, const_tree, int, -+ int *, int *); -+int - examine_argument (enum machine_mode mode, const_tree type, int in_return, - int *int_nregs, int *sse_nregs) - { -@@ -6186,7 +6191,8 @@ - - /* Return true when TYPE should be 128bit aligned for 32bit argument passing - ABI. */ --static bool -+extern bool contains_aligned_value_p (tree); -+bool - contains_aligned_value_p (tree type) - { - enum machine_mode mode = TYPE_MODE (type); diff --git a/pkgs/development/compilers/gcc-4.5/softfp-hurd.patch b/pkgs/development/compilers/gcc-4.5/softfp-hurd.patch deleted file mode 100644 index 7e2a8a9c2900..000000000000 --- a/pkgs/development/compilers/gcc-4.5/softfp-hurd.patch +++ /dev/null @@ -1,32 +0,0 @@ -This patch fixes undefined references to softp symbols (__multf3, __fixunstfsi, -__subtf3, etc.) in libgcc_s.so on GNU/Hurd. - -Taken from , with second -hunk adjusted so that it applies to GCC 4.5.0. - -diff --git a/gcc/config.gcc b/gcc/config.gcc -index 9e499cb..9aec392 100644 ---- a/gcc/config.gcc -+++ b/gcc/config.gcc -@@ -3070,7 +3070,9 @@ case ${target} in - i[34567]86-*-darwin* | x86_64-*-darwin*) - tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp" - ;; -- i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu) -+ i[34567]86-*-linux* | x86_64-*-linux* | \ -+ i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \ -+ i[34567]86-*-gnu*) - tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux" - ;; - ia64*-*-linux*) -diff --git a/libgcc/config.host b/libgcc/config.host ---- a/libgcc/config.host -+++ b/libgcc/config.host -@@ -600,6 +600,7 @@ case ${host} in - i[34567]86-*-darwin* | x86_64-*-darwin* | \ - i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \ - i[34567]86-*-linux* | x86_64-*-linux* | \ -+ i[34567]86-*-gnu* | \ - i[34567]86-*-solaris2* | \ - i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*) - if test "${host_address}" = 32; then diff --git a/pkgs/development/compilers/gcc-4.5/sources.nix b/pkgs/development/compilers/gcc-4.5/sources.nix index 4a9201d08eb4..6059e03880b3 100644 --- a/pkgs/development/compilers/gcc-4.5/sources.nix +++ b/pkgs/development/compilers/gcc-4.5/sources.nix @@ -1,26 +1,26 @@ /* Automatically generated by `update-gcc.sh', do not edit. - For GCC 4.5.0. */ + For GCC 4.5.1. */ { fetchurl, optional, version, langC, langCC, langFortran, langJava, langAda }: -assert version == "4.5.0"; +assert version == "4.5.1"; optional /* langC */ true (fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-core-${version}.tar.bz2"; - sha256 = "19ykzyd938d4pblsihrsalk9ch1s23z57s0r5an8sqs7acv51r0g"; + sha256 = "0sjjw3qfcpdk0fs5d2rhl0xqcaclg86ifbq45dbk9ca072l3fyxm"; }) ++ optional langCC (fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-g++-${version}.tar.bz2"; - sha256 = "0hialil4v2hi7klr14x6h5z7b9ryzzy9kchr96s2p9hmsm7famlk"; + sha256 = "0j6ffb96b3r75hrjshg52llv21ax7r8jdx44hhj0maiisnl9wd55"; }) ++ optional langFortran (fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-fortran-${version}.tar.bz2"; - sha256 = "0anby974dikygjmxr6h1pd9s24fdps84fki1dijzhqqvq6lr3hbb"; + sha256 = "0xgwjc3h5fc5c100bnw24c35255il33lj5qbgpxf0zl8di2q13aw"; }) ++ optional langJava (fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-java-${version}.tar.bz2"; - sha256 = "0mlbxyhj7svjgby5vrpc49l2vk0k0878nlx0ap6jqq7xdyysvlcn"; + sha256 = "0mh37q4ibg05h1hdh39pkj1hycvdg6i79m4698knw7pppm14ax8q"; }) ++ optional langAda (fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-ada-${version}.tar.bz2"; - sha256 = "1yar842bixmh2n9siy8s383lg8mz611xjdbbacgcznwab601czzv"; + sha256 = "11chdbl7h046lnl83k79vj7dvgxz6kq7cnmwx94z644vaiflg153"; }) ++ [] From 905963782b82668908799fd0c156b1e070582fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 2 Aug 2010 16:09:20 +0000 Subject: [PATCH 066/282] Fixing some stdenv2 details coming from the trunk merge. svn path=/nixpkgs/branches/stdenv-updates/; revision=22881 --- pkgs/top-level/all-packages.nix | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c531a99bf14d..14cb710ae2a5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2577,8 +2577,7 @@ let }; path64 = import ../development/compilers/path64 { - inherit fetchgit perl flex bison gmp mpfr cmake; - stdenv = stdenv2; + inherit stdenv fetchgit perl flex bison gmp mpfr cmake; }; openjdkDarwin = import ../development/compilers/openjdk-darwin { @@ -3722,8 +3721,7 @@ let }; clapack = import ../development/libraries/clapack { - inherit fetchurl cmake; - stdenv = stdenv2; + inherit stdenv fetchurl cmake; }; classads = import ../development/libraries/classads { @@ -8227,12 +8225,11 @@ let }; hugin = import ../applications/graphics/hugin { - inherit fetchurl cmake panotools libtiff libpng boost pkgconfig + inherit stdenv fetchurl cmake panotools libtiff libpng boost pkgconfig exiv2 gettext ilmbase enblendenfuse autopanosiftc mesa freeglut glew openexr; inherit wxGTK; inherit (xlibs) libXi libXmu; - stdenv = stdenv2; }; i810switch = import ../os-specific/linux/i810switch { @@ -8795,10 +8792,6 @@ let }; }; - simgrid = import ../applications/misc/simgrid { - inherit fetchurl stdenv cmake ruby; - }; - semnotes = import ../applications/misc/semnotes { inherit stdenv fetchurl cmake; inherit (kde4) qt4 kdelibs automoc4 phonon soprano; @@ -9778,8 +9771,7 @@ let }; simgrid = import ../applications/science/misc/simgrid { - inherit fetchurl cmake ruby; - stdenv = stdenv2; + inherit stdenv fetchurl cmake ruby; }; tulip = import ../applications/science/misc/tulip { @@ -9789,9 +9781,8 @@ let }; vite = import ../applications/science/misc/vite { - inherit fetchsvn cmake mesa; + inherit stdenv fetchsvn cmake mesa; qt = qt4; - stdenv = stdenv2; }; ### MISC From 47b45f812e88a7b17abe7c90b90f2ac2236bfe94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 4 Aug 2010 11:05:53 +0000 Subject: [PATCH 067/282] Updating diffutils svn path=/nixpkgs/branches/stdenv-updates/; revision=22942 --- pkgs/tools/text/diffutils/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix index d75485cf0473..4fde88d92626 100644 --- a/pkgs/tools/text/diffutils/default.nix +++ b/pkgs/tools/text/diffutils/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, coreutils ? null}: stdenv.mkDerivation { - name = "diffutils-2.8.1"; + name = "diffutils-3.0"; src = fetchurl { - url = mirror://gnu/diffutils/diffutils-2.8.1.tar.gz; - md5 = "71f9c5ae19b60608f6c7f162da86a428"; + url = mirror://gnu/diffutils/diffutils-3.0.tar.gz; + sha256 = "02g8i6jv0j0vr5nl13ns50lv2dbjy9kkk8jvp11n0g5fpdjizf9g"; }; /* If no explicit coreutils is given, use the one from stdenv. */ From b17d1d7d07a91a79af432ca0330a879c954b5346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 4 Aug 2010 11:07:13 +0000 Subject: [PATCH 068/282] Adding nanonote kernel and uboot svn path=/nixpkgs/branches/stdenv-updates/; revision=22943 --- pkgs/misc/uboot/nanonote.nix | 58 +++++ .../linux/kernel/linux-nanonote-jz-2.6.34.nix | 212 ++++++++++++++++++ .../linux/kernel/linux-nanonote-jz-2.6.35.nix | 212 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 15 ++ 4 files changed, 497 insertions(+) create mode 100644 pkgs/misc/uboot/nanonote.nix create mode 100644 pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix create mode 100644 pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix diff --git a/pkgs/misc/uboot/nanonote.nix b/pkgs/misc/uboot/nanonote.nix new file mode 100644 index 000000000000..9e39501a7a34 --- /dev/null +++ b/pkgs/misc/uboot/nanonote.nix @@ -0,0 +1,58 @@ +{stdenv, fetchurl, fetchgit}: + +# We should enable this check once we have the cross target system information +# assert stdenv.system == "armv5tel-linux" || crossConfig == "armv5tel-linux"; + +# All this file is made for the Marvell Sheevaplug + +stdenv.mkDerivation { + name = "uboot-qb-2010.06"; + + src = fetchurl { + url = "ftp://ftp.denx.de/pub/u-boot/u-boot-2010.06.tar.bz2"; + sha256 = "1j0bl8x5i5m1pn62z450gbw30pbrj7sgs3fjp2l2giczv49cn33r"; + }; + + srcPatches = fetchgit { + url = "git://projects.qi-hardware.com/openwrt-xburst.git"; + rev = "3244d5ef9f93802f9b9b6f4405636424abf6fa83"; + sha256 = "8ae25853028930b418fad90637e0e68f9888285ba3ad1f720be45f08823ee855"; + }; + + patchPhase = '' + cp -R $srcPatches/package/uboot-xburst/files/* . + for a in $srcPatches/package/uboot-xburst/patches/*; do + patch -p1 < $a + done + chmod +w -R * + ''; + + # Remove the cross compiler prefix, and add reiserfs support + configurePhase = '' + make mrproper + make qi_lb60_config + sed -i /CROSS_COMPILE/d include/config.mk + ''; + + buildPhase = '' + # A variable named 'src' used to affect the build in some uboot... + unset src + if test -z "$crossConfig"; then + make clean all + else + make clean all ARCH=mips CROSS_COMPILE=$crossConfig- + fi + ''; + + dontStrip = true; + NIX_STRIP_DEBUG = false; + + installPhase = '' + ensureDir $out + cp u-boot-nand.bin $out + cp u-boot u-boot.map $out + + ensureDir $out/bin + cp tools/{envcrc,mkimage} $out/bin + ''; +} diff --git a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix new file mode 100644 index 000000000000..859438359c74 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix @@ -0,0 +1,212 @@ +args @ { stdenv, fetchgit, userModeLinux ? false, extraConfig ? "" +, ... }: + +let + configWithPlatform = kernelPlatform : + '' + # Don't include any debug features. + DEBUG_KERNEL n + + # Support drivers that need external firmware. + STANDALONE n + + # Make /proc/config.gz available. + IKCONFIG_PROC y + + # Optimize with -O2, not -Os. + CC_OPTIMIZE_FOR_SIZE n + + # Enable the kernel's built-in memory tester. + MEMTEST y + + # Include the CFQ I/O scheduler in the kernel, rather than as a + # module, so that the initrd gets a good I/O scheduler. + IOSCHED_CFQ y + + # Disable some expensive (?) features. + FTRACE n + KPROBES n + NUMA? n + PM_TRACE_RTC n + + # Enable various subsystems. + ACCESSIBILITY y # Accessibility support + AUXDISPLAY y # Auxiliary Display support + DONGLE y # Serial dongle support + HIPPI y + MTD_COMPLEX_MAPPINGS y # needed for many devices + NET_POCKET y # enable pocket and portable adapters + SCSI_LOWLEVEL y # enable lots of SCSI devices + SCSI_LOWLEVEL_PCMCIA y + SPI y # needed for many devices + SPI_MASTER y + WAN y + + # Networking options. + IP_PNP n + IPV6_PRIVACY y + NETFILTER_ADVANCED y + IP_VS_PROTO_TCP y + IP_VS_PROTO_UDP y + IP_VS_PROTO_ESP y + IP_VS_PROTO_AH y + IP_DCCP_CCID3 n # experimental + CLS_U32_PERF y + CLS_U32_MARK y + + # Wireless networking. + IPW2100_MONITOR y # support promiscuous mode + IPW2200_MONITOR y # support promiscuous mode + IWL4965 y # Intel Wireless WiFi 4965AGN + IWL5000 y # Intel Wireless WiFi 5000AGN + HOSTAP_FIRMWARE y # Support downloading firmware images with Host AP driver + HOSTAP_FIRMWARE_NVRAM y + + # Some settings to make sure that fbcondecor works - in particular, + # disable tileblitting and the drivers that need it. + + # Enable various FB devices. + FB y + FB_EFI y + FB_NVIDIA_I2C y # Enable DDC Support + FB_RIVA_I2C y + FB_ATY_CT y # Mach64 CT/VT/GT/LT (incl. 3D RAGE) support + FB_ATY_GX y # Mach64 GX support + FB_SAVAGE_I2C y + FB_SAVAGE_ACCEL y + FB_SIS_300 y + FB_SIS_315 y + FB_3DFX_ACCEL y + FB_GEODE y + + # Video configuration + # The intel drivers already require KMS + DRM_I915_KMS y + + # Sound. + SND_AC97_POWER_SAVE y # AC97 Power-Saving Mode + SND_HDA_INPUT_BEEP y # Support digital beep via input layer + SND_USB_CAIAQ_INPUT y + PSS_MIXER y # Enable PSS mixer (Beethoven ADSP-16 and other compatible) + + # USB serial devices. + USB_SERIAL_GENERIC y # USB Generic Serial Driver + USB_SERIAL_KEYSPAN_MPR y # include firmware for various USB serial devices + USB_SERIAL_KEYSPAN_USA28 y + USB_SERIAL_KEYSPAN_USA28X y + USB_SERIAL_KEYSPAN_USA28XA y + USB_SERIAL_KEYSPAN_USA28XB y + USB_SERIAL_KEYSPAN_USA19 y + USB_SERIAL_KEYSPAN_USA18X y + USB_SERIAL_KEYSPAN_USA19W y + USB_SERIAL_KEYSPAN_USA19QW y + USB_SERIAL_KEYSPAN_USA19QI y + USB_SERIAL_KEYSPAN_USA49W y + USB_SERIAL_KEYSPAN_USA49WLC y + + # Filesystem options - in particular, enable extended attributes and + # ACLs for all filesystems that support them. + EXT2_FS_XATTR y # Ext2 extended attributes + EXT2_FS_POSIX_ACL y # Ext2 POSIX Access Control Lists + EXT2_FS_SECURITY y # Ext2 Security Labels + EXT2_FS_XIP y # Ext2 execute in place support + EXT4_FS_POSIX_ACL y + EXT4_FS_SECURITY y + REISERFS_FS_XATTR y + REISERFS_FS_POSIX_ACL y + REISERFS_FS_SECURITY y + JFS_POSIX_ACL y + JFS_SECURITY y + XFS_QUOTA y + XFS_POSIX_ACL y + XFS_RT y # XFS Realtime subvolume support + OCFS2_DEBUG_MASKLOG n + BTRFS_FS_POSIX_ACL y + UBIFS_FS_XATTR y + UBIFS_FS_ADVANCED_COMPR y + NFSD_V2_ACL y + NFSD_V3 y + NFSD_V3_ACL y + NFSD_V4 y + CIFS_XATTR y + CIFS_POSIX y + + # Security related features. + STRICT_DEVMEM y # Filter access to /dev/mem + SECURITY_SELINUX_BOOTPARAM_VALUE 0 # disable SELinux by default + + # Misc. options. + 8139TOO_8129 y + 8139TOO_PIO n # PIO is slower + AIC79XX_DEBUG_ENABLE n + AIC7XXX_DEBUG_ENABLE n + AIC94XX_DEBUG n + B43_PCMCIA y + BLK_DEV_BSG n + BLK_DEV_CMD640_ENHANCED y # CMD640 enhanced support + BLK_DEV_IDEACPI y # IDE ACPI support + BLK_DEV_INTEGRITY y + BSD_PROCESS_ACCT_V3 y + BT_HCIUART_BCSP y + BT_HCIUART_H4 y # UART (H4) protocol support + BT_HCIUART_LL y + BT_RFCOMM_TTY y # RFCOMM TTY support + CPU_FREQ_DEBUG n + CRASH_DUMP n + DMAR? n # experimental + DVB_DYNAMIC_MINORS y # we use udev + FUSION y # Fusion MPT device support + IDE_GD_ATAPI y # ATAPI floppy support + IRDA_ULTRA y # Ultra (connectionless) protocol + JOYSTICK_IFORCE_232 y # I-Force Serial joysticks and wheels + JOYSTICK_IFORCE_USB y # I-Force USB joysticks and wheels + JOYSTICK_XPAD_FF y # X-Box gamepad rumble support + JOYSTICK_XPAD_LEDS y # LED Support for Xbox360 controller 'BigX' LED + KALLSYMS_EXTRA_PASS n + LDM_PARTITION y # Windows Logical Disk Manager (Dynamic Disk) support + LEDS_TRIGGER_IDE_DISK y # LED IDE Disk Trigger + LOGIRUMBLEPAD2_FF y # Logitech Rumblepad 2 force feedback + LOGO n # not needed + MEDIA_ATTACH y + MEGARAID_NEWGEN y + MICROCODE_AMD y + MODVERSIONS y + MOUSE_PS2_ELANTECH y # Elantech PS/2 protocol extension + MTRR_SANITIZER y + NET_FC y # Fibre Channel driver support + PPP_MULTILINK y # PPP multilink support + REGULATOR y # Voltage and Current Regulator Support + SCSI_LOGGING y # SCSI logging facility + SERIAL_8250 y # 8250/16550 and compatible serial support + SLIP_COMPRESSED y # CSLIP compressed headers + SLIP_SMART y + THERMAL_HWMON y # Hardware monitoring support + USB_DEBUG n + USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators + X86_CHECK_BIOS_CORRUPTION y + X86_MCE y + + ${if kernelPlatform ? kernelExtraConfig then kernelPlatform.kernelExtraConfig else ""} + ${extraConfig} + ''; +in + +import ./generic.nix ( + + rec { + version = "jz-2.6.34"; + + src = fetchgit { + url = "git://projects.qi-hardware.com/qi-kernel.git"; + rev = "f42d987a04d6f9366c47edf794f66796151867b9"; + sha256 = "bc9da0af30d5bf4c7be7495e052b328e72ab6a7f8a57e201720e3198cd6afb22"; + }; + + config = configWithPlatform stdenv.platform; + configCross = configWithPlatform stdenv.cross.platform; + + features.iwlwifi = true; + } + + // removeAttrs args ["extraConfig"] +) diff --git a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix new file mode 100644 index 000000000000..a5f913bc248b --- /dev/null +++ b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix @@ -0,0 +1,212 @@ +args @ { stdenv, fetchgit, userModeLinux ? false, extraConfig ? "" +, ... }: + +let + configWithPlatform = kernelPlatform : + '' + # Don't include any debug features. + DEBUG_KERNEL n + + # Support drivers that need external firmware. + STANDALONE n + + # Make /proc/config.gz available. + IKCONFIG_PROC y + + # Optimize with -O2, not -Os. + CC_OPTIMIZE_FOR_SIZE n + + # Enable the kernel's built-in memory tester. + MEMTEST y + + # Include the CFQ I/O scheduler in the kernel, rather than as a + # module, so that the initrd gets a good I/O scheduler. + IOSCHED_CFQ y + + # Disable some expensive (?) features. + FTRACE n + KPROBES n + NUMA? n + PM_TRACE_RTC n + + # Enable various subsystems. + ACCESSIBILITY y # Accessibility support + AUXDISPLAY y # Auxiliary Display support + DONGLE y # Serial dongle support + HIPPI y + MTD_COMPLEX_MAPPINGS y # needed for many devices + NET_POCKET y # enable pocket and portable adapters + SCSI_LOWLEVEL y # enable lots of SCSI devices + SCSI_LOWLEVEL_PCMCIA y + SPI y # needed for many devices + SPI_MASTER y + WAN y + + # Networking options. + IP_PNP n + IPV6_PRIVACY y + NETFILTER_ADVANCED y + IP_VS_PROTO_TCP y + IP_VS_PROTO_UDP y + IP_VS_PROTO_ESP y + IP_VS_PROTO_AH y + IP_DCCP_CCID3 n # experimental + CLS_U32_PERF y + CLS_U32_MARK y + + # Wireless networking. + IPW2100_MONITOR y # support promiscuous mode + IPW2200_MONITOR y # support promiscuous mode + IWL4965 y # Intel Wireless WiFi 4965AGN + IWL5000 y # Intel Wireless WiFi 5000AGN + HOSTAP_FIRMWARE y # Support downloading firmware images with Host AP driver + HOSTAP_FIRMWARE_NVRAM y + + # Some settings to make sure that fbcondecor works - in particular, + # disable tileblitting and the drivers that need it. + + # Enable various FB devices. + FB y + FB_EFI y + FB_NVIDIA_I2C y # Enable DDC Support + FB_RIVA_I2C y + FB_ATY_CT y # Mach64 CT/VT/GT/LT (incl. 3D RAGE) support + FB_ATY_GX y # Mach64 GX support + FB_SAVAGE_I2C y + FB_SAVAGE_ACCEL y + FB_SIS_300 y + FB_SIS_315 y + FB_3DFX_ACCEL y + FB_GEODE y + + # Video configuration + # The intel drivers already require KMS + DRM_I915_KMS y + + # Sound. + SND_AC97_POWER_SAVE y # AC97 Power-Saving Mode + SND_HDA_INPUT_BEEP y # Support digital beep via input layer + SND_USB_CAIAQ_INPUT y + PSS_MIXER y # Enable PSS mixer (Beethoven ADSP-16 and other compatible) + + # USB serial devices. + USB_SERIAL_GENERIC y # USB Generic Serial Driver + USB_SERIAL_KEYSPAN_MPR y # include firmware for various USB serial devices + USB_SERIAL_KEYSPAN_USA28 y + USB_SERIAL_KEYSPAN_USA28X y + USB_SERIAL_KEYSPAN_USA28XA y + USB_SERIAL_KEYSPAN_USA28XB y + USB_SERIAL_KEYSPAN_USA19 y + USB_SERIAL_KEYSPAN_USA18X y + USB_SERIAL_KEYSPAN_USA19W y + USB_SERIAL_KEYSPAN_USA19QW y + USB_SERIAL_KEYSPAN_USA19QI y + USB_SERIAL_KEYSPAN_USA49W y + USB_SERIAL_KEYSPAN_USA49WLC y + + # Filesystem options - in particular, enable extended attributes and + # ACLs for all filesystems that support them. + EXT2_FS_XATTR y # Ext2 extended attributes + EXT2_FS_POSIX_ACL y # Ext2 POSIX Access Control Lists + EXT2_FS_SECURITY y # Ext2 Security Labels + EXT2_FS_XIP y # Ext2 execute in place support + EXT4_FS_POSIX_ACL y + EXT4_FS_SECURITY y + REISERFS_FS_XATTR y + REISERFS_FS_POSIX_ACL y + REISERFS_FS_SECURITY y + JFS_POSIX_ACL y + JFS_SECURITY y + XFS_QUOTA y + XFS_POSIX_ACL y + XFS_RT y # XFS Realtime subvolume support + OCFS2_DEBUG_MASKLOG n + BTRFS_FS_POSIX_ACL y + UBIFS_FS_XATTR y + UBIFS_FS_ADVANCED_COMPR y + NFSD_V2_ACL y + NFSD_V3 y + NFSD_V3_ACL y + NFSD_V4 y + CIFS_XATTR y + CIFS_POSIX y + + # Security related features. + STRICT_DEVMEM y # Filter access to /dev/mem + SECURITY_SELINUX_BOOTPARAM_VALUE 0 # disable SELinux by default + + # Misc. options. + 8139TOO_8129 y + 8139TOO_PIO n # PIO is slower + AIC79XX_DEBUG_ENABLE n + AIC7XXX_DEBUG_ENABLE n + AIC94XX_DEBUG n + B43_PCMCIA y + BLK_DEV_BSG n + BLK_DEV_CMD640_ENHANCED y # CMD640 enhanced support + BLK_DEV_IDEACPI y # IDE ACPI support + BLK_DEV_INTEGRITY y + BSD_PROCESS_ACCT_V3 y + BT_HCIUART_BCSP y + BT_HCIUART_H4 y # UART (H4) protocol support + BT_HCIUART_LL y + BT_RFCOMM_TTY y # RFCOMM TTY support + CPU_FREQ_DEBUG n + CRASH_DUMP n + DMAR? n # experimental + DVB_DYNAMIC_MINORS y # we use udev + FUSION y # Fusion MPT device support + IDE_GD_ATAPI y # ATAPI floppy support + IRDA_ULTRA y # Ultra (connectionless) protocol + JOYSTICK_IFORCE_232 y # I-Force Serial joysticks and wheels + JOYSTICK_IFORCE_USB y # I-Force USB joysticks and wheels + JOYSTICK_XPAD_FF y # X-Box gamepad rumble support + JOYSTICK_XPAD_LEDS y # LED Support for Xbox360 controller 'BigX' LED + KALLSYMS_EXTRA_PASS n + LDM_PARTITION y # Windows Logical Disk Manager (Dynamic Disk) support + LEDS_TRIGGER_IDE_DISK y # LED IDE Disk Trigger + LOGIRUMBLEPAD2_FF y # Logitech Rumblepad 2 force feedback + LOGO n # not needed + MEDIA_ATTACH y + MEGARAID_NEWGEN y + MICROCODE_AMD y + MODVERSIONS y + MOUSE_PS2_ELANTECH y # Elantech PS/2 protocol extension + MTRR_SANITIZER y + NET_FC y # Fibre Channel driver support + PPP_MULTILINK y # PPP multilink support + REGULATOR y # Voltage and Current Regulator Support + SCSI_LOGGING y # SCSI logging facility + SERIAL_8250 y # 8250/16550 and compatible serial support + SLIP_COMPRESSED y # CSLIP compressed headers + SLIP_SMART y + THERMAL_HWMON y # Hardware monitoring support + USB_DEBUG n + USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators + X86_CHECK_BIOS_CORRUPTION y + X86_MCE y + + ${if kernelPlatform ? kernelExtraConfig then kernelPlatform.kernelExtraConfig else ""} + ${extraConfig} + ''; +in + +import ./generic.nix ( + + rec { + version = "jz-2.6.35"; + + src = fetchgit { + url = "git://projects.qi-hardware.com/qi-kernel.git"; + rev = "4a5edaeef89037e288d8ae6c81eca1c6bda753da"; + sha256 = "42778cf871473bebc609eb26441591318b8396b03671360193bbe0e50cc29082"; + }; + + config = configWithPlatform stdenv.platform; + configCross = configWithPlatform stdenv.cross.platform; + + features.iwlwifi = true; + } + + // removeAttrs args ["extraConfig"] +) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e0dc975efb74..d39ea798cc71 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4536,6 +4536,16 @@ let ]; }; + linux_nanonote_jz_2_6_34 = makeOverridable + (import ../os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix) { + inherit fetchurl fetchgit stdenv perl mktemp module_init_tools ubootChooser; + }; + + linux_nanonote_jz_2_6_35 = makeOverridable + (import ../os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix) { + inherit fetchurl fetchgit stdenv perl mktemp module_init_tools ubootChooser; + }; + /* Linux 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 @@ -4637,6 +4647,8 @@ let recurseIntoAttrs (linuxPackagesFor linux_2_6_32_systemtap pkgs.linuxPackages_2_6_32_systemtap); linuxPackages_2_6_33 = recurseIntoAttrs (linuxPackagesFor linux_2_6_33 pkgs.linuxPackages_2_6_33); linuxPackages_2_6_34 = recurseIntoAttrs (linuxPackagesFor linux_2_6_34 pkgs.linuxPackages_2_6_34); + linuxPackages_nanonote_jz_2_6_34 = recurseIntoAttrs (linuxPackagesFor linux_nanonote_jz_2_6_34 pkgs.linuxPackages_nanonote_jz_2_6_34); + linuxPackages_nanonote_jz_2_6_35 = recurseIntoAttrs (linuxPackagesFor linux_nanonote_jz_2_6_35 pkgs.linuxPackages_nanonote_jz_2_6_35); # The current default kernel / kernel modules. linux = linux_2_6_32; @@ -4813,12 +4825,15 @@ let ubootChooser = name : if (name == "upstream") then ubootUpstream else if (name == "sheevaplug") then ubootSheevaplug + else if (name == "nanonote") then ubootNanonote else throw "Unknown uboot"; ubootUpstream = callPackage ../misc/uboot { }; ubootSheevaplug = callPackage ../misc/uboot/sheevaplug.nix { }; + ubootNanonote = callPackage ../misc/uboot/nanonote.nix { }; + uclibc = callPackage ../os-specific/linux/uclibc { }; uclibcCross = import ../os-specific/linux/uclibc { From e0a11f532bcc9999cab38a055b0a6f1789f8af77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 4 Aug 2010 12:36:35 +0000 Subject: [PATCH 069/282] Trying to bootstrap gcc 4.5 with ppl, so it does not depend on libstdc++ from the boostrap-tools. svn path=/nixpkgs/branches/stdenv-updates/; revision=22947 --- .../development/compilers/gcc-4.5/default.nix | 5 +++++ .../libraries/cloog-ppl/default.nix | 19 ++++++++++++++----- pkgs/development/libraries/gmp/4.nix | 12 ++++++++++-- pkgs/development/libraries/gmp/default.nix | 11 +++++++++-- pkgs/development/libraries/ppl/default.nix | 10 ++++++++-- pkgs/stdenv/linux/default.nix | 16 ++++++++++++++-- 6 files changed, 60 insertions(+), 13 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index db6417e3795a..b5a5d20f501c 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -196,6 +196,11 @@ stdenv.mkDerivation ({ ++ (optionals langVhdl [gnat]) ; + configureFlagsArray = stdenv.lib.optionals + (ppl != null && ppl.dontDisableStatic == true) + [ "--with-host-libstdcxx=-lstdc++ -lgcc_s" + "--with-stage1-libs=-lstdc++ -lgcc_s" ]; + configureFlags = " ${if enableMultilib then "" else "--disable-multilib"} ${if enableShared then "" else "--disable-shared"} diff --git a/pkgs/development/libraries/cloog-ppl/default.nix b/pkgs/development/libraries/cloog-ppl/default.nix index 5738f76682a8..0919afd83c27 100644 --- a/pkgs/development/libraries/cloog-ppl/default.nix +++ b/pkgs/development/libraries/cloog-ppl/default.nix @@ -1,19 +1,28 @@ -{ fetchurl, stdenv, ppl }: +{ fetchurl, stdenv, ppl, static ? false }: + +let + # --with-host-libstdcxx helps when *ppl* is built statically. + # But I will suppose that this is statically built only when ppl is also + # statically built. + staticFlags = assert static -> ppl.dontDisableStatic == true; + if static then " --enable-static --disable-shared --with-host-libstdcxx=-lstdc++" else ""; +in stdenv.mkDerivation rec { - name = "cloog-ppl-0.15.7"; + name = "cloog-ppl-0.15.9"; src = fetchurl { url = "mirror://gcc/infrastructure/${name}.tar.gz"; - sha256 = "0zb96524jk2l78gr5gw0wq3dnvdsmyr2av59v89zv5xcps417q55"; + sha256 = "19a2n75k3d3n8llng25f2g88lpvd4zn0lm073rkndjw6l6yd8m4c"; }; propagatedBuildInputs = [ ppl ]; - configureFlags = "--with-ppl=${ppl}"; + configureFlags = "--with-ppl=${ppl}" + staticFlags; + dontDisableStatic = if static then true else false; crossAttrs = { - configureFlags = "--with-ppl=${ppl.hostDrv}"; + configureFlags = "--with-ppl=${ppl.hostDrv}" + staticFlags; }; doCheck = true; diff --git a/pkgs/development/libraries/gmp/4.nix b/pkgs/development/libraries/gmp/4.nix index 8dffdcd7e6d5..198fe15deeac 100644 --- a/pkgs/development/libraries/gmp/4.nix +++ b/pkgs/development/libraries/gmp/4.nix @@ -1,4 +1,8 @@ -{stdenv, fetchurl, m4, cxx ? true}: +{stdenv, fetchurl, m4, cxx ? true, static ? false}: + +let + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "gmp-4.3.2"; @@ -14,7 +18,11 @@ stdenv.mkDerivation rec { # instructions (e.g., SSE2 on i686). preConfigure = "ln -sf configfsf.guess config.guess"; - configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; + configureFlags = (if cxx then "--enable-cxx" else "--disable-cxx") + + staticFlags; + + dontDisableStatic = if static then true else false; + doCheck = true; diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index 08a03d715c2f..338debaa81e7 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -1,4 +1,8 @@ -{stdenv, fetchurl, m4, cxx ? true}: +{stdenv, fetchurl, m4, cxx ? true, static ? false}: + +let + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "gmp-5.0.1"; @@ -14,7 +18,10 @@ stdenv.mkDerivation rec { # instructions (e.g., SSE2 on i686). preConfigure = "ln -sf configfsf.guess config.guess"; - configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; + configureFlags = if cxx then "--enable-cxx" else "--disable-cxx" + + staticFlags; + + dontDisableStatic = if static then true else false; doCheck = true; diff --git a/pkgs/development/libraries/ppl/default.nix b/pkgs/development/libraries/ppl/default.nix index cbe6ee21ecd6..677d578e2425 100644 --- a/pkgs/development/libraries/ppl/default.nix +++ b/pkgs/development/libraries/ppl/default.nix @@ -1,6 +1,9 @@ -{ fetchurl, stdenv, gmpxx, perl, gnum4 }: +{ fetchurl, stdenv, gmpxx, perl, gnum4, static ? false }: -let version = "0.10.2"; in +let + version = "0.10.2"; + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "ppl-${version}"; @@ -12,6 +15,9 @@ let version = "0.10.2"; in buildNativeInputs = [ perl gnum4 ]; propagatedBuildInputs = [ gmpxx ]; + dontDisableStatic = if static then true else false; + configureFlags = staticFlags; + # Beware! It took ~6 hours to compile PPL and run its tests on a 1.2 GHz # x86_64 box. Nevertheless, being a dependency of GCC, it probably ought # to be tested. diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 971ef7cc3b7c..a050f3ecaf43 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -183,6 +183,18 @@ rec { bootStdenv = stdenvLinuxBoot2; }; + gccWithStaticLibs = stdenvLinuxBoot2Pkgs.gcc.gcc.override (rec { + ppl = stdenvLinuxBoot2Pkgs.ppl.override { + static = true; + gmpxx = stdenvLinuxBoot2Pkgs.gmpxx.override { + static = true; + }; + }; + cloogppl = stdenvLinuxBoot2Pkgs.cloogppl.override { + inherit ppl; + static = true; + }; + }); # 6) Construct a third stdenv identical to the second, except that # this one uses the dynamically linked GCC and Binutils from step @@ -193,7 +205,7 @@ rec { inherit (stdenvLinuxBoot2Pkgs) binutils; coreutils = bootstrapTools; libc = stdenvLinuxGlibc; - gcc = stdenvLinuxBoot2Pkgs.gcc.gcc; + gcc = gccWithStaticLibs; name = ""; }; extraAttrs = { @@ -231,7 +243,7 @@ rec { inherit (stdenvLinuxBoot2Pkgs) binutils; inherit (stdenvLinuxBoot3Pkgs) coreutils; libc = stdenvLinuxGlibc; - gcc = stdenvLinuxBoot2Pkgs.gcc.gcc; + gcc = gccWithStaticLibs; shell = stdenvLinuxBoot3Pkgs.bash + "/bin/bash"; name = ""; }; From 6fe628b99a5e45561162fe1ece368ee6c367ab81 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 5 Aug 2010 13:21:29 +0000 Subject: [PATCH 070/282] * Indentation fixes. svn path=/nixpkgs/branches/stdenv-updates/; revision=22961 --- .../development/compilers/gcc-4.5/default.nix | 99 ++++++++++--------- .../libraries/cloog-ppl/default.nix | 17 ++-- 2 files changed, 61 insertions(+), 55 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index b5a5d20f501c..c1e3d3a402a3 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -183,6 +183,7 @@ stdenv.mkDerivation ({ buildNativeInputs = [ texinfo which ] ++ optional (perl != null) perl; + buildInputs = [ gmp mpfr mpc libelf gettext ] ++ (optional (ppl != null) ppl) ++ (optional (cloogppl != null) cloogppl) @@ -241,50 +242,50 @@ stdenv.mkDerivation ({ targetConfig = if (cross != null) then cross.config else null; - crossAttrs = { - AR = "${stdenv.cross.config}-ar"; - LD = "${stdenv.cross.config}-ld"; - CC = "${stdenv.cross.config}-gcc"; - CXX = "${stdenv.cross.config}-gcc"; - AR_FOR_TARGET = "${stdenv.cross.config}-ar"; - LD_FOR_TARGET = "${stdenv.cross.config}-ld"; - CC_FOR_TARGET = "${stdenv.cross.config}-gcc"; - NM_FOR_TARGET = "${stdenv.cross.config}-nm"; - CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; - # If we are making a cross compiler, cross != null - NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; - dontStrip = true; - configureFlags = " - ${if enableMultilib then "" else "--disable-multilib"} - ${if enableShared then "" else "--disable-shared"} - ${if ppl != null then "--with-ppl=${ppl.hostDrv}" else ""} - ${if cloogppl != null then "--with-cloog=${cloogppl.hostDrv}" else ""} - ${if langJava then "--with-ecj-jar=${javaEcj.hostDrv}" else ""} - ${if javaAwtGtk then "--enable-java-awt=gtk" else ""} - ${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.hostDrv}" else ""} - --with-gmp=${gmp.hostDrv} - --with-mpfr=${mpfr.hostDrv} - --disable-libstdcxx-pch - --without-included-gettext - --with-system-zlib - --enable-languages=${ - concatStrings (intersperse "," - ( optional langC "c" - ++ optional langCC "c++" - ++ optional langFortran "fortran" - ++ optional langJava "java" - ++ optional langTreelang "treelang" - ++ optional langAda "ada" - ++ optional langVhdl "vhdl" - ) - ) - } - ${if langAda then " --enable-libada" else ""} - ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} - ${if cross != null then crossConfigureFlags else ""} - --target=${stdenv.cross.config} - "; - }; + crossAttrs = { + AR = "${stdenv.cross.config}-ar"; + LD = "${stdenv.cross.config}-ld"; + CC = "${stdenv.cross.config}-gcc"; + CXX = "${stdenv.cross.config}-gcc"; + AR_FOR_TARGET = "${stdenv.cross.config}-ar"; + LD_FOR_TARGET = "${stdenv.cross.config}-ld"; + CC_FOR_TARGET = "${stdenv.cross.config}-gcc"; + NM_FOR_TARGET = "${stdenv.cross.config}-nm"; + CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; + # If we are making a cross compiler, cross != null + NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; + dontStrip = true; + configureFlags = '' + ${if enableMultilib then "" else "--disable-multilib"} + ${if enableShared then "" else "--disable-shared"} + ${if ppl != null then "--with-ppl=${ppl.hostDrv}" else ""} + ${if cloogppl != null then "--with-cloog=${cloogppl.hostDrv}" else ""} + ${if langJava then "--with-ecj-jar=${javaEcj.hostDrv}" else ""} + ${if javaAwtGtk then "--enable-java-awt=gtk" else ""} + ${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.hostDrv}" else ""} + --with-gmp=${gmp.hostDrv} + --with-mpfr=${mpfr.hostDrv} + --disable-libstdcxx-pch + --without-included-gettext + --with-system-zlib + --enable-languages=${ + concatStrings (intersperse "," + ( optional langC "c" + ++ optional langCC "c++" + ++ optional langFortran "fortran" + ++ optional langJava "java" + ++ optional langTreelang "treelang" + ++ optional langAda "ada" + ++ optional langVhdl "vhdl" + ) + ) + } + ${if langAda then " --enable-libada" else ""} + ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} + ${if cross != null then crossConfigureFlags else ""} + --target=${stdenv.cross.config} + ''; + }; # Needed for the cross compilation to work @@ -368,11 +369,13 @@ stdenv.mkDerivation ({ platforms = stdenv.lib.platforms.linux ++ optionals (langAda == false) [ "i686-darwin" ]; }; } -// (if cross != null && cross.libc == "msvcrt" && crossStageStatic then rec { + +// optionalAttrs (cross != null && cross.libc == "msvcrt" && crossStageStatic) { makeFlags = [ "all-gcc" "all-target-libgcc" ]; installTargets = "install-gcc install-target-libgcc"; -} else {}) -// (if langVhdl then rec { +} + +// optionalAttrs langVhdl rec { name = "ghdl-0.29"; ghdlSrc = fetchurl { @@ -405,4 +408,4 @@ stdenv.mkDerivation ({ platforms = with stdenv.lib.platforms; linux; }; -} else {})) +}) diff --git a/pkgs/development/libraries/cloog-ppl/default.nix b/pkgs/development/libraries/cloog-ppl/default.nix index 0919afd83c27..ca662d30eb0f 100644 --- a/pkgs/development/libraries/cloog-ppl/default.nix +++ b/pkgs/development/libraries/cloog-ppl/default.nix @@ -1,13 +1,16 @@ { fetchurl, stdenv, ppl, static ? false }: - let - # --with-host-libstdcxx helps when *ppl* is built statically. - # But I will suppose that this is statically built only when ppl is also - # statically built. - staticFlags = assert static -> ppl.dontDisableStatic == true; - if static then " --enable-static --disable-shared --with-host-libstdcxx=-lstdc++" else ""; + + # --with-host-libstdcxx helps when *ppl* is built statically. + # But I will suppose that this is statically built only when ppl is also + # statically built. + staticFlags = + assert static -> ppl.dontDisableStatic == true; + if static then " --enable-static --disable-shared --with-host-libstdcxx=-lstdc++" else ""; + in + stdenv.mkDerivation rec { name = "cloog-ppl-0.15.9"; @@ -22,7 +25,7 @@ stdenv.mkDerivation rec { dontDisableStatic = if static then true else false; crossAttrs = { - configureFlags = "--with-ppl=${ppl.hostDrv}" + staticFlags; + configureFlags = "--with-ppl=${ppl.hostDrv}" + staticFlags; }; doCheck = true; From 50f337ad010557252387619a4b15ea1143f528e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 13:39:08 +0000 Subject: [PATCH 071/282] Making gcc not depend on bootstrap-tools (by a postInstall patchelf trick) svn path=/nixpkgs/branches/stdenv-updates/; revision=22963 --- pkgs/development/compilers/gcc-4.5/builder.sh | 8 ++++++++ pkgs/development/libraries/gmp/4.nix | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc-4.5/builder.sh b/pkgs/development/compilers/gcc-4.5/builder.sh index adcb03ef4dd7..fd9b4bd4534b 100644 --- a/pkgs/development/compilers/gcc-4.5/builder.sh +++ b/pkgs/development/compilers/gcc-4.5/builder.sh @@ -181,6 +181,14 @@ 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 + PREV_RPATH=`patchelf --print-rpath $i` + patchelf --set-rpath `echo $PREV_RPATH | sed 's,:[^:]*bootstrap-tools/lib,,'` $i + done # Get rid of some "fixed" header files rm -rf $out/lib/gcc/*/*/include/root diff --git a/pkgs/development/libraries/gmp/4.nix b/pkgs/development/libraries/gmp/4.nix index 198fe15deeac..c5a59045bbe9 100644 --- a/pkgs/development/libraries/gmp/4.nix +++ b/pkgs/development/libraries/gmp/4.nix @@ -23,7 +23,6 @@ stdenv.mkDerivation rec { dontDisableStatic = if static then true else false; - doCheck = true; meta = { From 5119fac40eff0d88c88024ac7c2aae89806d8f7e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 5 Aug 2010 16:27:46 +0000 Subject: [PATCH 072/282] * Don't store the GCC configure flags in the output (visible through `gcc -v'). It causes build-time only dependencies to be unnecessarily retained in the closure (e.g. PPL due to `--with-ppl=/nix/store/...'). * Replace $out/bin/c++ with a symlink to g++. svn path=/nixpkgs/branches/stdenv-updates/; revision=22966 --- pkgs/development/compilers/gcc-4.5/builder.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc-4.5/builder.sh b/pkgs/development/compilers/gcc-4.5/builder.sh index fd9b4bd4534b..5d66cc09532e 100644 --- a/pkgs/development/compilers/gcc-4.5/builder.sh +++ b/pkgs/development/compilers/gcc-4.5/builder.sh @@ -143,6 +143,7 @@ if test -n "$targetConfig"; then dontStrip=1 fi + preConfigure() { if test -n "$newlibSrc"; then tar xvf "$newlibSrc" -C .. @@ -172,6 +173,12 @@ preConfigure() { } +postConfigure() { + # Don't store the configure flags in the resulting executables. + sed -e '/TOPLEVEL_CONFIGURE_ARGUMENTS=/d' -i Makefile +} + + postInstall() { # Remove precompiled headers for now. They are very big and # probably not very useful yet. @@ -200,7 +207,7 @@ postInstall() { fi done - for i in $out/bin/*-c++* $out/bin/*-g++*; do + for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do if cmp -s $out/bin/g++ $i; then ln -sfn g++ $i fi From 39a2523e7999c1420499d973a4bdd6d9395cbcd4 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 5 Aug 2010 16:51:16 +0000 Subject: [PATCH 073/282] * Glibc 2.11.2. svn path=/nixpkgs/branches/stdenv-updates/; revision=22967 --- .../libraries/glibc-2.11/common.nix | 8 ++-- .../glibc-2.11/nss-skip-unavail.patch | 42 +++++++++---------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index 29b70f99e0ca..d2aef48a6230 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -11,9 +11,7 @@ cross : let # For GNU/Hurd, see below. - date = "20100512"; - rev = "df4c3faf0ccc848b5a8086c222bdb42679a9798f"; - version = if hurdHeaders != null then date else "2.11.1"; + version = if hurdHeaders != null then "20100512" else "2.11.2"; in assert (cross != null) -> (gccCross != null); @@ -123,11 +121,11 @@ stdenv.mkDerivation ({ # See . url = "git://git.sv.gnu.org/hurd/glibc.git"; sha256 = "f3590a54a9d897d121f91113949edbaaf3e30cdeacbb8d0a44de7b6564f6643e"; - inherit rev; + rev = "df4c3faf0ccc848b5a8086c222bdb42679a9798f"; } else fetchurl { url = "mirror://gnu/glibc/glibc-${version}.tar.bz2"; - sha256 = "18azb6518ryqhkfmddr25p0h1s2msrmx7dblij58sjlnzh61vq34"; + sha256 = "04w74879psq961cas1amidkg8fc1h6r9yj3plfr33v9y6vp7db62"; }; srcPorts = fetchurl { diff --git a/pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch b/pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch index dc09b5098707..e48dc2bc0a6e 100644 --- a/pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch +++ b/pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch @@ -1,25 +1,21 @@ -diff -rc glibc-2.9-20081208-orig/sysdeps/posix/getaddrinfo.c glibc-2.9-20081208/sysdeps/posix/getaddrinfo.c -*** glibc-2.9-20081208-orig/sysdeps/posix/getaddrinfo.c 2008-07-30 21:14:22.000000000 +0200 ---- glibc-2.9-20081208/sysdeps/posix/getaddrinfo.c 2008-12-10 11:39:32.000000000 +0100 -*************** -*** 505,512 **** - int no_data = 0; - int no_inet6_data = 0; - service_user *nip = NULL; -- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; -- enum nss_status status = NSS_STATUS_UNAVAIL; - int no_more; - int old_res_options; - ---- 505,510 ---- -*************** -*** 702,707 **** ---- 700,707 ---- - - while (!no_more) - { +diff -ru glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c glibc-2.11.2/sysdeps/posix/getaddrinfo.c +--- glibc-2.11.2-orig/sysdeps/posix/getaddrinfo.c 2010-05-19 22:38:20.000000000 +0200 ++++ glibc-2.11.2/sysdeps/posix/getaddrinfo.c 2010-08-05 18:39:54.259556327 +0200 +@@ -505,8 +505,6 @@ + int no_data = 0; + int no_inet6_data = 0; + service_user *nip = NULL; +- enum nss_status inet6_status = NSS_STATUS_UNAVAIL; +- enum nss_status status = NSS_STATUS_UNAVAIL; + int no_more; + int old_res_options; + +@@ -702,6 +700,8 @@ + + while (!no_more) + { + enum nss_status inet6_status = NSS_STATUS_UNAVAIL; + enum nss_status status = NSS_STATUS_UNAVAIL; - nss_gethostbyname4_r fct4 - = __nss_lookup_function (nip, "gethostbyname4_r"); - if (fct4 != NULL) + no_data = 0; + nss_gethostbyname4_r fct4 + = __nss_lookup_function (nip, "gethostbyname4_r"); From c82f2f533db463f49fea7cb2f3bca6e3e0544bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 18:40:58 +0000 Subject: [PATCH 074/282] Avoiding to make a profiled bootstrap of gcc on armv5tel-linux, because it fails there. svn path=/nixpkgs/branches/stdenv-updates/; revision=22970 --- pkgs/top-level/all-packages.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d39ea798cc71..c8a9db36347a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1576,7 +1576,9 @@ let inherit fetchurl stdenv texinfo gmp mpfr mpc libelf zlib perl ppl cloogppl gettext which noSysDirs; - profiledCompiler = true; + # bootstrapping a profiled compiler does not work in the sheevaplug: + # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43944 + profiledCompiler = if stdenv.system == "armv5tel-linux" then false else true; })); gccApple = From b7f47c7f49642343edd4c47c050b9b27f17853ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 18:47:40 +0000 Subject: [PATCH 075/282] Updating libgcrypt, hoping that it will build on mips svn path=/nixpkgs/branches/stdenv-updates/; revision=22972 --- pkgs/development/libraries/libgcrypt/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libgcrypt/default.nix b/pkgs/development/libraries/libgcrypt/default.nix index 438cc212b54f..038fbef69e58 100644 --- a/pkgs/development/libraries/libgcrypt/default.nix +++ b/pkgs/development/libraries/libgcrypt/default.nix @@ -1,11 +1,11 @@ { fetchurl, stdenv, libgpgerror }: stdenv.mkDerivation rec { - name = "libgcrypt-1.4.5"; + name = "libgcrypt-1.4.6"; src = fetchurl { url = "mirror://gnupg/libgcrypt/${name}.tar.bz2"; - sha256 = "0h4ypld775rm1g15v134pkq9wc6ixszn6766gqv7bpi4ady90vs9"; + sha256 = "11bbpjlqwp0nh4q76wmsk6z1812anqrj28nh6d9mcyrmdgd30jry"; }; propagatedBuildInputs = [ libgpgerror ]; From 8783e812b56a30b03dd03aeae0a86d2990061551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 18:51:12 +0000 Subject: [PATCH 076/282] More changes beyond stdenv-linux for the fuloong2f platform svn path=/nixpkgs/branches/stdenv-updates/; revision=22973 --- pkgs/lib/platforms.nix | 3 ++- pkgs/os-specific/linux/kernel/generic.nix | 3 ++- pkgs/top-level/platforms.nix | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/lib/platforms.nix b/pkgs/lib/platforms.nix index 635b195e1d64..095281145d26 100644 --- a/pkgs/lib/platforms.nix +++ b/pkgs/lib/platforms.nix @@ -2,7 +2,8 @@ let lists = import ./lists.nix; in rec { gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */ - linux = ["i686-linux" "x86_64-linux" "powerpc-linux" "armv5tel-linux" ]; + linux = ["i686-linux" "x86_64-linux" "powerpc-linux" "armv5tel-linux" + "ict_loongson-2_v0.3_fpu_v0.1-linux"]; darwin = ["i686-darwin" "powerpc-darwin" "x86_64-darwin"]; freebsd = ["i686-freebsd" "x86_64-freebsd" "powerpc-freebsd"]; openbsd = ["i686-openbsd" "x86_64-openbsd"]; diff --git a/pkgs/os-specific/linux/kernel/generic.nix b/pkgs/os-specific/linux/kernel/generic.nix index 158117133244..fb59fa0b7d51 100644 --- a/pkgs/os-specific/linux/kernel/generic.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -41,7 +41,7 @@ }: assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" - || stdenv.system == "armv5tel-linux"; + || stdenv.system == "armv5tel-linux" || stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; assert stdenv.platform.name == "sheevaplug" -> stdenv.platform.uboot != null; @@ -96,6 +96,7 @@ stdenv.mkDerivation { if stdenv.system == "i686-linux" then "i386" else if stdenv.system == "x86_64-linux" then "x86_64" else if stdenv.system == "armv5tel-linux" then "arm" else + if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "mips" else abort "Platform ${stdenv.system} is not supported."; crossAttrs = let diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index a72f264b4fc0..f3f6acad757c 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -203,5 +203,6 @@ rec { FUSE_FS m ''; kernelTarget = "vmlinux"; + uboot = null; }; } From 952bcf5e588bd11ab44ce0c7e50bc57c934f49a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 21:19:32 +0000 Subject: [PATCH 077/282] Setting the patch for the glibc locale archive, which addresses some problems found before: - programs linked with this glibc, will be able to find its locale-archive at LOCALE_ARCHIVE_2_11 - for any problem we forgot to mention, we also add the LOCALE_ARCHIVE variable, checked after LOCALE_ARCHIVE_2_11. I don't know a strong reason to have it though. - setuid programs will expect the locale-archive in /var/run/current-system/sw/lib/locale, usual path of the locale-archive in nixos, and a path that a sysadmin can set pointing to the locale-archive in case of non-nixos. setuid programs don't receive the LOCALE_ARCHIVE variables. - non-nixos systems will have a check for the locale-archive in /usr/lib/locale - the glibc programs 'locale' and 'localedef' may be able to find the proper locale-archive too. We were also considering getting rid of the locale-archive, and using locale files directly (like Ubuntu seems to do [1]), maybe using the LOCPATH variable. But this would not solve the problem of localized setuid programs. All this came after a 'meeting' with niksnut on irc about this. [1] http://lwn.net/Articles/244204/ svn path=/nixpkgs/branches/stdenv-updates/; revision=22977 --- .../libraries/glibc-2.11/common.nix | 3 + .../glibc-2.11/nix-locale-archive.patch | 122 ++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix index d2aef48a6230..b2dd01690df6 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.11/common.nix @@ -63,6 +63,9 @@ stdenv.mkDerivation ({ /* Fix for the check of -fgnu89-inline compiler flag */ ./gnu89-inline.patch + + /* Allow nixos and nix handle the locale-archive. */ + ./nix-locale-archive.patch ] ++ stdenv.lib.optional (fetchgit == null) /* MOD_NANO definition, for ntp (taken from glibc upstream) */ diff --git a/pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch b/pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch new file mode 100644 index 000000000000..30e054986625 --- /dev/null +++ b/pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch @@ -0,0 +1,122 @@ +diff --git a/locale/loadarchive.c b/locale/loadarchive.c +index d545f17..0d8638a 100644 +--- a/locale/loadarchive.c ++++ b/locale/loadarchive.c +@@ -124,6 +124,25 @@ calculate_head_size (const struct locarhead *h) + } + + ++static int ++open_locale_archive () ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ const char *usualpath = "/usr/lib/locale/locale-archive"; ++ if (path) ++ fd = open_not_cancel_2 (path, O_RDONLY|O_LARGEFILE); ++ if (path2 && fd < 0) ++ fd = open_not_cancel_2 (path2, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ if (fd < 0) ++ fd = open_not_cancel_2 (usualpath, O_RDONLY|O_LARGEFILE); ++ return fd; ++} ++ ++ + /* Find the locale *NAMEP in the locale archive, and return the + internalized data structure for its CATEGORY data. If this locale has + already been loaded from the archive, just returns the existing data +@@ -203,7 +222,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + archmapped = &headmap; + + /* The archive has never been opened. */ +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +@@ -394,7 +413,7 @@ _nl_load_locale_from_archive (int category, const char **namep) + if (fd == -1) + { + struct stat64 st; +- fd = open_not_cancel_2 (archfname, O_RDONLY|O_LARGEFILE); ++ fd = open_locale_archive (); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +diff --git a/locale/programs/locale.c b/locale/programs/locale.c +index 77262b7..fddc00d 100644 +--- a/locale/programs/locale.c ++++ b/locale/programs/locale.c +@@ -628,6 +628,23 @@ nameentcmp (const void *a, const void *b) + ((const struct nameent *) b)->name); + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ const char *usualpath = "/usr/lib/locale/locale-archive"; ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ if (fd < 0) ++ fd = open64 (usualpath, access); ++ return fd; ++} + + static int + write_archive_locales (void **all_datap, char *linebuf) +@@ -641,7 +658,7 @@ write_archive_locales (void **all_datap, char *linebuf) + int fd, ret = 0; + uint32_t cnt; + +- fd = open64 (ARCHIVE_NAME, O_RDONLY); ++ fd = open_nix_locale_archive (ARCHIVE_NAME, O_RDONLY); + if (fd < 0) + return 0; + +diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c +index 85ba77d..3ad2af8 100644 +--- a/locale/programs/locarchive.c ++++ b/locale/programs/locarchive.c +@@ -512,6 +512,23 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) + *ah = new_ah; + } + ++static int ++open_nix_locale_archive (const char * fname, int access) ++{ ++ int fd = -1; ++ char *path = getenv ("LOCALE_ARCHIVE_2_11"); ++ char *path2 = getenv ("LOCALE_ARCHIVE"); ++ const char *usualpath = "/usr/lib/locale/locale-archive"; ++ if (path) ++ fd = open64 (path, access); ++ if (path2 && fd < 0) ++ fd = open64 (path2, access); ++ if (fd < 0) ++ fd = open64 (fname, access); ++ if (fd < 0) ++ fd = open64 (usualpath, access); ++ return fd; ++} + + void + open_archive (struct locarhandle *ah, bool readonly) +@@ -531,7 +548,7 @@ open_archive (struct locarhandle *ah, bool readonly) + while (1) + { + /* Open the archive. We must have exclusive write access. */ +- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR); ++ fd = open_nix_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR); + if (fd == -1) + { + /* Maybe the file does not yet exist. */ From 229883730e2216b5f479f4633890fc949afabb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 22:02:13 +0000 Subject: [PATCH 078/282] Removing some nongnu mirrors that don't work for me. Feel free to check them back in if they work for you. svn path=/nixpkgs/branches/stdenv-updates/; revision=22978 --- pkgs/build-support/fetchurl/mirrors.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pkgs/build-support/fetchurl/mirrors.nix b/pkgs/build-support/fetchurl/mirrors.nix index cd53f0d0d550..c27b8967e809 100644 --- a/pkgs/build-support/fetchurl/mirrors.nix +++ b/pkgs/build-support/fetchurl/mirrors.nix @@ -122,14 +122,9 @@ rec { http://ftp.cc.uoc.gr/mirrors/nongnu.org/ http://ftp.twaren.net/Unix/NonGNU/ http://mirror.csclub.uwaterloo.ca/nongnu/ - http://mirror.publicns.net/pub/nongnu/ http://nongnu.askapache.com/ - http://nongnu.bigsearcher.com/ http://savannah.c3sl.ufpr.br/ http://www.centervenus.com/mirrors/nongnu/ - http://www.de-mirrors.de/nongnu/ - http://www.very-clever.com/download/nongnu/ - http://www.wikifusion.info/nongnu/ ]; # BitlBee mirrors, see http://www.bitlbee.org/main.php/mirrors.html . From 27e2ae10a039f44dd2cd336c62235e539d4842a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 5 Aug 2010 22:04:10 +0000 Subject: [PATCH 079/282] Making gdbm get the proper config.guess for it to build in the Fuloong 2f. I could not find a newer gdbm with newer config.guess. svn path=/nixpkgs/branches/stdenv-updates/; revision=22979 --- pkgs/development/libraries/gdbm/default.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/gdbm/default.nix b/pkgs/development/libraries/gdbm/default.nix index d6f1d118f822..448fd04edd81 100644 --- a/pkgs/development/libraries/gdbm/default.nix +++ b/pkgs/development/libraries/gdbm/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl }: +{ stdenv, fetchurl, automake }: stdenv.mkDerivation rec { name = "gdbm-1.8.3"; @@ -9,6 +9,11 @@ stdenv.mkDerivation rec { patches = [ ./install.patch ]; + # The fuloong2f is not supported by gdbm 1.8.3 still + preConfigure = '' + cp ${automake}/share/automake*/config.{sub,guess} . + ''; + meta = { description = "GNU DBM key/value database library"; homepage = http://www.gnu.org/software/gdbm/; From a70b44b3cbf7babd8613b005a619422969c750ff Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 6 Aug 2010 18:39:34 +0000 Subject: [PATCH 080/282] * util-linux-ng 2.18. svn path=/nixpkgs/branches/stdenv-updates/; revision=23004 --- pkgs/os-specific/linux/util-linux-ng/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/util-linux-ng/default.nix b/pkgs/os-specific/linux/util-linux-ng/default.nix index ca21deb64890..60ffeb707376 100644 --- a/pkgs/os-specific/linux/util-linux-ng/default.nix +++ b/pkgs/os-specific/linux/util-linux-ng/default.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, ncurses ? null }: stdenv.mkDerivation rec { - name = "util-linux-ng-2.17.2"; + name = "util-linux-ng-2.18"; src = fetchurl { - url = "mirror://kernel/linux/utils/util-linux-ng/v2.17/${name}.tar.bz2"; - sha256 = "13qifk3i1x59q45fpdz8qnnm7vrhd2zshy5295vhpcjsd8dq1bn9"; + url = "mirror://kernel/linux/utils/util-linux-ng/v2.18/${name}.tar.bz2"; + sha256 = "1k1in1ba9kvh0kplri9765wh0yk68qrkk1a55dqsm21qfryc1idq"; }; configureFlags = '' From 1c078c986145f846368b8638f3fc6623480c0aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 7 Aug 2010 21:07:41 +0000 Subject: [PATCH 081/282] Fixing a double set attribute in stdenv svn path=/nixpkgs/branches/stdenv-updates/; revision=23028 --- pkgs/stdenv/generic/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 4d2200d19714..8cd1dc29d612 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -97,7 +97,6 @@ let || result.system == "armv5tel-linux" || result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; isSunOS = result.system == "i386-sunos"; - isSunOS = result.system == "i386-sunos"; isi686 = result.system == "i686-linux" || result.system == "i686-darwin" || result.system == "i686-freebsd" From f2de89336b95998d2e153f42ff01d8ef42cf81ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 7 Aug 2010 21:31:16 +0000 Subject: [PATCH 082/282] Removing the 'useFromStdenv' still left on the gcc45 attribute (not properly updated from trunk) svn path=/nixpkgs/branches/stdenv-updates/; revision=23029 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 56ed66954629..91a3a0cf5758 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1472,7 +1472,7 @@ let cross = assert crossSystem != null; crossSystem; }); - gcc45 = useFromStdenv "gcc" gcc45_real; + gcc45 = gcc45_real; gcc45_realCross = lib.addMetaAttrs { platforms = []; } (makeOverridable (import ../development/compilers/gcc-4.5) { From eddc9d6ab58c3645a247c4122889f74be27c4391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:46:57 +0000 Subject: [PATCH 083/282] Fixing the nanonote kernel expressions so they work. In fact only 2.6.34 boots fine, while 2.6.35 needs a fetchsvn new revision, waiting for an upstream patch. svn path=/nixpkgs/branches/stdenv-updates/; revision=23039 --- pkgs/os-specific/linux/kernel/builder.sh | 138 +++++++++--------- pkgs/os-specific/linux/kernel/generic.nix | 3 +- .../linux/kernel/linux-nanonote-jz-2.6.34.nix | 41 +++++- .../linux/kernel/linux-nanonote-jz-2.6.35.nix | 41 +++++- pkgs/top-level/all-packages.nix | 4 +- 5 files changed, 146 insertions(+), 81 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh index e7d25e868835..6055c8c4e5f2 100644 --- a/pkgs/os-specific/linux/kernel/builder.sh +++ b/pkgs/os-specific/linux/kernel/builder.sh @@ -74,75 +74,81 @@ installPhase() { cp vmlinux $out - # Install the modules in $out/lib/modules with matching paths - # in modules.dep (i.e., refererring to $out/lib/modules, not - # /lib/modules). The depmod_opts= is to prevent the kernel - # from passing `-b PATH' to depmod. - export MODULE_DIR=$out/lib/modules/ - substituteInPlace Makefile --replace '-b $(INSTALL_MOD_PATH)' '' - make modules_install \ - DEPMOD=$module_init_tools/sbin/depmod depmod_opts= \ - $makeFlags "${makeFlagsArray[@]}" \ - $installFlags "${installFlagsArray[@]}" + if grep -q "CONFIG_MODULES=y" .config; then + # Install the modules in $out/lib/modules with matching paths + # in modules.dep (i.e., refererring to $out/lib/modules, not + # /lib/modules). The depmod_opts= is to prevent the kernel + # from passing `-b PATH' to depmod. + export MODULE_DIR=$out/lib/modules/ + substituteInPlace Makefile --replace '-b $(INSTALL_MOD_PATH)' '' + make modules_install \ + DEPMOD=$module_init_tools/sbin/depmod depmod_opts= \ + $makeFlags "${makeFlagsArray[@]}" \ + $installFlags "${installFlagsArray[@]}" - if test -z "$dontStrip"; then - # Strip the kernel modules. - echo "Stripping kernel modules..." - if [ -z "$crossConfig" ]; then - find $out -name "*.ko" -print0 | xargs -0 strip -S - else - find $out -name "*.ko" -print0 | xargs -0 $crossConfig-strip -S - fi + if test -z "$dontStrip"; then + # Strip the kernel modules. + echo "Stripping kernel modules..." + if [ -z "$crossConfig" ]; then + find $out -name "*.ko" -print0 | xargs -0 strip -S + else + find $out -name "*.ko" -print0 | xargs -0 $crossConfig-strip -S + fi + fi + + # move this to install later on + # largely copied from early FC3 kernel spec files + version=$(cd $out/lib/modules && ls -d *) + + # remove symlinks and create directories + rm -f $out/lib/modules/$version/build + rm -f $out/lib/modules/$version/source + mkdir $out/lib/modules/$version/build + + # copy config + cp .config $out/lib/modules/$version/build/.config + ln -s $out/lib/modules/$version/build/.config $out/config + + if test "$arch" != um; then + # copy all Makefiles and Kconfig files + ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source + cp --parents `find -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build + cp Module.symvers $out/lib/modules/$version/build + + if test "$dontStrip" = "1"; then + # copy any debugging info that can be found + cp --parents -rv `find -name \*.debug -o -name debug.a` \ + "$out/lib/modules/$version/build" + fi + + # weed out unneeded stuff + rm -rf $out/lib/modules/$version/build/Documentation + rm -rf $out/lib/modules/$version/build/scripts + rm -rf $out/lib/modules/$version/build/include + + # copy architecture dependent files + cp -a arch/$archDir/scripts $out/lib/modules/$version/build/ || true + cp -a arch/$archDir/*lds $out/lib/modules/$version/build/ || true + cp -a arch/$archDir/Makefile*.cpu $out/lib/modules/$version/build/arch/$archDir/ || true + cp -a --parents arch/$archDir/kernel/asm-offsets.s $out/lib/modules/$version/build/arch/$archDir/kernel/ || true + + # copy scripts + rm -f scripts/*.o + rm -f scripts/*/*.o + cp -a scripts $out/lib/modules/$version/build + + # copy include files + includeDir=$out/lib/modules/$version/build/include + mkdir -p $includeDir + (cd include && cp -a * $includeDir) + (cd arch/$archDir/include && cp -a * $includeDir || true) + (cd arch/$archDir/include && cp -a asm/* $includeDir/asm/ || true) + (cd arch/$archDir/include/asm/mach-generic && cp -a * $includeDir/ || true) + fi fi - # move this to install later on - # largely copied from early FC3 kernel spec files - version=$(cd $out/lib/modules && ls -d *) - - # remove symlinks and create directories - rm -f $out/lib/modules/$version/build - rm -f $out/lib/modules/$version/source - mkdir $out/lib/modules/$version/build - - # copy config - cp .config $out/lib/modules/$version/build/.config - ln -s $out/lib/modules/$version/build/.config $out/config - - if test "$arch" != um; then - # copy all Makefiles and Kconfig files - ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source - cp --parents `find -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build - cp Module.symvers $out/lib/modules/$version/build - - if test "$dontStrip" = "1"; then - # copy any debugging info that can be found - cp --parents -rv `find -name \*.debug -o -name debug.a` \ - "$out/lib/modules/$version/build" - fi - - # weed out unneeded stuff - rm -rf $out/lib/modules/$version/build/Documentation - rm -rf $out/lib/modules/$version/build/scripts - rm -rf $out/lib/modules/$version/build/include - - # copy architecture dependent files - cp -a arch/$archDir/scripts $out/lib/modules/$version/build/ || true - cp -a arch/$archDir/*lds $out/lib/modules/$version/build/ || true - cp -a arch/$archDir/Makefile*.cpu $out/lib/modules/$version/build/arch/$archDir/ || true - cp -a --parents arch/$archDir/kernel/asm-offsets.s $out/lib/modules/$version/build/arch/$archDir/kernel/ || true - - # copy scripts - rm -f scripts/*.o - rm -f scripts/*/*.o - cp -a scripts $out/lib/modules/$version/build - - # copy include files - includeDir=$out/lib/modules/$version/build/include - mkdir -p $includeDir - (cd include && cp -a * $includeDir) - (cd arch/$archDir/include && cp -a * $includeDir || true) - (cd arch/$archDir/include && cp -a asm/* $includeDir/asm/ || true) - (cd arch/$archDir/include/asm/mach-generic && cp -a * $includeDir/ || true) + if test -n "$postInstall"; then + eval "$postInstall"; fi } diff --git a/pkgs/os-specific/linux/kernel/generic.nix b/pkgs/os-specific/linux/kernel/generic.nix index fb59fa0b7d51..efc2408d3719 100644 --- a/pkgs/os-specific/linux/kernel/generic.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -37,6 +37,7 @@ , preConfigure ? "" , extraMeta ? {} , ubootChooser ? null +, postInstall ? "" , ... }: @@ -70,7 +71,7 @@ stdenv.mkDerivation { generateConfig = ./generate-config.pl; - inherit preConfigure src module_init_tools localVersion; + inherit preConfigure src module_init_tools localVersion postInstall; patches = map (p: p.patch) kernelPatches; diff --git a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix index 859438359c74..0eb291d5b553 100644 --- a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix +++ b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix @@ -1,4 +1,4 @@ -args @ { stdenv, fetchgit, userModeLinux ? false, extraConfig ? "" +args @ { stdenv, fetchurl, fetchsvn, userModeLinux ? false, extraConfig ? "" , ... }: let @@ -194,14 +194,43 @@ in import ./generic.nix ( rec { - version = "jz-2.6.34"; + version = "qi_lb60-2.6.34.1-openwrt-22513"; - src = fetchgit { - url = "git://projects.qi-hardware.com/qi-kernel.git"; - rev = "f42d987a04d6f9366c47edf794f66796151867b9"; - sha256 = "bc9da0af30d5bf4c7be7495e052b328e72ab6a7f8a57e201720e3198cd6afb22"; + src = fetchurl { + url = "mirror://kernel/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2"; + sha256 = "0v78yvkwr100v7bnrkkabxmpv5hjg1ngrjbr5d0kkzsw4d7bmm5x"; }; + srcPatch = fetchsvn { + url = "svn://svn.openwrt.org/openwrt/trunk/target/linux"; + rev = 22513; + sha256 = "0b7wzgqnbq8sq32z9ik08n1b7fnc9v9d91zwvb6qz7vj3dlrxw3g"; + }; + + preConfigure = '' + cp -R ${srcPatch}/generic/files/* . + chmod +w -R * + GLOBIGNORE='.:..:*preinit_as_init*' + for a in ${srcPatch}/generic/patches-2.6.34/* ${srcPatch}/xburst/patches-2.6.34/* ; do + echo applying patch $a + patch -p1 < $a + done + unset GLOBIGNORE + cat ${srcPatch}/generic/config-2.6.34 ${srcPatch}/xburst/config-2.6.34 \ + ${srcPatch}/xburst/qi_lb60/config-2.6.34 > arch/mips/configs/qi_lb60_defconfig + ''; + + postInstall = '' + set -x + gzip -9 -c $out/vmlinux.bin > $out/vmlinux.bin.gz + KERNEL_ENTRY="0x`$crossConfig-nm $out/vmlinux 2>/dev/null | + grep " kernel_entry" | cut -f1 -d ' '`" + mkimage -A mips -O linux -T kernel -a 0x80010000 -C gzip \ + -e $KERNEL_ENTRY -n "MIPS Nix Linux-2.6.34" \ + -d $out/vmlinux.bin.gz $out/uImage + set +x + ''; + config = configWithPlatform stdenv.platform; configCross = configWithPlatform stdenv.cross.platform; diff --git a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix index a5f913bc248b..7e94ff4ba3c7 100644 --- a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix +++ b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix @@ -1,4 +1,4 @@ -args @ { stdenv, fetchgit, userModeLinux ? false, extraConfig ? "" +args @ { stdenv, fetchurl, fetchsvn, userModeLinux ? false, extraConfig ? "" , ... }: let @@ -194,14 +194,43 @@ in import ./generic.nix ( rec { - version = "jz-2.6.35"; + version = "qi_lb60-2.6.35-openwrt-22513"; - src = fetchgit { - url = "git://projects.qi-hardware.com/qi-kernel.git"; - rev = "4a5edaeef89037e288d8ae6c81eca1c6bda753da"; - sha256 = "42778cf871473bebc609eb26441591318b8396b03671360193bbe0e50cc29082"; + src = fetchurl { + url = "mirror://kernel/linux/kernel/v2.6/linux-2.6.35.tar.bz2"; + sha256 = "1kxz87nwksx4hvq1i45i9w1zq1fb09rvf8i6jin3cbh36v1y5chq"; }; + srcPatch = fetchsvn { + url = "svn://svn.openwrt.org/openwrt/trunk/target/linux"; + rev = 22513; + sha256 = "0b7wzgqnbq8sq32z9ik08n1b7fnc9v9d91zwvb6qz7vj3dlrxw3g"; + }; + + preConfigure = '' + cp -R ${srcPatch}/generic/files/* . + chmod +w -R * + GLOBIGNORE='.:..:*preinit_as_init*' + for a in ${srcPatch}/generic/patches-2.6.35/* ${srcPatch}/xburst/patches-2.6.35/* ; do + echo applying patch $a + patch -p1 < $a + done + unset GLOBIGNORE + cat ${srcPatch}/generic/config-2.6.35 ${srcPatch}/xburst/config-2.6.35 \ + ${srcPatch}/xburst/qi_lb60/config-2.6.35 > arch/mips/configs/qi_lb60_defconfig + ''; + + postInstall = '' + set -x + gzip -9 -c $out/vmlinux.bin > $out/vmlinux.bin.gz + KERNEL_ENTRY="0x`$crossConfig-nm $out/vmlinux 2>/dev/null | + grep " kernel_entry" | cut -f1 -d ' '`" + mkimage -A mips -O linux -T kernel -a 0x80010000 -C gzip \ + -e $KERNEL_ENTRY -n "MIPS Nix Linux-2.6.35" \ + -d $out/vmlinux.bin.gz $out/uImage + set +x + ''; + config = configWithPlatform stdenv.platform; configCross = configWithPlatform stdenv.cross.platform; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 91a3a0cf5758..8e93b690f339 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4497,12 +4497,12 @@ let linux_nanonote_jz_2_6_34 = makeOverridable (import ../os-specific/linux/kernel/linux-nanonote-jz-2.6.34.nix) { - inherit fetchurl fetchgit stdenv perl mktemp module_init_tools ubootChooser; + inherit fetchurl fetchsvn stdenv perl mktemp module_init_tools ubootChooser; }; linux_nanonote_jz_2_6_35 = makeOverridable (import ../os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix) { - inherit fetchurl fetchgit stdenv perl mktemp module_init_tools ubootChooser; + inherit fetchurl fetchsvn stdenv perl mktemp module_init_tools ubootChooser; }; /* Linux kernel modules are inherently tied to a specific kernel. So From ae3383e0019b7a61bce226a64ee72d5ab97050c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:47:48 +0000 Subject: [PATCH 084/282] Making the cross-built packages not depend on the gcc cross compiler directly, but on a nix-store path only having the cross-built gcc libraries. This trims down a lot the runtime dependency tree for cross-built packages. I also remove the glibc dependency on the native bash. svn path=/nixpkgs/branches/stdenv-updates/; revision=23040 --- pkgs/build-support/gcc-cross-wrapper/builder.sh | 5 ++++- .../build-support/gcc-cross-wrapper/default.nix | 17 ++++++++++++++++- .../libraries/glibc-2.11/default.nix | 7 ++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/gcc-cross-wrapper/builder.sh b/pkgs/build-support/gcc-cross-wrapper/builder.sh index a3a4d01e3c4b..ef46cc110f2e 100644 --- a/pkgs/build-support/gcc-cross-wrapper/builder.sh +++ b/pkgs/build-support/gcc-cross-wrapper/builder.sh @@ -38,7 +38,10 @@ if test -n "$nativeTools"; then gccPath="$nativePrefix/bin" ldPath="$nativePrefix/bin" else - ldflags="$ldflags -L$gcc/lib" + if test -n "$gccLibs"; then + ldflags="$ldflags -L$gccLibs/lib -L$gccLibs/lib64" + fi + ldflags="$ldflags -L$gcc/lib -L$gcc/lib64" gccPath="$gcc/bin" ldPath="$binutils/$crossConfig/bin" fi diff --git a/pkgs/build-support/gcc-cross-wrapper/default.nix b/pkgs/build-support/gcc-cross-wrapper/default.nix index 362e378273dd..ea5e5d0dd564 100644 --- a/pkgs/build-support/gcc-cross-wrapper/default.nix +++ b/pkgs/build-support/gcc-cross-wrapper/default.nix @@ -13,6 +13,20 @@ assert nativeTools -> nativePrefix != ""; assert !nativeTools -> gcc != null && binutils != null; assert !noLibc -> (!nativeLibc -> libc != null); +let + chosenName = if name == "" then gcc.name else name; + gccLibs = stdenv.mkDerivation { + name = chosenName + "-libs"; + phases = [ "installPhase" ]; + installPhase = '' + ensureDir $out + cp -Rd ${gcc}/lib $out/lib + if [ -d ${gcc}/lib64 ]; then + cp -Rd ${gcc}/lib64 $out/lib64 + fi + ''; + }; +in stdenv.mkDerivation { builder = ./builder.sh; setupHook = ./setup-hook.sh; @@ -22,7 +36,8 @@ stdenv.mkDerivation { addFlags = ./add-flags; inherit nativeTools nativeLibc nativePrefix gcc libc binutils; crossConfig = if (cross != null) then cross.config else null; - name = if name == "" then gcc.name else name; + gccLibs = if gcc != null then gccLibs else null; + name = chosenName; langC = if nativeTools then true else gcc.langC; langCC = if nativeTools then true else gcc.langCC; langF77 = if nativeTools then false else gcc ? langFortran; diff --git a/pkgs/development/libraries/glibc-2.11/default.nix b/pkgs/development/libraries/glibc-2.11/default.nix index 7063008fe913..31a8ef13a4fe 100644 --- a/pkgs/development/libraries/glibc-2.11/default.nix +++ b/pkgs/development/libraries/glibc-2.11/default.nix @@ -74,5 +74,10 @@ in dontStrip=1 ''; - } + + # To avoid a dependency on the build system 'bash'. + preFixup = '' + rm $out/bin/{ldd,tzselect,catchsegv,xtrace} + ''; + } else {})) From 4137ceaf80cdd28bb4d6e06b8ef9c44836ea8859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:50:10 +0000 Subject: [PATCH 085/282] Updated nanonote 2.6.35 kernel (fixed a keyboard matrix problem) svn path=/nixpkgs/branches/stdenv-updates/; revision=23041 --- pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix index 7e94ff4ba3c7..ac0b000f9cd4 100644 --- a/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix +++ b/pkgs/os-specific/linux/kernel/linux-nanonote-jz-2.6.35.nix @@ -203,8 +203,8 @@ import ./generic.nix ( srcPatch = fetchsvn { url = "svn://svn.openwrt.org/openwrt/trunk/target/linux"; - rev = 22513; - sha256 = "0b7wzgqnbq8sq32z9ik08n1b7fnc9v9d91zwvb6qz7vj3dlrxw3g"; + rev = 22530; + sha256 = "1j5ls7dg0pvdxh6isczmq4r0lkwhz1c1s46mvdkcjsm3qq633fpc"; }; preConfigure = '' From d75e47a383fae75d5b673615859e94f26e92aeea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:52:21 +0000 Subject: [PATCH 086/282] Fix the cross-building of packages mentioned in stdenvLinux.overrides. svn path=/nixpkgs/branches/stdenv-updates/; revision=23043 --- pkgs/top-level/all-packages.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8e93b690f339..657bb9a4b3cb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -93,8 +93,12 @@ let # (un-overriden) set of packages, allowing packageOverrides # attributes to refer to the original attributes (e.g. "foo = # ... pkgs.foo ..."). + # We don't want stdenv overrides in the case of cross-building, or + # otherwise the basic overrided packages will not be built with the + # crossStdenv adapter. overrides = (getConfig ["packageOverrides"] (pkgs: {})) pkgsOrig // - (if pkgsOrig.stdenv ? overrides then pkgsOrig.stdenv.overrides else { }); + (if (pkgsOrig.stdenv ? overrides && crossSystem == null) + then pkgsOrig.stdenv.overrides else { }); pkgsOrig = pkgsFun {}; # the un-overriden packages, passed to packageOverrides pkgs = pkgsFun overrides; # the overriden, final packages From b724fa3d447ecbe4b1fa6e327d8d529a33af69bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:53:00 +0000 Subject: [PATCH 087/282] Adding support for the /lib32 (there was /lib and /lib64 only), for the n32 ABI in mips I'm making the longsoon2f system for. svn path=/nixpkgs/branches/stdenv-updates/; revision=23044 --- pkgs/stdenv/generic/setup.sh | 3 +++ pkgs/stdenv/linux/default.nix | 1 + 2 files changed, 4 insertions(+) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 948b6ca3ad66..ba06666ca898 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -231,6 +231,9 @@ if test "$NIX_NO_SELF_RPATH" != "1"; then if test -n "$NIX_LIB64_IN_SELF_RPATH"; then export NIX_LDFLAGS="-rpath $out/lib64 $NIX_LDFLAGS" fi + if test -n "$NIX_LIB32_IN_SELF_RPATH"; then + export NIX_LDFLAGS="-rpath $out/lib32 $NIX_LDFLAGS" + fi fi diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index bfeb01a7cd72..04009fd5bee6 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -23,6 +23,7 @@ rec { export NIX_ENFORCE_PURITY=1 havePatchELF=1 ${if system == "x86_64-linux" then "NIX_LIB64_IN_SELF_RPATH=1" else ""} + ${if system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "NIX_LIB32_IN_SELF_RPATH=1" else ""} ''; From 2595ec4f4bb283a4cf72c96ac998f0fe59b13cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 8 Aug 2010 18:53:38 +0000 Subject: [PATCH 088/282] Disable DRI on xorg for the fuloong2f, as mesa does not include 'dri.pc' in that platform, and the autodetection of DRI by the xorgserver configure script looks like it needs an explicit "--disable-dri" to go on. svn path=/nixpkgs/branches/stdenv-updates/; revision=23045 --- pkgs/servers/x11/xorg/overrides.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index 87d4924a363c..b245c21057af 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -149,6 +149,8 @@ in rm -fr $out/share/X11/xkb/compiled ln -s /var/tmp $out/share/X11/xkb/compiled ''; + configureFlagsArray = args.stdenv.lib.optionals + (args.stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") [ "--disable-dri" ]; }; libSM = attrs: attrs // args.stdenv.lib.optionalAttrs (args.stdenv.system == "i686-darwin") { From b45e219eec0a9337ab59fbfa0cc12df5c98354f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 9 Aug 2010 07:42:43 +0000 Subject: [PATCH 089/282] Making mesa build the DRI driver, required by the xorg server on the Fuloong2F svn path=/nixpkgs/branches/stdenv-updates/; revision=23051 --- pkgs/development/libraries/mesa/default.nix | 2 ++ pkgs/servers/x11/xorg/overrides.nix | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index d878135923d8..1060ae8f7380 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -14,6 +14,8 @@ stdenv.mkDerivation { configureFlags = "--disable-gallium" + + (if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then + " --with-dri-drivers=swrast --with-driver=dri" else "") + (if stdenv.isDarwin then " --disable-egl" else ""); buildInputs = diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index b245c21057af..87d4924a363c 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -149,8 +149,6 @@ in rm -fr $out/share/X11/xkb/compiled ln -s /var/tmp $out/share/X11/xkb/compiled ''; - configureFlagsArray = args.stdenv.lib.optionals - (args.stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") [ "--disable-dri" ]; }; libSM = attrs: attrs // args.stdenv.lib.optionalAttrs (args.stdenv.system == "i686-darwin") { From d5097ad3d313dfcad73fe303618dd6d66dc8792e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 9 Aug 2010 21:37:31 +0000 Subject: [PATCH 090/282] Breaking dependencies on the cross-built gcc through the gcc-cross-wrapper. svn path=/nixpkgs/branches/stdenv-updates/; revision=23073 --- pkgs/build-support/gcc-cross-wrapper/builder.sh | 16 ++++++++++------ pkgs/build-support/gcc-cross-wrapper/default.nix | 11 +++++++---- .../gcc-cross-wrapper/gcc-wrapper.sh | 16 ++++++++++------ .../gcc-cross-wrapper/setup-hook.sh | 6 +++++- pkgs/development/libraries/openssl/default.nix | 6 ++++++ 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/pkgs/build-support/gcc-cross-wrapper/builder.sh b/pkgs/build-support/gcc-cross-wrapper/builder.sh index ef46cc110f2e..85d5f19fbc91 100644 --- a/pkgs/build-support/gcc-cross-wrapper/builder.sh +++ b/pkgs/build-support/gcc-cross-wrapper/builder.sh @@ -8,13 +8,20 @@ mkdir $out/nix-support cflagsCompile="-B$out/bin/" if test -z "$nativeLibc"; then - cflagsCompile="$cflagsCompile -B$libc/lib/ -isystem $libc/include" + cflagsCompile="$cflagsCompile -B$gccLibs/lib -B$libc/lib/ -isystem $libc/include" ldflags="$ldflags -L$libc/lib" # Get the proper dynamic linker for glibc and uclibc. dlinker=`eval 'echo $libc/lib/ld*.so.?'` - if [ -n "$dlinker" ]; then + if [ -n "$dynamicLinker" ]; then ldflagsBefore="-dynamic-linker $dlinker" fi + # This trick is to avoid dependencies on the cross-toolchain gcc + # for libgcc, libstdc++, ... + # -L is for libtool's .la files, and -rpath for the usual fixupPhase + # shrinking rpaths. + if [ -n "$gccLibs" ]; then + ldflagsBefore="$ldflagsBefore -rpath $gccLibs/lib" + fi # The same as above, but put into files, useful for the gcc builder. dynamicLinker="$libc/lib/$dynamicLinker" @@ -31,16 +38,13 @@ if test -z "$nativeLibc"; then # The dynamic linker is passed in `ldflagsBefore' to allow # explicit overrides of the dynamic linker by callers to gcc/ld # (the *last* value counts, so ours should come first). - echo "-dynamic-linker $dynamicLinker" > $out/nix-support/libc-ldflags-before + echo "$ldflagsBefore" > $out/nix-support/libc-ldflags-before fi if test -n "$nativeTools"; then gccPath="$nativePrefix/bin" ldPath="$nativePrefix/bin" else - if test -n "$gccLibs"; then - ldflags="$ldflags -L$gccLibs/lib -L$gccLibs/lib64" - fi ldflags="$ldflags -L$gcc/lib -L$gcc/lib64" gccPath="$gcc/bin" ldPath="$binutils/$crossConfig/bin" diff --git a/pkgs/build-support/gcc-cross-wrapper/default.nix b/pkgs/build-support/gcc-cross-wrapper/default.nix index ea5e5d0dd564..8bf820e3d341 100644 --- a/pkgs/build-support/gcc-cross-wrapper/default.nix +++ b/pkgs/build-support/gcc-cross-wrapper/default.nix @@ -19,11 +19,14 @@ let name = chosenName + "-libs"; phases = [ "installPhase" ]; installPhase = '' + echo $out ensureDir $out - cp -Rd ${gcc}/lib $out/lib - if [ -d ${gcc}/lib64 ]; then - cp -Rd ${gcc}/lib64 $out/lib64 - fi + cp -Rd ${gcc}/${cross.config}/lib $out/lib + chmod -R +w $out/lib + for a in $out/lib/*.la; do + sed -i -e s,${gcc}/${cross.config}/lib,$out/lib,g $a + done + rm -f $out/lib/*.py ''; }; in diff --git a/pkgs/build-support/gcc-cross-wrapper/gcc-wrapper.sh b/pkgs/build-support/gcc-cross-wrapper/gcc-wrapper.sh index 491de8f7f984..98baafb4878d 100644 --- a/pkgs/build-support/gcc-cross-wrapper/gcc-wrapper.sh +++ b/pkgs/build-support/gcc-cross-wrapper/gcc-wrapper.sh @@ -75,14 +75,18 @@ if test "$dontLink" != "1"; then # Add the flags that should be passed to the linker (and prevent # `ld-wrapper' from adding NIX_CROSS_LDFLAGS again). for i in $NIX_CROSS_LDFLAGS_BEFORE; do - extraBefore=(${extraBefore[@]} "-Wl,$i") + if test "${i:0:3}" = "-L/"; then + extraBefore=(${extraBefore[@]} "$i") + else + extraBefore=(${extraBefore[@]} "-Wl,$i") + fi done for i in $NIX_CROSS_LDFLAGS; do - if test "${i:0:3}" = "-L/"; then - extraAfter=(${extraAfter[@]} "$i") - else - extraAfter=(${extraAfter[@]} "-Wl,$i") - fi + if test "${i:0:3}" = "-L/"; then + extraAfter=(${extraAfter[@]} "$i") + else + extraAfter=(${extraAfter[@]} "-Wl,$i") + fi done export NIX_CROSS_LDFLAGS_SET=1 diff --git a/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh b/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh index 0c98062a2db1..96498c0e2469 100644 --- a/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh +++ b/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh @@ -1,6 +1,8 @@ NIX_CROSS_CFLAGS_COMPILE="" NIX_CROSS_LDFLAGS="" +set -x + crossAddCVars () { if test -d $1/include; then export NIX_CROSS_CFLAGS_COMPILE="$NIX_CROSS_CFLAGS_COMPILE -I$1/include" @@ -26,7 +28,7 @@ crossStripDirs() { dirs=${dirsNew} if test -n "${dirs}"; then - header "stripping (with flags $stripFlags) in $dirs" + header "cross stripping (with flags $stripFlags) in $dirs" # libc_nonshared.a should never be stripped, or builds will break. find $dirs -type f -print0 | xargs -0 ${xargsFlags:--r} $crossConfig-strip $stripFlags || true stopNest @@ -80,3 +82,5 @@ if test "$NIX_NO_SELF_RPATH" != "1"; then export NIX_CROSS_LDFLAGS="-rpath $out/lib64 -rpath-link $out/lib $NIX_CROSS_LDFLAGS" fi fi + +set +x diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix index e483af7206e5..d19ca77a1895 100644 --- a/pkgs/development/libraries/openssl/default.nix +++ b/pkgs/development/libraries/openssl/default.nix @@ -30,6 +30,12 @@ stdenv.mkDerivation rec { # It's configure does not like --build or --host export configureFlags="--libdir=lib --cross-compile-prefix=${stdenv.cross.config}- shared ${opensslCrossSystem}" ''; + + # Openssl installs readonly files, which otherwise we can't strip. + # This could at some stdenv hash change be put out of crossAttrs, too + postInstall = '' + chmod -R +w $out + ''; configureScript = "./Configure"; }; From e97ad11560acb6838be4fd4dccec5e1157320ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:07:22 +0000 Subject: [PATCH 091/282] Making cscope cross build (avoiding emacs in it) svn path=/nixpkgs/branches/stdenv-updates/; revision=23127 --- pkgs/development/tools/misc/cscope/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/development/tools/misc/cscope/default.nix b/pkgs/development/tools/misc/cscope/default.nix index 1c6d1dacc7fd..2a9e77bd05bc 100644 --- a/pkgs/development/tools/misc/cscope/default.nix +++ b/pkgs/development/tools/misc/cscope/default.nix @@ -17,7 +17,8 @@ stdenv.mkDerivation rec { configureFlags = "--with-ncurses=${ncurses}"; - buildInputs = [ ncurses pkgconfig emacs ]; + buildInputs = [ ncurses emacs ]; + buildNativeInputs = [ pkgconfig ]; postInstall = '' # Install Emacs mode. @@ -31,6 +32,11 @@ stdenv.mkDerivation rec { cp xcscope.el{,c} "$out/share/emacs/site-lisp" ''; + crossAttrs = { + postInstall = ""; + propagatedBuildInputs = [ ncurses.hostDrv ]; + }; + meta = { description = "Cscope, a developer's tool for browsing source code"; From 3f05ed581fb203987fb31733422e0490cedef5ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:08:29 +0000 Subject: [PATCH 092/282] Making fossil cross-build (it works for the nanonote). Removing some perl scripts from the openssl cross-built derivation, to avoid depending on it. svn path=/nixpkgs/branches/stdenv-updates/; revision=23128 --- pkgs/applications/version-management/fossil/default.nix | 4 ++++ pkgs/development/libraries/openssl/default.nix | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/fossil/default.nix b/pkgs/applications/version-management/fossil/default.nix index b9f6ec941b4a..e9334db2ee2f 100644 --- a/pkgs/applications/version-management/fossil/default.nix +++ b/pkgs/applications/version-management/fossil/default.nix @@ -19,6 +19,10 @@ stdenv.mkDerivation { INSTALLDIR=$out/bin make install ''; + crossAttrs = { + makeFlagsArray = [ "TCC=${stdenv.cross.config}-gcc" ]; + }; + meta = { description = "Simple, high-reliability, distributed software configuration management."; longDescription = '' diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix index d19ca77a1895..6b1efd7bc03d 100644 --- a/pkgs/development/libraries/openssl/default.nix +++ b/pkgs/development/libraries/openssl/default.nix @@ -31,10 +31,13 @@ stdenv.mkDerivation rec { export configureFlags="--libdir=lib --cross-compile-prefix=${stdenv.cross.config}- shared ${opensslCrossSystem}" ''; - # Openssl installs readonly files, which otherwise we can't strip. - # This could at some stdenv hash change be put out of crossAttrs, too 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"; }; From 3ece765eeda5ba05a5dea6813732adecdf1e0721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:09:17 +0000 Subject: [PATCH 093/282] glib: step towards cross-building it, set perl as native input. svn path=/nixpkgs/branches/stdenv-updates/; revision=23129 --- pkgs/development/libraries/glib/2.24.x.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/glib/2.24.x.nix b/pkgs/development/libraries/glib/2.24.x.nix index 6fdb18e9b4dc..0cdff4254b0f 100644 --- a/pkgs/development/libraries/glib/2.24.x.nix +++ b/pkgs/development/libraries/glib/2.24.x.nix @@ -8,7 +8,8 @@ stdenv.mkDerivation rec { sha256 = "014c3da960bf17117371075c16495f05f36501db990851ceea658f15d2ea6d04"; }; - buildInputs = [ pkgconfig gettext perl libiconv ]; + buildInputs = [ pkgconfig gettext libiconv ]; + buildNativeInputs = [ perl ]; propagatedBuildInputs = [ zlib ]; From 039b660b5b712c7197c24ae1da3e3e417c27e42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:11:12 +0000 Subject: [PATCH 094/282] Making lynx, yacas and alsa-lib crossbuild svn path=/nixpkgs/branches/stdenv-updates/; revision=23130 --- .../networking/browsers/lynx/default.nix | 1 + .../science/math/yacas/default.nix | 21 ++++++++++++++++++- pkgs/os-specific/linux/alsa-lib/default.nix | 6 ++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/networking/browsers/lynx/default.nix b/pkgs/applications/networking/browsers/lynx/default.nix index c9da94258c83..97d28dd7e2f5 100644 --- a/pkgs/applications/networking/browsers/lynx/default.nix +++ b/pkgs/applications/networking/browsers/lynx/default.nix @@ -15,6 +15,7 @@ stdenv.mkDerivation { configureFlags = if sslSupport then "--with-ssl" else ""; buildInputs = [ ncurses ] ++ stdenv.lib.optional sslSupport openssl; + buildNativeInputs = [ ncurses ]; meta = { homepage = http://lynx.isc.org/; diff --git a/pkgs/applications/science/math/yacas/default.nix b/pkgs/applications/science/math/yacas/default.nix index 148e95acee06..7b97e1a82c00 100644 --- a/pkgs/applications/science/math/yacas/default.nix +++ b/pkgs/applications/science/math/yacas/default.nix @@ -9,10 +9,29 @@ stdenv.mkDerivation rec { }; # Perl is only for the documentation - buildInputs = [ perl ]; + buildNativeInputs = [ perl ]; patches = [ ./gcc43.patch ]; + crossAttrs = { + # Trick to get host-built programs needed for the cross-build. + # If yacas had proper makefiles, this would not be needed. + preConfigure = '' + ./configure + pushd src + make mkfastprimes + cp mkfastprimes ../.. + popd + pushd manmake + make manripper removeduplicates + cp manripper removeduplicates ../.. + popd + ''; + preBuild = '' + cp ../mkfastprimes ../manripper ../removeduplicates src + ''; + }; + meta = { description = "Easy to use, general purpose Computer Algebra System"; homepage = http://yacas.sourceforge.net/; diff --git a/pkgs/os-specific/linux/alsa-lib/default.nix b/pkgs/os-specific/linux/alsa-lib/default.nix index 727db1c9642b..aaa714d8d590 100644 --- a/pkgs/os-specific/linux/alsa-lib/default.nix +++ b/pkgs/os-specific/linux/alsa-lib/default.nix @@ -14,6 +14,12 @@ stdenv.mkDerivation rec { postPatch = '' sed -i -e 's|//int snd_pcm_mixer_element(snd_pcm_t \*pcm, snd_mixer_t \*mixer, snd_mixer_elem_t \*\*elem);|/\*int snd_pcm_mixer_element(snd_pcm_t \*pcm, snd_mixer_t \*mixer, snd_mixer_elem_t \*\*elem);\*/|' include/pcm.h ''; + + crossAttrs = { + patchPhase = '' + sed -i s/extern/static/g include/iatomic.h + ''; + }; meta = { description = "ALSA, the Advanced Linux Sound Architecture libraries"; From 51f6aec764ffb473508dcc8095ce68c20fdab48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:14:25 +0000 Subject: [PATCH 095/282] Fixing the gcc-cross-wrapper; it failed after some changes related to breaking dependencies with it. (I should never link ld.so with a NIX_LDFLAGS -rpath forced) I made vim, scummvm cross-build. I added prboom (that cross-builds). Mplayer and elinks don't cross-build fine still, but are on the way. The mplayer fails to build in a weird way; nix does not show either a gcc error message or even the 'make' error message. svn path=/nixpkgs/branches/stdenv-updates/; revision=23131 --- pkgs/applications/editors/vim/default.nix | 15 +++++++++ .../networking/browsers/elinks/default.nix | 10 ++++++ pkgs/applications/video/MPlayer/default.nix | 31 ++++++++++++++----- .../gcc-cross-wrapper/builder.sh | 25 ++++++--------- .../gcc-cross-wrapper/setup-hook.sh | 8 ++--- pkgs/development/libraries/SDL/default.nix | 25 ++++++++++----- pkgs/games/prboom/default.nix | 20 ++++++++++++ pkgs/games/scummvm/default.nix | 12 +++++++ pkgs/top-level/all-packages.nix | 5 ++- 9 files changed, 115 insertions(+), 36 deletions(-) create mode 100644 pkgs/games/prboom/default.nix diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index 6f6a592a02d8..65811a3dc8ff 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -11,6 +11,21 @@ stdenv.mkDerivation rec { buildInputs = [ ncurses ]; postInstall = "ln -s $out/bin/vim $out/bin/vi"; + + crossAttrs = { + configureFlags = [ + "vim_cv_toupper_broken=no" + "--with-tlib=ncurses" + "vim_cv_terminfo=yes" + "vim_cv_tty_group=tty" + "vim_cv_tty_mode=0660" + "vim_cv_getcwd_broken=no" + "vim_cv_stat_ignores_slash=yes" + "ac_cv_sizeof_int=4" + "vim_cv_memmove_handles_overlap=yes" + "STRIP=${stdenv.cross.config}-strip" + ]; + }; meta = { description = "The most popular clone of the VI editor"; diff --git a/pkgs/applications/networking/browsers/elinks/default.nix b/pkgs/applications/networking/browsers/elinks/default.nix index 9fb59fcdb86d..e06bfe538c00 100644 --- a/pkgs/applications/networking/browsers/elinks/default.nix +++ b/pkgs/applications/networking/browsers/elinks/default.nix @@ -18,6 +18,16 @@ stdenv.mkDerivation rec { --enable-nntp --with-openssl=${openssl} ''; + crossAttrs = { + propagatedBuildInputs = [ ncurses.hostDrv zlib.hostDrv openssl.hostDrv ]; + configureFlags = '' + --enable-finger --enable-html-highlight + --enable-gopher --enable-cgi --enable-bittorrent --enable-nntp + --with-openssl=${openssl.hostDrv} + --with-bzip2=${bzip2.hostDrv} + ''; + }; + meta = { description = "Full-featured text-mode web browser"; homepage = http://elinks.or.cz; diff --git a/pkgs/applications/video/MPlayer/default.nix b/pkgs/applications/video/MPlayer/default.nix index e2c25c3360ce..e65ba86200be 100644 --- a/pkgs/applications/video/MPlayer/default.nix +++ b/pkgs/applications/video/MPlayer/default.nix @@ -1,10 +1,11 @@ { alsaSupport ? false, xvSupport ? true, theoraSupport ? false, cacaSupport ? false , xineramaSupport ? false, randrSupport ? false, dvdnavSupport ? true , stdenv, fetchurl, x11, freetype, fontconfig, zlib -, alsa ? null, libX11, libXv ? null, libtheora ? null, libcaca ? null +, alsa ? null, libXv ? null, libtheora ? null, libcaca ? null , libXinerama ? null, libXrandr ? null, libdvdnav ? null , cdparanoia ? null, cddaSupport ? true , amrnb ? null, amrwb ? null, amrSupport ? false +, x11Support ? true, libX11 ? null , jackaudioSupport ? false, jackaudio ? null , x264Support ? false, x264 ? null , xvidSupport ? false, xvidcore ? null @@ -13,11 +14,12 @@ }: assert alsaSupport -> alsa != null; -assert xvSupport -> libXv != null; +assert x11Support -> libX11 != null; +assert xvSupport -> (libXv != null && x11Support); assert theoraSupport -> libtheora != null; assert cacaSupport -> libcaca != null; -assert xineramaSupport -> libXinerama != null; -assert randrSupport -> libXrandr != null; +assert xineramaSupport -> (libXinerama != null && x11Support); +assert randrSupport -> (libXrandr != null && x11Support); assert dvdnavSupport -> libdvdnav != null; assert cddaSupport -> cdparanoia != null; assert jackaudioSupport -> jackaudio != null; @@ -54,7 +56,8 @@ stdenv.mkDerivation { }; buildInputs = - [ x11 libXv freetype zlib mesa pkgconfig yasm ] + [ freetype zlib pkgconfig ] + ++ stdenv.lib.optional x11Support [ libX11 mesa ] ++ stdenv.lib.optional alsaSupport alsa ++ stdenv.lib.optional xvSupport libXv ++ stdenv.lib.optional theoraSupport libtheora @@ -69,18 +72,32 @@ stdenv.mkDerivation { ++ stdenv.lib.optional xvidSupport xvidcore ++ stdenv.lib.optional lameSupport lame; + buildNativeInputs = [ yasm ]; + configureFlags = '' ${if cacaSupport then "--enable-caca" else "--disable-caca"} ${if dvdnavSupport then "--enable-dvdnav --enable-dvdread --disable-dvdread-internal" else ""} ${if x264Support then "--enable-x264 --extra-libs=-lx264" else ""} --codecsdir=${codecs} --enable-runtime-cpudetection - --enable-x11 + ${if x11Support then "--enable-x11" else ""} --disable-xanim --disable-ivtv ''; - NIX_LDFLAGS = "-lX11 -lXext"; + NIX_LDFLAGS = if x11Support then "-lX11 -lXext" else ""; + + crossAttrs = { + preConfigure = '' + configureFlags="`echo $configureFlags | + sed -e 's/--build[^ ]\+//' \ + -e 's/--host[^ ]\+//' \ + -e 's/--codecsdir[^ ]\+//' \ + -e 's/--enable-runtime-cpudetection//' `" + configureFlags="$configureFlags --target=${stdenv.cross.arch}-linux + --cc=$crossConfig-gcc --as=$crossConfig-as" + ''; + }; meta = { description = "A movie player that supports many video formats"; diff --git a/pkgs/build-support/gcc-cross-wrapper/builder.sh b/pkgs/build-support/gcc-cross-wrapper/builder.sh index 85d5f19fbc91..fae37342940f 100644 --- a/pkgs/build-support/gcc-cross-wrapper/builder.sh +++ b/pkgs/build-support/gcc-cross-wrapper/builder.sh @@ -12,23 +12,18 @@ if test -z "$nativeLibc"; then ldflags="$ldflags -L$libc/lib" # Get the proper dynamic linker for glibc and uclibc. dlinker=`eval 'echo $libc/lib/ld*.so.?'` - if [ -n "$dynamicLinker" ]; then + if [ -n "$dlinker" ]; then ldflagsBefore="-dynamic-linker $dlinker" - fi - # This trick is to avoid dependencies on the cross-toolchain gcc - # for libgcc, libstdc++, ... - # -L is for libtool's .la files, and -rpath for the usual fixupPhase - # shrinking rpaths. - if [ -n "$gccLibs" ]; then - ldflagsBefore="$ldflagsBefore -rpath $gccLibs/lib" - fi - # The same as above, but put into files, useful for the gcc builder. - dynamicLinker="$libc/lib/$dynamicLinker" - echo $dynamicLinker > $out/nix-support/dynamic-linker - - if test -e $libc/lib/32/ld-linux.so.2; then - echo $libc/lib/32/ld-linux.so.2 > $out/nix-support/dynamic-linker-m32 + # The same as above, but put into files, useful for the gcc builder. + echo $dlinker > $out/nix-support/dynamic-linker + # This trick is to avoid dependencies on the cross-toolchain gcc + # for libgcc, libstdc++, ... + # -L is for libtool's .la files, and -rpath for the usual fixupPhase + # shrinking rpaths. + if [ -n "$gccLibs" ]; then + ldflagsBefore="$ldflagsBefore -rpath $gccLibs/lib" + fi fi echo "$cflagsCompile -B$libc/lib/ -idirafter $libc/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags diff --git a/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh b/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh index 96498c0e2469..a7be09283ee0 100644 --- a/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh +++ b/pkgs/build-support/gcc-cross-wrapper/setup-hook.sh @@ -1,8 +1,6 @@ NIX_CROSS_CFLAGS_COMPILE="" NIX_CROSS_LDFLAGS="" -set -x - crossAddCVars () { if test -d $1/include; then export NIX_CROSS_CFLAGS_COMPILE="$NIX_CROSS_CFLAGS_COMPILE -I$1/include" @@ -70,7 +68,9 @@ if test -n "@libc@"; then crossAddCVars @libc@ fi -configureFlags="$configureFlags --build=$system --host=$crossConfig" +if test "$dontSetConfigureCross" != "1"; then + configureFlags="$configureFlags --build=$system --host=$crossConfig" +fi # Disabling the tests when cross compiling, as usually the tests are meant for # native compilations. doCheck="" @@ -82,5 +82,3 @@ if test "$NIX_NO_SELF_RPATH" != "1"; then export NIX_CROSS_LDFLAGS="-rpath $out/lib64 -rpath-link $out/lib $NIX_CROSS_LDFLAGS" fi fi - -set +x diff --git a/pkgs/development/libraries/SDL/default.nix b/pkgs/development/libraries/SDL/default.nix index ca1b7086e393..7205e0fa7ea8 100644 --- a/pkgs/development/libraries/SDL/default.nix +++ b/pkgs/development/libraries/SDL/default.nix @@ -1,6 +1,7 @@ -{ stdenv, fetchurl, x11, libXrandr, pkgconfig +{ stdenv, fetchurl, pkgconfig , openglSupport ? false, mesa ? null , alsaSupport ? true, alsaLib ? null +, x11Support ? true, x11 ? null, libXrandr ? null , pulseaudioSupport ? true, pulseaudio ? null }: @@ -8,10 +9,18 @@ # PulseAudio. assert alsaSupport || pulseaudioSupport; -assert openglSupport -> mesa != null; +assert openglSupport -> (mesa != null && x11Support); +assert x11Support -> (x11 != null && libXrandr != null); assert alsaSupport -> alsaLib != null; assert pulseaudioSupport -> pulseaudio != null; +let + configureFlagsFun = attrs: '' + --disable-oss + --disable-x11-shared --disable-alsa-shared --enable-rpath --disable-pulseaudio-shared + ${if alsaSupport then "--with-alsa-prefix=${attrs.alsaLib}/lib" else ""} + ''; +in stdenv.mkDerivation rec { name = "SDL-1.2.14"; @@ -21,7 +30,7 @@ stdenv.mkDerivation rec { }; # Since `libpulse*.la' contain `-lgdbm', PulseAudio must be propagated. - propagatedBuildInputs = [ x11 libXrandr ] ++ + propagatedBuildInputs = stdenv.lib.optionals x11Support [ x11 libXrandr ] ++ stdenv.lib.optional pulseaudioSupport pulseaudio; buildInputs = [ pkgconfig ] ++ @@ -31,11 +40,11 @@ stdenv.mkDerivation rec { # XXX: By default, SDL wants to dlopen() PulseAudio, in which case # we must arrange to add it to its RPATH; however, `patchelf' seems # to fail at doing this, hence `--disable-pulseaudio-shared'. - configureFlags = '' - --disable-oss - --disable-x11-shared --disable-alsa-shared --enable-rpath --disable-pulseaudio-shared - ${if alsaSupport then "--with-alsa-prefix=${alsaLib}/lib" else ""} - ''; + configureFlags = configureFlagsFun { inherit alsaLib; }; + + crossAttrs = { + configureFlags = configureFlagsFun { alsaLib = alsaLib.hostDrv; }; + }; passthru = {inherit openglSupport;}; diff --git a/pkgs/games/prboom/default.nix b/pkgs/games/prboom/default.nix new file mode 100644 index 000000000000..f66e2295a22c --- /dev/null +++ b/pkgs/games/prboom/default.nix @@ -0,0 +1,20 @@ +{stdenv, fetchurl, SDL, SDL_mixer, SDL_net, mesa}: + +stdenv.mkDerivation { + name = "prboom-2.5.0"; + src = fetchurl { + url = mirror://sourceforge/prboom/prboom-2.5.0.tar.gz; + sha256 = "1bjb04q8dk232956k30qlpq6q0hxb904yh1nflr87jcc1x3iqv12"; + }; + + buildInputs = [ SDL SDL_mixer SDL_net mesa ]; + crossAttrs = { + propagatedBuildInputs = [ SDL.hostDrv SDL_mixer.hostDrv SDL_net.hostDrv ]; + configureFlags = "--disable-gl --disable-cpu-opt --without-x --disable-sdltest + ac_cv_type_uid_t=yes ac_cv_type_gid_t=yes"; + + postInstall = '' + mv $out/games/ $out/bin + ''; + }; +} diff --git a/pkgs/games/scummvm/default.nix b/pkgs/games/scummvm/default.nix index d6912d5c3c0c..ad03906888c0 100644 --- a/pkgs/games/scummvm/default.nix +++ b/pkgs/games/scummvm/default.nix @@ -10,6 +10,18 @@ stdenv.mkDerivation { buildInputs = [SDL zlib mpeg2dec]; + crossAttrs = { + preConfigure = '' + # Remove the --build flag set by the gcc cross wrapper setup + # hook + export configureFlags="--host=${stdenv.cross.config}" + ''; + postConfigure = '' + # They use 'install -s', that calls the native strip instead of the cross + sed -i 's/-c -s/-c/' ports.mk; + ''; + }; + meta = { description = "Program to run certain classic graphical point-and-click adventure games (such as Monkey Island)"; homepage = http://www.scummvm.org/; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8c50626aebb..54f31dbb028e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3676,8 +3676,9 @@ let schroedinger = callPackage ../development/libraries/schroedinger { }; SDL = callPackage ../development/libraries/SDL { - openglSupport = mesaSupported; + openglSupport = false; #mesaSupported; alsaSupport = true; + x11Support = false; pulseaudioSupport = false; # better go through ALSA }; @@ -6451,6 +6452,8 @@ let inherit (gtkLibs) gtk /*glib gtkmm*/; }; + prboom = callPackage ../games/prboom { }; + quake3demo = callPackage ../games/quake3/wrapper { name = "quake3-demo-${quake3game.name}"; description = "Demo of Quake 3 Arena, a classic first-person shooter"; From b368b4b199aa81207f9804aa0783d9a03e0356f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 11 Aug 2010 20:16:09 +0000 Subject: [PATCH 096/282] Making more packages build on the Fuloong2f. I still can't build the kernel because it requires binutils yet to be released. svn path=/nixpkgs/branches/stdenv-updates/; revision=23132 --- pkgs/development/libraries/cyrus-sasl/default.nix | 3 ++- pkgs/development/libraries/libxcrypt/default.nix | 3 ++- pkgs/os-specific/linux/kbd/default.nix | 15 +++++++++------ pkgs/os-specific/linux/pam/default.nix | 4 +++- pkgs/top-level/all-packages.nix | 2 +- pkgs/top-level/platforms.nix | 2 +- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pkgs/development/libraries/cyrus-sasl/default.nix b/pkgs/development/libraries/cyrus-sasl/default.nix index c9d14fe8465c..0da4d5da3e76 100644 --- a/pkgs/development/libraries/cyrus-sasl/default.nix +++ b/pkgs/development/libraries/cyrus-sasl/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, openssl, db4, gettext} : +{ stdenv, fetchurl, openssl, db4, gettext, automake} : stdenv.mkDerivation { name = "cyrus-sasl-2.1.23"; @@ -9,6 +9,7 @@ stdenv.mkDerivation { }; preConfigure='' configureFlags="--with-openssl=${openssl} --with-plugindir=$out/lib/sasl2 --with-configdir=$out/lib/sasl2 --enable-login" + cp ${automake}/share/automake*/config.{sub,guess} config ''; buildInputs = [ openssl db4 gettext ]; patches = [ ./cyrus-sasl-2.1.22-bad-elif.patch ]; diff --git a/pkgs/development/libraries/libxcrypt/default.nix b/pkgs/development/libraries/libxcrypt/default.nix index 1ae5d3054f48..bc4272da3c8e 100644 --- a/pkgs/development/libraries/libxcrypt/default.nix +++ b/pkgs/development/libraries/libxcrypt/default.nix @@ -1,7 +1,8 @@ {stdenv, fetchurl}: -# I could not build it in armv5tel-linux +# I could not build it in armv5tel-linux or the fuloon2f assert stdenv.system != "armv5tel-linux"; +assert stdenv.system != "ict_loongson-2_v0.3_fpu_v0.1-linux"; stdenv.mkDerivation { name = "libxcrypt-3.0.2"; diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index 77d53adeb81b..c9618bf07e6d 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -1,19 +1,22 @@ { stdenv, fetchurl, bison, flex, autoconf, automake }: stdenv.mkDerivation rec { - name = "kbd-1.15.1"; + name = "kbd-1.15.2"; src = fetchurl { url = "ftp://ftp.altlinux.org/pub/people/legion/kbd/${name}.tar.gz"; - sha256 = "1klrxas8vjikx6jm6m2lcpmn88lhxb6p3whwgdwq9d9flf1qrf4i"; + sha256 = "19pb44m5m0mcgjkmgkjx4fn8j2m4xwqx4g7w2y1nlypg3qcjsq5k"; }; buildInputs = [ bison flex autoconf automake ]; - # We get a warning in armv5tel-linux, so we disable -Werror in it - patchPhase = if (stdenv.system == "armv5tel-linux") then '' - sed -i s/-Werror// src/Makefile.am - '' else ""; + # We get a warning in armv5tel-linux and the fuloong2f, + # so we disable -Werror in it + patchPhase = if (stdenv.system == "armv5tel-linux" || + stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") + then '' + sed -i s/-Werror// src/Makefile.am + '' else ""; # Grrr, kbd 1.15.1 doesn't include a configure script. preConfigure = "autoreconf"; diff --git a/pkgs/os-specific/linux/pam/default.nix b/pkgs/os-specific/linux/pam/default.nix index 59c2deab47f8..6b0526c35691 100644 --- a/pkgs/os-specific/linux/pam/default.nix +++ b/pkgs/os-specific/linux/pam/default.nix @@ -9,7 +9,9 @@ stdenv.mkDerivation { }; buildInputs = [ flex cracklib ] - ++ stdenv.lib.optional (stdenv.system != "armv5tel-linux") libxcrypt; + ++ stdenv.lib.optional + (stdenv.system != "armv5tel-linux" && stdenv.system != "ict_loongson-2_v0.3_fpu_v0.1-linux") + libxcrypt; preConfigure = '' configureFlags="$configureFlags --includedir=$out/include/security" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 54f31dbb028e..6b675c1f46b7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4120,7 +4120,7 @@ let ps = procps; /* !!! Linux only */ }; - mysql = mysql5; + mysql = mysql51; mysql_jdbc = callPackage ../servers/sql/mysql/jdbc { }; diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index f3f6acad757c..c3d9b1005f71 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -157,7 +157,7 @@ rec { name = "fuloong2f_n32"; kernelMajor = "2.6"; kernelHeadersBaseConfig = "fuloong2e_defconfig"; - kernelBaseConfig = "fuloong2f_defconfig"; + kernelBaseConfig = "lemote2f_defconfig"; kernelArch = "mips"; kernelAutoModules = false; kernelExtraConfig = From f8f53855d5bd53787ccb1f3360f48dc09e2c30a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 20 Aug 2010 13:29:57 +0000 Subject: [PATCH 097/282] Setting a snapshot of unreleased binutils for the fuloong2f svn path=/nixpkgs/branches/stdenv-updates/; revision=23273 --- .../tools/misc/binutils/snapshot.nix | 59 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 9 ++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/tools/misc/binutils/snapshot.nix diff --git a/pkgs/development/tools/misc/binutils/snapshot.nix b/pkgs/development/tools/misc/binutils/snapshot.nix new file mode 100644 index 000000000000..2563f998265a --- /dev/null +++ b/pkgs/development/tools/misc/binutils/snapshot.nix @@ -0,0 +1,59 @@ +{stdenv, fetchurl, noSysDirs, cross ? null}: + +let + basename = "binutils-2.20.51"; +in +stdenv.mkDerivation rec { + name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + + src = fetchurl { + url = "file:///root/binutils/${basename}.tar.bz2"; + sha256 = "1f0na8c31sccbipzk8xiyd7n7ydh5gg09kirbs28vcb2714cxws0"; + }; + + patches = [ + # Turn on --enable-new-dtags by default to make the linker set + # RUNPATH instead of RPATH on binaries. This is important because + # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. + ./new-dtags.patch + ]; + + inherit noSysDirs; + + preConfigure = '' + # Clear the default library search path. + if test "$noSysDirs" = "1"; then + echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt + fi + + # Use symlinks instead of hard links to save space ("strip" in the + # fixup phase strips each hard link separately). + for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in; do + substituteInPlace $i --replace 'ln ' 'ln -s ' + done + ''; + + configureFlags = "--disable-werror" # needed for dietlibc build + + stdenv.lib.optionalString (stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") + " --enable-fix-loongson2f-nop" + + stdenv.lib.optionalString (cross != null) " --target=${cross.config}"; + + meta = { + description = "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)"; + + longDescription = '' + The GNU Binutils are a collection of binary tools. The main + ones are `ld' (the GNU linker) and `as' (the GNU assembler). + They also include the BFD (Binary File Descriptor) library, + `gprof', `nm', `strip', etc. + ''; + + homepage = http://www.gnu.org/software/binutils/; + + license = "GPLv3+"; + + /* Give binutils a lower priority than gcc-wrapper to prevent a + collision due to the ld/as wrappers/symlinks in the latter. */ + priority = "10"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6b675c1f46b7..5677e875d4a3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2260,10 +2260,17 @@ let avrdude = callPackage ../development/tools/misc/avrdude { }; - binutils = callPackage ../development/tools/misc/binutils { + binutils_release = callPackage ../development/tools/misc/binutils { inherit noSysDirs; }; + binutils_snapshot = callPackage ../development/tools/misc/binutils/snapshot.nix { + inherit noSysDirs; + }; + + binutils = if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then binutils_snapshot + else binutils_release; + binutilsCross = forceBuildDrv (import ../development/tools/misc/binutils { inherit stdenv fetchurl; noSysDirs = true; From f7d0fcdaac7dc2d60a0d57e90632f20ba36242f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 20 Aug 2010 13:30:59 +0000 Subject: [PATCH 098/282] Making the kernel builder accept the 'vmlinux' kerneltarget. svn path=/nixpkgs/branches/stdenv-updates/; revision=23274 --- pkgs/os-specific/linux/kernel/builder.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh index 6055c8c4e5f2..bb030abaa6c9 100644 --- a/pkgs/os-specific/linux/kernel/builder.sh +++ b/pkgs/os-specific/linux/kernel/builder.sh @@ -68,7 +68,8 @@ installPhase() { if test "$arch" = um; then ensureDir $out/bin cp linux $out/bin - else + elif test "$kernelTarget" != "vmlinux"; then + # In any case we copy the 'vmlinux' ELF in the next lines cp arch/$archDir/boot/$kernelTarget $out fi From 8f5831d26c86c0dfdb692a15ffb4fc1942c80109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:16 +0000 Subject: [PATCH 099/282] gnupdate: Add quirk for GNU Make. * maintainers/scripts/gnu/gnupdate (nixpkgs->gnu-name)[quirks]: Add `gnumake'. svn path=/nixpkgs/branches/stdenv-updates/; revision=23276 --- maintainers/scripts/gnu/gnupdate | 1 + 1 file changed, 1 insertion(+) diff --git a/maintainers/scripts/gnu/gnupdate b/maintainers/scripts/gnu/gnupdate index b9f34a2750e3..3d14d0095a0a 100755 --- a/maintainers/scripts/gnu/gnupdate +++ b/maintainers/scripts/gnu/gnupdate @@ -583,6 +583,7 @@ exec ${GUILE-guile} -L "$PWD" -l "$0" \ ("ghostscript" . "gnu-ghostscript") ;; ../ghostscript/gnu-ghoscript-X.Y.tar.gz ("gnum4" . "m4") ("gnugrep" . "grep") + ("gnumake" . "make") ("gnused" . "sed") ("gnutar" . "tar") ("gnunet" . "GNUnet") ;; ftp.gnu.org/gnu/gnunet/GNUnet-x.y.tar.gz From 42db7628627d6f5838aeb583bb2ccebd910672d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:21 +0000 Subject: [PATCH 100/282] GNU Libtool 2.2.10. svn path=/nixpkgs/branches/stdenv-updates/; revision=23277 --- pkgs/development/tools/misc/libtool/libtool2.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/misc/libtool/libtool2.nix b/pkgs/development/tools/misc/libtool/libtool2.nix index c89fe7e280c3..42b518ae58e8 100644 --- a/pkgs/development/tools/misc/libtool/libtool2.nix +++ b/pkgs/development/tools/misc/libtool/libtool2.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, m4, perl, lzma }: stdenv.mkDerivation rec { - name = "libtool-2.2.6b"; + name = "libtool-2.2.10"; src = fetchurl { url = "mirror://gnu/libtool/${name}.tar.lzma"; - sha256 = "1bmpp31sfjl3nzj8psvnsqrrv4gwnqzii8dxpxr6djz508yavsv6"; + sha256 = "146lf1gas8gdpcjdn6ffad605n198ja0jqwxpixyglabczwpisba"; }; buildNativeInputs = [ lzma m4 perl ]; From e0fa7776d3889257b63b57b456d4535799e8fd6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:26 +0000 Subject: [PATCH 101/282] GNU gzip 1.4. svn path=/nixpkgs/branches/stdenv-updates/; revision=23278 --- pkgs/tools/compression/gzip/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix index 7a25b69c013d..57ad6eadf918 100644 --- a/pkgs/tools/compression/gzip/default.nix +++ b/pkgs/tools/compression/gzip/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation rec { - name = "gzip-1.3.13"; + name = "gzip-1.4"; src = fetchurl { url = "mirror://gnu/gzip/${name}.tar.gz"; - sha256 = "18vwa7x0b1sql9bs2d15n94fx3him1m6xpnwsfz52djjbjgzy1hx"; + sha256 = "1vhiyzls60fws48scw48wvwn8mpv1f4yhcsnafys239qvb9wyrni"; }; patches = [ ./getopt.patch ]; From 96da0397a9cecb4aa7297a1c5bd79709c75dfc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:31 +0000 Subject: [PATCH 102/282] GNU Coreutils 8.5. svn path=/nixpkgs/branches/stdenv-updates/; revision=23279 --- pkgs/tools/misc/coreutils/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index 2d1052e3a0f9..adf7b955410c 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -3,11 +3,11 @@ assert aclSupport -> acl != null; stdenv.mkDerivation rec { - name = "coreutils-8.4"; + name = "coreutils-8.5"; src = fetchurl { url = "mirror://gnu/coreutils/${name}.tar.gz"; - sha256 = "0zq11lykc7hfs9nsdnb8gqk354l82hswqj38607mvwj3b0zqvc4b"; + sha256 = "184cz98a9a6fw5db9hpy05srwxs3jqlvikqf2wxj1vfhqwm3w96x"; }; buildNativeInputs = [ perl ]; From 14e86a9812ce7a721cfc82c847ed2a82af0bf252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:36 +0000 Subject: [PATCH 103/282] GNU gawk 3.1.8. svn path=/nixpkgs/branches/stdenv-updates/; revision=23280 --- pkgs/tools/text/gawk/default.nix | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix index 839364ddb5bb..c4f37f922c74 100644 --- a/pkgs/tools/text/gawk/default.nix +++ b/pkgs/tools/text/gawk/default.nix @@ -1,19 +1,18 @@ -{stdenv, fetchurl}: +{ stdenv, fetchurl, libsigsegv }: stdenv.mkDerivation rec { - name = "gawk-3.1.7"; + name = "gawk-3.1.8"; src = fetchurl { url = "mirror://gnu/gawk/${name}.tar.bz2"; - sha256 = "0wfyiqc28cxb5wjbdph4y33h1fdf56nj6cm7as546niwjsw7cazi"; + sha256 = "1d0jfh319w4h8l1zzqv248916wrc2add1b1aghri31rj9hn7pg2x"; }; doCheck = true; - # The libsigsegv provided with gawk has failing tests: - # I did like in Fedora: - # http://rpmfind.net//linux/RPM/fedora/devel/i386/gawk-3.1.7-2.fc13.i686.html - configureFlags = "--disable-libsigsegv"; + buildInputs = [ libsigsegv ]; + + configureFlags = [ "--with-libsigsegv-prefix=${libsigsegv}" ]; meta = { homepage = http://www.gnu.org/software/gawk/; From 58b1dfe0fe9c67f02c3eb4d76f97b8a6db8de677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:41 +0000 Subject: [PATCH 104/282] GNU Make 3.82. svn path=/nixpkgs/branches/stdenv-updates/; revision=23281 --- .../tools/build-managers/gnumake/default.nix | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/pkgs/development/tools/build-managers/gnumake/default.nix b/pkgs/development/tools/build-managers/gnumake/default.nix index 09ac6b9142e2..12ac0275bc01 100644 --- a/pkgs/development/tools/build-managers/gnumake/default.nix +++ b/pkgs/development/tools/build-managers/gnumake/default.nix @@ -1,19 +1,22 @@ {stdenv, fetchurl}: +let version = "3.82"; in stdenv.mkDerivation { - name = "gnumake-3.81"; - + name = "gnumake-${version}"; + src = fetchurl { - url = mirror://gnu/make/make-3.81.tar.bz2; - md5 = "354853e0b2da90c527e35aabb8d6f1e6"; + url = "mirror://gnu/make/make-${version}.tar.bz2"; + sha256 = "0ri98385hsd7li6rh4l5afcq92v8l2lgiaz85wgcfh4w2wzsghg2"; }; - + + doCheck = true; + patches = [ # Provide nested log output for subsequent pretty-printing by # nix-log2xml. ./log.patch - + # Purity: don't look for library dependencies (of the form # `-lfoo') in /lib and /usr/lib. It's a stupid feature anyway. # Likewise, when searching for included Makefiles, don't look in @@ -22,8 +25,22 @@ stdenv.mkDerivation { ]; meta = { - description = "A program for automatically building non-source files from sources"; + description = "GNU Make, a program controlling the generation of non-source files from sources"; + + longDescription = + '' Make is a tool which controls the generation of executables and + other non-source files of a program from the program's source files. + + Make gets its knowledge of how to build your program from a file + called the makefile, which lists each of the non-source files and + how to compute it from other files. When you write a program, you + should write a makefile for it, so that it is possible to use Make + to build and install the program. + ''; + homepage = http://www.gnu.org/software/make/; - license = "GPL"; + + license = "GPLv3+"; + maintainers = [ stdenv.lib.maintainers.ludo ]; }; } From 87a62c6369afe04beb2c59a8d57471f71946d30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:50 +0000 Subject: [PATCH 105/282] glibc 2.12.1. svn path=/nixpkgs/branches/stdenv-updates/; revision=23282 --- .../libraries/{glibc-2.11 => glibc-2.12}/builder.sh | 0 .../libraries/{glibc-2.11 => glibc-2.12}/common.nix | 6 +++--- .../libraries/{glibc-2.11 => glibc-2.12}/default.nix | 0 .../{glibc-2.11 => glibc-2.12}/gnu89-inline.patch | 0 .../libraries/{glibc-2.11 => glibc-2.12}/info.nix | 0 .../{glibc-2.11 => glibc-2.12}/locales-builder.sh | 0 .../libraries/{glibc-2.11 => glibc-2.12}/locales.nix | 0 .../libraries/{glibc-2.11 => glibc-2.12}/mod_nano.patch | 0 .../{glibc-2.11 => glibc-2.12}/nix-locale-archive.patch | 0 .../{glibc-2.11 => glibc-2.12}/nss-skip-unavail.patch | 0 .../{glibc-2.11 => glibc-2.12}/rpcgen-path.patch | 0 .../{glibc-2.11 => glibc-2.12}/stack-protector-link.patch | 0 pkgs/top-level/all-packages.nix | 8 ++++---- 13 files changed, 7 insertions(+), 7 deletions(-) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/builder.sh (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/common.nix (96%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/default.nix (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/gnu89-inline.patch (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/info.nix (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/locales-builder.sh (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/locales.nix (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/mod_nano.patch (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/nix-locale-archive.patch (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/nss-skip-unavail.patch (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/rpcgen-path.patch (100%) rename pkgs/development/libraries/{glibc-2.11 => glibc-2.12}/stack-protector-link.patch (100%) diff --git a/pkgs/development/libraries/glibc-2.11/builder.sh b/pkgs/development/libraries/glibc-2.12/builder.sh similarity index 100% rename from pkgs/development/libraries/glibc-2.11/builder.sh rename to pkgs/development/libraries/glibc-2.12/builder.sh diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix similarity index 96% rename from pkgs/development/libraries/glibc-2.11/common.nix rename to pkgs/development/libraries/glibc-2.12/common.nix index b2dd01690df6..d35062f09573 100644 --- a/pkgs/development/libraries/glibc-2.11/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -11,7 +11,7 @@ cross : let # For GNU/Hurd, see below. - version = if hurdHeaders != null then "20100512" else "2.11.2"; + version = if hurdHeaders != null then "20100512" else "2.12.1"; in assert (cross != null) -> (gccCross != null); @@ -128,11 +128,11 @@ stdenv.mkDerivation ({ } else fetchurl { url = "mirror://gnu/glibc/glibc-${version}.tar.bz2"; - sha256 = "04w74879psq961cas1amidkg8fc1h6r9yj3plfr33v9y6vp7db62"; + sha256 = "01vlr473skl08xpcjz0b4lw23lsnskf5kx9s8nxwa4mwa9f137vm"; }; srcPorts = fetchurl { - url = "mirror://gnu/glibc/glibc-ports-2.11.tar.bz2"; + url = "mirror://gnu/glibc/glibc-ports-2.11.tar.bz2"; # FIXME: 2.12.1 unavailable. sha256 = "12b53f5k4gcr8rr1kg2ycf2701rygqsyf9r8gz4j3l9flaqi5liq"; }; diff --git a/pkgs/development/libraries/glibc-2.11/default.nix b/pkgs/development/libraries/glibc-2.12/default.nix similarity index 100% rename from pkgs/development/libraries/glibc-2.11/default.nix rename to pkgs/development/libraries/glibc-2.12/default.nix diff --git a/pkgs/development/libraries/glibc-2.11/gnu89-inline.patch b/pkgs/development/libraries/glibc-2.12/gnu89-inline.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/gnu89-inline.patch rename to pkgs/development/libraries/glibc-2.12/gnu89-inline.patch diff --git a/pkgs/development/libraries/glibc-2.11/info.nix b/pkgs/development/libraries/glibc-2.12/info.nix similarity index 100% rename from pkgs/development/libraries/glibc-2.11/info.nix rename to pkgs/development/libraries/glibc-2.12/info.nix diff --git a/pkgs/development/libraries/glibc-2.11/locales-builder.sh b/pkgs/development/libraries/glibc-2.12/locales-builder.sh similarity index 100% rename from pkgs/development/libraries/glibc-2.11/locales-builder.sh rename to pkgs/development/libraries/glibc-2.12/locales-builder.sh diff --git a/pkgs/development/libraries/glibc-2.11/locales.nix b/pkgs/development/libraries/glibc-2.12/locales.nix similarity index 100% rename from pkgs/development/libraries/glibc-2.11/locales.nix rename to pkgs/development/libraries/glibc-2.12/locales.nix diff --git a/pkgs/development/libraries/glibc-2.11/mod_nano.patch b/pkgs/development/libraries/glibc-2.12/mod_nano.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/mod_nano.patch rename to pkgs/development/libraries/glibc-2.12/mod_nano.patch diff --git a/pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch b/pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/nix-locale-archive.patch rename to pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch diff --git a/pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch b/pkgs/development/libraries/glibc-2.12/nss-skip-unavail.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/nss-skip-unavail.patch rename to pkgs/development/libraries/glibc-2.12/nss-skip-unavail.patch diff --git a/pkgs/development/libraries/glibc-2.11/rpcgen-path.patch b/pkgs/development/libraries/glibc-2.12/rpcgen-path.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/rpcgen-path.patch rename to pkgs/development/libraries/glibc-2.12/rpcgen-path.patch diff --git a/pkgs/development/libraries/glibc-2.11/stack-protector-link.patch b/pkgs/development/libraries/glibc-2.12/stack-protector-link.patch similarity index 100% rename from pkgs/development/libraries/glibc-2.11/stack-protector-link.patch rename to pkgs/development/libraries/glibc-2.12/stack-protector-link.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4c8a1da089eb..a01fa79511ee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2821,7 +2821,7 @@ let glfw = callPackage ../development/libraries/glfw { }; - glibc = glibc211; + glibc = glibc212; glibc25 = callPackage ../development/libraries/glibc-2.5 { kernelHeaders = linuxHeaders; @@ -2845,7 +2845,7 @@ let installLocales = getPkgConfig "glibc" "locales" false; }); - glibc211 = callPackage ../development/libraries/glibc-2.11 { + glibc212 = callPackage ../development/libraries/glibc-2.12 { kernelHeaders = linuxHeaders; installLocales = getPkgConfig "glibc" "locales" false; machHeaders = null; @@ -2853,7 +2853,7 @@ let gccCross = null; }; - glibc211Cross = forceBuildDrv (makeOverridable (import ../development/libraries/glibc-2.11) + glibc212Cross = forceBuildDrv (makeOverridable (import ../development/libraries/glibc-2.12) (let crossGNU = (crossSystem != null && crossSystem.config == "i586-pc-gnu"); in ({ inherit stdenv fetchurl; @@ -2868,7 +2868,7 @@ let then { inherit machHeaders hurdHeaders mig fetchgit; } else { })))); - glibcCross = glibc211Cross; + glibcCross = glibc212Cross; # We can choose: libcCrossChooser = name : if (name == "glibc") then glibcCross From 9b9df7a44498610cf5a59b9761f5e7b977872c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 15:26:56 +0000 Subject: [PATCH 106/282] glibc: Make the native store path independent on whether `gccCross' is null. svn path=/nixpkgs/branches/stdenv-updates/; revision=23283 --- pkgs/development/libraries/glibc-2.12/common.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index d35062f09573..84578dc103ca 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -108,9 +108,9 @@ stdenv.mkDerivation ({ NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.system == "i686-linux") "-U__i686"; } -# FIXME: This is way too broad and causes the *native* glibc to have a -# different store path dependending on whether `cross' is null or not. -// args // +# Remove the `gccCross' attribute so that the *native* glibc store path +# doesn't depend on whether `gccCross' is null or not. +// (removeAttrs args [ "gccCross" ]) // { name = name + "-${version}" + From 92e48669103094eddd747b66b12680626695814e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 20 Aug 2010 21:23:05 +0000 Subject: [PATCH 107/282] Fix path to glibc. svn path=/nixpkgs/branches/stdenv-updates/; revision=23290 --- pkgs/top-level/all-packages.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a01fa79511ee..9c96bf35141d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2887,9 +2887,9 @@ let installLocales = getPkgConfig "glibc" "locales" false; }; - glibcLocales = callPackage ../development/libraries/glibc-2.11/locales.nix { }; + glibcLocales = callPackage ../development/libraries/glibc-2.12/locales.nix { }; - glibcInfo = callPackage ../development/libraries/glibc-2.11/info.nix { }; + glibcInfo = callPackage ../development/libraries/glibc-2.12/info.nix { }; glibc_multi = runCommand "${glibc.name}-multi" From 9cbc109b9a6a4591cfb8859e2766ee026d901cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 11:51:21 +0000 Subject: [PATCH 108/282] Fixes on the glibc-2.12 expression. I removed a patch (mod_nano) already in the release. I fixed the nix-locale-archive so the programs don't try to modify the /usr locale-archive (for non-nixos), although the libc may use that archive to show strings. I remove the glibc-2.11 void directory. svn path=/nixpkgs/branches/stdenv-updates/; revision=23302 --- .../libraries/glibc-2.12/common.nix | 5 +-- .../libraries/glibc-2.12/mod_nano.patch | 31 ------------------- .../glibc-2.12/nix-locale-archive.patch | 10 ++---- 3 files changed, 3 insertions(+), 43 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.12/mod_nano.patch diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 84578dc103ca..6a66626de6b4 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -66,10 +66,7 @@ stdenv.mkDerivation ({ /* Allow nixos and nix handle the locale-archive. */ ./nix-locale-archive.patch - ] - ++ stdenv.lib.optional (fetchgit == null) - /* MOD_NANO definition, for ntp (taken from glibc upstream) */ - ./mod_nano.patch; + ]; configureFlags = [ "-C" diff --git a/pkgs/development/libraries/glibc-2.12/mod_nano.patch b/pkgs/development/libraries/glibc-2.12/mod_nano.patch deleted file mode 100644 index 2fb35b3df38a..000000000000 --- a/pkgs/development/libraries/glibc-2.12/mod_nano.patch +++ /dev/null @@ -1,31 +0,0 @@ -commit 89b432d7a5befb85048c97e881b2106e8df58e43 -Author: Ulrich Drepper -Date: Sun Nov 22 10:23:12 2009 -0800 - - Fix up a bit more for recent API changes. - -diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h -index 5f10c7f..88b87f1 100644 ---- a/sysdeps/unix/sysv/linux/sys/timex.h -+++ b/sysdeps/unix/sysv/linux/sys/timex.h -@@ -85,6 +85,9 @@ struct timex - #define MOD_TIMECONST ADJ_TIMECONST - #define MOD_CLKB ADJ_TICK - #define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ -+#define MOD_TAI ADJ_TAI -+#define MOD_MICRO ADJ_MICRO -+#define MOD_NANO ADJ_NANO - - - /* Status codes (timex.status) */ -@@ -108,8 +111,9 @@ struct timex - #define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ - #define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ - -+/* Read-only bits */ - #define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ -- STA_PPSERROR | STA_CLOCKERR) /* read-only bits */ -+ STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) - - /* Clock states (time_state) */ - #define TIME_OK 0 /* clock synchronized, no leap second */ diff --git a/pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch b/pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch index 30e054986625..aca904f7ff44 100644 --- a/pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch +++ b/pkgs/development/libraries/glibc-2.12/nix-locale-archive.patch @@ -50,7 +50,7 @@ diff --git a/locale/programs/locale.c b/locale/programs/locale.c index 77262b7..fddc00d 100644 --- a/locale/programs/locale.c +++ b/locale/programs/locale.c -@@ -628,6 +628,23 @@ nameentcmp (const void *a, const void *b) +@@ -628,6 +628,20 @@ nameentcmp (const void *a, const void *b) ((const struct nameent *) b)->name); } @@ -60,15 +60,12 @@ index 77262b7..fddc00d 100644 + int fd = -1; + char *path = getenv ("LOCALE_ARCHIVE_2_11"); + char *path2 = getenv ("LOCALE_ARCHIVE"); -+ const char *usualpath = "/usr/lib/locale/locale-archive"; + if (path) + fd = open64 (path, access); + if (path2 && fd < 0) + fd = open64 (path2, access); + if (fd < 0) + fd = open64 (fname, access); -+ if (fd < 0) -+ fd = open64 (usualpath, access); + return fd; +} @@ -87,7 +84,7 @@ diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c index 85ba77d..3ad2af8 100644 --- a/locale/programs/locarchive.c +++ b/locale/programs/locarchive.c -@@ -512,6 +512,23 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) +@@ -512,6 +512,20 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) *ah = new_ah; } @@ -97,15 +94,12 @@ index 85ba77d..3ad2af8 100644 + int fd = -1; + char *path = getenv ("LOCALE_ARCHIVE_2_11"); + char *path2 = getenv ("LOCALE_ARCHIVE"); -+ const char *usualpath = "/usr/lib/locale/locale-archive"; + if (path) + fd = open64 (path, access); + if (path2 && fd < 0) + fd = open64 (path2, access); + if (fd < 0) + fd = open64 (fname, access); -+ if (fd < 0) -+ fd = open64 (usualpath, access); + return fd; +} From 221317ae7b455aaf100e8b3bb02c213b0f6f0aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 12:50:49 +0000 Subject: [PATCH 109/282] Setting new bootstrap-tools for x86_64. Allowing 'curl' build without some dependencies, if it is told not to build with them. Updating the make-bootstrap-tools for the latest gcc/glibc, removing the dependency on klibc, and updating unpack-boostrap-tools for the latest boostrap-tools to work. svn path=/nixpkgs/branches/stdenv-updates/; revision=23305 --- .../stdenv/linux/bootstrap/x86_64/default.nix | 4 +- pkgs/stdenv/linux/make-bootstrap-tools.nix | 59 +++++++++++++++++-- .../linux/scripts/unpack-bootstrap-tools.sh | 2 +- pkgs/tools/networking/curl/default.nix | 6 +- 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/pkgs/stdenv/linux/bootstrap/x86_64/default.nix b/pkgs/stdenv/linux/bootstrap/x86_64/default.nix index ffd23a866039..d9b9b460db24 100644 --- a/pkgs/stdenv/linux/bootstrap/x86_64/default.nix +++ b/pkgs/stdenv/linux/bootstrap/x86_64/default.nix @@ -4,7 +4,7 @@ { bootstrapTools = { - url = http://nixos.org/tarballs/stdenv-linux/x86_64/r16022/bootstrap-tools.cpio.bz2; - sha256 = "1hwmyd9x9lhmb1ckwap2lvf7wi34p1j23v5bw41drym4mfp97ynz"; + url = http://nixos.org/tarballs/stdenv-linux/x86_64/r23302/bootstrap-tools.cpio.bz2; + sha256 = "0w89kqhx47yl0jifp2vffp073pyrqha5f312kp971smi4h41drna"; }; } diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 9a337de9b218..6d23e3812f95 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -31,6 +31,49 @@ rec { #gccNoShared = wrapGCC ( gcc.gcc.override { enableShared = false; } ); + busyboxStaticSh = busybox.override { + extraConfig = '' + CLEAR + CONFIG_STATIC y + + CONFIG_ASH y + CONFIG_BASH_COMPAT y + CONFIG_ASH_ALIAS y + CONFIG_ASH_GETOPTS y + CONFIG_ASH_CMDCMD y + CONFIG_ASH_JOB_CONTROL y + CONFIG_ASH_BUILTIN_ECHO y + CONFIG_ASH_BUILTIN_PRINTF y + CONFIG_ASH_BUILTIN_TEST y + ''; + }; + + busyboxStaticLn = busybox.override { + extraConfig = '' + CLEAR + CONFIG_STATIC y + CONFIG_LN y + ''; + }; + + busyboxStaticMkdir = busybox.override { + extraConfig = '' + CLEAR + CONFIG_STATIC y + CONFIG_MKDIR y + ''; + }; + + busyboxStaticCpio = busybox.override { + extraConfig = '' + CLEAR + CONFIG_STATIC y + CONFIG_CPIO y + CONFIG_FEATURE_CPIO_O y + CONFIG_FEATURE_CPIO_P y + ''; + }; + build = stdenv.mkDerivation { @@ -43,7 +86,7 @@ rec { ensureDir $out/bin $out/lib $out/libexec # Copy what we need of Glibc. - cp -d ${glibc}/lib/ld-*.so* $out/lib + cp -d ${glibc}/lib/ld*.so* $out/lib cp -d ${glibc}/lib/libc*.so* $out/lib cp -d ${glibc}/lib/libc_nonshared.a $out/lib cp -d ${glibc}/lib/libm*.so* $out/lib @@ -97,6 +140,7 @@ rec { rm -f $out/lib/gcc/*/*/include*/sound rm -rf $out/lib/gcc/*/*/include*/root rm -f $out/lib/gcc/*/*/include-fixed/asm + rm -rf $out/lib/gcc/*/*/plugin #rm -f $out/lib/gcc/*/*/*.a cp -rd ${gcc.gcc}/libexec/* $out/libexec mkdir $out/include @@ -105,10 +149,13 @@ rec { rm -rf $out/include/c++/*/ext/pb_ds rm -rf $out/include/c++/*/ext/parallel - cp -d ${gmp}/lib/libgmp*.so* $out/lib + cp -d ${gmpxx}/lib/libgmp*.so* $out/lib cp -d ${mpfr}/lib/libmpfr*.so* $out/lib cp -d ${ppl}/lib/libppl*.so* $out/lib cp -d ${cloogppl}/lib/libcloog*.so* $out/lib + cp -d ${mpc}/lib/libmpc*.so* $out/lib + cp -d ${zlib}/lib/libz.so* $out/lib + cp -d ${libelf}/lib/libelf.so* $out/lib # Copy binutils. for i in as ld ar ranlib nm strip readelf objdump; do @@ -137,10 +184,10 @@ rec { (cd $out/pack && (find | cpio -o -H newc)) | bzip2 > $out/on-server/bootstrap-tools.cpio.bz2 mkdir $out/in-nixpkgs - cp ${klibc}/lib/klibc/bin.static/sh $out/in-nixpkgs - cp ${klibc}/lib/klibc/bin.static/cpio $out/in-nixpkgs - cp ${klibc}/lib/klibc/bin.static/mkdir $out/in-nixpkgs - cp ${klibc}/lib/klibc/bin.static/ln $out/in-nixpkgs + cp ${busyboxStaticSh}/bin/busybox $out/in-nixpkgs/sh + cp ${busyboxStaticCpio}/bin/busybox $out/in-nixpkgs/cpio + cp ${busyboxStaticMkdir}/bin/busybox $out/in-nixpkgs/mkdir + cp ${busyboxStaticLn}/bin/busybox $out/in-nixpkgs/ln cp ${curlStatic}/bin/curl $out/in-nixpkgs cp ${bzip2Static}/bin/bzip2 $out/in-nixpkgs chmod u+w $out/in-nixpkgs/* diff --git a/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh b/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh index b3f5dbb546db..422dc6dd5fef 100644 --- a/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/scripts/unpack-bootstrap-tools.sh @@ -39,7 +39,7 @@ for i in $out/lib/librt* ; do fi done -for i in $out/lib/libgmp* $out/lib/libppl* $out/lib/libcloog* $out/lib/libmpc*; do +for i in $out/lib/libgmp* $out/lib/libppl* $out/lib/libcloog* $out/lib/libmpc* $out/lib/libpcre* $out/lib/libstdc++*.so.*[0-9]; do echo trying to patch $i if test -f $i -a ! -L $i; then LD_LIBRARY_PATH=$out/lib $LD_BINARY \ diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix index 33f11cdede57..57ce663080a2 100644 --- a/pkgs/tools/networking/curl/default.nix +++ b/pkgs/tools/networking/curl/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl -, zlibSupport ? false, zlib -, sslSupport ? false, openssl -, scpSupport ? false, libssh2 +, zlibSupport ? false, zlib ? null +, sslSupport ? false, openssl ? null +, scpSupport ? false, libssh2 ? null , linkStatic ? false }: From ff0b54e26e40b8bbbc7d1b415a770e8dcc82606f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 13:03:36 +0000 Subject: [PATCH 110/282] Patching the latest gnum4 so it builds with glibc 2.12.1 svn path=/nixpkgs/branches/stdenv-updates/; revision=23306 --- pkgs/development/tools/misc/gnum4/default.nix | 3 +++ pkgs/development/tools/misc/gnum4/s_isdir.patch | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 pkgs/development/tools/misc/gnum4/s_isdir.patch diff --git a/pkgs/development/tools/misc/gnum4/default.nix b/pkgs/development/tools/misc/gnum4/default.nix index 717a48f11e6d..d064c7578e06 100644 --- a/pkgs/development/tools/misc/gnum4/default.nix +++ b/pkgs/development/tools/misc/gnum4/default.nix @@ -10,6 +10,9 @@ stdenv.mkDerivation { doCheck = !stdenv.isDarwin; + # Upstream is aware of it; it may be in the next release. + patches = [ ./s_isdir.patch ]; + meta = { homepage = http://www.gnu.org/software/m4/; description = "GNU M4, a macro processor"; diff --git a/pkgs/development/tools/misc/gnum4/s_isdir.patch b/pkgs/development/tools/misc/gnum4/s_isdir.patch new file mode 100644 index 000000000000..a009a4ba4465 --- /dev/null +++ b/pkgs/development/tools/misc/gnum4/s_isdir.patch @@ -0,0 +1,14 @@ +Fails to build with glibc 2.12.1 without this patch. + +http://lists.gnu.org/archive/html/bug-m4/2010-05/msg00002.html + +--- a/src/path.c ++++ b/src/path.c +@@ -22,6 +22,7 @@ + /* Handling of path search of included files via the builtins "include" + and "sinclude". */ + + #include "m4.h" ++#include "sys/stat.h" + + struct includes From 02bd68fa15861f28b6f65db7b98873c4c5b9e644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 15:36:48 +0000 Subject: [PATCH 111/282] Removing a gzip patch we had, as it looks like being in the new upstream release. svn path=/nixpkgs/branches/stdenv-updates/; revision=23307 --- pkgs/tools/compression/gzip/default.nix | 2 - pkgs/tools/compression/gzip/getopt.patch | 54 ------------------------ 2 files changed, 56 deletions(-) delete mode 100644 pkgs/tools/compression/gzip/getopt.patch diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix index 57ad6eadf918..b32bbb932e84 100644 --- a/pkgs/tools/compression/gzip/default.nix +++ b/pkgs/tools/compression/gzip/default.nix @@ -8,8 +8,6 @@ stdenv.mkDerivation rec { sha256 = "1vhiyzls60fws48scw48wvwn8mpv1f4yhcsnafys239qvb9wyrni"; }; - patches = [ ./getopt.patch ]; - doCheck = true; meta = { diff --git a/pkgs/tools/compression/gzip/getopt.patch b/pkgs/tools/compression/gzip/getopt.patch deleted file mode 100644 index e61dd9778107..000000000000 --- a/pkgs/tools/compression/gzip/getopt.patch +++ /dev/null @@ -1,54 +0,0 @@ -See http://lists.gnu.org/archive/html/bug-gnulib/2009-10/msg00089.html . - -From dd0ebefe4fe761f6f422a400430db53c64dbffd7 Mon Sep 17 00:00:00 2001 -From: Eric Blake -Date: Tue, 6 Oct 2009 20:44:13 -0600 -Subject: [PATCH] getopt: fix compilation on darwin -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -* lib/getopt.in.h (includes): Leave breadcrumbs during system -include. -* lib/unistd.in.h (getopt): Use them to avoid recursive include. -Reported by Ludovic Courtès. - -Signed-off-by: Eric Blake ---- - ChangeLog | 5 +++++ - lib/getopt.in.h | 6 +++++- - lib/unistd.in.h | 2 +- - 3 files changed, 11 insertions(+), 2 deletions(-) - -diff --git a/lib/getopt.in.h b/lib/getopt.in.h -index 9de467a..7377f3c 100644 ---- a/lib/getopt.in.h -+++ b/lib/getopt.in.h -@@ -22,9 +22,13 @@ - @PRAGMA_SYSTEM_HEADER@ - #endif - --/* The include_next requires a split double-inclusion guard. */ -+/* The include_next requires a split double-inclusion guard. We must -+ also inform the replacement unistd.h to not recursively use -+ ; our definitions will be present soon enough. */ - #if @HAVE_GETOPT_H@ -+# define _GL_SYSTEM_GETOPT - # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ -+# undef _GL_SYSTEM_GETOPT - #endif - - #ifndef _GL_GETOPT_H -diff --git a/lib/unistd.in.h b/lib/unistd.in.h -index 38e2e13..b6ea889 100644 ---- a/lib/unistd.in.h -+++ b/lib/unistd.in.h -@@ -49,7 +49,7 @@ - #endif - - /* Get getopt(), optarg, optind, opterr, optopt. */ --#if @GNULIB_UNISTD_H_GETOPT@ -+#if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT - # include - #endif - From 75a9a710fde18f62be1e22c4b698e1b5bc03e29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 15:54:48 +0000 Subject: [PATCH 112/282] Fixing the gnumake log.patch so it applies to the new gnumake svn path=/nixpkgs/branches/stdenv-updates/; revision=23308 --- pkgs/development/tools/build-managers/gnumake/log.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/build-managers/gnumake/log.patch b/pkgs/development/tools/build-managers/gnumake/log.patch index 0f3ed6d7299b..ca0d6340790b 100644 --- a/pkgs/development/tools/build-managers/gnumake/log.patch +++ b/pkgs/development/tools/build-managers/gnumake/log.patch @@ -93,9 +93,9 @@ diff -rc make-3.81-orig/make.h make-3.81/make.h *************** *** 609,611 **** --- 609,614 ---- - #define ENULLLOOP(_v,_c) do{ errno = 0; \ - while (((_v)=_c)==0 && errno==EINTR); }while(0) + #define ENULLLOOP(_v,_c) do { errno = 0; (_v) = _c; } \ + while((_v)==0 && errno==EINTR) + extern int enable_nested_output; + extern int stdout_nesting_level; + extern int stderr_nesting_level; From 745528b4e458b3f80f07331984ec1db2a909058d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:46:23 +0000 Subject: [PATCH 113/282] Updating the configuration system of uclibc to something more flexible than it was. I copied what I had done in busybox. svn path=/nixpkgs/branches/stdenv-updates/; revision=23310 --- pkgs/os-specific/linux/uclibc/default.nix | 84 ++++++++++++++--------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix index 5c941f064109..073927ba49a5 100644 --- a/pkgs/os-specific/linux/uclibc/default.nix +++ b/pkgs/os-specific/linux/uclibc/default.nix @@ -1,54 +1,72 @@ -{stdenv, fetchurl, linuxHeaders, libiconv, cross ? null, gccCross ? null}: +{stdenv, fetchurl, linuxHeaders, libiconv, cross ? null, gccCross ? null, +extraConfig ? ""}: assert stdenv.isLinux; assert cross != null -> gccCross != null; let - enableArmEABI = (cross == null && stdenv.platform.kernelArch == "arm") - || (cross != null && cross.arch == "arm"); + configParser = '' + function parseconfig { + set -x + while read LINE; do + NAME=`echo "$LINE" | cut -d \ -f 1` + OPTION=`echo "$LINE" | cut -d \ -f 2` - configArmEABI = if enableArmEABI then - ''-e 's/.*CONFIG_ARM_OABI.*//' \ - -e 's/.*CONFIG_ARM_EABI.*/CONFIG_ARM_EABI=y/' '' else ""; + if test -z "$NAME"; then + continue + fi - enableBigEndian = (cross != null && cross.bigEndian); - - configBigEndian = if enableBigEndian then "" - else - ''-e 's/.*ARCH_BIG_ENDIAN.*/#ARCH_BIG_ENDIAN=y/' \ - -e 's/.*ARCH_WANTS_BIG_ENDIAN.*/#ARCH_WANTS_BIG_ENDIAN=y/' \ - -e 's/.*ARCH_WANTS_LITTLE_ENDIAN.*/ARCH_WANTS_LITTLE_ENDIAN=y/' ''; + if test "$NAME" == "CLEAR"; then + echo "parseconfig: CLEAR" + echo > .config + fi + + echo "parseconfig: removing $NAME" + sed -i /^$NAME=/d .config + + if test "$OPTION" != n; then + echo "parseconfig: setting $NAME=$OPTION" + echo "$NAME=$OPTION" >> .config + fi + done + set +x + } + ''; + + archMakeFlag = if (cross != null) then "ARCH=${cross.arch}" else ""; + crossMakeFlag = if (cross != null) then "CROSS=${cross.config}-" else ""; + + nixConfig = '' + RUNTIME_PREFIX "/" + DEVEL_PREFIX "/" + UCLIBC_HAS_WCHAR y + UCLIBC_HAS_FTW y + UCLIBC_HAS_RPC y + DO_C99_MATH y + UCLIBC_HAS_PROGRAM_INVOCATION_NAME y + KERNEL_HEADERS "${linuxHeaders}/include" + ''; - archMakeFlag = if (cross != null) then "ARCH=${cross.arch}" else ""; - crossMakeFlag = if (cross != null) then "CROSS=${cross.config}-" else ""; in stdenv.mkDerivation { - name = "uclibc-0.9.30.3" + stdenv.lib.optionalString (cross != null) + name = "uclibc-0.9.31" + stdenv.lib.optionalString (cross != null) ("-" + cross.config); src = fetchurl { - url = http://www.uclibc.org/downloads/uClibc-0.9.30.3.tar.bz2; - sha256 = "0f1fpdwampbw7pf79i64ipj0azk4kbc9wl81ynlp19p92k4klz0h"; + url = http://www.uclibc.org/downloads/uClibc-0.9.31.tar.bz2; + sha256 = "1yk328fnz0abgh2vm2r68y65ckfkx97rdp8hbg4xvmx5s94kblw0"; }; # 'ftw' needed to build acl, a coreutils dependency configurePhase = '' make defconfig ${archMakeFlag} - sed -e s@/usr/include@${linuxHeaders}/include@ \ - -e 's@^RUNTIME_PREFIX.*@RUNTIME_PREFIX="/"@' \ - -e 's@^DEVEL_PREFIX.*@DEVEL_PREFIX="/"@' \ - -e 's@.*UCLIBC_HAS_WCHAR.*@UCLIBC_HAS_WCHAR=y@' \ - -e 's@.*UCLIBC_HAS_FTW.*@UCLIBC_HAS_FTW=y@' \ - -e 's@.*UCLIBC_HAS_RPC.*@UCLIBC_HAS_RPC=y@' \ - -e 's@.*DO_C99_MATH.*@DO_C99_MATH=y@' \ - -e 's@.*UCLIBC_HAS_PROGRAM_INVOCATION_NAME.*@UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y@' \ - -e 's@.*CONFIG_MIPS_ISA_1.*@#CONFIG_MIPS_ISA_1=y@' \ - -e 's@.*CONFIG_MIPS_ISA_3.*@CONFIG_MIPS_ISA_3=y@' \ - -e 's@.*CONFIG_MIPS_O32_ABI.*@#CONFIG_MIPS_O32_ABI=y@' \ - -e 's@.*CONFIG_MIPS_N32_ABI.*@CONFIG_MIPS_N32_ABI=y@' \ - ${configArmEABI} \ - ${configBigEndian} \ - -i .config + ${configParser} + cat << EOF | parseconfig + ${nixConfig} + ${extraConfig} + ${if cross != null then cross.uclibc.extraConfig else ""} + $extraCrossConfig + EOF make oldconfig ''; From 79653715d60c012f52b096999f310ae6c3d66aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:52:45 +0000 Subject: [PATCH 114/282] Fixing the build of busybox without extraConfig svn path=/nixpkgs/branches/stdenv-updates/; revision=23311 --- pkgs/misc/busybox/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/misc/busybox/default.nix b/pkgs/misc/busybox/default.nix index 1ae51d64e30b..f4980935c86c 100644 --- a/pkgs/misc/busybox/default.nix +++ b/pkgs/misc/busybox/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, enableStatic ? false, extraConfig ? null}: +{stdenv, fetchurl, enableStatic ? false, extraConfig ? ""}: let configParser = '' From c68d102286ef21680f1984efeb606f48f8bd59c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:53:25 +0000 Subject: [PATCH 115/282] Patching libmad for mips (Ben Nanonote) svn path=/nixpkgs/branches/stdenv-updates/; revision=23312 --- .../001-mips_removal_h_constraint.patch | 73 +++++++++++++++++++ pkgs/development/libraries/libmad/default.nix | 6 +- 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 pkgs/development/libraries/libmad/001-mips_removal_h_constraint.patch diff --git a/pkgs/development/libraries/libmad/001-mips_removal_h_constraint.patch b/pkgs/development/libraries/libmad/001-mips_removal_h_constraint.patch new file mode 100644 index 000000000000..1d8b385e0c57 --- /dev/null +++ b/pkgs/development/libraries/libmad/001-mips_removal_h_constraint.patch @@ -0,0 +1,73 @@ +Taken from openwrt: +https://dev.openwrt.org/browser/packages/libs/libmad/patches/001-mips_removal_h_constraint.patch?rev=18548 + +diff -ur libmad-0.15.1b-orig/fixed.h libmad-0.15.1b/fixed.h +--- libmad-0.15.1b-orig/fixed.h 2004-02-17 12:32:03.000000000 +1030 ++++ libmad-0.15.1b/fixed.h 2009-08-05 10:46:30.000000000 +0930 +@@ -299,6 +299,23 @@ + + # elif defined(FPM_MIPS) + ++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ ++#if defined (__GNUC__) && defined (__GNUC_MINOR__) ++#define __GNUC_PREREQ(maj, min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++#define __GNUC_PREREQ(maj, min) 0 ++#endif ++ ++#if __GNUC_PREREQ(4,4) ++ typedef unsigned int u64_di_t __attribute__ ((mode (DI))); ++# define MAD_F_MLX(hi, lo, x, y) \ ++ do { \ ++ u64_di_t __ll = (u64_di_t) (x) * (y); \ ++ hi = __ll >> 32; \ ++ lo = __ll; \ ++ } while (0) ++#else + /* + * This MIPS version is fast and accurate; the disposition of the least + * significant bit depends on OPT_ACCURACY via mad_f_scale64(). +@@ -328,6 +345,7 @@ + : "%r" ((x) >> 12), "r" ((y) >> 16)) + # define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo)) + # endif ++#endif /* __GNU_PREREQ(4,4) */ + + # if defined(OPT_SPEED) + # define mad_f_scale64(hi, lo) \ +diff -ur libmad-0.15.1b-orig/mad.h libmad-0.15.1b/mad.h +--- libmad-0.15.1b-orig/mad.h 2004-02-17 13:25:44.000000000 +1030 ++++ libmad-0.15.1b/mad.h 2009-08-05 10:42:40.000000000 +0930 +@@ -344,6 +344,23 @@ + + # elif defined(FPM_MIPS) + ++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ ++#if defined (__GNUC__) && defined (__GNUC_MINOR__) ++#define __GNUC_PREREQ(maj, min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++#define __GNUC_PREREQ(maj, min) 0 ++#endif ++ ++#if __GNUC_PREREQ(4,4) ++ typedef unsigned int u64_di_t __attribute__ ((mode (DI))); ++# define MAD_F_MLX(hi, lo, x, y) \ ++ do { \ ++ u64_di_t __ll = (u64_di_t) (x) * (y); \ ++ hi = __ll >> 32; \ ++ lo = __ll; \ ++ } while (0) ++#else + /* + * This MIPS version is fast and accurate; the disposition of the least + * significant bit depends on OPT_ACCURACY via mad_f_scale64(). +@@ -373,6 +390,7 @@ + : "%r" ((x) >> 12), "r" ((y) >> 16)) + # define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo)) + # endif ++#endif /* __GNU_PREREQ(4,4) */ + + # if defined(OPT_SPEED) + # define mad_f_scale64(hi, lo) \ diff --git a/pkgs/development/libraries/libmad/default.nix b/pkgs/development/libraries/libmad/default.nix index 83070b92ac64..178e65d2506f 100644 --- a/pkgs/development/libraries/libmad/default.nix +++ b/pkgs/development/libraries/libmad/default.nix @@ -8,11 +8,13 @@ stdenv.mkDerivation { sha256 = "bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690"; }; - patches = [ ./pkgconfig.patch ]; + patches = [ ./001-mips_removal_h_constraint.patch ./pkgconfig.patch ]; + + buildNativeInputs = [ autoconf ]; # The -fforce-mem flag has been removed in GCC 4.3. preConfigure = '' - ${autoconf}/bin/autoconf + autoconf substituteInPlace configure --replace "-fforce-mem" "" ''; From e0b377fd81a3d373c40f5ffb5883b2a43916f3f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:54:02 +0000 Subject: [PATCH 116/282] Adding mpg123 (it even cross-builds fine for the nanonote) svn path=/nixpkgs/branches/stdenv-updates/; revision=23313 --- pkgs/applications/audio/mpg123/default.nix | 23 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 pkgs/applications/audio/mpg123/default.nix diff --git a/pkgs/applications/audio/mpg123/default.nix b/pkgs/applications/audio/mpg123/default.nix new file mode 100644 index 000000000000..80de5567000d --- /dev/null +++ b/pkgs/applications/audio/mpg123/default.nix @@ -0,0 +1,23 @@ +{stdenv, fetchurl, alsaLib }: + +stdenv.mkDerivation { + name = "mpg123-1.12.3"; + + src = fetchurl { + url = mirror://sourceforge/mpg123/mpg123-1.12.3.tar.bz2; + sha256 = "1ij689s7jch3d4g0ja3jylaphallc8vgrsrm9b12254phnyy23xf"; + }; + + buildInputs = [ alsaLib ]; + + crossAttrs = { + configureFlags = if stdenv.cross ? mpg123 then + "--with-cpu=${stdenv.cross.mpg123.cpu}" else ""; + }; + + meta = { + description = "Command-line MP3 player"; + homepage = http://mpg123.sourceforge.net/; + license = "LGPL"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9c96bf35141d..bb652f691c03 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5860,6 +5860,8 @@ let mpc123 = callPackage ../applications/audio/mpc123 { }; + mpg123 = callPackage ../applications/audio/mpg123 { }; + mpg321 = callPackage ../applications/audio/mpg321 { }; MPlayer = callPackage ../applications/video/MPlayer { From 49893ec540443f319f8d2c41d3f6f217c9d09702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:54:24 +0000 Subject: [PATCH 117/282] Allowing cross-build of groff svn path=/nixpkgs/branches/stdenv-updates/; revision=23314 --- pkgs/tools/text/groff/default.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/text/groff/default.nix b/pkgs/tools/text/groff/default.nix index 060e5d5e2c70..243fe8dcab81 100644 --- a/pkgs/tools/text/groff/default.nix +++ b/pkgs/tools/text/groff/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, ghostscript, perl }: +{ stdenv, fetchurl, ghostscript, perl, groff }: stdenv.mkDerivation rec { name = "groff-1.20.1"; @@ -8,10 +8,19 @@ stdenv.mkDerivation rec { sha256 = "01fq5i68p4s4fc6m8i90y5d28wk1x6zh2mkw85n0qqnb6n0qfidn"; }; - buildInputs = [ ghostscript perl ]; + buildInputs = [ ghostscript ]; + buildNativeInputs = [ perl ]; doCheck = true; + crossAttrs = { + # Trick to get the build system find the proper 'native' groff + # http://www.mail-archive.com/bug-groff@gnu.org/msg01335.html + preBuild = '' + makeFlags="GROFF_BIN_PATH=${groff}/bin GROFFBIN=${groff}/bin/groff" + ''; + }; + meta = { description = "GNU Troff, a typesetting package that reads plain text and produces formatted output"; From 5cdc569477c34b95bd3aed614f221bc133f6aee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:55:47 +0000 Subject: [PATCH 118/282] Allowing alsa utils to cross-build, and libao to output to alsa (not only to pulseAudio) svn path=/nixpkgs/branches/stdenv-updates/; revision=23315 --- pkgs/development/libraries/libao/default.nix | 5 +++-- pkgs/os-specific/linux/alsa-utils/default.nix | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/libao/default.nix b/pkgs/development/libraries/libao/default.nix index 856980f10253..ae70e775dd1a 100644 --- a/pkgs/development/libraries/libao/default.nix +++ b/pkgs/development/libraries/libao/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, pulseaudio +{ stdenv, fetchurl, pkgconfig, pulseaudio, alsaLib , usePulseAudio }: stdenv.mkDerivation { @@ -8,7 +8,8 @@ stdenv.mkDerivation { sha256 = "e52e05af6b10f42d2ee9845df1a581bf2b352060eabf7946aee0a600c3878954"; }; - buildInputs = [ pkgconfig ] ++ stdenv.lib.optional usePulseAudio pulseaudio; + buildInputs = [ pkgconfig alsaLib ] ++ (if usePulseAudio then [ pulseaudio ] + else [ alsaLib ]); meta = { longDescription = '' diff --git a/pkgs/os-specific/linux/alsa-utils/default.nix b/pkgs/os-specific/linux/alsa-utils/default.nix index e20163bfc97b..ad092fa78214 100644 --- a/pkgs/os-specific/linux/alsa-utils/default.nix +++ b/pkgs/os-specific/linux/alsa-utils/default.nix @@ -8,7 +8,8 @@ stdenv.mkDerivation rec { sha256 = "1c7pl5k3d60wacnha8zfn2dixz7hiiaxvijis4559y15bs8mxl5p"; }; - buildInputs = [ alsaLib gettext ncurses ]; + buildInputs = [ alsaLib ncurses ]; + buildNativeInputs = [ gettext ]; configureFlags = "--disable-xmlto"; From 508fc749f483318e2a7f700012534f24f96dd1d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:57:24 +0000 Subject: [PATCH 119/282] Making texinfo look nicer related to cross-build (we had some cleaning up to do for the time when we rebuild stdenv. It looks like a good time for that) svn path=/nixpkgs/branches/stdenv-updates/; revision=23316 --- pkgs/development/tools/misc/texinfo/default.nix | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/pkgs/development/tools/misc/texinfo/default.nix b/pkgs/development/tools/misc/texinfo/default.nix index 09fe6ed029c3..95d98582549e 100644 --- a/pkgs/development/tools/misc/texinfo/default.nix +++ b/pkgs/development/tools/misc/texinfo/default.nix @@ -8,16 +8,8 @@ stdenv.mkDerivation rec { sha256 = "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d"; }; - buildInputs = [ ncurses lzma ]; - - # !!! This should be set as usual attributes - we set them as - # crossAttrs only not to change the usual stdenv hash - # (in the normal stdenv, these get mapped all to buildNativeInputs, - # but unfortunately in the opposite order, thus getting a new hash) - crossAttrs = { - buildNativeInputs = [ lzma ]; - buildInputs = [ ncurses ]; - }; + buildInputs = [ ncurses ]; + buildNativeINputs = [ lzma ]; # Disabled because we don't have zdiff in the stdenv bootstrap. #doCheck = true; From bc0fab579328b5c7a35ca96b959436ecb5fe1f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 16:58:18 +0000 Subject: [PATCH 120/282] Setting sysvinit to be downloaded from a savannah mirror, instead of the url of a single mirror it had (a mirror not working anymore) svn path=/nixpkgs/branches/stdenv-updates/; revision=23317 --- pkgs/os-specific/linux/sysvinit/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/sysvinit/default.nix b/pkgs/os-specific/linux/sysvinit/default.nix index 8315ee4835d3..a05638dcb77c 100644 --- a/pkgs/os-specific/linux/sysvinit/default.nix +++ b/pkgs/os-specific/linux/sysvinit/default.nix @@ -6,7 +6,7 @@ stdenv.mkDerivation { name = (if withoutInitTools then "sysvtools" else "sysvinit") + "-" + version; src = fetchurl { - url = "http://www.very-clever.com/download/nongnu/sysvinit/sysvinit-${version}.tar.bz2"; + url = "mirror://savannah/sysvinit/sysvinit-${version}.tar.bz2"; sha256 = "068mvzaz808a673zigyaqb63xc8bndh2klk16zi5c83rw70wifv0"; }; From 7d3e0c542c80233df8e2b8873f5a63522c540d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:07:03 +0000 Subject: [PATCH 121/282] Making w3m build with a newer boehm-gc svn path=/nixpkgs/branches/stdenv-updates/; revision=23318 --- pkgs/applications/networking/browsers/w3m/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/networking/browsers/w3m/default.nix b/pkgs/applications/networking/browsers/w3m/default.nix index 95ed08d8834c..a472bd69c84b 100644 --- a/pkgs/applications/networking/browsers/w3m/default.nix +++ b/pkgs/applications/networking/browsers/w3m/default.nix @@ -16,6 +16,8 @@ stdenv.mkDerivation { md5 = "ba06992d3207666ed1bf2dcf7c72bf58"; }; + patches = [ ./newgc.patch ]; + buildInputs = [ncurses boehmgc gettext zlib] ++ stdenv.lib.optional sslSupport openssl ++ stdenv.lib.optionals graphicsSupport [imlib2 x11]; From 64eadafc2b382da30a1f15aff3637af74c24c4aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:09:02 +0000 Subject: [PATCH 122/282] Using a new boehm-gc (alpha, not stable) on the mips, because the stable does not support mips at all svn path=/nixpkgs/branches/stdenv-updates/; revision=23319 --- pkgs/development/libraries/boehm-gc/default.nix | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/boehm-gc/default.nix b/pkgs/development/libraries/boehm-gc/default.nix index 8e6f67495339..6d1074165b5d 100644 --- a/pkgs/development/libraries/boehm-gc/default.nix +++ b/pkgs/development/libraries/boehm-gc/default.nix @@ -1,16 +1,19 @@ {stdenv, fetchurl}: -let version = "7.1"; in +let + version = if stdenv.isMips then "7.2alpha4" else "7.1"; +in stdenv.mkDerivation ({ name = "boehm-gc-${version}"; src = fetchurl { url = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-${version}.tar.gz"; - sha256 = "0c5zrsdw0rsli06lahcqwwz0prgah340fhfg7ggfgvz3iw1gdkp3"; + sha256 = (if version == "7.1" then "0c5zrsdw0rsli06lahcqwwz0prgah340fhfg7ggfgvz3iw1gdkp3" + else if version == "7.2alpha4" then "1ya9hr1wbx0hrx29q5zy2k51ml71k9mhqzqs7f505qr9s6jsfh0b" + else throw "Version unknown"); }; - patches = - stdenv.lib.optional (stdenv.system == "i686-cygwin") + patches = stdenv.lib.optional (stdenv.system == "i686-cygwin") ./cygwin-pthread-dl.patch; doCheck = true; From affd2abf24791799cd4926d16e8f40979122de49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:11:07 +0000 Subject: [PATCH 123/282] Limitting the 'hal' usage of libsmbios to i686/x86_64 svn path=/nixpkgs/branches/stdenv-updates/; revision=23320 --- pkgs/os-specific/linux/hal/default.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/hal/default.nix b/pkgs/os-specific/linux/hal/default.nix index 2f830ab0131a..055bb2ab0cdc 100644 --- a/pkgs/os-specific/linux/hal/default.nix +++ b/pkgs/os-specific/linux/hal/default.nix @@ -19,8 +19,7 @@ stdenv.mkDerivation rec { pkgconfig python pciutils expat libusb dbus.libs dbus_glib glib libuuid perl perlXMLParser gettext zlib gperf consolekit policykit - # !!! libsmbios is broken; it doesn't install headers. - ] ++ stdenv.lib.optional (stdenv.system != "armv5tel-linux") [ libsmbios ]; + ]; # !!! Hm, maybe the pci/usb.ids location should be in /etc, so that # we don't have to rebuild HAL when we update the PCI/USB IDs. @@ -34,7 +33,7 @@ stdenv.mkDerivation rec { ''; propagatedBuildInputs = [ libusb ] - ++ stdenv.lib.optionals (stdenv.system != "armv5tel-linux") [ libsmbios ]; + ++ stdenv.lib.optional (stdenv.isi686 || stdenv.isx86_64) [ libsmbios ]; preConfigure = '' for i in hald/linux/probing/probe-smbios.c hald/linux/osspec.c \ From 5da066984f85a413185ab6f1b53db301567c9f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:12:54 +0000 Subject: [PATCH 124/282] Updating kbd, so it builds in mips svn path=/nixpkgs/branches/stdenv-updates/; revision=23321 --- pkgs/os-specific/linux/kbd/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index c9618bf07e6d..6120c1b8a0dd 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "kbd-1.15.2"; src = fetchurl { - url = "ftp://ftp.altlinux.org/pub/people/legion/kbd/${name}.tar.gz"; + url = "ftp://ftp.altlinux.org/pub/people/legion/kbd/${name}.tar.bz2"; sha256 = "19pb44m5m0mcgjkmgkjx4fn8j2m4xwqx4g7w2y1nlypg3qcjsq5k"; }; From 237884a8bfae9804449792472573a7770514293c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:13:28 +0000 Subject: [PATCH 125/282] Disabling the nfs-utils test on mips (one test fails, I don't know why) svn path=/nixpkgs/branches/stdenv-updates/; revision=23322 --- pkgs/os-specific/linux/nfs-utils/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix index b651d39b8887..752593ed38de 100644 --- a/pkgs/os-specific/linux/nfs-utils/default.nix +++ b/pkgs/os-specific/linux/nfs-utils/default.nix @@ -33,7 +33,8 @@ stdenv.mkDerivation rec { installFlags="statedir=$TMPDIR" # hack to make `make install' work ''; - doCheck = true; + # One test fails on mips. + doCheck = if stdenv.isMips then false else true; meta = { description = "Linux user-space NFS utilities"; From 72707853f0a8324eea8e57701e33194fc7581985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:14:03 +0000 Subject: [PATCH 126/282] Adding in stdenv an 'isMips' attribute. svn path=/nixpkgs/branches/stdenv-updates/; revision=23323 --- pkgs/stdenv/generic/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 27450a845008..04eca44a0cc4 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -109,6 +109,7 @@ let || result.system == "x86_64-openbsd"; is64bit = result.system == "x86_64-linux" || result.system == "x86_64-darwin"; + isMips = result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; # Utility function: allow stdenv to be easily regenerated with # a different setup script. (See all-packages.nix for an From 191961aa76754fd6c761ff9e2a445778ed5670c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 17:18:35 +0000 Subject: [PATCH 127/282] Typo svn path=/nixpkgs/branches/stdenv-updates/; revision=23324 --- pkgs/development/tools/misc/texinfo/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/tools/misc/texinfo/default.nix b/pkgs/development/tools/misc/texinfo/default.nix index 95d98582549e..111f2d142008 100644 --- a/pkgs/development/tools/misc/texinfo/default.nix +++ b/pkgs/development/tools/misc/texinfo/default.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { }; buildInputs = [ ncurses ]; - buildNativeINputs = [ lzma ]; + buildNativeInputs = [ lzma ]; # Disabled because we don't have zdiff in the stdenv bootstrap. #doCheck = true; From b9080de4fd962209591abe967af3931a1e46c097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 19:02:43 +0000 Subject: [PATCH 128/282] Addindg isArm and enlarging isMips for stdenv. svn path=/nixpkgs/branches/stdenv-updates/; revision=23326 --- pkgs/stdenv/generic/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 04eca44a0cc4..2299c60c0818 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -109,7 +109,10 @@ let || result.system == "x86_64-openbsd"; is64bit = result.system == "x86_64-linux" || result.system == "x86_64-darwin"; - isMips = result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; + isMips = result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" + || result.system == "mips-linux" + || result.system == "mips64-linux"; + isArm = result.system == "armv5tel-linux"; # Utility function: allow stdenv to be easily regenerated with # a different setup script. (See all-packages.nix for an From 0709b7df6de019cdf55b213e00c5cce103a55840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 19:05:42 +0000 Subject: [PATCH 129/282] Making glibc not depend on glibc-ports for platforms not requiring glibc-ports. svn path=/nixpkgs/branches/stdenv-updates/; revision=23327 --- .../development/libraries/glibc-2.12/common.nix | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 6a66626de6b4..b6ded9fdb923 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -12,6 +12,16 @@ cross : let # For GNU/Hurd, see below. version = if hurdHeaders != null then "20100512" else "2.12.1"; + + needsPortsNative = stdenv.isMips || stdenv.isArm; + needsPortsCross = cross.arch == "mips" || cross.arch == "arm"; + needsPorts = if cross == null then needsPortsNative else needsPortsCross; + + srcPorts = fetchurl { + url = "mirror://gnu/glibc/glibc-ports-2.11.tar.bz2"; # FIXME: 2.12.1 unavailable. + sha256 = "12b53f5k4gcr8rr1kg2ycf2701rygqsyf9r8gz4j3l9flaqi5liq"; + }; + in assert (cross != null) -> (gccCross != null); @@ -128,11 +138,6 @@ stdenv.mkDerivation ({ sha256 = "01vlr473skl08xpcjz0b4lw23lsnskf5kx9s8nxwa4mwa9f137vm"; }; - srcPorts = fetchurl { - url = "mirror://gnu/glibc/glibc-ports-2.11.tar.bz2"; # FIXME: 2.12.1 unavailable. - sha256 = "12b53f5k4gcr8rr1kg2ycf2701rygqsyf9r8gz4j3l9flaqi5liq"; - }; - # `fetchurl' is a function and thus should not be passed to the # `derivation' primitive. fetchurl = null; @@ -146,7 +151,7 @@ stdenv.mkDerivation ({ sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" done - tar xvjf "$srcPorts" + ${if needsPorts then "tar xvjf ${srcPorts}" else ""} mkdir ../build cd ../build From 23b47575c68ba33375d9379302f64a3ed75b67e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 20:00:54 +0000 Subject: [PATCH 130/282] Adding a tarball I publish in my server for glibc ports 2.12.1 I made from the git repository. svn path=/nixpkgs/branches/stdenv-updates/; revision=23337 --- pkgs/development/libraries/glibc-2.12/common.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index b6ded9fdb923..b4e65057183f 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -18,8 +18,9 @@ let needsPorts = if cross == null then needsPortsNative else needsPortsCross; srcPorts = fetchurl { - url = "mirror://gnu/glibc/glibc-ports-2.11.tar.bz2"; # FIXME: 2.12.1 unavailable. - sha256 = "12b53f5k4gcr8rr1kg2ycf2701rygqsyf9r8gz4j3l9flaqi5liq"; + # A tarball I manually made from a git clone, for the tag "glibc-2.12.1". + url = http://vicerveza.homeunix.net/~viric/tmp/nix/glibc-ports-2.12.1.tar.gz; + sha256 = "160dr4v9210r6d7xp0af5kx1pljcjaa2x4ya88psjiphcr6bsy37"; }; in From 13a647ab4c73a551a06823db801ddd3904cdb40a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 20:03:00 +0000 Subject: [PATCH 131/282] Disabling the legacy IDE in the fuloong2f kernel (that may give sda devices instead of hga?) svn path=/nixpkgs/branches/stdenv-updates/; revision=23338 --- pkgs/top-level/platforms.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index c3d9b1005f71..a52f7ab05b59 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -201,6 +201,9 @@ rec { BLK_DEV_CMD640_ENHANCED n FUSE_FS m + + # To get /dev/sda devices instead of /dev/hda + IDE n ''; kernelTarget = "vmlinux"; uboot = null; From 96c53c823990741c6fc4ff92df7cb7888d13350e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 20:11:07 +0000 Subject: [PATCH 132/282] Fix on the file type on glibc ports 2.12.1. (gzip vs bzip2) svn path=/nixpkgs/branches/stdenv-updates/; revision=23339 --- pkgs/development/libraries/glibc-2.12/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index b4e65057183f..afa498ccd2ad 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -152,7 +152,7 @@ stdenv.mkDerivation ({ sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" done - ${if needsPorts then "tar xvjf ${srcPorts}" else ""} + ${if needsPorts then "tar xvf ${srcPorts}" else ""} mkdir ../build cd ../build From b8298c9cddfbb596fc4fbdf4a4ef8c34b4eb7e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 20:13:02 +0000 Subject: [PATCH 133/282] Adding a patch file I forgot for w3m, while the nix expression already refers to it. svn path=/nixpkgs/branches/stdenv-updates/; revision=23340 --- .../networking/browsers/w3m/newgc.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pkgs/applications/networking/browsers/w3m/newgc.patch diff --git a/pkgs/applications/networking/browsers/w3m/newgc.patch b/pkgs/applications/networking/browsers/w3m/newgc.patch new file mode 100644 index 000000000000..db25e305c8c1 --- /dev/null +++ b/pkgs/applications/networking/browsers/w3m/newgc.patch @@ -0,0 +1,15 @@ +https://bugzilla.redhat.com/show_bug.cgi?id=555467 + +--- a/main.c.old 2007-05-31 06:49:50.000000000 +0530 ++++ b/main.c 2010-02-16 16:16:24.000000000 +0530 +@@ -842,7 +842,9 @@ + mySignal(SIGPIPE, SigPipe); + #endif + +- orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc); ++ orig_GC_warn_proc = GC_get_warn_proc(); ++ GC_set_warn_proc(wrap_GC_warn_proc); ++ + err_msg = Strnew(); + if (load_argc == 0) { + /* no URL specified */ From 9a1e29ecdfcce8735703a2d65d8b87461b7d86f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 21:08:05 +0000 Subject: [PATCH 134/282] Patch for glibc 2.12.1 to build with gnumake 3.82 svn path=/nixpkgs/branches/stdenv-updates/; revision=23342 --- pkgs/development/libraries/glibc-2.12/common.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index afa498ccd2ad..af36787139bf 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -79,6 +79,12 @@ stdenv.mkDerivation ({ ./nix-locale-archive.patch ]; + # Needed for glibc to build with the gnumake 3.82 + # http://comments.gmane.org/gmane.linux.lfs.support/31227 + postPatch = '' + sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile + ''; + configureFlags = [ "-C" "--enable-add-ons" From dc19818cc75f6905de651dc559158ba5ef1eab9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 21:08:57 +0000 Subject: [PATCH 135/282] Propagating the 'platform' stdenv attribute properly on stdenvLinux, so it can be used in places like the linuxHeaders expression. svn path=/nixpkgs/branches/stdenv-updates/; revision=23343 --- pkgs/stdenv/default.nix | 4 ++-- pkgs/stdenv/linux/default.nix | 14 +++++++++----- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 037a60da7e68..940df3e224de 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -10,7 +10,7 @@ # system, e.g., cygwin and mingw builds on i686-cygwin. Most people # can ignore it. -{system, stdenvType ? system, allPackages ? import ../..}: +{system, stdenvType ? system, allPackages ? import ../.., platform}: assert system != "i686-cygwin" -> system == stdenvType; @@ -41,7 +41,7 @@ rec { # Linux standard environment. - stdenvLinux = (import ./linux {inherit system allPackages;}).stdenvLinux; + stdenvLinux = (import ./linux {inherit system allPackages platform;}).stdenvLinux; # MinGW/MSYS standard environment. diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 04009fd5bee6..5654a8ccaf58 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -5,7 +5,7 @@ # ensuring purity of components produced by it. # The function defaults are for easy testing. -{system ? "i686-linux", allPackages ? import ../../top-level/all-packages.nix}: +{system ? "i686-linux", allPackages ? import ../../top-level/all-packages.nix, platform}: rec { @@ -91,7 +91,10 @@ rec { shell = "${bootstrapTools}/bin/sh"; initialPath = [bootstrapTools] ++ extraPath; fetchurlBoot = fetchurl; - inherit gcc extraAttrs; + inherit gcc; + # Having the proper 'platform' in all the stdenvs allows getting proper + # linuxHeaders for example. + extraAttrs = extraAttrs // { inherit platform; }; overrides = overrides // { inherit fetchurl; }; @@ -153,7 +156,7 @@ rec { # 2) These are the packages that we can build with the first # stdenv. We only need Glibc (in step 3). stdenvLinuxBoot1Pkgs = allPackages { - inherit system; + inherit system platform; bootStdenv = stdenvLinuxBoot1; }; @@ -182,7 +185,7 @@ rec { # 5) The packages that can be built using the second stdenv. stdenvLinuxBoot2Pkgs = allPackages { - inherit system; + inherit system platform; bootStdenv = stdenvLinuxBoot2; }; @@ -220,7 +223,7 @@ rec { # 7) The packages that can be built using the third stdenv. stdenvLinuxBoot3Pkgs = allPackages { - inherit system; + inherit system platform; bootStdenv = stdenvLinuxBoot3; }; @@ -257,6 +260,7 @@ rec { extraAttrs = { inherit (stdenvLinuxBoot2Pkgs) glibc; + inherit platform; }; overrides = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bb652f691c03..e6c196eed5d3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -177,7 +177,7 @@ let allStdenvs = import ../stdenv { - inherit system stdenvType; + inherit system stdenvType platform; allPackages = args: import ./all-packages.nix ({ inherit config; } // args); }; From 30892ab9fd596d3cc02854f7cc368679e933feb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 21 Aug 2010 23:13:21 +0000 Subject: [PATCH 136/282] Updating busybox and adding a patch that allows it to build with make 3.82 svn path=/nixpkgs/branches/stdenv-updates/; revision=23345 --- pkgs/misc/busybox/default.nix | 10 ++++++---- pkgs/misc/busybox/make-3.82.patch | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 pkgs/misc/busybox/make-3.82.patch diff --git a/pkgs/misc/busybox/default.nix b/pkgs/misc/busybox/default.nix index f4980935c86c..c40ff9b80759 100644 --- a/pkgs/misc/busybox/default.nix +++ b/pkgs/misc/busybox/default.nix @@ -40,14 +40,16 @@ let in -stdenv.mkDerivation { - name = "busybox-1.16.0"; +stdenv.mkDerivation rec { + name = "busybox-1.17.1"; src = fetchurl { - url = http://busybox.net/downloads/busybox-1.16.0.tar.bz2; - sha256 = "1n738zk01yi2sjrx2y36hpzxbslas8b91vzykcifr0p1j7ym0lim"; + url = "http://busybox.net/downloads/${name}.tar.bz2"; + sha256 = "0r6i76lad5w359pw93i9wrq2a1pxk8xw6xr4cq71n5by1n0pg4dz"; }; + patches = [ ./make-3.82.patch ]; + configurePhase = '' make defconfig ${configParser} diff --git a/pkgs/misc/busybox/make-3.82.patch b/pkgs/misc/busybox/make-3.82.patch new file mode 100644 index 000000000000..eb95ae3b833e --- /dev/null +++ b/pkgs/misc/busybox/make-3.82.patch @@ -0,0 +1,29 @@ +--- busybox/Makefile 2010-08-19 10:38:51.000000000 +0200 ++++ busybox-make382/Makefile 2010-08-19 14:46:03.000000000 +0200 +@@ -433,7 +433,12 @@ + -include $(srctree)/arch/$(ARCH)/Makefile + export KBUILD_DEFCONFIG + +-config %config: scripts_basic outputmakefile gen_build_files FORCE ++config: scripts_basic outputmakefile gen_build_files FORCE ++ $(Q)mkdir -p include ++ $(Q)$(MAKE) $(build)=scripts/kconfig $@ ++ $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease ++ ++%config: scripts_basic outputmakefile gen_build_files FORCE + $(Q)mkdir -p include + $(Q)$(MAKE) $(build)=scripts/kconfig $@ + $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease +@@ -1285,7 +1290,11 @@ + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + + # Modules +-/ %/: prepare scripts FORCE ++%/: prepare scripts FORCE ++ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ ++ $(build)=$(build-dir) ++ ++/: prepare scripts FORCE + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) + %.ko: prepare scripts FORCE From 15f83acc0c7dc5590c6041866e6a39047ea30328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 22 Aug 2010 12:14:28 +0000 Subject: [PATCH 137/282] Updating nasm svn path=/nixpkgs/branches/stdenv-updates/; revision=23353 --- pkgs/development/compilers/nasm/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/nasm/default.nix b/pkgs/development/compilers/nasm/default.nix index b6a09d069848..e622f035ec4b 100644 --- a/pkgs/development/compilers/nasm/default.nix +++ b/pkgs/development/compilers/nasm/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation rec { - name = "nasm-2.05.01"; + name = "nasm-2.08.01"; src = fetchurl { url = "mirror://sourceforge/nasm/${name}.tar.bz2"; - sha256 = "0p2rlshd68m2h7psyjz4440grxwryxppqzchx7cbmzahqr2yy1lj"; + sha256 = "1ilbvn5hfwhbfxsxdcnnpxy640hqgjjp5wlhfjh7biy0h49rm6q4"; }; meta = { From a480f92f9de9e355832af260c28ed4fce3ef758a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 23 Aug 2010 17:36:51 +0000 Subject: [PATCH 138/282] Fixing the glibc locales build expression (in the sense that now it builds, not that it looks nice) svn path=/nixpkgs/branches/stdenv-updates/; revision=23369 --- pkgs/development/libraries/glibc-2.12/locales.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/libraries/glibc-2.12/locales.nix b/pkgs/development/libraries/glibc-2.12/locales.nix index 821eddd41f0d..38f3f0723848 100644 --- a/pkgs/development/libraries/glibc-2.12/locales.nix +++ b/pkgs/development/libraries/glibc-2.12/locales.nix @@ -26,6 +26,10 @@ in buildPhase = '' mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale" + + # Hack to allow building of the locales (needed since glibc-2.12) + sed -i -e 's/^LOCALEDEF=/LOCALEDEF?=/' ../glibc-2*/localedata/Makefile + make localedata/install-locales \ LOCALEDEF="localedef --prefix=$TMPDIR" \ localedir=$out/lib/locale \ From d2bcf1340c3486b2dfcd831e2af345a099eaa65b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 23 Aug 2010 18:05:19 +0000 Subject: [PATCH 139/282] Adding building 'binutils' before building the 'glibc' in stdenv-linux. This should allow keeping the i686-linux boostrap-tools. I updated some days ago the x86_64-linux bootstrap-tools, but that update is not needed anymore. We can revert that boostrap-tools update if anyone wants. Pro: - new gcc building gcc and glibc. Contra: - maybe some old systems (patched red had kernels come to mind) break with that update? svn path=/nixpkgs/branches/stdenv-updates/; revision=23370 --- pkgs/stdenv/linux/default.nix | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 5654a8ccaf58..5cc6d4277f34 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -160,10 +160,30 @@ rec { bootStdenv = stdenvLinuxBoot1; }; + # Create the first "real" standard environment. This one consists + # of bootstrap tools only, and a minimal Glibc to keep the GCC + # configure script happy. + stdenvLinuxBoot1half = stdenvBootFun { + gcc = wrapGCC { + libc = bootstrapGlibc; + binutils = stdenvLinuxBoot1Pkgs.binutils; + coreutils = bootstrapTools; + }; + inherit fetchurl; + }; + + + # 2) These are the packages that we can build with the first + # stdenv. We only need Glibc (in step 3). + stdenvLinuxBoot1halfPkgs = allPackages { + inherit system platform; + bootStdenv = stdenvLinuxBoot1half; + }; + # 3) Build Glibc with the bootstrap tools. The result is the full, # dynamically linked, final Glibc. - stdenvLinuxGlibc = stdenvLinuxBoot1Pkgs.glibc; + stdenvLinuxGlibc = stdenvLinuxBoot1halfPkgs.glibc; # 4) Construct a second stdenv identical to the first, except that @@ -177,7 +197,7 @@ rec { }; overrides = { glibc = stdenvLinuxGlibc; - inherit (stdenvLinuxBoot1Pkgs) perl; + inherit (stdenvLinuxBoot1halfPkgs) perl; }; inherit fetchurl; }) ["gcc" "binutils"]; @@ -215,7 +235,7 @@ rec { name = ""; }; overrides = { - inherit (stdenvLinuxBoot1Pkgs) perl; + inherit (stdenvLinuxBoot1halfPkgs) perl; }; inherit fetchurl; }; From 8973ddbacad0574b3c9ae3fd07509c70617b2c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 23 Aug 2010 18:28:04 +0000 Subject: [PATCH 140/282] GNU MPFR: Add `platforms' and `maintainers'. svn path=/nixpkgs/branches/stdenv-updates/; revision=23371 --- pkgs/development/libraries/mpfr/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/libraries/mpfr/default.nix b/pkgs/development/libraries/mpfr/default.nix index 94cf6e3cea55..3e5a321a6a12 100644 --- a/pkgs/development/libraries/mpfr/default.nix +++ b/pkgs/development/libraries/mpfr/default.nix @@ -33,5 +33,8 @@ stdenv.mkDerivation rec { ''; license = "LGPLv2+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; }; } From f998ea4ff92d3f8a3885dc8006ac35758b82fb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 23 Aug 2010 18:29:03 +0000 Subject: [PATCH 141/282] GNU MPFR 3.0.0. svn path=/nixpkgs/branches/stdenv-updates/; revision=23372 --- pkgs/development/libraries/mpfr/default.nix | 6 +- pkgs/development/libraries/mpfr/patch01.patch | 184 ------------------ pkgs/development/libraries/mpfr/patch02.patch | 75 ------- 3 files changed, 2 insertions(+), 263 deletions(-) delete mode 100644 pkgs/development/libraries/mpfr/patch01.patch delete mode 100644 pkgs/development/libraries/mpfr/patch02.patch diff --git a/pkgs/development/libraries/mpfr/default.nix b/pkgs/development/libraries/mpfr/default.nix index 3e5a321a6a12..51d33f9593c7 100644 --- a/pkgs/development/libraries/mpfr/default.nix +++ b/pkgs/development/libraries/mpfr/default.nix @@ -1,17 +1,15 @@ {stdenv, fetchurl, gmp}: stdenv.mkDerivation rec { - name = "mpfr-2.4.2"; + name = "mpfr-3.0.0"; src = fetchurl { url = "mirror://gnu/mpfr/${name}.tar.bz2"; - sha256 = "1fpjphja2ridy1wfc53mcbavj4axl28ibvnawj1217flm045mry7"; + sha256 = "07w24h8by7n319p2vwwa1xdcg7qzkd1aqm84lfcbfv2kaff5yklg"; }; buildInputs = [ gmp ]; - patches = [ ./patch01.patch ./patch02.patch ]; - doCheck = true; enableParallelBuilding = true; diff --git a/pkgs/development/libraries/mpfr/patch01.patch b/pkgs/development/libraries/mpfr/patch01.patch deleted file mode 100644 index 2721517c4281..000000000000 --- a/pkgs/development/libraries/mpfr/patch01.patch +++ /dev/null @@ -1,184 +0,0 @@ -diff -Naurd mpfr-2.4.2-a/PATCHES mpfr-2.4.2-b/PATCHES ---- mpfr-2.4.2-a/PATCHES 2009-12-07 13:37:12.000000000 +0000 -+++ mpfr-2.4.2-b/PATCHES 2009-12-07 13:37:12.000000000 +0000 -@@ -0,0 +1 @@ -+sin_cos_underflow -diff -Naurd mpfr-2.4.2-a/VERSION mpfr-2.4.2-b/VERSION ---- mpfr-2.4.2-a/VERSION 2009-11-30 02:43:08.000000000 +0000 -+++ mpfr-2.4.2-b/VERSION 2009-12-07 13:37:12.000000000 +0000 -@@ -1 +1 @@ --2.4.2 -+2.4.2-p1 -diff -Naurd mpfr-2.4.2-a/mpfr.h mpfr-2.4.2-b/mpfr.h ---- mpfr-2.4.2-a/mpfr.h 2009-11-30 02:43:08.000000000 +0000 -+++ mpfr-2.4.2-b/mpfr.h 2009-12-07 13:37:12.000000000 +0000 -@@ -27,7 +27,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 4 - #define MPFR_VERSION_PATCHLEVEL 2 --#define MPFR_VERSION_STRING "2.4.2" -+#define MPFR_VERSION_STRING "2.4.2-p1" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naurd mpfr-2.4.2-a/sin_cos.c mpfr-2.4.2-b/sin_cos.c ---- mpfr-2.4.2-a/sin_cos.c 2009-11-30 02:43:09.000000000 +0000 -+++ mpfr-2.4.2-b/sin_cos.c 2009-12-07 13:37:12.000000000 +0000 -@@ -82,17 +82,19 @@ - if (y != x) - /* y and x differ, thus we can safely try to compute y first */ - { -- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (y, x, -2 * expx, 2, 0, rnd_mode, -- { inexy = _inexact; -- goto small_input; }); -+ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( -+ y, x, -2 * expx, 2, 0, rnd_mode, -+ { inexy = _inexact; -+ goto small_input; }); - if (0) - { - small_input: - /* we can go here only if we can round sin(x) */ -- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (z, __gmpfr_one, -2 * expx, -- 1, 0, rnd_mode, -- { inexz = _inexact; -- goto end; }); -+ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( -+ z, __gmpfr_one, -2 * expx, 1, 0, rnd_mode, -+ { inexz = _inexact; -+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); -+ goto end; }); - } - - /* if we go here, one of the two MPFR_FAST_COMPUTE_IF_SMALL_INPUT -@@ -101,18 +103,19 @@ - else /* y and x are the same variable: try to compute z first, which - necessarily differs */ - { -- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (z, __gmpfr_one, -2 * expx, -- 1, 0, rnd_mode, -- { inexz = _inexact; -- goto small_input2; }); -+ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( -+ z, __gmpfr_one, -2 * expx, 1, 0, rnd_mode, -+ { inexz = _inexact; -+ goto small_input2; }); - if (0) - { - small_input2: - /* we can go here only if we can round cos(x) */ -- MPFR_FAST_COMPUTE_IF_SMALL_INPUT (y, x, -2 * expx, 2, 0, -- rnd_mode, -- { inexy = _inexact; -- goto end; }); -+ MPFR_FAST_COMPUTE_IF_SMALL_INPUT ( -+ y, x, -2 * expx, 2, 0, rnd_mode, -+ { inexy = _inexact; -+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); -+ goto end; }); - } - } - m += 2 * (-expx); -@@ -207,7 +210,6 @@ - mpfr_clear (xr); - - end: -- /* FIXME: update the underflow flag if need be. */ - MPFR_SAVE_EXPO_FREE (expo); - mpfr_check_range (y, inexy, rnd_mode); - mpfr_check_range (z, inexz, rnd_mode); -diff -Naurd mpfr-2.4.2-a/tests/tsin_cos.c mpfr-2.4.2-b/tests/tsin_cos.c ---- mpfr-2.4.2-a/tests/tsin_cos.c 2009-11-30 02:43:08.000000000 +0000 -+++ mpfr-2.4.2-b/tests/tsin_cos.c 2009-12-07 13:37:12.000000000 +0000 -@@ -382,23 +382,56 @@ - consistency (void) - { - mpfr_t x, s1, s2, c1, c2; -+ mp_exp_t emin, emax; - mp_rnd_t rnd; -+ unsigned int flags_sin, flags_cos, flags, flags_before, flags_ref; -+ int inex_sin, inex_cos, inex, inex_ref; - int i; - -+ emin = mpfr_get_emin (); -+ emax = mpfr_get_emax (); -+ - for (i = 0; i <= 10000; i++) - { - mpfr_init2 (x, MPFR_PREC_MIN + (randlimb () % 8)); - mpfr_inits2 (MPFR_PREC_MIN + (randlimb () % 8), s1, s2, c1, c2, - (mpfr_ptr) 0); -- tests_default_random (x, 256, -5, 50); -- rnd = RND_RAND (); -- mpfr_sin (s1, x, rnd); -- mpfr_cos (c1, x, rnd); -- mpfr_sin_cos (s2, c2, x, rnd); -- if (!(mpfr_equal_p (s1, s2) && mpfr_equal_p (c1, c2))) -+ if (i < 8 * GMP_RND_MAX) - { -- printf ("mpfr_sin_cos and mpfr_sin/mpfr_cos disagree on %s,\nx = ", -- mpfr_print_rnd_mode (rnd)); -+ int j = i / GMP_RND_MAX; -+ if (j & 1) -+ mpfr_set_emin (MPFR_EMIN_MIN); -+ mpfr_set_si (x, (j & 2) ? 1 : -1, GMP_RNDN); -+ mpfr_set_exp (x, mpfr_get_emin ()); -+ rnd = (mpfr_rnd_t) (i % GMP_RND_MAX); -+ flags_before = 0; -+ if (j & 4) -+ mpfr_set_emax (-17); -+ } -+ else -+ { -+ tests_default_random (x, 256, -5, 50); -+ rnd = RND_RAND (); -+ flags_before = (randlimb () & 1) ? -+ (unsigned int) (MPFR_FLAGS_ALL ^ MPFR_FLAGS_ERANGE) : -+ (unsigned int) 0; -+ } -+ __gmpfr_flags = flags_before; -+ inex_sin = mpfr_sin (s1, x, rnd); -+ flags_sin = __gmpfr_flags; -+ __gmpfr_flags = flags_before; -+ inex_cos = mpfr_cos (c1, x, rnd); -+ flags_cos = __gmpfr_flags; -+ __gmpfr_flags = flags_before; -+ inex = !!mpfr_sin_cos (s2, c2, x, rnd); -+ flags = __gmpfr_flags; -+ inex_ref = inex_sin || inex_cos; -+ flags_ref = flags_sin | flags_cos; -+ if (!(mpfr_equal_p (s1, s2) && mpfr_equal_p (c1, c2)) || -+ inex != inex_ref || flags != flags_ref) -+ { -+ printf ("mpfr_sin_cos and mpfr_sin/mpfr_cos disagree on %s," -+ " i = %d\nx = ", mpfr_print_rnd_mode (rnd), i); - mpfr_dump (x); - printf ("s1 = "); - mpfr_dump (s1); -@@ -408,9 +441,16 @@ - mpfr_dump (c1); - printf ("c2 = "); - mpfr_dump (c2); -+ printf ("inex_sin = %d, inex_cos = %d, inex = %d (expected %d)\n", -+ inex_sin, inex_cos, inex, inex_ref); -+ printf ("flags_sin = 0x%x, flags_cos = 0x%x, " -+ "flags = 0x%x (expected 0x%x)\n", -+ flags_sin, flags_cos, flags, flags_ref); - exit (1); - } - mpfr_clears (x, s1, s2, c1, c2, (mpfr_ptr) 0); -+ mpfr_set_emin (emin); -+ mpfr_set_emax (emax); - } - } - -diff -Naurd mpfr-2.4.2-a/version.c mpfr-2.4.2-b/version.c ---- mpfr-2.4.2-a/version.c 2009-11-30 02:43:08.000000000 +0000 -+++ mpfr-2.4.2-b/version.c 2009-12-07 13:37:12.000000000 +0000 -@@ -25,5 +25,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.4.2"; -+ return "2.4.2-p1"; - } diff --git a/pkgs/development/libraries/mpfr/patch02.patch b/pkgs/development/libraries/mpfr/patch02.patch deleted file mode 100644 index bc2f267acc05..000000000000 --- a/pkgs/development/libraries/mpfr/patch02.patch +++ /dev/null @@ -1,75 +0,0 @@ -From http://www.mpfr.org/mpfr-2.4.2/: -Due to a change in GCC 4.4 internals for MIPS, the MPFR build fails on MIPS processors with GCC 4.4 and later. The longlong.h patch (written by AurĂ©lien Jarno) solves this problem. -[Changeset: 6638] - -diff -Naurd mpfr-2.4.2-a/PATCHES mpfr-2.4.2-b/PATCHES ---- mpfr-2.4.2-a/PATCHES 2009-12-18 12:03:30.000000000 +0000 -+++ mpfr-2.4.2-b/PATCHES 2009-12-18 12:05:19.000000000 +0000 -@@ -0,0 +1 @@ -+longlong.h -diff -Naurd mpfr-2.4.2-a/VERSION mpfr-2.4.2-b/VERSION ---- mpfr-2.4.2-a/VERSION 2009-12-07 13:37:12.000000000 +0000 -+++ mpfr-2.4.2-b/VERSION 2009-12-18 12:05:09.000000000 +0000 -@@ -1 +1 @@ --2.4.2-p1 -+2.4.2-p2 -diff -Naurd mpfr-2.4.2-a/mpfr-longlong.h mpfr-2.4.2-b/mpfr-longlong.h ---- mpfr-2.4.2-a/mpfr-longlong.h 2009-11-30 02:43:08.000000000 +0000 -+++ mpfr-2.4.2-b/mpfr-longlong.h 2009-12-18 12:04:29.000000000 +0000 -@@ -1011,7 +1011,15 @@ - #endif /* __m88000__ */ - - #if defined (__mips) && W_TYPE_SIZE == 32 --#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 -+#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) -+#define umul_ppmm(w1, w0, u, v) \ -+ do { \ -+ UDItype _r; \ -+ _r = (UDItype) u * v; \ -+ (w1) = _r >> 32; \ -+ (w0) = (USItype) _r; \ -+ } while (0) -+#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 - #define umul_ppmm(w1, w0, u, v) \ - __asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) - #else -@@ -1024,7 +1032,16 @@ - #endif /* __mips */ - - #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 --#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 -+#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4) -+typedef unsigned int UTItype __attribute__ ((mode (TI))); -+#define umul_ppmm(w1, w0, u, v) \ -+ do { \ -+ UTItype _r; \ -+ _r = (UTItype) u * v; \ -+ (w1) = _r >> 64; \ -+ (w0) = (UDItype) _r; \ -+ } while (0) -+#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 - #define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmultu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) - #else -diff -Naurd mpfr-2.4.2-a/mpfr.h mpfr-2.4.2-b/mpfr.h ---- mpfr-2.4.2-a/mpfr.h 2009-12-07 13:37:12.000000000 +0000 -+++ mpfr-2.4.2-b/mpfr.h 2009-12-18 12:05:09.000000000 +0000 -@@ -27,7 +27,7 @@ - #define MPFR_VERSION_MAJOR 2 - #define MPFR_VERSION_MINOR 4 - #define MPFR_VERSION_PATCHLEVEL 2 --#define MPFR_VERSION_STRING "2.4.2-p1" -+#define MPFR_VERSION_STRING "2.4.2-p2" - - /* Macros dealing with MPFR VERSION */ - #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) -diff -Naurd mpfr-2.4.2-a/version.c mpfr-2.4.2-b/version.c ---- mpfr-2.4.2-a/version.c 2009-12-07 13:37:12.000000000 +0000 -+++ mpfr-2.4.2-b/version.c 2009-12-18 12:05:09.000000000 +0000 -@@ -25,5 +25,5 @@ - const char * - mpfr_get_version (void) - { -- return "2.4.2-p1"; -+ return "2.4.2-p2"; - } From b125bec491c05b546fbd605bf3b06cc7035b43f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 23 Aug 2010 18:29:39 +0000 Subject: [PATCH 142/282] acl: Remove unnecessary dependency on Libtool. svn path=/nixpkgs/branches/stdenv-updates/; revision=23373 --- pkgs/development/libraries/acl/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix index d3a3bbd38c53..5ce81105fa32 100644 --- a/pkgs/development/libraries/acl/default.nix +++ b/pkgs/development/libraries/acl/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, gettext, attr, libtool}: +{ stdenv, fetchurl, gettext, attr }: stdenv.mkDerivation rec { name = "acl-2.2.49"; @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { }; buildNativeInputs = [gettext]; - buildInputs = [attr libtool]; + buildInputs = [ attr ]; # Upstream use C++-style comments in C code. Remove them. # This comment breaks compilation if too strict gcc flags are used. @@ -18,7 +18,7 @@ stdenv.mkDerivation rec { sed -e '/^\/\//d' -i include/acl.h ''; - configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip ECHO=echo SED=sed AWK=gawk"; + configureFlags = "MAKE=make MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip ECHO=echo SED=sed AWK=gawk"; installTargets = "install install-lib install-dev"; From cdbe8d495c7e82a358b3a410d57f8145ac678903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 23 Aug 2010 19:56:39 +0000 Subject: [PATCH 143/282] Fixing mountall build after updating some gnu tools (autoconf and friends) svn path=/nixpkgs/branches/stdenv-updates/; revision=23375 --- pkgs/os-specific/linux/mountall/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/mountall/default.nix b/pkgs/os-specific/linux/mountall/default.nix index 530ff2508029..01108faaf588 100644 --- a/pkgs/os-specific/linux/mountall/default.nix +++ b/pkgs/os-specific/linux/mountall/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation { patches = [ ./no-plymouth.patch ]; - preConfigure = "autoreconf"; + preConfigure = "rm aclocal.m4; autoreconf"; buildInputs = [ pkgconfig libnih dbus.libs udev autoconf automake libtool ]; From 643eb3435e9033aa5500907830c941ce29ac4992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 23 Aug 2010 19:59:06 +0000 Subject: [PATCH 144/282] Moving back my attempt to build binutils before glibc in stdenvLinux. What I did results in segfaults in built binaries. svn merge -c -23370 ^/nixpkgs/branches/stdenv-updates svn path=/nixpkgs/branches/stdenv-updates/; revision=23376 --- pkgs/stdenv/linux/default.nix | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 5cc6d4277f34..5654a8ccaf58 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -160,30 +160,10 @@ rec { bootStdenv = stdenvLinuxBoot1; }; - # Create the first "real" standard environment. This one consists - # of bootstrap tools only, and a minimal Glibc to keep the GCC - # configure script happy. - stdenvLinuxBoot1half = stdenvBootFun { - gcc = wrapGCC { - libc = bootstrapGlibc; - binutils = stdenvLinuxBoot1Pkgs.binutils; - coreutils = bootstrapTools; - }; - inherit fetchurl; - }; - - - # 2) These are the packages that we can build with the first - # stdenv. We only need Glibc (in step 3). - stdenvLinuxBoot1halfPkgs = allPackages { - inherit system platform; - bootStdenv = stdenvLinuxBoot1half; - }; - # 3) Build Glibc with the bootstrap tools. The result is the full, # dynamically linked, final Glibc. - stdenvLinuxGlibc = stdenvLinuxBoot1halfPkgs.glibc; + stdenvLinuxGlibc = stdenvLinuxBoot1Pkgs.glibc; # 4) Construct a second stdenv identical to the first, except that @@ -197,7 +177,7 @@ rec { }; overrides = { glibc = stdenvLinuxGlibc; - inherit (stdenvLinuxBoot1halfPkgs) perl; + inherit (stdenvLinuxBoot1Pkgs) perl; }; inherit fetchurl; }) ["gcc" "binutils"]; @@ -235,7 +215,7 @@ rec { name = ""; }; overrides = { - inherit (stdenvLinuxBoot1halfPkgs) perl; + inherit (stdenvLinuxBoot1Pkgs) perl; }; inherit fetchurl; }; From 7ab81fe75ff09044150b69f8f60d2f82bf946ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Aug 2010 09:21:19 +0000 Subject: [PATCH 145/282] MPC 0.8.2. svn path=/nixpkgs/branches/stdenv-updates/; revision=23387 --- pkgs/development/libraries/mpc/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/mpc/default.nix b/pkgs/development/libraries/mpc/default.nix index e5ae5b76323b..c66c99cc576e 100644 --- a/pkgs/development/libraries/mpc/default.nix +++ b/pkgs/development/libraries/mpc/default.nix @@ -1,11 +1,11 @@ { fetchurl, stdenv, gmp, mpfr }: stdenv.mkDerivation rec { - name = "mpc-0.8.1"; + name = "mpc-0.8.2"; src = fetchurl { url = "http://www.multiprecision.org/mpc/download/${name}.tar.gz"; - sha256 = "1r73zqw8lnf0bkfsxn0znbwbfyacg94pd0l4aaixh7r5awvn0r76"; + sha256 = "1iw0ag28l5r88k7kpn6i89rqn3yhk2irqzk0d1mlb1la3paghydf"; }; buildInputs = [ gmp mpfr ]; From e7c47f424f14d4464abb805903a8050af2df6202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 24 Aug 2010 22:29:58 +0000 Subject: [PATCH 146/282] The uclibc used in bootstrap-tools needs some options to allow bzip2 to build with it. svn path=/nixpkgs/branches/stdenv-updates/; revision=23414 --- pkgs/stdenv/linux/make-bootstrap-tools.nix | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 6d23e3812f95..b89523cbc853 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -10,7 +10,15 @@ rec { aclSupport = false; }); - gccLinkStatic = wrapGCCWith (import ../../build-support/gcc-wrapper) uclibc + # bzip2 wants utime.h, a header 'legacy' in uclibc + uclibcForBzip2 = uclibc.override { + extraConfig = '' + UCLIBC_SUSV3_LEGACY y + UCLIBC_SUSV4_LEGACY y + ''; + }; + + gccLinkStatic = wrapGCCWith (import ../../build-support/gcc-wrapper) uclibcForBzip2 stdenv.gcc.gcc; stdenvLinkStatic = overrideGCC stdenv gccLinkStatic; From 0bfa3b030a07688a321d2a459917ae50064e906c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 25 Aug 2010 13:22:48 +0000 Subject: [PATCH 147/282] Finally I wrote well building binutils before glibc in stdenvLinux. I had done an attempt recently, unsuccesful, which ended in a recent revert. This change works. I even updated the comments in the file. svn path=/nixpkgs/branches/stdenv-updates/; revision=23425 --- pkgs/stdenv/linux/default.nix | 49 +++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 5654a8ccaf58..e1dd6d0edf2a 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -154,24 +154,46 @@ rec { # 2) These are the packages that we can build with the first - # stdenv. We only need Glibc (in step 3). + # stdenv. We only need binutils, because recent glibcs + # require recent binutils, and those in bootstrap-tools may + # be too old. (in step 3). stdenvLinuxBoot1Pkgs = allPackages { inherit system platform; bootStdenv = stdenvLinuxBoot1; }; + firstBinutils = stdenvLinuxBoot1Pkgs.binutils; + + # 3) 2nd stdenv that we will use to build only the glibc. + stdenvLinuxBoot1half = stdenvBootFun { + gcc = wrapGCC { + libc = bootstrapGlibc; + binutils = firstBinutils; + coreutils = bootstrapTools; + }; + inherit fetchurl; + }; + + + # 4) These are the packages that we can build with the 2nd + # stdenv. We only need Glibc (in step 5). + stdenvLinuxBoot1halfPkgs = allPackages { + inherit system platform; + bootStdenv = stdenvLinuxBoot1half; + }; + - # 3) Build Glibc with the bootstrap tools. The result is the full, + # 5) Build Glibc with the bootstrap tools. The result is the full, # dynamically linked, final Glibc. stdenvLinuxGlibc = stdenvLinuxBoot1Pkgs.glibc; - # 4) Construct a second stdenv identical to the first, except that + # 6) Construct a third stdenv identical to the 2nd, except that # this one uses the Glibc built in step 3. It still uses - # the rest of the bootstrap tools, including GCC. + # the recent binutils and rest of the bootstrap tools, including GCC. stdenvLinuxBoot2 = removeAttrs (stdenvBootFun { gcc = wrapGCC { - binutils = bootstrapTools; + binutils = stdenvLinuxBoot1Pkgs.binutils; coreutils = bootstrapTools; libc = stdenvLinuxGlibc; }; @@ -183,7 +205,7 @@ rec { }) ["gcc" "binutils"]; - # 5) The packages that can be built using the second stdenv. + # 7) The packages that can be built using the third stdenv. stdenvLinuxBoot2Pkgs = allPackages { inherit system platform; bootStdenv = stdenvLinuxBoot2; @@ -202,7 +224,7 @@ rec { }; }); - # 6) Construct a third stdenv identical to the second, except that + # 8) Construct a fourth stdenv identical to the second, except that # this one uses the dynamically linked GCC and Binutils from step # 5. The other tools (e.g. coreutils) are still from the # bootstrap tools. @@ -221,19 +243,20 @@ rec { }; - # 7) The packages that can be built using the third stdenv. + # 9) The packages that can be built using the fourth stdenv. stdenvLinuxBoot3Pkgs = allPackages { inherit system platform; bootStdenv = stdenvLinuxBoot3; }; - # 8) Construct the final stdenv. It uses the Glibc, GCC and - # Binutils built above, and adds in dynamically linked versions - # of all other tools. + # 10) Construct the final stdenv. It uses the Glibc, GCC and + # Binutils built above, and adds in dynamically linked versions + # of all other tools. # - # When updating stdenvLinux, make sure that the result has no - # dependency (`nix-store -qR') on bootstrapTools. + # When updating stdenvLinux, make sure that the result has no + # dependency (`nix-store -qR') on bootstrapTools or the + # first binutils built. stdenvLinux = import ../generic rec { name = "stdenv-linux"; From 0fa35eee66e86feebaec017c28db5ce06fa7b3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 25 Aug 2010 19:15:16 +0000 Subject: [PATCH 148/282] I still had an error in the stdenvLinux bootstrap; for the previous commit, I had a little svn mess in the working directory that ended up in a not working stdenvLinux. This time I even chose better names for the attributes, so they match better the comments. svn path=/nixpkgs/branches/stdenv-updates/; revision=23428 --- pkgs/stdenv/linux/default.nix | 48 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index e1dd6d0edf2a..f8be9c51bfae 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -165,7 +165,7 @@ rec { firstBinutils = stdenvLinuxBoot1Pkgs.binutils; # 3) 2nd stdenv that we will use to build only the glibc. - stdenvLinuxBoot1half = stdenvBootFun { + stdenvLinuxBoot2 = stdenvBootFun { gcc = wrapGCC { libc = bootstrapGlibc; binutils = firstBinutils; @@ -177,21 +177,21 @@ rec { # 4) These are the packages that we can build with the 2nd # stdenv. We only need Glibc (in step 5). - stdenvLinuxBoot1halfPkgs = allPackages { + stdenvLinuxBoot2Pkgs = allPackages { inherit system platform; - bootStdenv = stdenvLinuxBoot1half; + bootStdenv = stdenvLinuxBoot2; }; # 5) Build Glibc with the bootstrap tools. The result is the full, # dynamically linked, final Glibc. - stdenvLinuxGlibc = stdenvLinuxBoot1Pkgs.glibc; + 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. - stdenvLinuxBoot2 = removeAttrs (stdenvBootFun { + stdenvLinuxBoot3 = removeAttrs (stdenvBootFun { gcc = wrapGCC { binutils = stdenvLinuxBoot1Pkgs.binutils; coreutils = bootstrapTools; @@ -206,19 +206,19 @@ rec { # 7) The packages that can be built using the third stdenv. - stdenvLinuxBoot2Pkgs = allPackages { + stdenvLinuxBoot3Pkgs = allPackages { inherit system platform; - bootStdenv = stdenvLinuxBoot2; + bootStdenv = stdenvLinuxBoot3; }; - gccWithStaticLibs = stdenvLinuxBoot2Pkgs.gcc.gcc.override (rec { - ppl = stdenvLinuxBoot2Pkgs.ppl.override { + gccWithStaticLibs = stdenvLinuxBoot3Pkgs.gcc.gcc.override (rec { + ppl = stdenvLinuxBoot3Pkgs.ppl.override { static = true; - gmpxx = stdenvLinuxBoot2Pkgs.gmpxx.override { + gmpxx = stdenvLinuxBoot3Pkgs.gmpxx.override { static = true; }; }; - cloogppl = stdenvLinuxBoot2Pkgs.cloogppl.override { + cloogppl = stdenvLinuxBoot3Pkgs.cloogppl.override { inherit ppl; static = true; }; @@ -228,9 +228,9 @@ rec { # this one uses the dynamically linked GCC and Binutils from step # 5. The other tools (e.g. coreutils) are still from the # bootstrap tools. - stdenvLinuxBoot3 = stdenvBootFun { + stdenvLinuxBoot4 = stdenvBootFun { gcc = wrapGCC rec { - inherit (stdenvLinuxBoot2Pkgs) binutils; + inherit (stdenvLinuxBoot3Pkgs) binutils; coreutils = bootstrapTools; libc = stdenvLinuxGlibc; gcc = gccWithStaticLibs; @@ -244,9 +244,9 @@ rec { # 9) The packages that can be built using the fourth stdenv. - stdenvLinuxBoot3Pkgs = allPackages { + stdenvLinuxBoot4Pkgs = allPackages { inherit system platform; - bootStdenv = stdenvLinuxBoot3; + bootStdenv = stdenvLinuxBoot4; }; @@ -265,31 +265,31 @@ rec { preHook = builtins.toFile "prehook.sh" commonPreHook; initialPath = - ((import ../common-path.nix) {pkgs = stdenvLinuxBoot3Pkgs;}) - ++ [stdenvLinuxBoot3Pkgs.patchelf]; + ((import ../common-path.nix) {pkgs = stdenvLinuxBoot4Pkgs;}) + ++ [stdenvLinuxBoot4Pkgs.patchelf]; gcc = wrapGCC rec { - inherit (stdenvLinuxBoot2Pkgs) binutils; - inherit (stdenvLinuxBoot3Pkgs) coreutils; + inherit (stdenvLinuxBoot3Pkgs) binutils; + inherit (stdenvLinuxBoot4Pkgs) coreutils; libc = stdenvLinuxGlibc; gcc = gccWithStaticLibs; - shell = stdenvLinuxBoot3Pkgs.bash + "/bin/bash"; + shell = stdenvLinuxBoot4Pkgs.bash + "/bin/bash"; name = ""; }; - shell = stdenvLinuxBoot3Pkgs.bash + "/bin/bash"; + shell = stdenvLinuxBoot4Pkgs.bash + "/bin/bash"; fetchurlBoot = fetchurl; extraAttrs = { - inherit (stdenvLinuxBoot2Pkgs) glibc; + inherit (stdenvLinuxBoot3Pkgs) glibc; inherit platform; }; overrides = { inherit gcc; - inherit (stdenvLinuxBoot2Pkgs) binutils glibc; - inherit (stdenvLinuxBoot3Pkgs) + inherit (stdenvLinuxBoot3Pkgs) binutils glibc; + inherit (stdenvLinuxBoot4Pkgs) gzip bzip2 bash coreutils diffutils findutils gawk gnumake gnused gnutar gnugrep gnupatch patchelf attr acl; From 94324d95b39ff04dd5cf0f4d0eb0c36ce7c6eaf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 09:58:53 +0000 Subject: [PATCH 149/282] Fix to make procps build with gnumake 3.82 svn path=/nixpkgs/branches/stdenv-updates/; revision=23492 --- pkgs/os-specific/linux/procps/default.nix | 2 +- pkgs/os-specific/linux/procps/gnumake3.82.patch | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkgs/os-specific/linux/procps/gnumake3.82.patch diff --git a/pkgs/os-specific/linux/procps/default.nix b/pkgs/os-specific/linux/procps/default.nix index 4a74218aa369..9270e4c6c0e1 100644 --- a/pkgs/os-specific/linux/procps/default.nix +++ b/pkgs/os-specific/linux/procps/default.nix @@ -7,6 +7,6 @@ stdenv.mkDerivation { url = http://procps.sourceforge.net/procps-3.2.8.tar.gz; sha256 = "0d8mki0q4yamnkk4533kx8mc0jd879573srxhg6r2fs3lkc6iv8i"; }; - patches = [./makefile.patch ./procps-build.patch]; + patches = [./makefile.patch ./procps-build.patch ./gnumake3.82.patch]; buildInputs = [ncurses]; } diff --git a/pkgs/os-specific/linux/procps/gnumake3.82.patch b/pkgs/os-specific/linux/procps/gnumake3.82.patch new file mode 100644 index 000000000000..2b1f28d4bce7 --- /dev/null +++ b/pkgs/os-specific/linux/procps/gnumake3.82.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile b/Makefile +index 09fb3ed..59eba16 100644 +--- a/Makefile ++++ b/Makefile +@@ -174,7 +174,7 @@ INSTALL := $(BINFILES) $(MANFILES) + # want this rule first, use := on ALL, and ALL not filled in yet + all: do_all + +--include */module.mk ++-include proc/module.mk ps/module.mk + + do_all: $(ALL) + From ffef67e28fb495f29c001cfe548d81ecc938ebbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 09:59:08 +0000 Subject: [PATCH 150/282] Updating nixSqlite, so I can get the latest build_remote.pl hook svn path=/nixpkgs/branches/stdenv-updates/; revision=23493 --- pkgs/tools/package-management/nix/sqlite.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/package-management/nix/sqlite.nix b/pkgs/tools/package-management/nix/sqlite.nix index b6b87633249d..40577d673a90 100644 --- a/pkgs/tools/package-management/nix/sqlite.nix +++ b/pkgs/tools/package-management/nix/sqlite.nix @@ -4,11 +4,11 @@ }: stdenv.mkDerivation rec { - name = "nix-0.16pre22953"; + name = "nix-0.16pre23483"; src = fetchurl { - url = "http://hydra.nixos.org/build/527157/download/4/${name}.tar.bz2"; - sha256 = "7fe185f49bda5281274b203467d206a6a76a762f742a93adeca71ba63470f71e"; + url = "http://hydra.nixos.org/build/608299/download/4/${name}.tar.bz2"; + sha256 = "464baf7b8b5976a10585d51857543c2b63e1e29b2380cede79a710eac5ee07e4"; }; buildInputs = [ perl curl openssl ]; From 5557a869a00230a31a079a1620baf07dee9937a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 09:59:52 +0000 Subject: [PATCH 151/282] Making mountall build on mips. svn path=/nixpkgs/branches/stdenv-updates/; revision=23494 --- pkgs/os-specific/linux/mountall/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/mountall/default.nix b/pkgs/os-specific/linux/mountall/default.nix index 01108faaf588..971795d20ec9 100644 --- a/pkgs/os-specific/linux/mountall/default.nix +++ b/pkgs/os-specific/linux/mountall/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, libnih, dbus, udev, autoconf, automake, libtool }: +{ stdenv, fetchurl, pkgconfig, libnih, dbus, udev, autoconf, automake, libtool, gettext }: stdenv.mkDerivation { name = "mountall-2.15"; @@ -10,9 +10,9 @@ stdenv.mkDerivation { patches = [ ./no-plymouth.patch ]; - preConfigure = "rm aclocal.m4; autoreconf"; + preConfigure = "rm -R aclocal.m4; gettextize -f; autoreconf -vfi"; - buildInputs = [ pkgconfig libnih dbus.libs udev autoconf automake libtool ]; + buildInputs = [ pkgconfig libnih dbus.libs udev autoconf automake libtool gettext ]; meta = { homepage = https://launchpad.net/ubuntu/+source/mountall; From 9fa49630a2298ccfbaf800f0c2853f0421a605db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 10:00:08 +0000 Subject: [PATCH 152/282] Making nfs-utils build on mips (I had to tell it where rpcgen is) svn path=/nixpkgs/branches/stdenv-updates/; revision=23495 --- pkgs/os-specific/linux/nfs-utils/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix index 752593ed38de..a5afe730476a 100644 --- a/pkgs/os-specific/linux/nfs-utils/default.nix +++ b/pkgs/os-specific/linux/nfs-utils/default.nix @@ -15,6 +15,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--disable-gss" "--disable-nfsv4" "--disable-nfsv41" "--disable-tirpc" "--with-statedir=/var/lib/nfs" + "--with-rpcgen=${stdenv.glibc}/bin/rpcgen" ]; patchPhase = From e8d6adbf3c1e51bac3568753fb6a21db445c4394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 10:00:37 +0000 Subject: [PATCH 153/282] Removing dmidecode on non-PC platforms for HAL svn path=/nixpkgs/branches/stdenv-updates/; revision=23496 --- pkgs/os-specific/linux/hal/default.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/hal/default.nix b/pkgs/os-specific/linux/hal/default.nix index 055bb2ab0cdc..515285d64011 100644 --- a/pkgs/os-specific/linux/hal/default.nix +++ b/pkgs/os-specific/linux/hal/default.nix @@ -7,6 +7,12 @@ assert stdenv ? glibc; +let + isPC = stdenv.isi686 || stdenv.isx86_64; + changeDmidecode = if isPC then + "--replace /usr/sbin/dmidecode ${dmidecode}/sbin/dmidecode" + else ""; +in stdenv.mkDerivation rec { name = "hal-0.5.14"; @@ -33,7 +39,7 @@ stdenv.mkDerivation rec { ''; propagatedBuildInputs = [ libusb ] - ++ stdenv.lib.optional (stdenv.isi686 || stdenv.isx86_64) [ libsmbios ]; + ++ stdenv.lib.optional isPC [ libsmbios ]; preConfigure = '' for i in hald/linux/probing/probe-smbios.c hald/linux/osspec.c \ @@ -43,7 +49,7 @@ stdenv.mkDerivation rec { tools/linux/hal-*-linux do substituteInPlace $i \ - --replace /usr/sbin/dmidecode ${dmidecode}/sbin/dmidecode \ + ${changeDmidecode} \ ${if udev != null then "--replace /sbin/udevadm ${udev}/sbin/udevadm" else ""} \ --replace /bin/mount ${utillinuxng}/bin/mount \ --replace /bin/umount ${utillinuxng}/bin/umount \ From daa0f1335849b47d49bacb0592537223f868995e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 29 Aug 2010 10:01:46 +0000 Subject: [PATCH 154/282] Fixing the kernel for the fuloong (I should never had deactivated IDE, otherwise it cannot find the hd controller) svn path=/nixpkgs/branches/stdenv-updates/; revision=23497 --- pkgs/top-level/platforms.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index a52f7ab05b59..c3d9b1005f71 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -201,9 +201,6 @@ rec { BLK_DEV_CMD640_ENHANCED n FUSE_FS m - - # To get /dev/sda devices instead of /dev/hda - IDE n ''; kernelTarget = "vmlinux"; uboot = null; From 7608617484cdb1713032864b6a46f5e92ced2edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:34:19 +0000 Subject: [PATCH 155/282] Updating nasm (the old url did not work) svn path=/nixpkgs/branches/stdenv-updates/; revision=23574 --- pkgs/development/compilers/nasm/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/compilers/nasm/default.nix b/pkgs/development/compilers/nasm/default.nix index e622f035ec4b..688a81f4b3e4 100644 --- a/pkgs/development/compilers/nasm/default.nix +++ b/pkgs/development/compilers/nasm/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation rec { - name = "nasm-2.08.01"; + name = "nasm-2.09"; src = fetchurl { - url = "mirror://sourceforge/nasm/${name}.tar.bz2"; - sha256 = "1ilbvn5hfwhbfxsxdcnnpxy640hqgjjp5wlhfjh7biy0h49rm6q4"; + url = http://www.nasm.us/pub/nasm/releasebuilds/2.09/nasm-2.09.tar.bz2; + sha256 = "06kv1ii8d3jwq5mczbyx6zc7k1acdwjdfjblv78mglf161i82j4m"; }; meta = { From 517cc513318cc9db64bfaef3eee742229cc8801c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:34:34 +0000 Subject: [PATCH 156/282] Making alsa build on mips with a patch svn path=/nixpkgs/branches/stdenv-updates/; revision=23575 --- pkgs/os-specific/linux/alsa-lib/default.nix | 5 +++ .../linux/alsa-lib/mips-atomic.patch | 39 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 pkgs/os-specific/linux/alsa-lib/mips-atomic.patch diff --git a/pkgs/os-specific/linux/alsa-lib/default.nix b/pkgs/os-specific/linux/alsa-lib/default.nix index aaa714d8d590..5ebf52644398 100644 --- a/pkgs/os-specific/linux/alsa-lib/default.nix +++ b/pkgs/os-specific/linux/alsa-lib/default.nix @@ -39,5 +39,10 @@ stdenv.mkDerivation rec { See http://thread.gmane.org/gmane.linux.distributions.nixos/3435 */ ./alsa-plugin-dirs.patch + + /* patch provided by larsc on irc. + it may be a compiler problem on mips; without this, alsa does not build + on mips, because lacks some symbols atomic_add/atomic_sub */ + ./mips-atomic.patch ]; } diff --git a/pkgs/os-specific/linux/alsa-lib/mips-atomic.patch b/pkgs/os-specific/linux/alsa-lib/mips-atomic.patch new file mode 100644 index 000000000000..3af7c5d4debf --- /dev/null +++ b/pkgs/os-specific/linux/alsa-lib/mips-atomic.patch @@ -0,0 +1,39 @@ +diff --git a/include/iatomic.h b/include/iatomic.h +index e92dbfd..364bc5c 100644 +--- a/include/iatomic.h ++++ b/include/iatomic.h +@@ -720,7 +720,7 @@ typedef struct { volatile int counter; } atomic_t; + * Atomically adds @i to @v. Note that the guaranteed useful range + * of an atomic_t is only 24 bits. + */ +-extern __inline__ void atomic_add(int i, atomic_t * v) ++static __inline__ void atomic_add(int i, atomic_t * v) + { + unsigned long temp; + +@@ -744,7 +744,7 @@ extern __inline__ void atomic_add(int i, atomic_t * v) + * Atomically subtracts @i from @v. Note that the guaranteed + * useful range of an atomic_t is only 24 bits. + */ +-extern __inline__ void atomic_sub(int i, atomic_t * v) ++static __inline__ void atomic_sub(int i, atomic_t * v) + { + unsigned long temp; + +@@ -763,7 +763,7 @@ extern __inline__ void atomic_sub(int i, atomic_t * v) + /* + * Same as above, but return the result value + */ +-extern __inline__ int atomic_add_return(int i, atomic_t * v) ++static __inline__ int atomic_add_return(int i, atomic_t * v) + { + unsigned long temp, result; + +@@ -784,7 +784,7 @@ extern __inline__ int atomic_add_return(int i, atomic_t * v) + return result; + } + +-extern __inline__ int atomic_sub_return(int i, atomic_t * v) ++static __inline__ int atomic_sub_return(int i, atomic_t * v) + { + unsigned long temp, result; From ccf8be72c625eee704b68c25364be3eaf7818418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:34:44 +0000 Subject: [PATCH 157/282] Making the x264 libs build with PIC on non-i686, as it's the only platform I know that does not need PIC for shared libraries. svn path=/nixpkgs/branches/stdenv-updates/; revision=23576 --- pkgs/development/libraries/x264/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/x264/default.nix b/pkgs/development/libraries/x264/default.nix index 4bd1c97fb6cd..9e5676e20123 100644 --- a/pkgs/development/libraries/x264/default.nix +++ b/pkgs/development/libraries/x264/default.nix @@ -13,7 +13,8 @@ stdenv.mkDerivation rec { sed -i s,/bin/bash,${stdenv.shell}, configure version.sh ''; - configureFlags = [ "--enable-shared" ]; + configureFlags = [ "--enable-shared" ] + ++ stdenv.lib.optional (!stdenv.isi686) "--enable-pic"; buildInputs = [ yasm ]; From 50b3cc05c7dc8ce44be2e37c24b663ef41dd805e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:34:53 +0000 Subject: [PATCH 158/282] Updating the config.guess of aalib, which did not know about the fuloong mips64. svn path=/nixpkgs/branches/stdenv-updates/; revision=23577 --- pkgs/development/libraries/aalib/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/aalib/default.nix b/pkgs/development/libraries/aalib/default.nix index d3230c1fedcd..2da006a6cebe 100644 --- a/pkgs/development/libraries/aalib/default.nix +++ b/pkgs/development/libraries/aalib/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, ncurses}: +{stdenv, fetchurl, ncurses, automake}: stdenv.mkDerivation { name = "aalib-1.4rc4"; @@ -7,6 +7,12 @@ stdenv.mkDerivation { url = mirror://sourceforge/aa-project/aalib-1.4rc4.tar.gz; md5 = "d5aa8e9eae07b7441298b5c30490f6a6"; }; + + # The fuloong2f is not supported by aalib still + preConfigure = '' + cp ${automake}/share/automake*/config.{sub,guess} . + ''; + buildInputs = [ncurses]; inherit ncurses; } From a88f348d5b8414dcc9bdd694403cb2c94aa0b7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:36:09 +0000 Subject: [PATCH 159/282] Make mplayer build on the loongson2f svn path=/nixpkgs/branches/stdenv-updates/; revision=23578 --- pkgs/applications/video/MPlayer/default.nix | 6 +-- pkgs/development/libraries/ffmpeg/default.nix | 39 ++++++++++--------- pkgs/development/libraries/libvpx/default.nix | 15 ++++++- pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/pkgs/applications/video/MPlayer/default.nix b/pkgs/applications/video/MPlayer/default.nix index 879845793e25..47c68df1ba35 100644 --- a/pkgs/applications/video/MPlayer/default.nix +++ b/pkgs/applications/video/MPlayer/default.nix @@ -5,7 +5,7 @@ , libXinerama ? null, libXrandr ? null, libdvdnav ? null , cdparanoia ? null, cddaSupport ? true , amrnb ? null, amrwb ? null, amrSupport ? false -, x11Support ? true, libX11 ? null +, x11Support ? true, libX11 ? null, libXext ? null , jackaudioSupport ? false, jackaudio ? null , x264Support ? false, x264 ? null , xvidSupport ? false, xvidcore ? null @@ -72,7 +72,7 @@ stdenv.mkDerivation rec { buildInputs = [ freetype zlib pkgconfig ] - ++ stdenv.lib.optional x11Support [ libX11 mesa ] + ++ stdenv.lib.optional x11Support [ libX11 libXext mesa ] ++ stdenv.lib.optional alsaSupport alsaLib ++ stdenv.lib.optional xvSupport libXv ++ stdenv.lib.optional theoraSupport libtheora @@ -96,7 +96,7 @@ stdenv.mkDerivation rec { ${if dvdnavSupport then "--enable-dvdnav --enable-dvdread --disable-dvdread-internal" else ""} ${if x264Support then "--enable-x264 --extra-libs=-lx264" else ""} ${if codecs != null then "--codecsdir=${codecs}" else ""} - --enable-runtime-cpudetection + ${if (stdenv.isi686 || stdenv.isx86_64) then "--enable-runtime-cpudetection" else ""} ${if x11Support then "--enable-x11" else ""} --disable-xanim --disable-ivtv diff --git a/pkgs/development/libraries/ffmpeg/default.nix b/pkgs/development/libraries/ffmpeg/default.nix index 01479564dd7f..d9f9d0af01de 100644 --- a/pkgs/development/libraries/ffmpeg/default.nix +++ b/pkgs/development/libraries/ffmpeg/default.nix @@ -1,5 +1,5 @@ {stdenv, fetchurl, faad2, libtheora, speex, libvorbis, x264, pkgconfig, xvidcore, lame, yasm -, libvpx}: +, vpxSupport ? false, libvpx ? null}: stdenv.mkDerivation { name = "ffmpeg-0.6"; @@ -12,25 +12,26 @@ stdenv.mkDerivation { # `--enable-gpl' (as well as the `postproc' and `swscale') mean that # the resulting library is GPL'ed, so it can only be used in GPL'ed # applications. - configureFlags = '' - --enable-gpl - --enable-postproc - --enable-swscale - --disable-ffserver - --disable-ffplay - --enable-libfaad - --enable-shared - --enable-libtheora - --enable-libvorbis - --enable-libspeex - --enable-libx264 - --enable-libxvid - --enable-libmp3lame - --enable-runtime-cpudetect - --enable-libvpx - ''; + configureFlags = [ + "--enable-gpl" + "--enable-postproc" + "--enable-swscale" + "--disable-ffserver" + "--disable-ffplay" + "--enable-libfaad" + "--enable-shared" + "--enable-libtheora" + "--enable-libvorbis" + "--enable-libspeex" + "--enable-libx264" + "--enable-libxvid" + "--enable-libmp3lame" + "--enable-runtime-cpudetect" + ] ++ + stdenv.lib.optional vpxSupport "--enable-libvpx"; - buildInputs = [faad2 libtheora speex libvorbis x264 pkgconfig xvidcore lame yasm libvpx]; + buildInputs = [ faad2 libtheora speex libvorbis x264 pkgconfig xvidcore lame yasm ] + ++ stdenv.lib.optional vpxSupport libvpx; meta = { homepage = http://www.ffmpeg.org/; diff --git a/pkgs/development/libraries/libvpx/default.nix b/pkgs/development/libraries/libvpx/default.nix index 7cd2e4d639b2..e6c8149edc09 100644 --- a/pkgs/development/libraries/libvpx/default.nix +++ b/pkgs/development/libraries/libvpx/default.nix @@ -11,14 +11,25 @@ stdenv.mkDerivation rec { patchPhase = '' sed -e 's,/bin/bash,${bash}/bin/bash,' -i configure build/make/version.sh \ examples/gen_example_code.sh + sed -e '/enable linux/d' -i configure ''; - configurePhase = '' + configureScript = "../configure"; + + preConfigure = '' mkdir -p build cd build - ../configure --disable-install-srcs --disable-examples --enable-vp8 --enable-runtime-cpu-detect --enable-shared --enable-pic ''; + configureFlags = [ + "--disable-install-srcs" + "--disable-examples" + "--enable-vp8" + "--enable-runtime-cpu-detect" + "--enable-shared" + "--enable-pic" + ]; + installPhase = '' make quiet=false DIST_DIR=$out install ''; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 05886c41130f..40f9dcd5dace 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2723,7 +2723,9 @@ let fcgi = callPackage ../development/libraries/fcgi { }; - ffmpeg = callPackage ../development/libraries/ffmpeg { }; + ffmpeg = callPackage ../development/libraries/ffmpeg { + vpxSupport = if !stdenv.isMips then true else false; + }; fftw = callPackage ../development/libraries/fftw { singlePrecision = false; From 4b9c06ee6ed5839f46b982839567bbf313d9bb92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:36:24 +0000 Subject: [PATCH 160/282] Updating gstreamer, and setting some patch tricks so it builds with gnumake 3.82 svn path=/nixpkgs/branches/stdenv-updates/; revision=23579 --- pkgs/development/libraries/gstreamer/default.nix | 2 +- .../libraries/gstreamer/gnonlin/default.nix | 8 ++++---- .../libraries/gstreamer/gst-ffmpeg/default.nix | 4 ++-- .../libraries/gstreamer/gst-plugins-base/default.nix | 9 ++++++--- .../libraries/gstreamer/gst-plugins-good/default.nix | 4 ++-- .../libraries/gstreamer/gstreamer/default.nix | 12 ++++++++---- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/pkgs/development/libraries/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/default.nix index 3bb8ea84a2af..a41e69488921 100644 --- a/pkgs/development/libraries/gstreamer/default.nix +++ b/pkgs/development/libraries/gstreamer/default.nix @@ -2,7 +2,7 @@ args: with args; rec { gstreamer = makeOverridable (import ./gstreamer) { inherit (args) fetchurl stdenv perl bison flex - pkgconfig python which gtkdoc glib libxml2; + pkgconfig python which glib libxml2; }; gstPluginsBase = makeOverridable (import ./gst-plugins-base) { diff --git a/pkgs/development/libraries/gstreamer/gnonlin/default.nix b/pkgs/development/libraries/gstreamer/gnonlin/default.nix index 35f7f3b09860..aac3889ecd71 100644 --- a/pkgs/development/libraries/gstreamer/gnonlin/default.nix +++ b/pkgs/development/libraries/gstreamer/gnonlin/default.nix @@ -1,14 +1,14 @@ args: with args; stdenv.mkDerivation rec { - name = "gnonlin-0.10.14"; + name = "gnonlin-0.10.15"; src = fetchurl { urls = [ - "http://gstreamer.freedesktop.org/src/gnonlin/${name}.tar.gz" - "mirror://gentoo/distfiles/${name}.tar.gz" + "http://gstreamer.freedesktop.org/src/gnonlin/${name}.tar.bz2" + "mirror://gentoo/distfiles/${name}.tar.bz2" ]; - sha256 = "10gp3hz9a6hrrmdaa3i2ry79fyr402il1qr0vpsd6ayn02gcj93w"; + sha256 = "1yz0i3vzpadz5axwdb310bypl4rm1xy2n6mgajja0w2z6afnrfv0"; }; buildInputs = [ gstPluginsBase gstreamer pkgconfig ]; diff --git a/pkgs/development/libraries/gstreamer/gst-ffmpeg/default.nix b/pkgs/development/libraries/gstreamer/gst-ffmpeg/default.nix index c45af907aaba..65eb2bb034f7 100644 --- a/pkgs/development/libraries/gstreamer/gst-ffmpeg/default.nix +++ b/pkgs/development/libraries/gstreamer/gst-ffmpeg/default.nix @@ -1,14 +1,14 @@ { fetchurl, stdenv, pkgconfig, gstPluginsBase, bzip2 }: stdenv.mkDerivation rec { - name = "gst-ffmpeg-0.10.9"; + name = "gst-ffmpeg-0.10.11"; src = fetchurl { urls = [ "http://gstreamer.freedesktop.org/src/gst-ffmpeg/${name}.tar.bz2" "mirror://gentoo/distfiles/${name}.tar.bz2" ]; - sha256 = "05cg5jzl8wccsr495hgs7cgdkc6dfi1v218fsm5fv2slgly1pvb3"; + sha256 = "0bk9k9sccx9nvhjakacvq8gd6vp63x9ddmjrqkfdhkmgwlwa2dpz"; }; propagatedBuildInputs = [ gstPluginsBase ]; diff --git a/pkgs/development/libraries/gstreamer/gst-plugins-base/default.nix b/pkgs/development/libraries/gstreamer/gst-plugins-base/default.nix index 37d0a058ffff..db817918e021 100644 --- a/pkgs/development/libraries/gstreamer/gst-plugins-base/default.nix +++ b/pkgs/development/libraries/gstreamer/gst-plugins-base/default.nix @@ -4,17 +4,20 @@ , liboil, gtk, which, gtkdoc }: stdenv.mkDerivation rec { - name = "gst-plugins-base-0.10.26"; + name = "gst-plugins-base-0.10.30"; src = fetchurl { urls = [ "${meta.homepage}/src/gst-plugins-base/${name}.tar.bz2" "mirror://gentoo/distfiles/${name}.tar.bz2" ]; - sha256 = "0znxs3ls0hgc7vmllna3bazw217q1h9lmn5vhnclfadbb3flhvg0"; + sha256 = "1mw5n1w7l0hgyzf75srdxlh3knfgrmddbs2ah1f97s8b710qd4v3"; }; - patchPhase = "sed -i 's@/bin/echo@echo@g' configure"; + patchPhase = '' + sed -i 's@/bin/echo@echo@g' configure + sed -i -e 's/^ /\t/' docs/{libs,plugins}/Makefile.in + ''; # TODO : v4l, libvisual propagatedBuildInputs = [gstreamer libX11 libXv libXext alsaLib cdparanoia diff --git a/pkgs/development/libraries/gstreamer/gst-plugins-good/default.nix b/pkgs/development/libraries/gstreamer/gst-plugins-good/default.nix index 2998c89a51ea..8256a0afd45a 100644 --- a/pkgs/development/libraries/gstreamer/gst-plugins-good/default.nix +++ b/pkgs/development/libraries/gstreamer/gst-plugins-good/default.nix @@ -5,14 +5,14 @@ }: stdenv.mkDerivation rec { - name = "gst-plugins-good-0.10.18"; + name = "gst-plugins-good-0.10.24"; src = fetchurl { urls = [ "${meta.homepage}/src/gst-plugins-good/${name}.tar.bz2" "mirror://gentoo/distfiles/${name}.tar.bz2" ]; - sha256 = "1fabn9h4z1p4h35nrw9fyjhcnl1z6cnikmpcb9q6fd312mr8hfqj"; + sha256 = "1gnhw86yx0362hvmnihiq5d7i710ag9zlg636dlcdvxqqp4slx7j"; }; propagatedBuildInputs = [gstPluginsBase aalib cairo flac hal libjpeg diff --git a/pkgs/development/libraries/gstreamer/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/gstreamer/default.nix index 91a699f564fa..abb445b57a38 100644 --- a/pkgs/development/libraries/gstreamer/gstreamer/default.nix +++ b/pkgs/development/libraries/gstreamer/gstreamer/default.nix @@ -1,8 +1,8 @@ { fetchurl, stdenv, perl, bison, flex, pkgconfig, python -, which, gtkdoc, glib, libxml2 }: +, which, glib, libxml2 }: stdenv.mkDerivation rec { - name = "gstreamer-0.10.26"; + name = "gstreamer-0.10.30"; # TODO: Remove gtkdoc dependency on next upgrade src = fetchurl { @@ -10,12 +10,16 @@ stdenv.mkDerivation rec { "${meta.homepage}/src/gstreamer/${name}.tar.bz2" "mirror://gentoo/distfiles/${name}.tar.bz2" ]; - sha256 = "1gah0ggfavl5z2wmwmwgs3h3ppwk6q1a6k0klk7zj1ph5n2isbc6"; + sha256 = "0ajkfkchwpk5zlcis19laqbv84mi61cn3cqbdbrpyy93whdk1vz8"; }; - buildInputs = [perl bison flex pkgconfig python which gtkdoc ]; + buildInputs = [perl bison flex pkgconfig python which ]; propagatedBuildInputs = [glib libxml2]; + patchPhase = '' + sed -i -e 's/^ /\t/' docs/gst/Makefile.in docs/libs/Makefile.in docs/plugins/Makefile.in + ''; + configureFlags = '' --enable-failing-tests --localstatedir=/var --disable-gtk-doc --disable-docbook ''; From ea35aa383680d4da69c4cde37d0c381aa839531b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:36:35 +0000 Subject: [PATCH 161/282] Making scrollkeeper build in the loongson (config.guess trouble) svn path=/nixpkgs/branches/stdenv-updates/; revision=23580 --- pkgs/desktops/gnome-2.28/default.nix | 2 +- pkgs/desktops/gnome-2.28/desktop/scrollkeeper/default.nix | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/gnome-2.28/default.nix b/pkgs/desktops/gnome-2.28/default.nix index 1c358b591a6b..e6ee85ff6e11 100644 --- a/pkgs/desktops/gnome-2.28/default.nix +++ b/pkgs/desktops/gnome-2.28/default.nix @@ -227,7 +227,7 @@ rec { # Removed from recent GNOME releases, but still required scrollkeeper = import ./desktop/scrollkeeper { - inherit (pkgs) stdenv fetchurl pkgconfig perl perlXMLParser libxml2 libxslt docbook_xml_dtd_42; + inherit (pkgs) stdenv fetchurl pkgconfig perl perlXMLParser libxml2 libxslt docbook_xml_dtd_42 automake; }; gnome_doc_utils = import ./desktop/gnome-doc-utils { diff --git a/pkgs/desktops/gnome-2.28/desktop/scrollkeeper/default.nix b/pkgs/desktops/gnome-2.28/desktop/scrollkeeper/default.nix index a63d179ff948..97dcbf4e0041 100644 --- a/pkgs/desktops/gnome-2.28/desktop/scrollkeeper/default.nix +++ b/pkgs/desktops/gnome-2.28/desktop/scrollkeeper/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, pkgconfig, perl, perlXMLParser, libxml2, libxslt, docbook_xml_dtd_42}: +{stdenv, fetchurl, pkgconfig, perl, perlXMLParser, libxml2, libxslt, docbook_xml_dtd_42, automake}: stdenv.mkDerivation { name = "scrollkeeper-0.3.14"; @@ -6,9 +6,13 @@ stdenv.mkDerivation { url = mirror://gnome/sources/scrollkeeper/0.3/scrollkeeper-0.3.14.tar.bz2; sha256 = "08n1xgj1f53zahwm0wpn3jid3rfbhi3iwby0ilaaldnid5qriqgc"; }; + + # The fuloong2f is not supported by scrollkeeper-0.3.14 config.guess preConfigure = " substituteInPlace extract/dtds/Makefile.am --replace /usr/bin/xmlcatalog xmlcatalog + cp ${automake}/share/automake*/config.{sub,guess} . "; + buildInputs = [pkgconfig perl perlXMLParser libxml2 libxslt]; configureFlags = "--with-xml-catalog=${docbook_xml_dtd_42}/xml/dtd/docbook/docbook.cat"; } From cd8cd01badf631912fe88c7e9df0d4bb07a9c3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:36:46 +0000 Subject: [PATCH 162/282] Updating icewm and trying to make it build on mips svn path=/nixpkgs/branches/stdenv-updates/; revision=23581 --- pkgs/applications/window-managers/icewm/default.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/window-managers/icewm/default.nix b/pkgs/applications/window-managers/icewm/default.nix index 5394b7f507b2..0215467bdce6 100644 --- a/pkgs/applications/window-managers/icewm/default.nix +++ b/pkgs/applications/window-managers/icewm/default.nix @@ -1,18 +1,25 @@ -{ stdenv, fetchurl, gettext, libjpeg, libtiff, libungif, libpng, imlib, xlibs }: +{ stdenv, fetchurl, gettext, libjpeg, libtiff, libungif, libpng, imlib, xlibs, automake, pkgconfig, + gdk_pixbuf }: stdenv.mkDerivation rec { - name = "icewm-1.2.37"; + name = "icewm-1.3.6"; buildInputs = [ gettext libjpeg libtiff libungif libpng imlib xlibs.libX11 xlibs.libXft xlibs.libXext xlibs.libXinerama xlibs.libXrandr + pkgconfig gdk_pixbuf ]; src = fetchurl { url = "mirror://sourceforge/icewm/${name}.tar.gz"; - sha256 = "15852k96z2w19v3d02jynxyf6ld378hbkd6lpy64byysrmjh3dmz"; + sha256 = "1pr7rc10rddwvy4ncng4mf5fpxd1nqjsw34xba9ngsg32rg57b91"; }; + # The fuloong2f is not supported by 1.3.6 still + preConfigure = '' + cp ${automake}/share/automake*/config.{sub,guess} . + ''; + meta = { description = "A window manager for the X Window System"; homepage = http://www.icewm.org/; From c700d8c5ee77fa3b458f77b3285c50d37e0de15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:37:07 +0000 Subject: [PATCH 163/282] Patch that allows xulrunner (for firefox 3.6) build further. svn path=/nixpkgs/branches/stdenv-updates/; revision=23582 --- .../networking/browsers/firefox/3.6.nix | 2 +- .../firefox/xulrunner-chromium-mips.patch | 207 ++++++++++++++++++ 2 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 pkgs/applications/networking/browsers/firefox/xulrunner-chromium-mips.patch diff --git a/pkgs/applications/networking/browsers/firefox/3.6.nix b/pkgs/applications/networking/browsers/firefox/3.6.nix index 324fcda25add..2750b75e45af 100644 --- a/pkgs/applications/networking/browsers/firefox/3.6.nix +++ b/pkgs/applications/networking/browsers/firefox/3.6.nix @@ -48,7 +48,7 @@ rec { # To be removed when the change gets upstream. I don't know if the patch # affects xulrunner or firefox. - patches = [ ./symlinks-bug551152.patch ]; + patches = [ ./symlinks-bug551152.patch ./xulrunner-chromium-mips.patch ]; buildInputs = [ pkgconfig gtk perl zip libIDL libjpeg libpng zlib cairo bzip2 diff --git a/pkgs/applications/networking/browsers/firefox/xulrunner-chromium-mips.patch b/pkgs/applications/networking/browsers/firefox/xulrunner-chromium-mips.patch new file mode 100644 index 000000000000..d309f5fb6e80 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox/xulrunner-chromium-mips.patch @@ -0,0 +1,207 @@ +http://gentoo-overlays.zugaina.org/loongson/portage/net-libs/xulrunner/files/xulrunner-chromium-mips.patch + +diff --git a/ipc/chromium/src/base/atomicops.h b/ipc/chromium/src/base/atomicops.h +index 87df918..363bf63 100644 +--- a/ipc/chromium/src/base/atomicops.h ++++ b/ipc/chromium/src/base/atomicops.h +@@ -132,6 +132,8 @@ Atomic64 Release_Load(volatile const Atomic64* ptr); + #include "base/atomicops_internals_x86_gcc.h" + #elif defined(COMPILER_GCC) && defined(ARCH_CPU_ARM_FAMILY) + #include "base/atomicops_internals_arm_gcc.h" ++#elif defined(COMPILER_GCC) && defined(ARCH_CPU_MIPS_FAMILY) ++#include "base/atomicops_internals_mips_gcc.h" + #else + #error "Atomic operations are not supported on your platform" + #endif +diff --git a/ipc/chromium/src/base/atomicops_internals_mips_gcc.h b/ipc/chromium/src/base/atomicops_internals_mips_gcc.h +new file mode 100644 +index 0000000..d1b87ee +--- /dev/null ++++ b/ipc/chromium/src/base/atomicops_internals_mips_gcc.h +@@ -0,0 +1,160 @@ ++// Copyright (c) 2010 Zhang, Le ++// Use of this source code is governed by GPLv2. ++ ++// This file is an internal atomic implementation, use base/atomicops.h instead. ++ ++#ifndef BASE_ATOMICOPS_INTERNALS_MIPS_GCC_H_ ++#define BASE_ATOMICOPS_INTERNALS_MIPS_GCC_H_ ++ ++#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") ++ ++namespace base { ++namespace subtle { ++ ++// 32-bit low-level operations on any platform. ++ ++inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, ++ Atomic32 old_value, ++ Atomic32 new_value) { ++ Atomic32 prev; ++ __asm__ __volatile__( ++ " .set push \n" ++ " .set noat \n" ++ " .set mips3 \n" ++ "1: ll %0, %2 \n" ++ " bne %0, %z3, 2f \n" ++ " .set mips0 \n" ++ " move $1, %z4 \n" ++ " .set mips3 \n" ++ " sc $1, %1 \n" ++ " beqz $1, 3f \n" ++ "2: \n" ++ " .subsection 2 \n" ++ "3: b 1b \n" ++ " .previous \n" ++ " .set pop \n" ++ : "=&r" (prev), "=R" (*ptr) ++ : "R" (*ptr), "Jr" (old_value), "Jr" (new_value) ++ : "memory"); ++ return prev; ++} ++ ++inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, ++ Atomic32 new_value) { ++ unsigned int ret_value; ++ unsigned long dummy; ++ ++ __asm__ __volatile__(" .set mips3 \n" ++ "1: ll %0, %3 # xchg_u32 \n" ++ " .set mips0 \n" ++ " move %2, %z4 \n" ++ " .set mips3 \n" ++ " sc %2, %1 \n" ++ " beqz %2, 2f \n" ++ " .subsection 2 \n" ++ "2: b 1b \n" ++ " .previous \n" ++ " .set mips0 \n" ++ : "=&r" (ret_value), "=m" (*ptr), "=&r" (dummy) ++ : "R" (*ptr), "Jr" (new_value) ++ : "memory"); ++ ++ return ret_value; // Now it's the previous value. ++} ++ ++inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, ++ Atomic32 increment) { ++ Atomic32 temp, result; ++ __asm__ __volatile__( ++ " .set mips3 \n" ++ "1: ll %1, %2 # atomic_add_return \n" ++ " addu %0, %1, %3 \n" ++ " sc %0, %2 \n" ++ " beqz %0, 2f \n" ++ " addu %0, %1, %3 \n" ++ " .subsection 2 \n" ++ "2: b 1b \n" ++ " .previous \n" ++ " .set mips0 \n" ++ : "=&r" (result), "=&r" (temp), "=m" (*ptr) ++ : "Ir" (increment), "m" (*ptr) ++ : "memory"); ++ return result; ++} ++ ++inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, ++ Atomic32 increment) { ++ Atomic32 temp, result; ++ __asm__ __volatile__( ++ " .set mips3 \n" ++ "1: ll %1, %2 # atomic_add_return \n" ++ " addu %0, %1, %3 \n" ++ " sc %0, %2 \n" ++ " beqz %0, 2f \n" ++ " addu %0, %1, %3 \n" ++ " .subsection 2 \n" ++ "2: b 1b \n" ++ " .previous \n" ++ " .set mips0 \n" ++ : "=&r" (result), "=&r" (temp), "=m" (*ptr) ++ : "Ir" (increment), "m" (*ptr) ++ : "memory"); ++ __asm__ __volatile__("sync" : : : "memory"); ++ return result; ++} ++ ++inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, ++ Atomic32 old_value, ++ Atomic32 new_value) { ++ Atomic32 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value); ++ __asm__ __volatile__("sync" : : : "memory"); ++ return x; ++} ++ ++inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, ++ Atomic32 old_value, ++ Atomic32 new_value) { ++ return NoBarrier_CompareAndSwap(ptr, old_value, new_value); ++} ++ ++inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { ++ *ptr = value; ++} ++ ++inline void MemoryBarrier() { ++ __asm__ __volatile__("sync" : : : "memory"); ++} ++ ++inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { ++ *ptr = value; ++ __asm__ __volatile__("sync" : : : "memory"); ++} ++ ++inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { ++ ATOMICOPS_COMPILER_BARRIER(); ++ *ptr = value; // An x86 store acts as a release barrier. ++ // See comments in Atomic64 version of Release_Store(), below. ++} ++ ++inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { ++ return *ptr; ++} ++ ++inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { ++ Atomic32 value = *ptr; // An x86 load acts as a acquire barrier. ++ // See comments in Atomic64 version of Release_Store(), below. ++ ATOMICOPS_COMPILER_BARRIER(); ++ return value; ++} ++ ++inline Atomic32 Release_Load(volatile const Atomic32* ptr) { ++ MemoryBarrier(); ++ return *ptr; ++} ++ ++} // namespace base::subtle ++} // namespace base ++ ++#undef ATOMICOPS_COMPILER_BARRIER ++ ++#endif // BASE_ATOMICOPS_INTERNALS_MIPS_GCC_H_ +diff --git a/ipc/chromium/src/base/debug_util_posix.cc b/ipc/chromium/src/base/debug_util_posix.cc +index f7c58b4..50fb41d 100644 +--- a/ipc/chromium/src/base/debug_util_posix.cc ++++ b/ipc/chromium/src/base/debug_util_posix.cc +@@ -108,7 +108,7 @@ bool DebugUtil::BeingDebugged() { + + // static + void DebugUtil::BreakDebugger() { +-#if !defined(ARCH_CPU_ARM_FAMILY) ++#if !defined(ARCH_CPU_ARM_FAMILY) && !defined(ARCH_CPU_MIPS_FAMILY) + asm ("int3"); + #endif + } +diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h +index 36f83e7..128bbc7 100644 +--- a/ipc/chromium/src/build/build_config.h ++++ b/ipc/chromium/src/build/build_config.h +@@ -57,6 +57,8 @@ + #define ARCH_CPU_ARMEL 1 + #define ARCH_CPU_32_BITS 1 + #define WCHAR_T_IS_UNSIGNED 1 ++#elif defined(__MIPSEL__) ++#define ARCH_CPU_MIPS_FAMILY 1 + #else + #error Please add support for your architecture in build/build_config.h + #endif From 82627f99bb5af133e31a9c22388f6f303c940869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:37:17 +0000 Subject: [PATCH 164/282] New patch for firefox for mips svn path=/nixpkgs/branches/stdenv-updates/; revision=23583 --- .../networking/browsers/firefox/3.6.nix | 3 +- .../browsers/firefox/xulrunner-mips-n32.patch | 764 ++++++++++++++++++ 2 files changed, 766 insertions(+), 1 deletion(-) create mode 100644 pkgs/applications/networking/browsers/firefox/xulrunner-mips-n32.patch diff --git a/pkgs/applications/networking/browsers/firefox/3.6.nix b/pkgs/applications/networking/browsers/firefox/3.6.nix index 2750b75e45af..439d263d4de6 100644 --- a/pkgs/applications/networking/browsers/firefox/3.6.nix +++ b/pkgs/applications/networking/browsers/firefox/3.6.nix @@ -48,7 +48,8 @@ rec { # To be removed when the change gets upstream. I don't know if the patch # affects xulrunner or firefox. - patches = [ ./symlinks-bug551152.patch ./xulrunner-chromium-mips.patch ]; + patches = [ ./symlinks-bug551152.patch ./xulrunner-chromium-mips.patch + ./xulrunner-mips-n32.patch ]; buildInputs = [ pkgconfig gtk perl zip libIDL libjpeg libpng zlib cairo bzip2 diff --git a/pkgs/applications/networking/browsers/firefox/xulrunner-mips-n32.patch b/pkgs/applications/networking/browsers/firefox/xulrunner-mips-n32.patch new file mode 100644 index 000000000000..8be510352607 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox/xulrunner-mips-n32.patch @@ -0,0 +1,764 @@ +http://gentoo-overlays.zugaina.org/loongson/portage/net-libs/xulrunner/files/xulrunner-mips-n32.patch + +From 1aa3577cf7e79b574bd2cff058ea00221194869b Mon Sep 17 00:00:00 2001 +From: Zhang Le +Date: Thu, 12 Mar 2009 02:24:34 +0800 +Subject: [PATCH 2/2] xulrunner mips n32 ABI patch + +Signed-off-by: Zhang Le +--- + xpcom/reflect/xptcall/src/md/unix/Makefile.in | 5 + + .../xptcall/src/md/unix/xptcinvoke_asm_mips64.s | 159 ++++++++++++++ + .../xptcall/src/md/unix/xptcinvoke_mips64.cpp | 173 ++++++++++++++++ + .../xptcall/src/md/unix/xptcstubs_asm_mips64.s | 149 +++++++++++++ + .../xptcall/src/md/unix/xptcstubs_mips64.cpp | 218 ++++++++++++++++++++ + 5 files changed, 704 insertions(+), 0 deletions(-) + create mode 100644 xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips64.s + create mode 100644 xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips64.cpp + create mode 100644 xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips64.s + create mode 100644 xpcom/reflect/xptcall/src/md/unix/xptcstubs_mips64.cpp + +diff --git a/xpcom/reflect/xptcall/src/md/unix/Makefile.in b/xpcom/reflect/xptcall/src/md/unix/Makefile.in +index 524174e..63586cf 100644 +--- a/xpcom/reflect/xptcall/src/md/unix/Makefile.in ++++ b/xpcom/reflect/xptcall/src/md/unix/Makefile.in +@@ -274,8 +274,13 @@ endif + + ifeq ($(OS_ARCH),Linux) + ifneq (,$(findstring mips, $(OS_TEST))) ++ifneq (,$(findstring mips64, $(OS_TEST))) ++CPPSRCS := xptcinvoke_mips64.cpp xptcstubs_mips64.cpp ++ASFILES := xptcinvoke_asm_mips64.s xptcstubs_asm_mips64.s ++else + CPPSRCS := xptcinvoke_mips.cpp xptcstubs_mips.cpp + ASFILES := xptcinvoke_asm_mips.s xptcstubs_asm_mips.s ++endif + ASFLAGS += -I$(DIST)/include -x assembler-with-cpp + endif + endif +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips64.s b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips64.s +new file mode 100644 +index 0000000..f146ad8 +--- /dev/null ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips64.s +@@ -0,0 +1,159 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++/* ***** BEGIN LICENSE BLOCK ***** ++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Netscape Communications Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 1998 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ZHANG Le ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either of the GNU General Public License Version 2 or later (the "GPL"), ++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * decision by deleting the provisions above and replace them with the notice ++ * and other provisions required by the GPL or the LGPL. If you do not delete ++ * the provisions above, a recipient may use your version of this file under ++ * the terms of any one of the MPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++#include ++#include ++ ++.text ++.globl invoke_count_words ++.globl invoke_copy_to_stack ++ ++LOCALSZ=7 # a0, a1, a2, a3, s0, ra, gp ++FRAMESZ=(((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK ++ ++RAOFF=FRAMESZ-(1*SZREG) ++A0OFF=FRAMESZ-(2*SZREG) ++A1OFF=FRAMESZ-(3*SZREG) ++A2OFF=FRAMESZ-(4*SZREG) ++A3OFF=FRAMESZ-(5*SZREG) ++S0OFF=FRAMESZ-(6*SZREG) ++GPOFF=FRAMESZ-(7*SZREG) ++ ++# ++# _NS_InvokeByIndex_P(that, methodIndex, paramCount, params) ++# a0 a1 a2 a3 ++ ++NESTED(_NS_InvokeByIndex_P, FRAMESZ, ra) ++ PTR_SUBU sp, FRAMESZ ++ SETUP_GP64(GPOFF, _NS_InvokeByIndex_P) ++ ++ REG_S ra, RAOFF(sp) ++ REG_S a0, A0OFF(sp) ++ REG_S a1, A1OFF(sp) ++ REG_S a2, A2OFF(sp) ++ REG_S a3, A3OFF(sp) ++ REG_S s0, S0OFF(sp) ++ ++ # invoke_count_words(paramCount, params) ++ move a0, a2 ++ move a1, a3 ++ jal invoke_count_words ++ ++ # invoke_copy_to_stack(PRUint32* d, PRUint32 paramCount, ++ # nsXPTCVariant* s, PRUint32 *reg) ++ ++ REG_L a1, A2OFF(sp) # a1 - paramCount ++ REG_L a2, A3OFF(sp) # a2 - params ++ ++ # save sp before we copy the params to the stack ++ move t0, sp ++ ++ # assume full size of 16 bytes per param to be safe ++ sll v0, 4 # 16 bytes * num params ++ subu sp, sp, v0 # make room ++ move a0, sp # a0 - param stack address ++ ++ # create temporary stack space to write int and fp regs ++ subu sp, 64 # 64 = 8 regs of 8 bytes ++ move a3, sp ++ ++ # save the old sp and save the arg stack ++ subu sp, sp, 16 ++ REG_S t0, 0(sp) ++ REG_S a0, 8(sp) ++ ++ # copy the param into the stack areas ++ jal invoke_copy_to_stack ++ ++ REG_L t3, 8(sp) # get previous a0 ++ REG_L sp, 0(sp) # get orig sp back ++ ++ REG_L a0, A0OFF(sp) # a0 - that ++ REG_L a1, A1OFF(sp) # a1 - methodIndex ++ ++ # t1 = methodIndex * pow(2, PTRLOG) ++ # (use shift instead of mult) ++ sll t1, a1, PTRLOG ++ ++ # calculate the function we need to jump to, ++ # which must then be saved in t9 ++ lw t9, 0(a0) ++ addu t9, t9, t1 ++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ ++ lw t9, (t9) ++#else /* not G++ V3 ABI */ ++ lw t9, 2*PTRSIZE(t9) ++#endif /* G++ V3 ABI */ ++ ++ # get register save area from invoke_copy_to_stack ++ subu t1, t3, 64 ++ ++ # a1..a7 and f13..f19 should now be set to what ++ # invoke_copy_to_stack told us. skip a0 and f12 ++ # because that's the "this" pointer ++ ++ REG_L a1, 0(t1) ++ REG_L a2, 8(t1) ++ REG_L a3, 16(t1) ++ REG_L a4, 24(t1) ++ REG_L a5, 32(t1) ++ REG_L a6, 40(t1) ++ REG_L a7, 48(t1) ++ ++ l.d $f13, 0(t1) ++ l.d $f14, 8(t1) ++ l.d $f15, 16(t1) ++ l.d $f16, 24(t1) ++ l.d $f17, 32(t1) ++ l.d $f18, 40(t1) ++ l.d $f19, 48(t1) ++ ++ # save away our stack pointer and create ++ # the stack pointer for the function ++ move s0, sp ++ move sp, t3 ++ ++ jalr t9 ++ ++ move sp, s0 ++ ++ RESTORE_GP64 ++ REG_L ra, RAOFF(sp) ++ REG_L s0, S0OFF(sp) ++ PTR_ADDU sp, FRAMESZ ++ j ra ++.end _NS_InvokeByIndex_P +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips64.cpp +new file mode 100644 +index 0000000..d1d1a7d +--- /dev/null ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips64.cpp +@@ -0,0 +1,173 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++/* ***** BEGIN LICENSE BLOCK ***** ++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Netscape Communications Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 1998 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ZHANG Le ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either of the GNU General Public License Version 2 or later (the "GPL"), ++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * decision by deleting the provisions above and replace them with the notice ++ * and other provisions required by the GPL or the LGPL. If you do not delete ++ * the provisions above, a recipient may use your version of this file under ++ * the terms of any one of the MPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++ ++/* Platform specific code to invoke XPCOM methods on native objects */ ++ ++#include "xptcprivate.h" ++ ++#if (_MIPS_SIM != _ABIN32) ++#error "This code is for MIPS N32 only" ++#endif ++ ++extern "C" uint32 ++invoke_count_words(PRUint32 paramCount, nsXPTCVariant* s) ++{ ++ return paramCount; ++} ++ ++extern "C" void ++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, ++ nsXPTCVariant* s, PRUint64 *regs) ++{ ++#define N_ARG_REGS 7 /* 8 regs minus 1 for "this" ptr */ ++ ++ for (PRUint32 i = 0; i < paramCount; i++, s++) ++ { ++ if (s->IsPtrData()) { ++ if (i < N_ARG_REGS) ++ regs[i] = (PRUint64)s->ptr; ++ else ++ *d++ = (PRUint64)s->ptr; ++ continue; ++ } ++ switch (s->type) { ++ // ++ // signed types first ++ // ++ case nsXPTType::T_I8: ++ if (i < N_ARG_REGS) ++ ((PRInt64*)regs)[i] = s->val.i8; ++ else ++ *d++ = s->val.i8; ++ break; ++ case nsXPTType::T_I16: ++ if (i < N_ARG_REGS) ++ ((PRInt64*)regs)[i] = s->val.i16; ++ else ++ *d++ = s->val.i16; ++ break; ++ case nsXPTType::T_I32: ++ if (i < N_ARG_REGS) ++ ((PRInt64*)regs)[i] = s->val.i32; ++ else ++ *d++ = s->val.i32; ++ break; ++ case nsXPTType::T_I64: ++ if (i < N_ARG_REGS) ++ ((PRInt64*)regs)[i] = s->val.i64; ++ else ++ *d++ = s->val.i64; ++ break; ++ // ++ // unsigned types next ++ // ++ case nsXPTType::T_U8: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.u8; ++ else ++ *d++ = s->val.u8; ++ break; ++ case nsXPTType::T_U16: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.u16; ++ else ++ *d++ = s->val.u16; ++ break; ++ case nsXPTType::T_U32: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.u32; ++ else ++ *d++ = s->val.u32; ++ break; ++ case nsXPTType::T_U64: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.u64; ++ else ++ *d++ = s->val.u64; ++ break; ++ case nsXPTType::T_FLOAT: ++ if (i < N_ARG_REGS) ++ *(float*)®s[i] = s->val.f; ++ else ++ *(float*)d++ = s->val.f; ++ break; ++ case nsXPTType::T_DOUBLE: ++ if (i < N_ARG_REGS) ++ *(double*)®s[i] = s->val.d; ++ else ++ *(double*)d++ = s->val.d; ++ break; ++ case nsXPTType::T_BOOL: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.b; ++ else ++ *d++ = s->val.b; ++ break; ++ case nsXPTType::T_CHAR: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.c; ++ else ++ *d++ = s->val.c; ++ break; ++ case nsXPTType::T_WCHAR: ++ if (i < N_ARG_REGS) ++ regs[i] = s->val.wc; ++ else ++ *d++ = s->val.wc; ++ break; ++ default: ++ // all the others are plain pointer types ++ if (i < N_ARG_REGS) ++ regs[i] = (PRUint64)s->val.p; ++ else ++ *d++ = (PRUint64)s->val.p; ++ break; ++ } ++ } ++} ++ ++extern "C" nsresult _NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex, ++ PRUint32 paramCount, ++ nsXPTCVariant* params); ++ ++EXPORT_XPCOM_API(nsresult) ++NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex, ++ PRUint32 paramCount, nsXPTCVariant* params) ++{ ++ return _NS_InvokeByIndex_P(that, methodIndex, paramCount, params); ++} +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips64.s b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips64.s +new file mode 100644 +index 0000000..dfee24b +--- /dev/null ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips64.s +@@ -0,0 +1,149 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++/* ***** BEGIN LICENSE BLOCK ***** ++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Netscape Communications Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 1998 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ZHANG Le ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either of the GNU General Public License Version 2 or later (the "GPL"), ++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * decision by deleting the provisions above and replace them with the notice ++ * and other provisions required by the GPL or the LGPL. If you do not delete ++ * the provisions above, a recipient may use your version of this file under ++ * the terms of any one of the MPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++#include ++#include ++ ++LOCALSZ=16 ++FRAMESZ=(((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK ++ ++A1OFF=FRAMESZ-(9*SZREG) ++A2OFF=FRAMESZ-(8*SZREG) ++A3OFF=FRAMESZ-(7*SZREG) ++A4OFF=FRAMESZ-(6*SZREG) ++A5OFF=FRAMESZ-(5*SZREG) ++A6OFF=FRAMESZ-(4*SZREG) ++A7OFF=FRAMESZ-(3*SZREG) ++GPOFF=FRAMESZ-(2*SZREG) ++RAOFF=FRAMESZ-(1*SZREG) ++ ++F13OFF=FRAMESZ-(16*SZREG) ++F14OFF=FRAMESZ-(15*SZREG) ++F15OFF=FRAMESZ-(14*SZREG) ++F16OFF=FRAMESZ-(13*SZREG) ++F17OFF=FRAMESZ-(12*SZREG) ++F18OFF=FRAMESZ-(11*SZREG) ++F19OFF=FRAMESZ-(10*SZREG) ++ ++#define SENTINEL_ENTRY(n) /* defined in cpp file, not here */ ++ ++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */ ++#define STUB_ENTRY(x) \ ++ .if x < 10; \ ++ MAKE_STUB(x, _ZN14nsXPTCStubBase5Stub ##x ##Ev); \ ++ .elseif x < 100; \ ++ MAKE_STUB(x, _ZN14nsXPTCStubBase6Stub ##x ##Ev); \ ++ .elseif x < 1000; \ ++ MAKE_STUB(x, _ZN14nsXPTCStubBase7Stub ##x ##Ev); \ ++ .else; \ ++ .err; \ ++ .endif ++#else /* not G++ V3 ABI */ ++#define STUB_ENTRY(x) \ ++ MAKE_STUB(x, Stub ##x ##__14nsXPTCStubBase) ++#endif /* G++ V3 ABI */ ++ ++#define MAKE_STUB(x, name) \ ++ .globl name; \ ++ .type name,@function; \ ++ .aent name,0; \ ++name:; \ ++ PTR_SUBU sp,FRAMESZ; \ ++ SETUP_GP64(GPOFF, name); \ ++ li t0,x; \ ++ b sharedstub; \ ++ ++# ++# open a dummy frame for the function entries ++# ++ .text ++ .align 2 ++ .type dummy,@function ++ .ent dummy, 0 ++dummy: ++ .frame sp, FRAMESZ, ra ++ .mask 0x90000FF0, RAOFF-FRAMESZ ++ .fmask 0x000FF000, F19OFF-FRAMESZ ++ ++#include "xptcstubsdef.inc" ++ ++sharedstub: ++ ++ REG_S a1, A1OFF(sp) ++ REG_S a2, A2OFF(sp) ++ REG_S a3, A3OFF(sp) ++ REG_S a4, A4OFF(sp) ++ REG_S a5, A5OFF(sp) ++ REG_S a6, A6OFF(sp) ++ REG_S a7, A7OFF(sp) ++ REG_S ra, RAOFF(sp) ++ ++ s.d $f13, F13OFF(sp) ++ s.d $f14, F14OFF(sp) ++ s.d $f15, F15OFF(sp) ++ s.d $f16, F16OFF(sp) ++ s.d $f17, F17OFF(sp) ++ s.d $f18, F18OFF(sp) ++ s.d $f19, F19OFF(sp) ++ ++ # t0 is methodIndex ++ move a1, t0 ++ ++ # a2 is stack address where extra function params ++ # are stored that do not fit in registers ++ move a2, sp ++ addi a2, FRAMESZ ++ ++ # a3 is stack address of a1..a7 ++ move a3, sp ++ addi a3, A1OFF ++ ++ # a4 is stack address of f13..f19 ++ move a4, sp ++ addi a4, F13OFF ++ ++ # PrepareAndDispatch(that, methodIndex, args, gprArgs, fpArgs) ++ # a0 a1 a2 a3 a4 ++ # ++ jal PrepareAndDispatch ++ ++ REG_L ra, RAOFF(sp) ++ RESTORE_GP64 ++ ++ PTR_ADDU sp, FRAMESZ ++ j ra ++ END(dummy) +diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_mips64.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_mips64.cpp +new file mode 100644 +index 0000000..c404065 +--- /dev/null ++++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_mips64.cpp +@@ -0,0 +1,218 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++/* ***** BEGIN LICENSE BLOCK ***** ++ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Netscape Communications Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 1999 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ZHANG Le ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either of the GNU General Public License Version 2 or later (the "GPL"), ++ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * decision by deleting the provisions above and replace them with the notice ++ * and other provisions required by the GPL or the LGPL. If you do not delete ++ * the provisions above, a recipient may use your version of this file under ++ * the terms of any one of the MPL, the GPL or the LGPL. ++ * ++ * ***** END LICENSE BLOCK ***** */ ++ ++#include "xptcprivate.h" ++#include "xptiprivate.h" ++ ++#if (_MIPS_SIM != _ABIN32) ++#error "This code is for MIPS N32 only" ++#endif ++ ++/* ++ * This is for MIPS N32 ABI ++ * ++ * When we're called, the "gp" registers are stored in gprData and ++ * the "fp" registers are stored in fprData. There are 8 regs ++ * available which coorespond to the first 7 parameters of the ++ * function and the "this" pointer. If there are additional parms, ++ * they are stored on the stack at address "args". ++ * ++ */ ++extern "C" nsresult ++PrepareAndDispatch(nsXPTCStubBase* self, PRUint32 methodIndex, PRUint64* args, ++ PRUint64 *gprData, double *fprData) ++{ ++#define PARAM_BUFFER_COUNT 16 ++#define PARAM_GPR_COUNT 7 ++#define PARAM_FPR_COUNT 7 ++ ++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; ++ nsXPTCMiniVariant* dispatchParams = NULL; ++ const nsXPTMethodInfo* info; ++ PRUint8 paramCount; ++ PRUint8 i; ++ nsresult result = NS_ERROR_FAILURE; ++ ++ NS_ASSERTION(self,"no self"); ++ ++ self->mEntry->GetMethodInfo(PRUint16(methodIndex), &info); ++ NS_ASSERTION(info,"no method info"); ++ ++ paramCount = info->GetParamCount(); ++ ++ // setup variant array pointer ++ if(paramCount > PARAM_BUFFER_COUNT) ++ dispatchParams = new nsXPTCMiniVariant[paramCount]; ++ else ++ dispatchParams = paramBuffer; ++ NS_ASSERTION(dispatchParams,"no place for params"); ++ ++ PRUint64* ap = args; ++ PRUint32 iCount = 0; ++ for(i = 0; i < paramCount; i++) ++ { ++ const nsXPTParamInfo& param = info->GetParam(i); ++ const nsXPTType& type = param.GetType(); ++ nsXPTCMiniVariant* dp = &dispatchParams[i]; ++ ++ if(param.IsOut() || !type.IsArithmetic()) ++ { ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.p = (void*)gprData[iCount++]; ++ else ++ dp->val.p = (void*)*ap++; ++ continue; ++ } ++ // else ++ switch(type) ++ { ++ case nsXPTType::T_I8: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.i8 = (PRInt8)gprData[iCount++]; ++ else ++ dp->val.i8 = (PRInt8)*ap++; ++ break; ++ ++ case nsXPTType::T_I16: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.i16 = (PRInt16)gprData[iCount++]; ++ else ++ dp->val.i16 = (PRInt16)*ap++; ++ break; ++ ++ case nsXPTType::T_I32: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.i32 = (PRInt32)gprData[iCount++]; ++ else ++ dp->val.i32 = (PRInt32)*ap++; ++ break; ++ ++ case nsXPTType::T_I64: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.i64 = (PRInt64)gprData[iCount++]; ++ else ++ dp->val.i64 = (PRInt64)*ap++; ++ break; ++ ++ case nsXPTType::T_U8: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.u8 = (PRUint8)gprData[iCount++]; ++ else ++ dp->val.u8 = (PRUint8)*ap++; ++ break; ++ ++ case nsXPTType::T_U16: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.u16 = (PRUint16)gprData[iCount++]; ++ else ++ dp->val.u16 = (PRUint16)*ap++; ++ break; ++ ++ case nsXPTType::T_U32: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.u32 = (PRUint32)gprData[iCount++]; ++ else ++ dp->val.u32 = (PRUint32)*ap++; ++ break; ++ ++ case nsXPTType::T_U64: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.u64 = (PRUint64)gprData[iCount++]; ++ else ++ dp->val.u64 = (PRUint64)*ap++; ++ break; ++ ++ case nsXPTType::T_FLOAT: ++ if (iCount < PARAM_FPR_COUNT) ++ dp->val.f = (double)fprData[iCount++]; ++ else ++ dp->val.f = *((double*)ap++); ++ break; ++ ++ case nsXPTType::T_DOUBLE: ++ if (iCount < PARAM_FPR_COUNT) ++ dp->val.d = (double)fprData[iCount++]; ++ else ++ dp->val.d = *((double*)ap++); ++ break; ++ ++ case nsXPTType::T_BOOL: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.b = (PRBool)gprData[iCount++]; ++ else ++ dp->val.b = (PRBool)*ap++; ++ break; ++ ++ case nsXPTType::T_CHAR: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.c = (char)gprData[iCount++]; ++ else ++ dp->val.c = (char)*ap++; ++ break; ++ ++ case nsXPTType::T_WCHAR: ++ if (iCount < PARAM_GPR_COUNT) ++ dp->val.wc = (wchar_t)gprData[iCount++]; ++ else ++ dp->val.wc = (wchar_t)*ap++; ++ break; ++ ++ default: ++ NS_ASSERTION(0, "bad type"); ++ break; ++ } ++ } ++ ++ result = self->mOuter->CallMethod((PRUint16)methodIndex, info, dispatchParams); ++ ++ if(dispatchParams != paramBuffer) ++ delete [] dispatchParams; ++ ++ return result; ++} ++ ++#define STUB_ENTRY(n) /* defined in the assembly file */ ++ ++#define SENTINEL_ENTRY(n) \ ++nsresult nsXPTCStubBase::Sentinel##n() \ ++{ \ ++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \ ++ return NS_ERROR_NOT_IMPLEMENTED; \ ++} ++ ++#include "xptcstubsdef.inc" +-- +1.6.2 + From e2b1de78c24246487cc72ed786b629243c6ade8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:37:28 +0000 Subject: [PATCH 165/282] Making firefox build on mips svn path=/nixpkgs/branches/stdenv-updates/; revision=23584 --- pkgs/applications/networking/browsers/firefox/3.6.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/networking/browsers/firefox/3.6.nix b/pkgs/applications/networking/browsers/firefox/3.6.nix index 439d263d4de6..f98e9465f822 100644 --- a/pkgs/applications/networking/browsers/firefox/3.6.nix +++ b/pkgs/applications/networking/browsers/firefox/3.6.nix @@ -40,7 +40,6 @@ rec { "--disable-necko-wifi" # maybe we want to enable this at some point ]; - xulrunner = stdenv.mkDerivation { name = "xulrunner-${xulVersion}"; @@ -58,6 +57,10 @@ rec { alsaLib nspr /* nss */ libnotify xlibs.pixman ]; + preConfigure = if stdenv.isMips then '' + export ac_cv_thread_keyword=no + '' else ""; + configureFlags = [ "--enable-application=xulrunner" "--disable-javaxpcom" From d984e4bffd79c3fae4cf91c34cdbd9eb2e935042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 08:37:42 +0000 Subject: [PATCH 166/282] New patch for firefox, to avoid a SIGBUS on mips. r0bertz gave me the patch through irc: http://www.gentoo-cn.org/gitweb/?p=loongson.git;a=blob;f=net-libs/xulrunner/files/xulrunner-1.9.2_beta4-mips-bus-error.patch;h=2bf51d77054796ffaf4f4d903dd8560bf96b7844;hb=HEAD "some insns requires addr to be 8 bytes alignment, xulrunner can't guarantee that" "instead it guarantees some addr will be sizeof(void *) aligned." svn path=/nixpkgs/branches/stdenv-updates/; revision=23585 --- .../networking/browsers/firefox/3.6.nix | 14 +++++++--- ...xulrunner-1.9.2_beta4-mips-bus-error.patch | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 pkgs/applications/networking/browsers/firefox/xulrunner-1.9.2_beta4-mips-bus-error.patch diff --git a/pkgs/applications/networking/browsers/firefox/3.6.nix b/pkgs/applications/networking/browsers/firefox/3.6.nix index f98e9465f822..bf9f2c8c189c 100644 --- a/pkgs/applications/networking/browsers/firefox/3.6.nix +++ b/pkgs/applications/networking/browsers/firefox/3.6.nix @@ -45,10 +45,16 @@ rec { inherit src; - # To be removed when the change gets upstream. I don't know if the patch - # affects xulrunner or firefox. - patches = [ ./symlinks-bug551152.patch ./xulrunner-chromium-mips.patch - ./xulrunner-mips-n32.patch ]; + patches = [ + # To be removed when the change gets upstream. I don't know if the patch + # affects xulrunner or firefox. + ./symlinks-bug551152.patch + + # Loongson2f related patches: + ./xulrunner-chromium-mips.patch + ./xulrunner-mips-n32.patch + ./xulrunner-1.9.2_beta4-mips-bus-error.patch + ]; buildInputs = [ pkgconfig gtk perl zip libIDL libjpeg libpng zlib cairo bzip2 diff --git a/pkgs/applications/networking/browsers/firefox/xulrunner-1.9.2_beta4-mips-bus-error.patch b/pkgs/applications/networking/browsers/firefox/xulrunner-1.9.2_beta4-mips-bus-error.patch new file mode 100644 index 000000000000..54799397f6f8 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox/xulrunner-1.9.2_beta4-mips-bus-error.patch @@ -0,0 +1,26 @@ +http://www.gentoo-cn.org/gitweb/?p=loongson.git;a=blob;f=net-libs/xulrunner/files/xulrunner-1.9.2_beta4-mips-bus-error.patch;h=2bf51d77054796ffaf4f4d903dd8560bf96b7844;hb=HEAD + +--- ./xpcom/glue/nsTArray.h.orig 2009-04-26 01:21:58.000000000 +0800 ++++ ./xpcom/glue/nsTArray.h 2009-04-26 01:21:33.000000000 +0800 +@@ -168,6 +168,7 @@ + + // The array's elements (prefixed with a Header). This pointer is never + // null. If the array is empty, then this will point to sEmptyHdr. ++ void *padding; + Header *mHdr; + }; + +diff --git a/layout/svg/base/src/nsSVGGlyphFrame.cpp b/layout/svg/base/src/nsSVGGlyphFrame.cpp +index 6d452d0..3ce4193 100644 +--- a/layout/svg/base/src/nsSVGGlyphFrame.cpp ++++ b/layout/svg/base/src/nsSVGGlyphFrame.cpp +@@ -169,8 +169,8 @@ private: + PRBool SetupForDirectTextRun(gfxContext *aContext, float aScale); + void SetupFor(gfxContext *aContext, float aScale); + +- nsSVGGlyphFrame *mSource; + nsAutoTArray mPositions; ++ nsSVGGlyphFrame *mSource; + gfxMatrix mInitialMatrix; + // Textrun advance width from start to mCurrentChar, in appunits + gfxFloat mCurrentAdvance; From 8a59e608aa8feb4d2cbaebfe95e048f9c5f42350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 09:49:53 +0000 Subject: [PATCH 167/282] Setting the new binutils snapshot niksnut copied to nixos.org, for the time while they don't release. svn path=/nixpkgs/branches/stdenv-updates/; revision=23587 --- pkgs/development/tools/misc/binutils/snapshot.nix | 4 ++-- pkgs/top-level/all-packages.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/development/tools/misc/binutils/snapshot.nix b/pkgs/development/tools/misc/binutils/snapshot.nix index 2563f998265a..24b70dd24927 100644 --- a/pkgs/development/tools/misc/binutils/snapshot.nix +++ b/pkgs/development/tools/misc/binutils/snapshot.nix @@ -7,8 +7,8 @@ stdenv.mkDerivation rec { name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; src = fetchurl { - url = "file:///root/binutils/${basename}.tar.bz2"; - sha256 = "1f0na8c31sccbipzk8xiyd7n7ydh5gg09kirbs28vcb2714cxws0"; + url = http://nixos.org/tarballs/binutils-2.20.51-pre-20100901.tar.bz2; + sha256 = "1872fdnbnq5z5svq7mvc0vyyad8pknwvx2glxq1bbk0xv7arp72y"; }; patches = [ diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 40f9dcd5dace..209a33c377a8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2267,8 +2267,8 @@ let inherit noSysDirs; }; - binutils = if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then binutils_snapshot - else binutils_release; + # We are waiting for a release. Meanwhile, sysvinit and the loongson2f need it. + binutils = binutils_snapshot; binutilsCross = forceBuildDrv (import ../development/tools/misc/binutils { inherit stdenv fetchurl; From 641f95658111036331693b1f77225e246e6b6316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 09:50:12 +0000 Subject: [PATCH 168/282] Setting any stdenv.system references for the loongson2f system to 'mips64-linux'. (my git-svn info:) Merge branch 'mips64' into stdenv-updates Conflicts: pkgs/applications/networking/browsers/firefox/3.6.nix pkgs/top-level/all-packages.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=23588 --- pkgs/build-support/gcc-wrapper/default.nix | 2 +- pkgs/development/compilers/gcc-4.5/default.nix | 1 + pkgs/development/libraries/libxcrypt/default.nix | 2 +- pkgs/development/libraries/mesa/default.nix | 2 +- pkgs/development/tools/misc/binutils/snapshot.nix | 2 +- pkgs/lib/platforms.nix | 2 +- pkgs/os-specific/linux/kbd/default.nix | 2 +- pkgs/os-specific/linux/kernel/generic.nix | 4 ++-- pkgs/os-specific/linux/pam/default.nix | 2 +- pkgs/stdenv/default.nix | 2 +- pkgs/stdenv/generic/default.nix | 5 ++--- pkgs/stdenv/linux/default.nix | 4 ++-- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix index 2c7ef16674ba..56069ec17b3b 100644 --- a/pkgs/build-support/gcc-wrapper/default.nix +++ b/pkgs/build-support/gcc-wrapper/default.nix @@ -67,7 +67,7 @@ stdenv.mkDerivation { if stdenv.system == "x86_64-linux" then "ld-linux-x86-64.so.2" else if stdenv.system == "armv5tel-linux" then "ld-linux.so.3" else if stdenv.system == "powerpc-linux" then "ld.so.1" else - if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "ld.so.1" else + if stdenv.system == "mips64-linux" then "ld.so.1" else abort "don't know the name of the dynamic linker for this platform") else ""; } diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index c1e3d3a402a3..9eadb68f63ee 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -235,6 +235,7 @@ stdenv.mkDerivation ({ ) ) } + ${"--with-arch=loongson2f"} ${if langAda then " --enable-libada" else ""} ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} ${if cross != null then crossConfigureFlags else ""} diff --git a/pkgs/development/libraries/libxcrypt/default.nix b/pkgs/development/libraries/libxcrypt/default.nix index bc4272da3c8e..aea9e53eef6e 100644 --- a/pkgs/development/libraries/libxcrypt/default.nix +++ b/pkgs/development/libraries/libxcrypt/default.nix @@ -2,7 +2,7 @@ # I could not build it in armv5tel-linux or the fuloon2f assert stdenv.system != "armv5tel-linux"; -assert stdenv.system != "ict_loongson-2_v0.3_fpu_v0.1-linux"; +assert stdenv.system != "mips64-linux"; stdenv.mkDerivation { name = "libxcrypt-3.0.2"; diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 1060ae8f7380..9b449be13359 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -14,7 +14,7 @@ stdenv.mkDerivation { configureFlags = "--disable-gallium" - + (if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then + + (if stdenv.system == "mips64-linux" then " --with-dri-drivers=swrast --with-driver=dri" else "") + (if stdenv.isDarwin then " --disable-egl" else ""); diff --git a/pkgs/development/tools/misc/binutils/snapshot.nix b/pkgs/development/tools/misc/binutils/snapshot.nix index 24b70dd24927..79f01cad4ef3 100644 --- a/pkgs/development/tools/misc/binutils/snapshot.nix +++ b/pkgs/development/tools/misc/binutils/snapshot.nix @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { ''; configureFlags = "--disable-werror" # needed for dietlibc build - + stdenv.lib.optionalString (stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") + + stdenv.lib.optionalString (stdenv.system == "mips64-linux") " --enable-fix-loongson2f-nop" + stdenv.lib.optionalString (cross != null) " --target=${cross.config}"; diff --git a/pkgs/lib/platforms.nix b/pkgs/lib/platforms.nix index 095281145d26..e9ed1e226e79 100644 --- a/pkgs/lib/platforms.nix +++ b/pkgs/lib/platforms.nix @@ -3,7 +3,7 @@ let lists = import ./lists.nix; in rec { gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */ linux = ["i686-linux" "x86_64-linux" "powerpc-linux" "armv5tel-linux" - "ict_loongson-2_v0.3_fpu_v0.1-linux"]; + "mips64-linux"]; darwin = ["i686-darwin" "powerpc-darwin" "x86_64-darwin"]; freebsd = ["i686-freebsd" "x86_64-freebsd" "powerpc-freebsd"]; openbsd = ["i686-openbsd" "x86_64-openbsd"]; diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index 6120c1b8a0dd..b1916e8aab1d 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -13,7 +13,7 @@ stdenv.mkDerivation rec { # We get a warning in armv5tel-linux and the fuloong2f, # so we disable -Werror in it patchPhase = if (stdenv.system == "armv5tel-linux" || - stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux") + stdenv.system == "mips64-linux") then '' sed -i s/-Werror// src/Makefile.am '' else ""; diff --git a/pkgs/os-specific/linux/kernel/generic.nix b/pkgs/os-specific/linux/kernel/generic.nix index f5dd09a2ccc9..6972171b136b 100644 --- a/pkgs/os-specific/linux/kernel/generic.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -42,7 +42,7 @@ }: assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" - || stdenv.system == "armv5tel-linux" || stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; + || stdenv.system == "armv5tel-linux" || stdenv.system == "mips64-linux"; assert stdenv.platform.name == "sheevaplug" -> stdenv.platform.uboot != null; @@ -99,7 +99,7 @@ stdenv.mkDerivation { if stdenv.system == "i686-linux" then "i386" else if stdenv.system == "x86_64-linux" then "x86_64" else if stdenv.system == "armv5tel-linux" then "arm" else - if stdenv.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "mips" else + if stdenv.system == "mips64-linux" then "mips" else abort "Platform ${stdenv.system} is not supported."; crossAttrs = let diff --git a/pkgs/os-specific/linux/pam/default.nix b/pkgs/os-specific/linux/pam/default.nix index 0053d89b6051..692643505e18 100644 --- a/pkgs/os-specific/linux/pam/default.nix +++ b/pkgs/os-specific/linux/pam/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation { buildInputs = [ flex cracklib ] ++ stdenv.lib.optional - (stdenv.system != "armv5tel-linux" && stdenv.system != "ict_loongson-2_v0.3_fpu_v0.1-linux") + (stdenv.system != "armv5tel-linux" && stdenv.system != "mips64-linux") libxcrypt; postInstall = '' diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 940df3e224de..11af6d371cdc 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -55,7 +55,7 @@ rec { if stdenvType == "i686-linux" then stdenvLinux else if stdenvType == "x86_64-linux" then stdenvLinux else if stdenvType == "armv5tel-linux" then stdenvLinux else - if stdenvType == "ict_loongson-2_v0.3_fpu_v0.1-linux" then stdenvLinux else + if stdenvType == "mips64-linux" then stdenvLinux else if stdenvType == "powerpc-linux" then /* stdenvLinux */ stdenvNative else if stdenvType == "i686-mingw" then stdenvMinGW else if stdenvType == "i686-darwin" then stdenvNix else diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 7af6d2c0a55f..c4d6a3666d0d 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -97,7 +97,7 @@ let || result.system == "x86_64-linux" || result.system == "powerpc-linux" || result.system == "armv5tel-linux" - || result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux"; + || result.system == "mips64-linux"; isSunOS = result.system == "i386-sunos"; isCygwin = result.system == "i686-cygwin"; isFreeBSD = result.system == "i686-freebsd" @@ -119,8 +119,7 @@ let || result.system == "x86_64-openbsd"; is64bit = result.system == "x86_64-linux" || result.system == "x86_64-darwin"; - isMips = result.system == "ict_loongson-2_v0.3_fpu_v0.1-linux" - || result.system == "mips-linux" + isMips = result.system == "mips-linux" || result.system == "mips64-linux"; isArm = result.system == "armv5tel-linux"; diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index f8be9c51bfae..af98fd98b74d 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -14,7 +14,7 @@ rec { else if system == "x86_64-linux" then import ./bootstrap/x86_64 else if system == "powerpc-linux" then import ./bootstrap/powerpc else if system == "armv5tel-linux" then import ./bootstrap/armv5tel - else if system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then import ./bootstrap/loongson2f + else if system == "mips64-linux" then import ./bootstrap/loongson2f else abort "unsupported platform for the pure Linux stdenv"; @@ -23,7 +23,7 @@ rec { export NIX_ENFORCE_PURITY=1 havePatchELF=1 ${if system == "x86_64-linux" then "NIX_LIB64_IN_SELF_RPATH=1" else ""} - ${if system == "ict_loongson-2_v0.3_fpu_v0.1-linux" then "NIX_LIB32_IN_SELF_RPATH=1" else ""} + ${if system == "mips64-linux" then "NIX_LIB32_IN_SELF_RPATH=1" else ""} ''; From bc22ce3b7440ab39de831c7187fb8ae3dab270f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 1 Sep 2010 09:50:23 +0000 Subject: [PATCH 169/282] Setting the gcc --with-arch=fuloong2f only on mips64-linux. (what was there before was a temporary change not representing a working stdenv) svn path=/nixpkgs/branches/stdenv-updates/; revision=23589 --- pkgs/development/compilers/gcc-4.5/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index 9eadb68f63ee..91fbc666008e 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -235,7 +235,8 @@ stdenv.mkDerivation ({ ) ) } - ${"--with-arch=loongson2f"} + ${ # Trick that should be taken out once we have a mips64-linux not loongson2f + if cross == null && stdenv.system == "mips64-linux" then "--with-arch=loongson2f" else ""} ${if langAda then " --enable-libada" else ""} ${if (cross == null && stdenv.isi686) then "--with-arch=i686" else ""} ${if cross != null then crossConfigureFlags else ""} From a7791cfd1b6709a864abb62ba1de4d158873efe8 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Thu, 2 Sep 2010 07:56:11 +0000 Subject: [PATCH 170/282] disabled klib in stdenv branch because it seems to hang in buildfarm and produces logs > 1.5GB svn path=/nixpkgs/branches/stdenv-updates/; revision=23596 --- pkgs/top-level/release.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index 869e669779f1..c77cb7e1821a 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -166,7 +166,7 @@ with (import ./release-lib.nix); jwhois = linux; kbd = linux; keen4 = ["i686-linux"]; - klibc = linux; +# klibc = linux; ktorrent = linux; kvm = linux; qemu = linux; From 6013c0cf8b2b6f76020f00efec7194cf83f7132c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 18:41:48 +0000 Subject: [PATCH 171/282] Adding more platforms to crossbuild to (nanonote and the fuloong minipc) svn path=/nixpkgs/branches/stdenv-updates/; revision=23601 --- pkgs/top-level/release-cross.nix | 99 ++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 91d7b7a5adf6..7b75a4470836 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -165,4 +165,103 @@ in { patch.hostDrv = nativePlatforms; zile.hostDrv = nativePlatforms; }; +}) // ( + +/* Linux on the fuloong */ +let + crossSystem = { + config = "mips64el-unknown-linux"; + bigEndian = false; + arch = "mips"; + float = "hard"; + withTLS = true; + libc = "glibc"; + platform = { + name = "fuloong-minipc"; + kernelMajor = "2.6"; + kernelBaseConfig = "lemote2f_defconfig"; + kernelHeadersBaseConfig = "fuloong2e_defconfig"; + uboot = null; + kernelArch = "mips"; + kernelAutoModules = false; + kernelTarget = "vmlinux"; + }; + openssl.system = "linux-generic32"; + gcc = { + arch = "loongson2f"; + abi = "n32"; + }; + }; +in { + fuloongminipc = mapTestOnCross crossSystem { + gccCrossStageFinal = nativePlatforms; + + coreutils_real.hostDrv = nativePlatforms; + ed.hostDrv = nativePlatforms; + grub2.hostDrv = nativePlatforms; + inetutils.hostDrv = nativePlatforms; + nixUnstable.hostDrv = nativePlatforms; + patch.hostDrv = nativePlatforms; + zile.hostDrv = nativePlatforms; + }; +}) // ( + +/* Linux on the Ben Nanonote */ +let + crossSystem = { + config = "mipsel-unknown-linux"; + bigEndian = false; + arch = "mips"; + float = "soft"; + withTLS = true; + libc = "glibc"; + platform = { + name = "ben_nanonote"; + kernelMajor = "2.6"; + kernelBaseConfig = "qi_lb60_defconfig"; + kernelHeadersBaseConfig = "malta_defconfig"; + uboot = "nanonote"; + kernelArch = "mips"; + kernelAutoModules = false; + kernelTarget = "vmlinux.bin"; + kernelExtraConfig = '' + SOUND y + SND y + SND_MIPS y + SND_SOC y + SND_JZ4740_SOC y + SND_JZ4740_SOC_QI_LB60 y + FUSE_FS m + MIPS_FPU_EMU y + ''; + }; + openssl.system = "linux-generic32"; + perl.arch = "mipsel-unknown"; + uclibc.extraConfig = '' + CONFIG_MIPS_ISA_1 n + CONFIG_MIPS_ISA_MIPS32 y + CONFIG_MIPS_N32_ABI n + CONFIG_MIPS_O32_ABI y + ARCH_BIG_ENDIAN n + ARCH_WANTS_BIG_ENDIAN n + ARCH_WANTS_LITTLE_ENDIAN y + LINUXTHREADS_OLD y + ''; + gcc = { + abi = "32"; + arch = "mips32"; + }; + mpg123.cpu = "generic_nofpu"; + }; +in { + nanonote = mapTestOnCross crossSystem { + gccCrossStageFinal = nativePlatforms; + + coreutils_real.hostDrv = nativePlatforms; + ed.hostDrv = nativePlatforms; + inetutils.hostDrv = nativePlatforms; + nixUnstable.hostDrv = nativePlatforms; + patch.hostDrv = nativePlatforms; + zile.hostDrv = nativePlatforms; + }; }) From 14a20b717957192c79d1cc66fc0a10f595d7ebf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 19:18:04 +0000 Subject: [PATCH 172/282] Fixing the evaluation of cross built uclibc in the case of lacking extraConfig svn path=/nixpkgs/branches/stdenv-updates/; revision=23602 --- pkgs/os-specific/linux/uclibc/default.nix | 2 +- pkgs/top-level/release-cross.nix | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix index 073927ba49a5..ce95dbaba922 100644 --- a/pkgs/os-specific/linux/uclibc/default.nix +++ b/pkgs/os-specific/linux/uclibc/default.nix @@ -64,7 +64,7 @@ stdenv.mkDerivation { cat << EOF | parseconfig ${nixConfig} ${extraConfig} - ${if cross != null then cross.uclibc.extraConfig else ""} + ${if cross != null then stdenv.lib.attrByPath [ "uclibc" "extraConfig" ] "" cross else ""} $extraCrossConfig EOF make oldconfig diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 7b75a4470836..9d961d0c09e1 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -4,9 +4,10 @@ let /* Basic list of packages to cross-build */ basicHostDrv = { + gccCrossStageFinal = nativePlatforms; bison.hostDrv = nativePlatforms; busybox.hostDrv = nativePlatforms; - coreutils_real.hostDrv = nativePlatforms; + coreutils.hostDrv = nativePlatforms; dropbear.hostDrv = nativePlatforms; tightvnc.hostDrv = nativePlatforms; #openoffice.hostDrv = nativePlatforms; @@ -18,6 +19,8 @@ let nixUnstable.hostDrv = nativePlatforms; linuxPackages_2_6_32.kernel.hostDrv = linux; linuxPackages_2_6_33.kernel.hostDrv = linux; + linuxPackages_2_6_34.kernel.hostDrv = linux; + linuxPackages_2_6_35.kernel.hostDrv = linux; }; /* Basic list of packages to be natively built, @@ -63,6 +66,13 @@ let platform = pkgs.platforms.sheevaplug; libc = "uclibc"; openssl.system = "linux-generic32"; + uclibc.extraConfig = '' + CONFIG_ARM_OABI n + CONFIG_ARM_EABI y + ARCH_BIG_ENDIAN n + ARCH_WANTS_BIG_ENDIAN n + ARCH_WANTS_LITTLE_ENDIAN y + ''; }; in { @@ -135,7 +145,6 @@ let in { crossMingw32 = mapTestOnCross crossSystem { windows.wxMSW.hostDrv = nativePlatforms; - gccCrossStageFinal = nativePlatforms; }; }) // ( @@ -153,7 +162,6 @@ let }; in { crossGNU = mapTestOnCross crossSystem { - gccCrossStageFinal = nativePlatforms; hurdCross = nativePlatforms; mach.hostDrv = nativePlatforms; @@ -194,7 +202,6 @@ let }; in { fuloongminipc = mapTestOnCross crossSystem { - gccCrossStageFinal = nativePlatforms; coreutils_real.hostDrv = nativePlatforms; ed.hostDrv = nativePlatforms; @@ -255,7 +262,6 @@ let }; in { nanonote = mapTestOnCross crossSystem { - gccCrossStageFinal = nativePlatforms; coreutils_real.hostDrv = nativePlatforms; ed.hostDrv = nativePlatforms; From 488d9103a78bd562f781383acf33b29f91c99eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 19:30:20 +0000 Subject: [PATCH 173/282] Updating icewm (so yes, gtk included gdk_pixbuf. Thank you niksnut!) svn path=/nixpkgs/branches/stdenv-updates/; revision=23603 --- pkgs/applications/window-managers/icewm/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/window-managers/icewm/default.nix b/pkgs/applications/window-managers/icewm/default.nix index 0215467bdce6..02096cd6141f 100644 --- a/pkgs/applications/window-managers/icewm/default.nix +++ b/pkgs/applications/window-managers/icewm/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, gettext, libjpeg, libtiff, libungif, libpng, imlib, xlibs, automake, pkgconfig, - gdk_pixbuf }: + gtk }: stdenv.mkDerivation rec { name = "icewm-1.3.6"; @@ -7,7 +7,7 @@ stdenv.mkDerivation rec { buildInputs = [ gettext libjpeg libtiff libungif libpng imlib xlibs.libX11 xlibs.libXft xlibs.libXext xlibs.libXinerama xlibs.libXrandr - pkgconfig gdk_pixbuf + pkgconfig gtk ]; src = fetchurl { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 209a33c377a8..3feaf7d55038 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5717,7 +5717,9 @@ let icecatWrapper = wrapFirefox icecat3Xul "icecat" ""; - icewm = callPackage ../applications/window-managers/icewm { }; + icewm = callPackage ../applications/window-managers/icewm { + inherit (gtkLibs) gtk; + }; ikiwiki = callPackage ../applications/misc/ikiwiki { inherit (perlPackages) TextMarkdown URI HTMLParser HTMLScrubber From 0a50f8cc6a57b14b73f838b3c1e9177705bead55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 20:09:27 +0000 Subject: [PATCH 174/282] Fixing the w3m build on non-mips (this may allow having the 'tarball' built) svn path=/nixpkgs/branches/stdenv-updates/; revision=23604 --- pkgs/applications/networking/browsers/w3m/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/networking/browsers/w3m/default.nix b/pkgs/applications/networking/browsers/w3m/default.nix index a472bd69c84b..6844e582026c 100644 --- a/pkgs/applications/networking/browsers/w3m/default.nix +++ b/pkgs/applications/networking/browsers/w3m/default.nix @@ -16,7 +16,9 @@ stdenv.mkDerivation { md5 = "ba06992d3207666ed1bf2dcf7c72bf58"; }; - patches = [ ./newgc.patch ]; + # Patch for the newer unstable boehm-gc 7.2alpha. Not all platforms use that + # alpha. At the time of writing this, boehm-gc-7.1 is the last stable. + patches = stdenv.lib.optional (boehmgc.name != "boehm-gc-7.1") [ ./newgc.patch ]; buildInputs = [ncurses boehmgc gettext zlib] ++ stdenv.lib.optional sslSupport openssl From b9e1bd9cd816f84d651314ad4296ee1aa24d19ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 20:40:33 +0000 Subject: [PATCH 175/282] Who wants tightvnc? I'll set tigervnc into release-cross.nix instead of tightvnc. svn path=/nixpkgs/branches/stdenv-updates/; revision=23605 --- pkgs/top-level/release-cross.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 9d961d0c09e1..ca3cc3a07bc4 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -9,7 +9,7 @@ let busybox.hostDrv = nativePlatforms; coreutils.hostDrv = nativePlatforms; dropbear.hostDrv = nativePlatforms; - tightvnc.hostDrv = nativePlatforms; + tigervnc.hostDrv = nativePlatforms; #openoffice.hostDrv = nativePlatforms; wxGTK.hostDrv = nativePlatforms; #firefox = nativePlatforms; From 52f45400266f68903cd488bbf76aabf7b5761062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 2 Sep 2010 21:34:37 +0000 Subject: [PATCH 176/282] Trying to fix the mipsel linux-2.4 cross builds with uclibc (it lacked proper uclibc config) svn path=/nixpkgs/branches/stdenv-updates/; revision=23606 --- pkgs/top-level/release-cross.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index ca3cc3a07bc4..7007b1b00650 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -103,6 +103,11 @@ let kernelTarget = "vmlinux"; }; openssl.system = "linux-generic32"; + uclibc.extraConfig = '' + ARCH_BIG_ENDIAN n + ARCH_WANTS_BIG_ENDIAN n + ARCH_WANTS_LITTLE_ENDIAN y + ''; }; in { crossMipselLinux24 = mapTestOnCross crossSystem basic; From 32071d5b4de36a41cc1d23f407f9911fccbc3031 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Fri, 3 Sep 2010 08:15:45 +0000 Subject: [PATCH 177/282] Adding a list-in-list checker for builderDefs closePropagation svn path=/nixpkgs/branches/stdenv-updates/; revision=23608 --- pkgs/lib/misc.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/lib/misc.nix b/pkgs/lib/misc.nix index 91a374947446..7f04e7e1e581 100644 --- a/pkgs/lib/misc.nix +++ b/pkgs/lib/misc.nix @@ -215,11 +215,15 @@ rec { innerClosePropagation = ready: list: if list == [] then ready else - innerClosePropagation - (ready ++ [(head list)]) - ((tail list) - ++ (maybeAttrNullable "propagatedBuildInputs" [] (head list)) - ++ (maybeAttrNullable "propagatedBuildNativeInputs" [] (head list))); + if ! isAttrs (head list) then + builtins.trace ("not an attrSet: ${lib.showVal (head list)}") + innerClosePropagation ready (tail list) + else + innerClosePropagation + (ready ++ [(head list)]) + ((tail list) + ++ (maybeAttrNullable "propagatedBuildInputs" [] (head list)) + ++ (maybeAttrNullable "propagatedBuildNativeInputs" [] (head list))); closePropagation = list: (uniqList {inputList = (innerClosePropagation [] list);}); From 45e088b5141b57c489a4d38c847208ad41b840fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 08:16:39 +0000 Subject: [PATCH 178/282] Fixing a bug in a buildInputs list. svn path=/nixpkgs/branches/stdenv-updates/; revision=23609 --- pkgs/os-specific/linux/hal/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/hal/default.nix b/pkgs/os-specific/linux/hal/default.nix index 515285d64011..45a3efbfce53 100644 --- a/pkgs/os-specific/linux/hal/default.nix +++ b/pkgs/os-specific/linux/hal/default.nix @@ -39,7 +39,7 @@ stdenv.mkDerivation rec { ''; propagatedBuildInputs = [ libusb ] - ++ stdenv.lib.optional isPC [ libsmbios ]; + ++ stdenv.lib.optional isPC libsmbios; preConfigure = '' for i in hald/linux/probing/probe-smbios.c hald/linux/osspec.c \ From 1ba3c5ebd76e6b16c8300e14aa2cc59d5b9e52f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 08:44:38 +0000 Subject: [PATCH 179/282] Fixing the tarball job svn path=/nixpkgs/branches/stdenv-updates/; revision=23610 --- pkgs/os-specific/linux/nfs-utils/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix index a5afe730476a..0234a7a2649b 100644 --- a/pkgs/os-specific/linux/nfs-utils/default.nix +++ b/pkgs/os-specific/linux/nfs-utils/default.nix @@ -15,8 +15,8 @@ stdenv.mkDerivation rec { configureFlags = [ "--disable-gss" "--disable-nfsv4" "--disable-nfsv41" "--disable-tirpc" "--with-statedir=/var/lib/nfs" - "--with-rpcgen=${stdenv.glibc}/bin/rpcgen" - ]; + ] + ++ stdenv.lib.optional (stdenv ? glibc) "--with-rpcgen=${stdenv.glibc}/bin/rpcgen"; patchPhase = '' From 9a0adf069fcad9a5c3b4c95408cbec286a8fce6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 12:11:33 +0000 Subject: [PATCH 180/282] Updating libcap (i686-linux kde programs failed because libcap did not build there) svn path=/nixpkgs/branches/stdenv-updates/; revision=23615 --- pkgs/os-specific/linux/libcap/default.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/os-specific/linux/libcap/default.nix b/pkgs/os-specific/linux/libcap/default.nix index 46f40167a7eb..c09ab22576fa 100644 --- a/pkgs/os-specific/linux/libcap/default.nix +++ b/pkgs/os-specific/linux/libcap/default.nix @@ -1,15 +1,16 @@ -{stdenv, fetchurl, attr}: +{stdenv, fetchurl, attr, perl}: assert stdenv.isLinux; stdenv.mkDerivation { - name = "libcap-2.09"; + name = "libcap-2.19"; src = fetchurl { - url = mirror://kernel/linux/libs/security/linux-privs/kernel-2.6/libcap-2.09.tar.bz2; - sha256 = "0sq15y8yfm7knf6jhqcycb9wz52n3r1sriii66xk0djvd4hw69jr"; + url = mirror://kernel/linux/libs/security/linux-privs/kernel-2.6/libcap-2.19.tar.gz; + sha256 = "0fdsz9j741npvh222f8p1y6l516z9liibiwdpdr3a4zg53m0pw45"; }; + buildNativeInputs = [perl]; buildInputs = [attr]; preBuild = '' From 2971149bf4e45ead77a49c806e24b6dfe6540be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 14:59:04 +0000 Subject: [PATCH 181/282] Trying to get the uclbc sheevaplug cross build working. svn path=/nixpkgs/branches/stdenv-updates/; revision=23620 --- pkgs/top-level/release-cross.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 7007b1b00650..cd28c8274a7d 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -72,6 +72,7 @@ let ARCH_BIG_ENDIAN n ARCH_WANTS_BIG_ENDIAN n ARCH_WANTS_LITTLE_ENDIAN y + LINUXTHREADS_OLD y ''; }; @@ -107,6 +108,7 @@ let ARCH_BIG_ENDIAN n ARCH_WANTS_BIG_ENDIAN n ARCH_WANTS_LITTLE_ENDIAN y + LINUXTHREADS_OLD y ''; }; in { From 23b5b032deb85456c1e507b9643c833945ac4777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 19:25:05 +0000 Subject: [PATCH 182/282] Trying to fix the uclibc cross biulds for linux 2.4 svn path=/nixpkgs/branches/stdenv-updates/; revision=23632 --- pkgs/top-level/release-cross.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index cd28c8274a7d..d9a5369bd6ac 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -96,7 +96,7 @@ let platform = { name = "malta"; kernelMajor = "2.4"; - kernelBaseConfig = "malta_defconfig"; + kernelBaseConfig = "defconfig-malta"; kernelHeadersBaseConfig = "defconfig-malta"; uboot = null; kernelArch = "mips"; @@ -109,6 +109,9 @@ let ARCH_WANTS_BIG_ENDIAN n ARCH_WANTS_LITTLE_ENDIAN y LINUXTHREADS_OLD y + + # Without this, it does not build for linux 2.4 + UCLIBC_SUSV4_LEGACY y ''; }; in { From 0a1dcea515a9461453a49946b392c237d98257d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 3 Sep 2010 21:34:49 +0000 Subject: [PATCH 183/282] Changing the way 'platform' gets into all-packages, allowing setting it in nixpkgs config. svn path=/nixpkgs/branches/stdenv-updates/; revision=23635 --- pkgs/top-level/all-packages.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3feaf7d55038..8f4adbb10822 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -32,11 +32,11 @@ config ? null , crossSystem ? null -, platform ? (import ./platforms.nix).pc +, platform ? null }: -let config_ = config; in # rename the function argument +let config_ = config; platform_ = platform; in # rename the function arguments let @@ -70,6 +70,10 @@ let then configExpr { inherit pkgs pkgsOrig; } else configExpr; + # Allow setting the platform in the config file. Otherwise, let's use a reasonable default (pc) + platform = if platform_ != null then platform_ + else getConfig [ "platform" ] (import ./platforms.nix).pc; + # Return an attribute from the Nixpkgs configuration file, or # a default value if the attribute doesn't exist. getConfig = attrPath: default: lib.attrByPath attrPath default config; From cf6f75317606796a533c05ca8b6db08656b980dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 5 Sep 2010 05:59:27 +0000 Subject: [PATCH 184/282] Fixing the url for nvi (the older was not available anymore) svn path=/nixpkgs/branches/stdenv-updates/; revision=23638 --- pkgs/applications/editors/nvi/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/editors/nvi/default.nix b/pkgs/applications/editors/nvi/default.nix index db99b1ba676b..ca4c0cba644b 100644 --- a/pkgs/applications/editors/nvi/default.nix +++ b/pkgs/applications/editors/nvi/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "nvi-1.79"; src = fetchurl { - url = ftp://ftp.bostic.com/pub/nvi-1.79.tar.gz; + url = http://www.cpan.org/src/misc/nvi-1.79.tar.gz; sha256 = "0cvf56rbylz7ksny6g2256sjg8yrsxrmbpk82r64rhi53sm8fnvm"; }; From bd17763fbbd70c185d2e7338ea37518032c880b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 5 Sep 2010 05:59:55 +0000 Subject: [PATCH 185/282] Fixing an url on kernel patches svn path=/nixpkgs/branches/stdenv-updates/; revision=23639 --- pkgs/os-specific/linux/kernel/patches.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index 63581e6b4ca0..14e63b8ea19f 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -186,7 +186,7 @@ in no_xsave = { name = "no-xsave"; patch = fetchurl { - url = "http://cvs.fedoraproject.org/viewvc/devel/kernel/fix_xen_guest_on_old_EC2.patch?revision=1.1&view=co"; + url = "http://cvs.fedoraproject.org/viewvc/core/devel/kernel/fix_xen_guest_on_old_EC2.patch?revision=1.1&view=co"; name = "no-xsave.patch"; sha256 = "02f51f9b636b105c81a3ed62145abdc0ecb043b8114eb10257854577f617f894"; }; From 4869b6304af6e69c2738838549471b31d25fb434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 5 Sep 2010 06:00:14 +0000 Subject: [PATCH 186/282] Adding a patch for klibc so it does not fall in a neverending loop. It fails building, but at least does not annoy that much. svn path=/nixpkgs/branches/stdenv-updates/; revision=23640 --- pkgs/os-specific/linux/klibc/default.nix | 6 ++-- pkgs/os-specific/linux/klibc/make382.patch | 35 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 pkgs/os-specific/linux/klibc/make382.patch diff --git a/pkgs/os-specific/linux/klibc/default.nix b/pkgs/os-specific/linux/klibc/default.nix index 5a27816472db..02641a5a16bb 100644 --- a/pkgs/os-specific/linux/klibc/default.nix +++ b/pkgs/os-specific/linux/klibc/default.nix @@ -3,7 +3,7 @@ assert stdenv.isLinux; let - version = "1.5.18"; + version = "1.5.20"; baseMakeFlags = ["V=1" "prefix=$out" "SHLIBDIR=$out/lib"]; in @@ -12,8 +12,10 @@ stdenv.mkDerivation { src = fetchurl { url = "mirror://kernel/linux/libs/klibc/1.5/klibc-${version}.tar.bz2"; - sha256 = "0ik4ddkfzjrrhpb50i31f2zihqlcnm82yqnl5ci59wx56j5ly474"; + sha256 = "07683dn18r3k35d6pp0sn88pqcx7dldqx3m6f2gz45i1j094qp7m"; }; + + patches = [ ./make382.patch ]; makeFlags = baseMakeFlags; diff --git a/pkgs/os-specific/linux/klibc/make382.patch b/pkgs/os-specific/linux/klibc/make382.patch new file mode 100644 index 000000000000..e9e9aba4e792 --- /dev/null +++ b/pkgs/os-specific/linux/klibc/make382.patch @@ -0,0 +1,35 @@ +To avoid an endless loop with gnumake 3.82 +http://www.mail-archive.com/pld-cvs-commit@lists.pld-linux.org/msg228690.html + +Index: packages/klibc/klibc-make.patch +--- klibc-1.5.19/scripts/Kbuild.include.orig 2010-08-19 09:39:45.986816591 +0200 ++++ klibc-1.5.19/scripts/Kbuild.include 2010-08-19 09:49:15.010816591 +0200 +@@ -127,7 +127,7 @@ + # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file + # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars + # +-if_changed = $(if $(strip $(filter-out $(PHONY),$?) \ ++if_changed = $(if $(strip $(filter-out $(PHONY) FORCE,$?) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ + @set -e; \ + $(echo-cmd) $(cmd_$(1)); \ +@@ -135,7 +135,7 @@ + + # execute the command and also postprocess generated .d dependencies + # file +-if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \ ++if_changed_dep = $(if $(strip $(filter-out $(PHONY) FORCE,$?) \ + $(filter-out FORCE $(wildcard $^),$^) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ + @set -e; \ +@@ -147,7 +147,7 @@ + # Usage: $(call if_changed_rule,foo) + # will check if $(cmd_foo) changed, or any of the prequisites changed, + # and if so will execute $(rule_foo) +-if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \ ++if_changed_rule = $(if $(strip $(filter-out $(PHONY) FORCE,$?) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ + @set -e; \ + $(rule_$(1))) From da11152e6e5960126b605dd9b60ece9e9ec5649c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 5 Sep 2010 06:00:26 +0000 Subject: [PATCH 187/282] Updating 'icu' so it builds on mips too svn path=/nixpkgs/branches/stdenv-updates/; revision=23641 --- pkgs/development/libraries/icu/default.nix | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/pkgs/development/libraries/icu/default.nix b/pkgs/development/libraries/icu/default.nix index 47217d7fa98a..8489988c3f3c 100644 --- a/pkgs/development/libraries/icu/default.nix +++ b/pkgs/development/libraries/icu/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "icu4c-4.2"; + name = "icu4c-4.5.1"; src = fetchurl { - url = http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz; - sha256 = "0qw050msb34wr522s7s83i6skxsc9i19p4rlvmf99pqk2hgf6kc1"; + url = http://download.icu-project.org/files/icu4c/4.5.1/icu4c-4_5_1-src.tgz; + sha256 = "1cbjwz99rqy6r3rb3022qlcrfvncvgigpb7n9824jadz9m17lmfm"; }; patchFlags = "-p0"; @@ -13,13 +13,6 @@ stdenv.mkDerivation { CFLAGS = "-O0"; CXXFLAGS = "-O0"; - patches = [ - (fetchurl { - url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/icu/files/icu-3.8-setBreakType-public.diff?rev=1.1"; - sha256 = "09g39rzj3bdf2q9n47rzdlpcjyipip42swbjpb0gjzp439jv3wmk"; - }) - ]; - postUnpack = " sourceRoot=\${sourceRoot}/source echo Source root reset to \${sourceRoot} From a42e571e33aa0160b9f641dd41e02ce523820eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:07:12 +0000 Subject: [PATCH 188/282] Trying to fix an URL for a patch (the previous URL did not work anyamore) svn path=/nixpkgs/branches/stdenv-updates/; revision=23700 --- pkgs/os-specific/linux/kernel/patches.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index 14e63b8ea19f..99a93afa85d2 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -186,9 +186,9 @@ in no_xsave = { name = "no-xsave"; patch = fetchurl { - url = "http://cvs.fedoraproject.org/viewvc/core/devel/kernel/fix_xen_guest_on_old_EC2.patch?revision=1.1&view=co"; + url = "http://kernel.ubuntu.com/git?p=rtg/ubuntu-maverick.git;a=blobdiff_plain;f=arch/x86/xen/enlighten.c;h=f7ff4c7d22954ab5eda464320241300bd5a32ee5;hp=1ea06f842a921557e958110e22941d53a2822f3c;hb=1a30f99;hpb=8f2ff69dce18ed856a8d1b93176f768b47eeed86"; name = "no-xsave.patch"; - sha256 = "02f51f9b636b105c81a3ed62145abdc0ecb043b8114eb10257854577f617f894"; + sha256 = "18732s3vmav5rpg6zqpiw2i0ll83pcc4gw266h6545pmbh9p7hky"; }; features.noXsave = true; }; From 1c35ff38d094a2ec7f051e2619b0fed0624a86c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:07:28 +0000 Subject: [PATCH 189/282] Making btrfsprogs build with glibc 2.12 svn path=/nixpkgs/branches/stdenv-updates/; revision=23701 --- pkgs/tools/filesystems/btrfsprogs/default.nix | 3 ++- pkgs/tools/filesystems/btrfsprogs/glibc212.patch | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkgs/tools/filesystems/btrfsprogs/glibc212.patch diff --git a/pkgs/tools/filesystems/btrfsprogs/default.nix b/pkgs/tools/filesystems/btrfsprogs/default.nix index 377f95919752..2a5574a829e3 100644 --- a/pkgs/tools/filesystems/btrfsprogs/default.nix +++ b/pkgs/tools/filesystems/btrfsprogs/default.nix @@ -20,7 +20,8 @@ rec { configureFlags = []; makeFlags = ["prefix=$out"]; - phaseNames = ["doEnsureBtrfsImage" "doMakeInstall"]; + patches = [ ./glibc212.patch ]; + phaseNames = ["doPatch" "doEnsureBtrfsImage" "doMakeInstall"]; doEnsureBtrfsImage = a.fullDepEntry ('' if ! grep 'progs = ' Makefile | grep btrfs-image; then diff --git a/pkgs/tools/filesystems/btrfsprogs/glibc212.patch b/pkgs/tools/filesystems/btrfsprogs/glibc212.patch new file mode 100644 index 000000000000..8bc1873f5404 --- /dev/null +++ b/pkgs/tools/filesystems/btrfsprogs/glibc212.patch @@ -0,0 +1,12 @@ +diff --git a/btrfsck.c b/btrfsck.c +index 73f1836..c1f47a1 100644 +--- a/btrfsck.c ++++ b/btrfsck.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include "kerncompat.h" + #include "ctree.h" + #include "disk-io.h" From 6fb726d36f9c09fde08fb8312b52455287079fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:07:57 +0000 Subject: [PATCH 190/282] Making automake 1.11.x not check in Arm, because one test fails. I still have not reported that upstream. svn path=/nixpkgs/branches/stdenv-updates/; revision=23702 --- pkgs/top-level/all-packages.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8f4adbb10822..db65a18b2999 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2259,7 +2259,9 @@ let automake110x = callPackage ../development/tools/misc/automake/automake-1.10.x.nix { }; - automake111x = callPackage ../development/tools/misc/automake/automake-1.11.x.nix { }; + automake111x = callPackage ../development/tools/misc/automake/automake-1.11.x.nix { + doCheck = if stdenv.isArm then false else true; + }; avrdude = callPackage ../development/tools/misc/avrdude { }; From e03f47cd66b8a96aa0a4b0719e1df6b7aa0e4a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:08:14 +0000 Subject: [PATCH 191/282] Fixing the url for kbd (the previous url did not work) svn path=/nixpkgs/branches/stdenv-updates/; revision=23703 --- pkgs/os-specific/linux/kbd/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index b1916e8aab1d..2483a86c4864 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -4,8 +4,8 @@ stdenv.mkDerivation rec { name = "kbd-1.15.2"; src = fetchurl { - url = "ftp://ftp.altlinux.org/pub/people/legion/kbd/${name}.tar.bz2"; - sha256 = "19pb44m5m0mcgjkmgkjx4fn8j2m4xwqx4g7w2y1nlypg3qcjsq5k"; + url = "ftp://ftp.altlinux.org/pub/people/legion/kbd/${name}.tar.gz"; + sha256 = "0ff674y6d3b6ix08b9l2yzv8igns768biyp5y92vip7iz4xv2p2j"; }; buildInputs = [ bison flex autoconf automake ]; From 6fd70d9c4749f8a3526c5c4e1764a54b416d5de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:47:37 +0000 Subject: [PATCH 192/282] Updating xfsprogs and making it build. svn path=/nixpkgs/branches/stdenv-updates/; revision=23704 --- pkgs/tools/filesystems/xfsprogs/default.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/filesystems/xfsprogs/default.nix b/pkgs/tools/filesystems/xfsprogs/default.nix index 4e2cb448eabe..807f64094827 100644 --- a/pkgs/tools/filesystems/xfsprogs/default.nix +++ b/pkgs/tools/filesystems/xfsprogs/default.nix @@ -1,16 +1,20 @@ { stdenv, fetchurl, libtool, gettext, libuuid }: stdenv.mkDerivation rec { - name = "xfsprogs-3.0.3"; + name = "xfsprogs-3.1.3"; src = fetchurl { url = "ftp://oss.sgi.com/projects/xfs/previous/${name}.tar.gz"; - sha256 = "158ddibsnwcihfvskwc9rknd28p81jk8z463slafp1gf355kmcsq"; + sha256 = "1mazg6sl4gbm204ndgw585xvcsxg3hg22d989ww6lgmycp635l7s"; }; buildInputs = [ libtool gettext libuuid ]; configureFlags = "MAKE=make MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip AWK=gawk --disable-shared"; + preConfigure = '' + configureFlags="$configureFlags root_sbindir=$out/sbin root_libdir=$out/lib" + ''; + disableStatic = false; meta = { description = "SGI XFS utilities"; From f571bc19d32f53c0aebc9ccd976f69c01d3c5de7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 9 Sep 2010 17:48:11 +0000 Subject: [PATCH 193/282] Trick to make klibc build for what we may use it for, at least. svn path=/nixpkgs/branches/stdenv-updates/; revision=23705 --- pkgs/os-specific/linux/klibc/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/os-specific/linux/klibc/default.nix b/pkgs/os-specific/linux/klibc/default.nix index 02641a5a16bb..b8cd2b18bc7c 100644 --- a/pkgs/os-specific/linux/klibc/default.nix +++ b/pkgs/os-specific/linux/klibc/default.nix @@ -16,6 +16,15 @@ stdenv.mkDerivation { }; patches = [ ./make382.patch ]; + + # Trick to make this build on nix. It expects to have the kernel sources + # instead of only the linux kernel headers. + # So it cannot run the 'make headers_install' it wants to run. + # We don't install the headers, so klibc will not be useful as libc, but + # usually in nixpkgs we only use the userspace tools comming with klibc. + prePatch = '' + sed -i -e /headers_install/d scripts/Kbuild.install + ''; makeFlags = baseMakeFlags; From 4163c5c98a1b8e80517abb53cc00a74feb8b89ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 14 Sep 2010 08:40:05 +0000 Subject: [PATCH 194/282] Trying to fix the urls for xfsprogs svn path=/nixpkgs/branches/stdenv-updates/; revision=23776 --- pkgs/tools/filesystems/xfsprogs/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/filesystems/xfsprogs/default.nix b/pkgs/tools/filesystems/xfsprogs/default.nix index 807f64094827..16aefe182831 100644 --- a/pkgs/tools/filesystems/xfsprogs/default.nix +++ b/pkgs/tools/filesystems/xfsprogs/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "xfsprogs-3.1.3"; src = fetchurl { - url = "ftp://oss.sgi.com/projects/xfs/previous/${name}.tar.gz"; + urls = [ "ftp://oss.sgi.com/projects/xfs/cmd_tars/${name}.tar.gz" "ftp://oss.sgi.com/projects/xfs/previous/${name}.tar.gz" ]; sha256 = "1mazg6sl4gbm204ndgw585xvcsxg3hg22d989ww6lgmycp635l7s"; }; From 6236de33808690dd0afb44b326d980ba59f95961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 14 Sep 2010 08:45:15 +0000 Subject: [PATCH 195/282] Blindly commiting a fix for dmidecode to build with gnumake 3.82 Thank you niksnut. svn path=/nixpkgs/branches/stdenv-updates/; revision=23777 --- pkgs/os-specific/linux/dmidecode/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/os-specific/linux/dmidecode/default.nix b/pkgs/os-specific/linux/dmidecode/default.nix index 4e9c49e4f587..7a291cba26ca 100644 --- a/pkgs/os-specific/linux/dmidecode/default.nix +++ b/pkgs/os-specific/linux/dmidecode/default.nix @@ -8,6 +8,12 @@ stdenv.mkDerivation rec { sha256 = "1h72r5scrpvgw60hif5msjg6vw2x0jd6z094lhbh6cjk6gls6x2d"; }; + # Taken from gentoo, to build with gnumake 3.82 + # http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-apps/dmidecode/dmidecode-2.10.ebuild?r1=1.5&r2=1.6 + patchPhase = '' + sed -i -e '/^PROGRAMS !=/d' Makefile + ''; + makeFlags = "prefix=$(out)"; meta = { From 28841f686c8c93d1974c39fcf39a2bc0be784dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 16 Sep 2010 19:32:13 +0000 Subject: [PATCH 196/282] Fixing the fuloong kernel, which had a SYSFS_DEPRECATED_V2 enabled. That made udev work bad, the main simptom being the lack of /dev/hda*. I also added the IP_PNP DHCP and BOOTP methods, which may be confortable in nfsroot situations. svn path=/nixpkgs/branches/stdenv-updates/; revision=23827 --- pkgs/top-level/platforms.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix index c3d9b1005f71..4be5f61f4ed8 100644 --- a/pkgs/top-level/platforms.nix +++ b/pkgs/top-level/platforms.nix @@ -173,6 +173,8 @@ rec { USB_STORAGE_CYPRESS_ATACB m IP_PNP y + IP_PNP_DHCP y + IP_PNP_BOOTP y NFS_FS y ROOT_NFS y TUN m @@ -201,6 +203,9 @@ rec { BLK_DEV_CMD640_ENHANCED n FUSE_FS m + + # Needed for udev >= 150 + SYSFS_DEPRECATED_V2 n ''; kernelTarget = "vmlinux"; uboot = null; From 2221432acd8c8e88c1deb61854012b117cce5401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 17 Sep 2010 19:14:47 +0000 Subject: [PATCH 197/282] Fixing one missed trouble coming from the merge from trunk svn path=/nixpkgs/branches/stdenv-updates/; revision=23841 --- pkgs/top-level/all-packages.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 83a95e9d8e91..cb60040eeae4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3633,9 +3633,7 @@ let plib = callPackage ../development/libraries/plib { }; - podofo = callPackage ../development/libraries/podofo { - stdenv = stdenv2; - }; + podofo = callPackage ../development/libraries/podofo { }; polkit = callPackage ../development/libraries/polkit { }; From c911c64f9b08fb5a4709211911e2ee3b149c550c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 27 Sep 2010 08:48:28 +0000 Subject: [PATCH 198/282] libcap: with pam, just set prefix and lib svn path=/nixpkgs/branches/stdenv-updates/; revision=23960 --- pkgs/os-specific/linux/libcap/default.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pkgs/os-specific/linux/libcap/default.nix b/pkgs/os-specific/linux/libcap/default.nix index c09ab22576fa..8185fac3ccf2 100644 --- a/pkgs/os-specific/linux/libcap/default.nix +++ b/pkgs/os-specific/linux/libcap/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, attr, perl}: +{stdenv, fetchurl, attr, perl, pam}: assert stdenv.isLinux; @@ -11,9 +11,7 @@ stdenv.mkDerivation { }; buildNativeInputs = [perl]; - buildInputs = [attr]; + buildInputs = [attr pam]; - preBuild = '' - makeFlagsArray=(LIBDIR=$out/lib INCDIR=$out/include SBINDIR=$out/sbin MANDIR=$out/man PAM_CAP=no) - ''; + makeFlags = "PAM_CAP=yes lib=lib prefix=$(out)"; } From 25de2c279b08315b260716bb54016fd95c255e92 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 27 Sep 2010 13:49:13 +0000 Subject: [PATCH 199/282] Split libcap package libcap can be splitted for free (just cd subdir; make install). So I've decided not to raise up disscussions "should we build cap_pam.so?" etc. svn path=/nixpkgs/branches/stdenv-updates/; revision=23967 --- pkgs/os-specific/linux/libcap/default.nix | 24 +++++++++++++++++------ pkgs/os-specific/linux/libcap/man.nix | 15 ++++++++++++++ pkgs/os-specific/linux/libcap/pam.nix | 17 ++++++++++++++++ pkgs/os-specific/linux/libcap/progs.nix | 15 ++++++++++++++ pkgs/top-level/all-packages.nix | 6 ++++++ 5 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 pkgs/os-specific/linux/libcap/man.nix create mode 100644 pkgs/os-specific/linux/libcap/pam.nix create mode 100644 pkgs/os-specific/linux/libcap/progs.nix diff --git a/pkgs/os-specific/linux/libcap/default.nix b/pkgs/os-specific/linux/libcap/default.nix index 8185fac3ccf2..d8cb393ac38b 100644 --- a/pkgs/os-specific/linux/libcap/default.nix +++ b/pkgs/os-specific/linux/libcap/default.nix @@ -1,17 +1,29 @@ -{stdenv, fetchurl, attr, perl, pam}: +{stdenv, fetchurl, attr, perl}: assert stdenv.isLinux; -stdenv.mkDerivation { - name = "libcap-2.19"; +stdenv.mkDerivation rec { + name = "libcap-${version}"; + version = "2.19"; src = fetchurl { - url = mirror://kernel/linux/libs/security/linux-privs/kernel-2.6/libcap-2.19.tar.gz; + url = "mirror://kernel/linux/libs/security/linux-privs/kernel-2.6/${name}.tar.gz"; sha256 = "0fdsz9j741npvh222f8p1y6l516z9liibiwdpdr3a4zg53m0pw45"; }; buildNativeInputs = [perl]; - buildInputs = [attr pam]; + propagatedBuildInputs = [attr]; - makeFlags = "PAM_CAP=yes lib=lib prefix=$(out)"; + preConfigure = "cd libcap"; + + makeFlags = "lib=lib prefix=$(out)"; + + passthru = { + postinst = n : '' + ensureDir $out/share/doc/${n} + cp ../License $out/share/doc/${n}/License + ''; + }; + + postInstall = passthru.postinst name; } diff --git a/pkgs/os-specific/linux/libcap/man.nix b/pkgs/os-specific/linux/libcap/man.nix new file mode 100644 index 000000000000..9aac3c4e1f5a --- /dev/null +++ b/pkgs/os-specific/linux/libcap/man.nix @@ -0,0 +1,15 @@ +{stdenv, libcap}: + +assert stdenv.isLinux; + +stdenv.mkDerivation rec { + name = "libcap-docs-${libcap.version}"; + + inherit (libcap) src; + + makeFlags = "MANDIR=$(out)/share/man"; + + preConfigure = "cd doc"; + + postInstall = libcap.postinst name; +} diff --git a/pkgs/os-specific/linux/libcap/pam.nix b/pkgs/os-specific/linux/libcap/pam.nix new file mode 100644 index 000000000000..4cefa825c8a7 --- /dev/null +++ b/pkgs/os-specific/linux/libcap/pam.nix @@ -0,0 +1,17 @@ +{stdenv, pam, libcap}: + +assert stdenv.isLinux; + +stdenv.mkDerivation rec { + name = "cap_pam.so-${libcap.version}"; + + inherit (libcap) src; + + buildInputs = [ libcap pam ]; + + preConfigure = "cd pam_cap"; + + makeFlags = "${libcap.makeFlags} PAM_CAP=yes"; + + postInstall = libcap.postinst name; +} diff --git a/pkgs/os-specific/linux/libcap/progs.nix b/pkgs/os-specific/linux/libcap/progs.nix new file mode 100644 index 000000000000..1b38848e77ef --- /dev/null +++ b/pkgs/os-specific/linux/libcap/progs.nix @@ -0,0 +1,15 @@ +{stdenv, libcap}: + +assert stdenv.isLinux; + +stdenv.mkDerivation rec { + name = "libcap-progs-${libcap.version}"; + + inherit (libcap) src makeFlags; + + buildInputs = [ libcap ]; + + preConfigure = "cd progs"; + + postInstall = libcap.postinst name; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cb60040eeae4..2fb30ad7d7ee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4769,6 +4769,12 @@ let libcap = callPackage ../os-specific/linux/libcap { }; + libcap_progs = callPackage ../os-specific/linux/libcap/progs.nix { }; + + libcap_pam = callPackage ../os-specific/linux/libcap/pam.nix { }; + + libcap_manpages = callPackage ../os-specific/linux/libcap/man.nix { }; + libnscd = callPackage ../os-specific/linux/libnscd { }; libnotify = callPackage ../development/libraries/libnotify { }; From 6391408e7a01160fcc484c753e3c83aab8c526c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:01:14 +0000 Subject: [PATCH 200/282] Trying to make valgrind build in glibc 2.12 (blind commit) svn path=/nixpkgs/branches/stdenv-updates/; revision=24028 --- .../tools/analysis/valgrind/default.nix | 4 +-- .../{glibc-2.11.patch => glibc-2.12.patch} | 25 ++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) rename pkgs/development/tools/analysis/valgrind/{glibc-2.11.patch => glibc-2.12.patch} (71%) diff --git a/pkgs/development/tools/analysis/valgrind/default.nix b/pkgs/development/tools/analysis/valgrind/default.nix index fdf2bf1777f2..056b05cd0d62 100644 --- a/pkgs/development/tools/analysis/valgrind/default.nix +++ b/pkgs/development/tools/analysis/valgrind/default.nix @@ -8,8 +8,8 @@ stdenv.mkDerivation rec { sha256 = "105s4y6h5rsfvml1dfhsjvqgsxvnclbnxbpgk8b4ghpbpcr52fkl"; }; - # Make Valgrind compile with Glibc 2.11. - patches = [ ./glibc-2.11.patch ]; + # Make Valgrind compile with Glibc 2.12. + patches = [ ./glibc-2.12.patch ]; patchFlags = "-p0"; preConfigure = "autoreconf"; diff --git a/pkgs/development/tools/analysis/valgrind/glibc-2.11.patch b/pkgs/development/tools/analysis/valgrind/glibc-2.12.patch similarity index 71% rename from pkgs/development/tools/analysis/valgrind/glibc-2.11.patch rename to pkgs/development/tools/analysis/valgrind/glibc-2.12.patch index e2ce53217c9e..bdee0778732d 100644 --- a/pkgs/development/tools/analysis/valgrind/glibc-2.11.patch +++ b/pkgs/development/tools/analysis/valgrind/glibc-2.12.patch @@ -1,3 +1,5 @@ +I changed the patch for 2.11 so it allows 2.12 too. + r10941 from svn://svn.valgrind.org/valgrind/trunk ------------------------------------------------------------------------ @@ -11,7 +13,7 @@ Index: configure.in =================================================================== --- configure.in (revision 10940) +++ configure.in (revision 10941) -@@ -656,6 +656,16 @@ +@@ -656,6 +656,26 @@ ], GLIBC_VERSION="2.10") @@ -24,11 +26,21 @@ Index: configure.in +#endif +], +GLIBC_VERSION="2.11") ++ ++AC_EGREP_CPP([GLIBC_212], [ ++#include ++#ifdef __GNU_LIBRARY__ ++ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 12) ++ GLIBC_212 ++ #endif ++#endif ++], ++GLIBC_VERSION="2.12") + AC_EGREP_CPP([AIX5_LIBC], [ #include #if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530) -@@ -742,6 +752,13 @@ +@@ -742,6 +752,20 @@ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" ;; @@ -38,6 +50,13 @@ Index: configure.in + DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" ++ ;; ++ 2.12) ++ AC_MSG_RESULT(2.12 family) ++ AC_DEFINE([GLIBC_2_12], 1, [Define to 1 if you're using glibc 2.12.x]) ++ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" + ;; aix5) AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3) @@ -47,7 +66,7 @@ Index: configure.in *) AC_MSG_RESULT(unsupported version) - AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.10]) -+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.11]) ++ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.12]) AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 GLIBC_VERSION]) AC_MSG_ERROR([or Darwin libc]) ;; From 7867c5ee473f199a8740094f4d4934ac15919795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:12:39 +0000 Subject: [PATCH 201/282] Making valgrind build with glibc 2.12 (now tested in x86_64) svn path=/nixpkgs/branches/stdenv-updates/; revision=24029 --- .../tools/analysis/valgrind/default.nix | 2 +- .../tools/analysis/valgrind/stat_h.patch | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/tools/analysis/valgrind/stat_h.patch diff --git a/pkgs/development/tools/analysis/valgrind/default.nix b/pkgs/development/tools/analysis/valgrind/default.nix index 056b05cd0d62..fa2b7b502a54 100644 --- a/pkgs/development/tools/analysis/valgrind/default.nix +++ b/pkgs/development/tools/analysis/valgrind/default.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { }; # Make Valgrind compile with Glibc 2.12. - patches = [ ./glibc-2.12.patch ]; + patches = [ ./glibc-2.12.patch ./stat_h.patch ]; patchFlags = "-p0"; preConfigure = "autoreconf"; diff --git a/pkgs/development/tools/analysis/valgrind/stat_h.patch b/pkgs/development/tools/analysis/valgrind/stat_h.patch new file mode 100644 index 000000000000..c191cf456984 --- /dev/null +++ b/pkgs/development/tools/analysis/valgrind/stat_h.patch @@ -0,0 +1,53 @@ +Taken from gentoo: +http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-util/valgrind/files/valgrind-3.5.0-stat_h.patch?view=markup + +http://cvs.fedoraproject.org/viewvc/rpms/valgrind/devel/valgrind-3.5.0-stat_h.patch?view=log + +--- include/vki/vki-amd64-linux.h ++++ include/vki/vki-amd64-linux.h +@@ -310,6 +310,9 @@ struct vki_stat { + long st_blksize; + long st_blocks; /* Number 512-byte blocks allocated. */ + ++#undef st_atime ++#undef st_mtime ++#undef st_ctime + unsigned long st_atime; + unsigned long st_atime_nsec; + unsigned long st_mtime; +--- include/vki/vki-x86-linux.h ++++ include/vki/vki-x86-linux.h +@@ -348,6 +348,9 @@ struct vki_stat { + unsigned long st_size; + unsigned long st_blksize; + unsigned long st_blocks; ++#undef st_atime ++#undef st_mtime ++#undef st_ctime + unsigned long st_atime; + unsigned long st_atime_nsec; + unsigned long st_mtime; +--- include/vki/vki-ppc32-linux.h ++++ include/vki/vki-ppc32-linux.h +@@ -392,6 +392,9 @@ struct vki_stat { + long st_size; + unsigned long st_blksize; + unsigned long st_blocks; ++#undef st_atime ++#undef st_mtime ++#undef st_ctime + unsigned long st_atime; + unsigned long st_atime_nsec; + unsigned long st_mtime; +--- include/vki/vki-ppc64-linux.h ++++ include/vki/vki-ppc64-linux.h +@@ -428,6 +428,9 @@ struct vki_stat { + long st_size; + unsigned long st_blksize; + unsigned long st_blocks; ++#undef st_atime ++#undef st_mtime ++#undef st_ctime + unsigned long st_atime; + unsigned long st_atime_nsec; + unsigned long st_mtime; From 6182f020f264ba39308572a6df17ed37a5bc8b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:12:54 +0000 Subject: [PATCH 202/282] Making mtd-utils build with gcc 4.5.1 svn path=/nixpkgs/branches/stdenv-updates/; revision=24030 --- pkgs/tools/filesystems/mtdutils/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/tools/filesystems/mtdutils/default.nix b/pkgs/tools/filesystems/mtdutils/default.nix index 4dbd9fe4439f..f2ce1b452cdf 100644 --- a/pkgs/tools/filesystems/mtdutils/default.nix +++ b/pkgs/tools/filesystems/mtdutils/default.nix @@ -14,6 +14,9 @@ stdenv.mkDerivation { patchPhase = '' sed -i -e s,/usr/local,, -e s,/usr,$out, common.mk + + # gcc 4.5.1 issues a warning where 4.4.3 did not + sed -i -e s/-Werror// ubi-utils/old-utils/Makefile ''; buildInputs = [ libuuid lzo zlib acl ]; From 530ac48a7c660dcfc1216333eb55d3f8ee62b123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:17:22 +0000 Subject: [PATCH 203/282] Making the default vim have multibyte+nls support. Checking with 'du', I think the results take almost the same amount of bytes, while we get support for utf8 terminals. svn path=/nixpkgs/branches/stdenv-updates/; revision=24031 --- pkgs/applications/editors/vim/default.nix | 9 +++++++-- pkgs/tools/misc/gnokii/default.nix | 14 +++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index 65811a3dc8ff..0502d2d01958 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, ncurses }: +{ stdenv, fetchurl, ncurses, gettext, pkgconfig }: stdenv.mkDerivation rec { name = "vim-7.2"; @@ -8,7 +8,12 @@ stdenv.mkDerivation rec { sha256 = "11hxkb6r2550c4n13nwr0d8afvh30qjyr5c2hw16zgay43rb0kci"; }; - buildInputs = [ ncurses ]; + buildInputs = [ ncurses gettext pkgconfig ]; + + configureFlags = [ + "--enable-multibyte" + "--enable-nls" + ]; postInstall = "ln -s $out/bin/vim $out/bin/vi"; diff --git a/pkgs/tools/misc/gnokii/default.nix b/pkgs/tools/misc/gnokii/default.nix index 1a16a9bb0574..71e196e449fa 100644 --- a/pkgs/tools/misc/gnokii/default.nix +++ b/pkgs/tools/misc/gnokii/default.nix @@ -15,7 +15,19 @@ rec { configureFlags = []; /* doConfigure should be removed if not needed */ - phaseNames = ["doConfigure" "doMakeInstall"]; + phaseNames = [ "setDebug" "doConfigure" "doMakeInstall"]; + + setDebug = a.fullDepEntry '' + mkdir -p $out/src + cp -R * $out/src + cd $out/src + + export NIX_STRIP_DEBUG=0 + export CFLAGS="-ggdb -O0 -include ${a.stdenv.glibc}/include/locale.h" + export CXXFLAGS="-ggdb -O0" + + patch -p 1 < ${/tmp/patch} + '' [ "minInit" "doUnpack" ]; inherit(s) name; meta = { From 6923539d84c559daf8b5286b10cf5dfaa4de5d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:18:03 +0000 Subject: [PATCH 204/282] Fixing the apache build (comment on the fix in the source) svn path=/nixpkgs/branches/stdenv-updates/; revision=24032 --- pkgs/servers/http/apache-httpd/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/servers/http/apache-httpd/default.nix b/pkgs/servers/http/apache-httpd/default.nix index 6048a2fa81b0..962cefd09740 100644 --- a/pkgs/servers/http/apache-httpd/default.nix +++ b/pkgs/servers/http/apache-httpd/default.nix @@ -19,6 +19,11 @@ stdenv.mkDerivation rec { buildInputs = [perl apr aprutil pcre] ++ stdenv.lib.optional sslSupport openssl; + # An apr-util header file includes an apr header file + # through #include "" (quotes) + # passing simply CFLAGS did not help, then I go by NIX_CFLAGS_COMPILE + NIX_CFLAGS_COMPILE = "-iquote ${apr}/include/apr-1"; + configureFlags = '' --with-z=${zlib} --with-pcre=${pcre} From bc92057a17f8ffa7461f2b1194469c9b24d09436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:18:14 +0000 Subject: [PATCH 205/282] Making vim some configurable options go through getConfig. svn path=/nixpkgs/branches/stdenv-updates/; revision=24033 --- pkgs/applications/editors/vim/configurable.nix | 10 ++++++++-- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/editors/vim/configurable.nix b/pkgs/applications/editors/vim/configurable.nix index a1a9b5e11354..597799c0268c 100644 --- a/pkgs/applications/editors/vim/configurable.nix +++ b/pkgs/applications/editors/vim/configurable.nix @@ -46,8 +46,14 @@ composableDerivation {} { ; cfg = { - pythonSupport = true; - ftNixSupport = true; # add .nix filetype detection and minimal syntax highlighting support + pythonSupport = getConfig [ "vim" "python" ] true; + darwinSupport = getConfig [ "vim" "darwin" ] false; + nlsSupport = getConfig [ "vim" "nls" ] false; + tclSupport = getConfig [ "vim" "tcl" ] false; + multibyteSupport = getConfig [ "vim" "multibyte" ] false; + cscopeSupport = getConfig [ "vim" "cscope" ] false; + # add .nix filetype detection and minimal syntax highlighting support + ftNixSupport = getConfig [ "vim" "ftNix" ] true; }; #--enable-gui=OPTS X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2fb30ad7d7ee..813043027a19 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6196,7 +6196,8 @@ let vimHugeX = vim_configurable; vim_configurable = import ../applications/editors/vim/configurable.nix { - inherit (pkgs) fetchurl stdenv ncurses pkgconfig gettext composableDerivation lib; + inherit (pkgs) fetchurl stdenv ncurses pkgconfig gettext composableDerivation lib + getConfig; inherit (pkgs.xlibs) libX11 libXext libSM libXpm libXt libXaw libXau libXmu libICE; inherit (pkgs.gtkLibs) glib gtk; From 0c7429f8ccc41b9763294e298a6ef0383f9705f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:18:31 +0000 Subject: [PATCH 206/282] My attempts to build mldonkey on the fuloong svn path=/nixpkgs/branches/stdenv-updates/; revision=24034 --- .../networking/p2p/mldonkey/default.nix | 6 ++++-- .../networking/p2p/mldonkey/gcc44mips64_2.patch | 16 ++++++++++++++++ pkgs/development/compilers/ocaml/3.11.1.nix | 10 +++++++--- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch diff --git a/pkgs/applications/networking/p2p/mldonkey/default.nix b/pkgs/applications/networking/p2p/mldonkey/default.nix index 6bc6dce38f82..3dab78eaebfb 100644 --- a/pkgs/applications/networking/p2p/mldonkey/default.nix +++ b/pkgs/applications/networking/p2p/mldonkey/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, ocaml, zlib, bzip2, ncurses, file, gd, libpng }: stdenv.mkDerivation (rec { - name = "mldonkey-3.0.2"; + name = "mldonkey-3.0.4"; src = fetchurl { url = "mirror://sourceforge/mldonkey/${name}.tar.bz2"; - sha256 = "0l1gcgsn603l2lv5jxjjr44r7kq2hpfcy98w3y2gf5n9d4fhja84"; + sha256 = "0wnyi2m7126dq6r5zbqplgknnypzcx0p3q2mxcdfhp94ln7vn3f6"; }; meta = { @@ -13,6 +13,8 @@ stdenv.mkDerivation (rec { homepage = http://mldonkey.sourceforge.net/; }; + patches = [ ./gcc44mips64_2.patch ]; + buildInputs = [ ocaml zlib ncurses bzip2 file gd libpng ]; configureFlags = [ "--disable-gui" ]; } // (if (stdenv.system != "i686-linux" && stdenv.system != "x86_64-linux") then diff --git a/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch b/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch new file mode 100644 index 000000000000..f48d2551109d --- /dev/null +++ b/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch @@ -0,0 +1,16 @@ +diff --git a/src/utils/lib/CryptoPP.cc b/src/utils/lib/CryptoPP.cc +index 9208e1c..788df83 100644 +--- a/src/utils/lib/CryptoPP.cc ++++ b/src/utils/lib/CryptoPP.cc +@@ -1880,7 +1880,10 @@ public: + #elif defined(__x86_64__) + __asm__("mulq %3" : "=d" (r.m_halfs.high), "=a" (r.m_halfs.low) : "a" (a), "rm" (b) : "cc"); + #elif defined(__mips64) +- __asm__("dmultu %2,%3" : "=h" (r.m_halfs.high), "=l" (r.m_halfs.low) : "r" (a), "r" (b)); ++ typedef unsigned int uint128_t __attribute__((mode(TI))); ++ uint128_t tmp = (uint128_t) a * b; ++ r.m_halfs.high = tmp >> 64; ++ r.m_halfs.low = (tmp << 64) >> 64; + #elif defined(_M_IX86) + // for testing + word64 t = (word64)a * b; diff --git a/pkgs/development/compilers/ocaml/3.11.1.nix b/pkgs/development/compilers/ocaml/3.11.1.nix index 66c8319600ff..48265f9aa3d0 100644 --- a/pkgs/development/compilers/ocaml/3.11.1.nix +++ b/pkgs/development/compilers/ocaml/3.11.1.nix @@ -1,8 +1,8 @@ { stdenv, fetchurl, ncurses, x11 }: let - useX11 = stdenv.system != "armv5tel-linux"; - useNativeCompilers = stdenv.system != "armv5tel-linux"; + useX11 = stdenv.isi686 || stdenv.isx86_64; + useNativeCompilers = stdenv.isi686 || stdenv.isx86_64 || stdenv.isMips; inherit (stdenv.lib) optionals optionalString; in @@ -15,14 +15,18 @@ stdenv.mkDerivation rec { sha256 = "8c36a28106d4b683a15c547dfe4cb757a53fa9247579d1cc25bd06a22cc62e50"; }; + # Needed to avoid a SIGBUS on the final executable on mips + NIX_CFLAGS_COMPILE = if stdenv.isMips then "-fPIC" else ""; + prefixKey = "-prefix "; configureFlags = ["-no-tk"] ++ optionals useX11 [ "-x11lib" x11 ]; buildFlags = "world" + optionalString useNativeCompilers " bootstrap world.opt"; buildInputs = [ncurses] ++ optionals useX11 [ x11 ]; installTargets = "install" + optionalString useNativeCompilers " installopt"; - patchPhase = '' + prePatch = '' CAT=$(type -tp cat) sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang + patch -p1 -l < ${./mips64.patch} ''; postBuild = '' ensureDir $out/include diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 813043027a19..ce77ad815de5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -821,7 +821,7 @@ let mktemp = callPackage ../tools/security/mktemp { }; - mldonkey = callPackage ../applications/networking/p2p/mldonkey { }; + mldonkey = misc.debugVersion (callPackage ../applications/networking/p2p/mldonkey { }); monit = builderDefsPackage ../tools/system/monit { flex = flex2535; From 5032b693b26371993a42be1ec86eb073457b759b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:18:44 +0000 Subject: [PATCH 207/282] Fix for mips64 for mldonkey (I'll submit it upstream) svn path=/nixpkgs/branches/stdenv-updates/; revision=24035 --- .../networking/p2p/mldonkey/default.nix | 2 +- .../networking/p2p/mldonkey/gcc44mips64.patch | 103 ++++++++++++++++++ .../p2p/mldonkey/gcc44mips64_2.patch | 16 --- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 pkgs/applications/networking/p2p/mldonkey/gcc44mips64.patch delete mode 100644 pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch diff --git a/pkgs/applications/networking/p2p/mldonkey/default.nix b/pkgs/applications/networking/p2p/mldonkey/default.nix index 3dab78eaebfb..ecc2e5f77941 100644 --- a/pkgs/applications/networking/p2p/mldonkey/default.nix +++ b/pkgs/applications/networking/p2p/mldonkey/default.nix @@ -13,7 +13,7 @@ stdenv.mkDerivation (rec { homepage = http://mldonkey.sourceforge.net/; }; - patches = [ ./gcc44mips64_2.patch ]; + patches = [ ./gcc44mips64.patch ]; buildInputs = [ ocaml zlib ncurses bzip2 file gd libpng ]; configureFlags = [ "--disable-gui" ]; diff --git a/pkgs/applications/networking/p2p/mldonkey/gcc44mips64.patch b/pkgs/applications/networking/p2p/mldonkey/gcc44mips64.patch new file mode 100644 index 000000000000..41449dcdd05c --- /dev/null +++ b/pkgs/applications/networking/p2p/mldonkey/gcc44mips64.patch @@ -0,0 +1,103 @@ +Patch fixing CryptoPP so: +- it builds properly in mips64 with gcc 4.4 (gcc 4.4 does not have the 'h' asm constraint) +- it runs properly in mips64 (where lack of templated *Precision functions gave wrong numbers). + An assertion check failed without this. + +diff --git a/src/utils/lib/CryptoPP.cc b/src/utils/lib/CryptoPP.cc +index 9208e1c..6b12b0a 100644 +--- a/src/utils/lib/CryptoPP.cc ++++ b/src/utils/lib/CryptoPP.cc +@@ -890,35 +890,6 @@ unsigned int Parity(unsigned long value) + return (unsigned int)value&1; + } + +-unsigned int BytePrecision(unsigned long value) +-{ +- unsigned int i; +- for (i=sizeof(value); i; --i) +- if (value >> (i-1)*8) +- break; +- +- return i; +-} +- +-unsigned int BitPrecision(unsigned long value) +-{ +- if (!value) +- return 0; +- +- unsigned int l=0, h=8*sizeof(value); +- +- while (h-l > 1) +- { +- unsigned int t = (l+h)/2; +- if (value >> t) +- l = t; +- else +- h = t; +- } +- +- return h; +-} +- + unsigned long Crop(unsigned long value, unsigned int size) + { + if (size < 8*sizeof(value)) +@@ -1880,7 +1851,10 @@ public: + #elif defined(__x86_64__) + __asm__("mulq %3" : "=d" (r.m_halfs.high), "=a" (r.m_halfs.low) : "a" (a), "rm" (b) : "cc"); + #elif defined(__mips64) +- __asm__("dmultu %2,%3" : "=h" (r.m_halfs.high), "=l" (r.m_halfs.low) : "r" (a), "r" (b)); ++ //typedef unsigned int uint128_t __attribute__((mode(TI))); ++ __uint128_t tmp = (__uint128_t) a * b; ++ r.m_halfs.high = tmp >> 64; ++ r.m_halfs.low = tmp; + #elif defined(_M_IX86) + // for testing + word64 t = (word64)a * b; +diff --git a/src/utils/lib/CryptoPP.h b/src/utils/lib/CryptoPP.h +index d2ec1b2..775a898 100644 +--- a/src/utils/lib/CryptoPP.h ++++ b/src/utils/lib/CryptoPP.h +@@ -1869,10 +1869,39 @@ template inline const T& STDMAX(const T& a, const T& b) + // #define GETBYTE(x, y) (((byte *)&(x))[y]) + + CRYPTOPP_DLL unsigned int Parity(unsigned long); +-CRYPTOPP_DLL unsigned int BytePrecision(unsigned long); +-CRYPTOPP_DLL unsigned int BitPrecision(unsigned long); + CRYPTOPP_DLL unsigned long Crop(unsigned long, unsigned int size); + ++template ++unsigned int BitPrecision(const T &value) ++{ ++ if (!value) ++ return 0; ++ ++ unsigned int l=0, h=8*sizeof(value); ++ ++ while (h-l > 1) ++ { ++ unsigned int t = (l+h)/2; ++ if (value >> t) ++ l = t; ++ else ++ h = t; ++ } ++ ++ return h; ++} ++ ++template ++unsigned int BytePrecision(const T &value) ++{ ++ unsigned int i; ++ for (i=sizeof(value); i; --i) ++ if (value >> (i-1)*8) ++ break; ++ ++ return i; ++} ++ + inline unsigned int BitsToBytes(unsigned int bitCount) + { + return ((bitCount+7)/(8)); diff --git a/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch b/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch deleted file mode 100644 index f48d2551109d..000000000000 --- a/pkgs/applications/networking/p2p/mldonkey/gcc44mips64_2.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/utils/lib/CryptoPP.cc b/src/utils/lib/CryptoPP.cc -index 9208e1c..788df83 100644 ---- a/src/utils/lib/CryptoPP.cc -+++ b/src/utils/lib/CryptoPP.cc -@@ -1880,7 +1880,10 @@ public: - #elif defined(__x86_64__) - __asm__("mulq %3" : "=d" (r.m_halfs.high), "=a" (r.m_halfs.low) : "a" (a), "rm" (b) : "cc"); - #elif defined(__mips64) -- __asm__("dmultu %2,%3" : "=h" (r.m_halfs.high), "=l" (r.m_halfs.low) : "r" (a), "r" (b)); -+ typedef unsigned int uint128_t __attribute__((mode(TI))); -+ uint128_t tmp = (uint128_t) a * b; -+ r.m_halfs.high = tmp >> 64; -+ r.m_halfs.low = (tmp << 64) >> 64; - #elif defined(_M_IX86) - // for testing - word64 t = (word64)a * b; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ce77ad815de5..813043027a19 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -821,7 +821,7 @@ let mktemp = callPackage ../tools/security/mktemp { }; - mldonkey = misc.debugVersion (callPackage ../applications/networking/p2p/mldonkey { }); + mldonkey = callPackage ../applications/networking/p2p/mldonkey { }; monit = builderDefsPackage ../tools/system/monit { flex = flex2535; From bb0351b562f8ba6e612feb7aa82135b3e4bbee94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:18:55 +0000 Subject: [PATCH 208/282] Making iftop build on the fuloong (config.guess.) svn path=/nixpkgs/branches/stdenv-updates/; revision=24036 --- pkgs/tools/networking/iftop/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/tools/networking/iftop/default.nix b/pkgs/tools/networking/iftop/default.nix index 79e8f4426cb6..730b60c7aec2 100644 --- a/pkgs/tools/networking/iftop/default.nix +++ b/pkgs/tools/networking/iftop/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, ncurses, libpcap}: +{stdenv, fetchurl, ncurses, libpcap, automake}: stdenv.mkDerivation rec { name = "iftop-0.17"; @@ -8,6 +8,10 @@ stdenv.mkDerivation rec { sha256 = "1b0fis53280qx85gldhmqfcpgyiwplzg43gxyngia1w3f1y58cnh"; }; + preConfigure = '' + cp ${automake}/share/automake*/config.{sub,guess} config + ''; + buildInputs = [ncurses libpcap]; meta = { From 8d435fd90f74c4afcdbfe234eff98b33aab578f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 3 Oct 2010 09:19:04 +0000 Subject: [PATCH 209/282] Updating the src url of offlineimap (to the only version there available) svn path=/nixpkgs/branches/stdenv-updates/; revision=24037 --- pkgs/tools/networking/offlineimap/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/networking/offlineimap/default.nix b/pkgs/tools/networking/offlineimap/default.nix index 70db2a9d991c..bb123d87bdf4 100644 --- a/pkgs/tools/networking/offlineimap/default.nix +++ b/pkgs/tools/networking/offlineimap/default.nix @@ -1,11 +1,11 @@ {fetchurl, buildPythonPackage}: buildPythonPackage { - name = "offlineimap-6.2.0.1"; + name = "offlineimap-6.2.0.2"; src = fetchurl { - url = "http://ftp.de.debian.org/debian/pool/main/o/offlineimap/offlineimap_6.2.0.1.tar.gz"; - sha256 = "16s7whlw7vix54dil2ri871vyggr742agykk950lnlixcv66gyhn"; + url = "http://ftp.de.debian.org/debian/pool/main/o/offlineimap/offlineimap_6.2.0.2.orig.tar.gz"; + sha256 = "1w69qv1dm37m53k8cd068lk5z3qjlscnjxr397gs8kdsfds67v7c"; }; doCheck = false; From 1171bb1dcaa8c57bc983093ccef7acc770e64ba2 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 5 Oct 2010 13:16:53 +0000 Subject: [PATCH 210/282] pkgs/development/libraries/pcre: updated to version 8.10 svn path=/nixpkgs/branches/stdenv-updates/; revision=24070 --- pkgs/development/libraries/pcre/default.nix | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index f139bce100db..faa8295c3923 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, unicodeSupport ? false, cplusplusSupport ? true}: stdenv.mkDerivation { - name = "pcre-8.02"; + name = "pcre-8.10"; src = fetchurl { - url = mirror://sourceforge/pcre/pcre-8.02.tar.bz2; - sha256 = "1gafmkmkbpdqjbdl85q2z5774gw4gfqjf238icz7gqf3v4v90xd4"; + url = mirror://sourceforge/pcre/pcre-8.10.tar.bz2; + sha256 = "7ac4e016f6bad8c7d990e6de9bce58c04ff5dd8838be0c5ada0afad1d6a07480"; }; configureFlags = '' @@ -14,7 +14,19 @@ stdenv.mkDerivation { ''; meta = { - homepage = http://www.pcre.org/; + homepage = "http://www.pcre.org/"; description = "A library for Perl Compatible Regular Expressions"; + license = "BSD-3"; + + longDescription = '' + The PCRE library is a set of functions that implement regular + expression pattern matching using the same syntax and semantics as + Perl 5. PCRE has its own native API, as well as a set of wrapper + functions that correspond to the POSIX regular expression API. The + PCRE library is free, even for building proprietary software. + ''; + + platforms = stdenv.lib.platforms.all; + maintainers = [ stdenv.lib.maintainers.simons ]; }; } From d61c959049751d6e5ab2b45aff0d44c4059fab56 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 5 Oct 2010 13:57:31 +0000 Subject: [PATCH 211/282] pkgs/development/libraries/pcre: merged recent changes from trunk svn path=/nixpkgs/branches/stdenv-updates/; revision=24076 --- pkgs/development/libraries/pcre/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index faa8295c3923..141c06f00b8d 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -8,11 +8,18 @@ stdenv.mkDerivation { sha256 = "7ac4e016f6bad8c7d990e6de9bce58c04ff5dd8838be0c5ada0afad1d6a07480"; }; + # 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 + # that platform ought to be removed. configureFlags = '' + CPPFLAGS=-NDEBUG CFLAGS=-O3 CXXFLAGS=${if stdenv.isDarwin then "-O0" else "-O3"} ${if unicodeSupport then "--enable-unicode-properties" else ""} ${if !cplusplusSupport then "--disable-cpp" else ""} ''; + doCheck = true; + meta = { homepage = "http://www.pcre.org/"; description = "A library for Perl Compatible Regular Expressions"; From 2291f661b03f29fd59549165721a1426e5d04264 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Tue, 5 Oct 2010 15:35:55 +0000 Subject: [PATCH 212/282] pkgs/development/libraries/pcre: fixed misspelled CPPFLAGS svn path=/nixpkgs/branches/stdenv-updates/; revision=24082 --- pkgs/development/libraries/pcre/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index 141c06f00b8d..ccef9d08f734 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -13,7 +13,7 @@ stdenv.mkDerivation { # problem. In case we ever update the Darwin GCC version, the exception for # that platform ought to be removed. configureFlags = '' - CPPFLAGS=-NDEBUG CFLAGS=-O3 CXXFLAGS=${if stdenv.isDarwin then "-O0" else "-O3"} + CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=${if stdenv.isDarwin then "-O0" else "-O3"} ${if unicodeSupport then "--enable-unicode-properties" else ""} ${if !cplusplusSupport then "--disable-cpp" else ""} ''; From 180cb34e2ab692bfa3c5be2a96b29d67f7acdba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 21:23:09 +0000 Subject: [PATCH 213/282] Removing a glibc patch for nscd I think we don't need anymore in the main glibc expression. For what I could see from the build log, although it should add a '-lssp', it did not have any effect in this glibc 2.12. svn path=/nixpkgs/branches/stdenv-updates/; revision=24156 --- pkgs/development/libraries/glibc-2.12/common.nix | 3 --- .../libraries/glibc-2.12/stack-protector-link.patch | 12 ------------ 2 files changed, 15 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.12/stack-protector-link.patch diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index af36787139bf..8786f8895ab1 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -69,9 +69,6 @@ stdenv.mkDerivation ({ /* Have rpcgen(1) look for cpp(1) in $PATH. */ ./rpcgen-path.patch - /* Make sure `nscd' et al. are linked against `libssp'. */ - ./stack-protector-link.patch - /* Fix for the check of -fgnu89-inline compiler flag */ ./gnu89-inline.patch diff --git a/pkgs/development/libraries/glibc-2.12/stack-protector-link.patch b/pkgs/development/libraries/glibc-2.12/stack-protector-link.patch deleted file mode 100644 index d200ece52df7..000000000000 --- a/pkgs/development/libraries/glibc-2.12/stack-protector-link.patch +++ /dev/null @@ -1,12 +0,0 @@ -Make sure `nscd' et al. are linked against `libssp'. - ---- glibc-2.11/nscd/Makefile 2009-10-30 18:17:08.000000000 +0100 -+++ glibc-2.11/nscd/Makefile 2009-11-22 01:19:37.000000000 +0100 -@@ -126,6 +126,7 @@ CFLAGS-res_hconf.c += $(nscd-cflags) - ifeq (yesyes,$(have-fpie)$(build-shared)) - relro-LDFLAGS += -Wl,-z,now - -+$(objpfx)nscd: LDFLAGS += -lssp - $(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o)) - $(+link-pie) - endif From fa4ef6621a22d09fa87539d685fd824bdf8c4ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 21:59:31 +0000 Subject: [PATCH 214/282] Fixing nscd in glibc (thank you Ludovic!). svn path=/nixpkgs/branches/stdenv-updates/; revision=24157 --- pkgs/development/libraries/glibc-2.12/common.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 8786f8895ab1..66c6b0eaf9ac 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -76,10 +76,14 @@ stdenv.mkDerivation ({ ./nix-locale-archive.patch ]; - # Needed for glibc to build with the gnumake 3.82 - # http://comments.gmane.org/gmane.linux.lfs.support/31227 postPatch = '' + # Needed for glibc to build with the gnumake 3.82 + # http://comments.gmane.org/gmane.linux.lfs.support/31227 sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile + + # nscd needs libgcc, and we don't want it dynamically linked + # because we don't want it to depend on bootstrap-tools libs. + echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile ''; configureFlags = [ From bf6f39fb7cef08cacd402405d9b16684533c0207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 22:10:28 +0000 Subject: [PATCH 215/282] Adding a patch fixing ARM trouble on the recent linux 2.6.35 svn path=/nixpkgs/branches/stdenv-updates/; revision=24158 --- pkgs/os-specific/linux/kernel/patches.nix | 5 ++ .../kernel/sheevaplug_modules-2.6.35.patch | 63 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 3 +- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 pkgs/os-specific/linux/kernel/sheevaplug_modules-2.6.35.patch diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index a1229912b38f..327b16bd2023 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -198,6 +198,11 @@ in patch = ./dell-rfkill.patch; }; + sheevaplug_modules_2_6_35 = + { name = "sheevaplug_modules-2.6.35"; + patch = ./sheevaplug_modules-2.6.35.patch; + }; + guruplug_defconfig = { # Default configuration for the GuruPlug. From diff --git a/pkgs/os-specific/linux/kernel/sheevaplug_modules-2.6.35.patch b/pkgs/os-specific/linux/kernel/sheevaplug_modules-2.6.35.patch new file mode 100644 index 000000000000..5b62fb90670c --- /dev/null +++ b/pkgs/os-specific/linux/kernel/sheevaplug_modules-2.6.35.patch @@ -0,0 +1,63 @@ +http://www.mail-archive.com/armedslack@lists.armedslack.org/msg00212.html + +From d0679c730395d0bde9a46939e7ba255b4ba7dd7c Mon Sep 17 00:00:00 2001 +From: Andi Kleen +Date: Tue, 2 Feb 2010 14:40:02 -0800 +Subject: [PATCH] kbuild: move -fno-dwarf2-cfi-asm to powerpc only + +Better dwarf2 unwind information is a good thing, it allows better +debugging with kgdb and crash and helps systemtap. + +Commit 003086497f07f7f1e67c0c295e261740f822b377 ("Build with +-fno-dwarf2-cfi-asm") disabled some CFI information globally to work +around a module loader bug on powerpc. + +But this disables the better unwind tables for all architectures, not just +powerpc. Move the workaround to powerpc and also add a suitable comment +that's it really a workaround. + +This improves dwarf2 unwind tables on x86 at least. + +Signed-off-by: Andi Kleen +Cc: Kyle McMartin +Signed-off-by: Andrew Morton +Acked-by: Benjamin Herrenschmidt +Signed-off-by: Michal Marek +--- + Makefile | 3 --- + arch/powerpc/Makefile | 5 +++++ + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 03053c6..2e74a68 100644 +--- a/Makefile ++++ b/Makefile +@@ -579,6 +579,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,) + # disable invalid "can't wrap" optimizations for signed / pointers + KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) + ++# revert to pre-gcc-4.4 behaviour of .eh_frame ++KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) ++ + # conserve stack if available + KBUILD_CFLAGS += $(call cc-option,-fconserve-stack) + +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile +index 1a54a3b..42dcd3f 100644 +--- a/arch/powerpc/Makefile ++++ b/arch/powerpc/Makefile +@@ -112,11 +112,6 @@ KBUILD_CFLAGS += $(call cc-option,-mspe=no) + # kernel considerably. + KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) + +-# FIXME: the module load should be taught about the additional relocs +-# generated by this. +-# revert to pre-gcc-4.4 behaviour of .eh_frame +-KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) +- + # Never use string load/store instructions as they are + # often slow when they are implemented at all + KBUILD_CFLAGS += -mno-string +-- +1.7.3.1 + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a2dbda33baf7..76b864e80d64 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4661,7 +4661,8 @@ let [ #kernelPatches.fbcondecor_2_6_35 kernelPatches.sec_perm_2_6_24 kernelPatches.aufs2_2_6_35 - ]; + ] ++ lib.optional (platform.kernelArch == "arm") + kernelPatches.sheevaplug_modules_2_6_35; }; linux_nanonote_jz_2_6_34 = makeOverridable From 86d8c5385e83831783c9c3245d7dc8ad064e0b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 22:10:37 +0000 Subject: [PATCH 216/282] Adding a patch for ocaml I forgot (mips related) svn path=/nixpkgs/branches/stdenv-updates/; revision=24159 --- pkgs/development/compilers/ocaml/mips64.patch | 204 ++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 pkgs/development/compilers/ocaml/mips64.patch diff --git a/pkgs/development/compilers/ocaml/mips64.patch b/pkgs/development/compilers/ocaml/mips64.patch new file mode 100644 index 000000000000..adfebe000d02 --- /dev/null +++ b/pkgs/development/compilers/ocaml/mips64.patch @@ -0,0 +1,204 @@ +http://www.mail-archive.com/caml-list@yquem.inria.fr/msg04424.html + +diff -u -r ocaml-3.11.1/asmcomp/mips/arch.ml my_ocaml/asmcomp/mips/arch.ml +--- ocaml-3.11.1/asmcomp/mips/arch.ml 2002-11-29 16:03:36.000000000 +0100 ++++ my_ocaml/asmcomp/mips/arch.ml 2009-08-09 23:18:31.000000000 +0200 +@@ -35,7 +35,7 @@ + + let big_endian = + match Config.system with +- "ultrix" -> false ++ "ultrix" | "gnu" -> false + | "irix" -> true + | _ -> fatal_error "Arch_mips.big_endian" + +diff -u -r ocaml-3.11.1/asmcomp/mips/emit.mlp my_ocaml/asmcomp/mips/emit.mlp +--- ocaml-3.11.1/asmcomp/mips/emit.mlp 2004-01-05 21:25:56.000000000 +0100 ++++ my_ocaml/asmcomp/mips/emit.mlp 2009-08-23 12:11:58.000000000 +0200 +@@ -252,7 +252,7 @@ + | Lop(Icall_ind) -> + ` move $25, {emit_reg i.arg.(0)}\n`; + liveregs i live_25; +- ` jal {emit_reg i.arg.(0)}\n`; ++ ` jal $25\n`; (* {emit_reg i.arg.(0)}\n; Equivalent but avoids "Warning: MIPS PIC call to register other than $25" on GNU as *) + `{record_frame i.live}\n` + | Lop(Icall_imm s) -> + liveregs i 0; +@@ -269,7 +269,7 @@ + liveregs i 0; + ` move $25, {emit_reg i.arg.(0)}\n`; + liveregs i live_25; +- ` j {emit_reg i.arg.(0)}\n` ++ ` j $25\n` + | Lop(Itailcall_imm s) -> + if s = !function_name then begin + ` b {emit_label !tailrec_entry_point}\n` +@@ -277,11 +277,11 @@ + let n = frame_size() in + if !contains_calls then + ` lw $31, {emit_int(n - 4)}($sp)\n`; ++ ` la $25, {emit_symbol s}\n`; + if !uses_gp then + ` lw $gp, {emit_int(n - 8)}($sp)\n`; + if n > 0 then + ` addu $sp, $sp, {emit_int n}\n`; +- ` la $25, {emit_symbol s}\n`; + liveregs i live_25; + ` j $25\n` + end +@@ -305,8 +305,13 @@ + begin match chunk with + Double_u -> + (* Destination is not 8-aligned, hence cannot use l.d *) +- ` ldl $24, {emit_addressing addr i.arg 0}\n`; +- ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; ++ if big_endian then begin ++ ` ldl $24, {emit_addressing addr i.arg 0}\n`; ++ ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n` ++ end else begin ++ ` ldl $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; ++ ` ldr $24, {emit_addressing addr i.arg 0}\n` ++ end; + ` dmtc1 $24, {emit_reg dest}\n` + | Single -> + ` l.s {emit_reg dest}, {emit_addressing addr i.arg 0}\n`; +@@ -328,8 +333,13 @@ + Double_u -> + (* Destination is not 8-aligned, hence cannot use l.d *) + ` dmfc1 $24, {emit_reg src}\n`; +- ` sdl $24, {emit_addressing addr i.arg 1}\n`; +- ` sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n` ++ if big_endian then begin ++ ` sdl $24, {emit_addressing addr i.arg 1}\n`; ++ ` sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n` ++ end else begin ++ ` sdl $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`; ++ ` sdr $24, {emit_addressing addr i.arg 1}\n` ++ end + | Single -> + ` cvt.s.d $f31, {emit_reg src}\n`; + ` s.s $f31, {emit_addressing addr i.arg 1}\n` +@@ -552,16 +562,18 @@ + (* There are really two groups of registers: + $sp and $30 always point to stack locations + $2 - $21 never point to stack locations. *) +- ` .noalias $2,$sp; .noalias $2,$30; .noalias $3,$sp; .noalias $3,$30\n`; +- ` .noalias $4,$sp; .noalias $4,$30; .noalias $5,$sp; .noalias $5,$30\n`; +- ` .noalias $6,$sp; .noalias $6,$30; .noalias $7,$sp; .noalias $7,$30\n`; +- ` .noalias $8,$sp; .noalias $8,$30; .noalias $9,$sp; .noalias $9,$30\n`; +- ` .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`; +- ` .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`; +- ` .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`; +- ` .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`; +- ` .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`; +- ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n`; ++ if Config.system = "irix" then begin ++ ` .noalias $2,$sp; .noalias $2,$30; .noalias $3,$sp; .noalias $3,$30\n`; ++ ` .noalias $4,$sp; .noalias $4,$30; .noalias $5,$sp; .noalias $5,$30\n`; ++ ` .noalias $6,$sp; .noalias $6,$30; .noalias $7,$sp; .noalias $7,$30\n`; ++ ` .noalias $8,$sp; .noalias $8,$30; .noalias $9,$sp; .noalias $9,$30\n`; ++ ` .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`; ++ ` .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`; ++ ` .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`; ++ ` .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`; ++ ` .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`; ++ ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n` ++ end; + let lbl_begin = Compilenv.make_symbol (Some "data_begin") in + ` .data\n`; + ` .globl {emit_symbol lbl_begin}\n`; +diff -u -r ocaml-3.11.1/asmrun/mips.s my_ocaml/asmrun/mips.s +--- ocaml-3.11.1/asmrun/mips.s 2004-07-13 14:18:53.000000000 +0200 ++++ my_ocaml/asmrun/mips.s 2009-08-20 09:34:36.000000000 +0200 +@@ -187,7 +187,7 @@ + sw $30, caml_exception_pointer + /* Call C function */ + move $25, $24 +- jal $24 ++ jal $25 + /* Reload return address, alloc ptr, alloc limit */ + lw $31, 0($16) /* caml_last_return_address */ + lw $22, 0($17) /* caml_young_ptr */ +@@ -254,7 +254,7 @@ + sw $0, caml_last_return_address + /* Call the Caml code */ + move $25, $24 +- jal $24 ++ jal $25 + $104: + /* Pop the trap frame, restoring caml_exception_pointer */ + lw $24, 0($sp) +diff -u -r ocaml-3.11.1/configure my_ocaml/configure +--- ocaml-3.11.1/configure 2009-05-20 17:33:09.000000000 +0200 ++++ my_ocaml/configure 2009-08-23 10:55:44.000000000 +0200 +@@ -40,7 +40,7 @@ + verbose=no + withcurses=yes + withsharedlibs=yes +-gcc_warnings="-Wall" ++gcc_warnings="-W -Wall" + partialld="ld -r" + + # Try to turn internationalization off, can cause config.guess to malfunction! +@@ -292,6 +292,9 @@ + # (For those who want to force "cc -64") + # Turn off warning "unused library" + bytecclinkopts="-Wl,-woff,84";; ++ gcc*,mips64el-*) ++ bytecccompopts="" ++ bytecclinkopts="-fno-defer-pop $gcc_warnings -Wl,-O1 -Wl,--as-needed";; + *,alpha*-*-unicos*) + # For the Cray T3E + bytecccompopts="-DUMK";; +@@ -468,6 +471,8 @@ + echo "64-bit integers must be doubleword-aligned." + echo "#define ARCH_ALIGN_INT64" >> m.h + fi;; ++ mips64el-*) ++ echo "#define ARCH_ALIGN_INT64" >> m.h;; + *) + sh ./runtest int64align.c + case $? in +@@ -636,6 +641,7 @@ + fi;; + i[3456]86-*-gnu*) arch=i386; system=gnu;; + mips-*-irix6*) arch=mips; system=irix;; ++ mips*-gnu*) arch=mips; system=gnu;; + hppa1.1-*-hpux*) arch=hppa; system=hpux;; + hppa2.0*-*-hpux*) arch=hppa; system=hpux;; + hppa*-*-linux*) arch=hppa; system=linux;; +@@ -672,7 +678,7 @@ + if test -z "$ccoption"; then + case "$arch,$system,$cc" in + alpha,digital,gcc*) nativecc=cc;; +- mips,*,gcc*) nativecc=cc;; ++ mips,irix,gcc*) nativecc=cc;; + *) nativecc="$bytecc";; + esac + else +@@ -687,6 +693,9 @@ + alpha,cc*,digital,*) nativecccompopts=-std1;; + mips,cc*,irix,*) nativecccompopts=-n32 + nativecclinkopts="-n32 -Wl,-woff,84";; ++ mips,gcc*,gnu,mips64el-*) ++ nativecccompopts="$gcc_warnings -fPIC" ++ nativecclinkopts="--as-needed";; + *,*,nextstep,*) nativecccompopts="$gcc_warnings -U__GNUC__ -posix" + nativecclinkopts="-posix";; + *,*,rhapsody,*darwin[1-5].*) +@@ -725,6 +734,8 @@ + aspp='gcc -c -Wa,-xexplicit';; + mips,*,irix) as='as -n32 -O2 -nocpp -g0' + aspp='as -n32 -O2';; ++ mips,*,gnu) as='as -KPIC' ++ aspp='gcc -c -fPIC';; # got bus error without fPIC ? + power,*,elf) as='as -u -m ppc' + aspp='gcc -c';; + power,*,bsd) as='as' +@@ -756,6 +767,7 @@ + case "$nativecc" in gcc*) ;; *) cc_profile='-xpg';; esac;; + amd64,*,linux) profiling='prof';; + amd64,*,gnu) profiling='prof';; ++ mips,*,gnu) profiling='prof';; + *) profiling='noprof';; + esac From dc71d2e6d3242da24d090ec6ba0fcad74b9b0187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 7 Oct 2010 22:29:00 +0000 Subject: [PATCH 217/282] GNU grep 2.7. svn path=/nixpkgs/branches/stdenv-updates/; revision=24160 --- pkgs/tools/text/gnugrep/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 1cd73a8814ce..18a6ef5dc69d 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -1,6 +1,6 @@ {stdenv, fetchurl, pcre}: -let version = "2.6.3"; in +let version = "2.7"; in stdenv.mkDerivation { name = "gnugrep-${version}"; @@ -9,7 +9,7 @@ stdenv.mkDerivation { src = fetchurl { url = "mirror://gnu/grep/grep-${version}.tar.gz"; - sha256 = "0rnnljzcpb2sl5zabww7gbzk9r6kp8kycsqrf909d6jdak8yah53"; + sha256 = "1b8vksfd1ngharac3ygaqim3lrf0yqap992sg0vfm7572l88655d"; }; buildInputs = [pcre]; From f93e0b7517c9150db491cefe4ee6019b517650d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 7 Oct 2010 22:29:15 +0000 Subject: [PATCH 218/282] GNU M4 1.4.15. svn path=/nixpkgs/branches/stdenv-updates/; revision=24161 --- pkgs/development/tools/misc/gnum4/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/misc/gnum4/default.nix b/pkgs/development/tools/misc/gnum4/default.nix index d064c7578e06..df417c3e55e8 100644 --- a/pkgs/development/tools/misc/gnum4/default.nix +++ b/pkgs/development/tools/misc/gnum4/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "gnum4-1.4.14"; + name = "gnum4-1.4.15"; src = fetchurl { - url = mirror://gnu/m4/m4-1.4.14.tar.bz2; - sha256 = "1ljddxjqw1642b26qzk87fahkv9rsv2cn2ygn6b3ldan6alzz188"; + url = mirror://gnu/m4/m4-1.4.15.tar.bz2; + sha256 = "1ygzshj4h6l6wh52vjqczkyahmv67r3yzi1m6nkh94qgndffmbqa"; }; doCheck = !stdenv.isDarwin; From 71d0ed964e7d9b1c8730239faade939b0902e2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 7 Oct 2010 22:29:20 +0000 Subject: [PATCH 219/282] GNU Libtool 2.4. svn path=/nixpkgs/branches/stdenv-updates/; revision=24162 --- pkgs/development/tools/misc/libtool/libtool2.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/misc/libtool/libtool2.nix b/pkgs/development/tools/misc/libtool/libtool2.nix index 42b518ae58e8..8c15eec8094f 100644 --- a/pkgs/development/tools/misc/libtool/libtool2.nix +++ b/pkgs/development/tools/misc/libtool/libtool2.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, m4, perl, lzma }: stdenv.mkDerivation rec { - name = "libtool-2.2.10"; + name = "libtool-2.4"; src = fetchurl { - url = "mirror://gnu/libtool/${name}.tar.lzma"; - sha256 = "146lf1gas8gdpcjdn6ffad605n198ja0jqwxpixyglabczwpisba"; + url = "mirror://gnu/libtool/${name}.tar.gz"; + sha256 = "0bpnvmqryzqpiz184phdg3z38a16ad7dd5bfbmn1jkm9cfmmgpqk"; }; buildNativeInputs = [ lzma m4 perl ]; From 481ec6688221ec0b42d7757f22d3c39c83749f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 7 Oct 2010 22:29:25 +0000 Subject: [PATCH 220/282] attr: Remove unnecessary dependency on Libtool. svn path=/nixpkgs/branches/stdenv-updates/; revision=24163 --- pkgs/development/libraries/attr/default.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix index 643b4cdaae55..6477b443dcf8 100644 --- a/pkgs/development/libraries/attr/default.nix +++ b/pkgs/development/libraries/attr/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, libtool, gettext}: +{ stdenv, fetchurl, gettext }: stdenv.mkDerivation rec { name = "attr-2.4.44"; @@ -9,9 +9,8 @@ stdenv.mkDerivation rec { }; buildNativeInputs = [gettext]; - buildInputs = [libtool]; - configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk"; + configureFlags = "MAKE=make MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk"; installTargets = "install install-lib install-dev"; From bdb096bb924db045a1d16152c71aae8ded3739ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 22:44:18 +0000 Subject: [PATCH 221/282] Instead of using binutils snapshot for the loongson2f, let's use the released version + patches. svn path=/nixpkgs/branches/stdenv-updates/; revision=24164 --- .../tools/misc/binutils/default.nix | 4 +- .../tools/misc/binutils/loongson2f.patch | 540 ++++++++++++++++++ .../tools/misc/binutils/snapshot.nix | 59 -- .../tools/misc/binutils/version-bump.patch | 42 ++ pkgs/top-level/all-packages.nix | 9 +- 5 files changed, 586 insertions(+), 68 deletions(-) create mode 100644 pkgs/development/tools/misc/binutils/loongson2f.patch delete mode 100644 pkgs/development/tools/misc/binutils/snapshot.nix create mode 100644 pkgs/development/tools/misc/binutils/version-bump.patch diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 3e3dedd1e833..caab0b246801 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -2,6 +2,8 @@ let basename = "binutils-2.20.1"; + + targetIsMips = stdenv.system == "mips64-linux" || (cross != null && cross.arch == "mips"); in stdenv.mkDerivation rec { name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; @@ -16,7 +18,7 @@ stdenv.mkDerivation rec { # RUNPATH instead of RPATH on binaries. This is important because # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. ./new-dtags.patch - ]; + ] ++ stdenv.lib.optionals targetIsMips [ ./loongson2f.patch ./version-bump.patch ]; inherit noSysDirs; diff --git a/pkgs/development/tools/misc/binutils/loongson2f.patch b/pkgs/development/tools/misc/binutils/loongson2f.patch new file mode 100644 index 000000000000..18d0634d1108 --- /dev/null +++ b/pkgs/development/tools/misc/binutils/loongson2f.patch @@ -0,0 +1,540 @@ +From 43ec71bb4c761538a3c8813856654de756661cce Mon Sep 17 00:00:00 2001 +From: Nick Clifton +Date: Thu, 25 Feb 2010 11:15:46 +0000 +Subject: [PATCH] * config/tc-mips.c (mips_fix_loongson2f, mips_fix_loongson2f_nop, + mips_fix_loongson2f_jump): New variables. + (md_longopts): Add New options -mfix-loongson2f-nop/jump, + -mno-fix-loongson2f-nop/jump. + (md_parse_option): Initialize variables via above options. + (options): New enums for the above options. + (md_begin): Initialize nop_insn from LOONGSON2F_NOP_INSN. + (fix_loongson2f, fix_loongson2f_nop, fix_loongson2f_jump): + New functions. + (append_insn): call fix_loongson2f(). + (mips_handle_align): Replace the implicit nops. + * config/tc-mips.h (MAX_MEM_FOR_RS_ALIGN_CODE): Modified + for the new mips_handle_align(). + * doc/c-mips.texi: Document the new options. + + * gas/mips/loongson-2f-2.s: New test of -mfix-loongson2f-nop. + * gas/mips/loongson-2f-2.d: Likewise. + * gas/mips/loongson-2f-3.s: New test of -mfix-loongson2f-jump. + * gas/mips/loongson-2f-3.d: Likewise. + * gas/mips/mips.exp: Run the new tests. + + * opcode/mips.h (LOONGSON2F_NOP_INSN): New macro. +--- + gas/ChangeLog | 17 ++++ + gas/config/tc-mips.c | 130 +++++++++++++++++++++++++++++--- + gas/config/tc-mips.h | 4 +- + gas/doc/c-mips.texi | 18 ++++- + gas/testsuite/ChangeLog | 8 ++ + gas/testsuite/gas/mips/loongson-2f-2.d | 18 +++++ + gas/testsuite/gas/mips/loongson-2f-2.s | 10 +++ + gas/testsuite/gas/mips/loongson-2f-3.d | 35 +++++++++ + gas/testsuite/gas/mips/loongson-2f-3.s | 23 ++++++ + gas/testsuite/gas/mips/mips.exp | 2 + + include/opcode/ChangeLog | 4 + + include/opcode/mips.h | 6 +- + 12 files changed, 258 insertions(+), 17 deletions(-) + create mode 100644 gas/testsuite/gas/mips/loongson-2f-2.d + create mode 100644 gas/testsuite/gas/mips/loongson-2f-2.s + create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.d + create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.s + +diff --git a/gas/ChangeLog b/gas/ChangeLog +index f35eb3a..6dca72b 100644 +--- a/gas/ChangeLog ++++ b/gas/ChangeLog +@@ -1,3 +1,20 @@ ++2010-02-25 Wu Zhangjin ++ ++ * config/tc-mips.c (mips_fix_loongson2f, mips_fix_loongson2f_nop, ++ mips_fix_loongson2f_jump): New variables. ++ (md_longopts): Add New options -mfix-loongson2f-nop/jump, ++ -mno-fix-loongson2f-nop/jump. ++ (md_parse_option): Initialize variables via above options. ++ (options): New enums for the above options. ++ (md_begin): Initialize nop_insn from LOONGSON2F_NOP_INSN. ++ (fix_loongson2f, fix_loongson2f_nop, fix_loongson2f_jump): ++ New functions. ++ (append_insn): call fix_loongson2f(). ++ (mips_handle_align): Replace the implicit nops. ++ * config/tc-mips.h (MAX_MEM_FOR_RS_ALIGN_CODE): Modified ++ for the new mips_handle_align(). ++ * doc/c-mips.texi: Document the new options. ++ + 2010-02-23 Daniel Gutson + + * config/tc-arm.c (do_rd_rm_rn): Added warning +diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c +index 94128fe..f901ae4 100644 +--- a/gas/config/tc-mips.c ++++ b/gas/config/tc-mips.c +@@ -1,6 +1,7 @@ + /* tc-mips.c -- assemble code for a MIPS chip. + Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +- 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. ++ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++ Free Software Foundation, Inc. + Contributed by the OSF and Ralph Campbell. + Written by Keith Knowles and Ralph Campbell, working independently. + Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus +@@ -751,7 +752,8 @@ static const unsigned int mips16_to_32_reg_map[] = + + /* Classifies the kind of instructions we're interested in when + implementing -mfix-vr4120. */ +-enum fix_vr4120_class { ++enum fix_vr4120_class ++{ + FIX_VR4120_MACC, + FIX_VR4120_DMACC, + FIX_VR4120_MULT, +@@ -761,6 +763,15 @@ enum fix_vr4120_class { + NUM_FIX_VR4120_CLASSES + }; + ++/* ...likewise -mfix-loongson2f-jump. */ ++static bfd_boolean mips_fix_loongson2f_jump; ++ ++/* ...likewise -mfix-loongson2f-nop. */ ++static bfd_boolean mips_fix_loongson2f_nop; ++ ++/* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed. */ ++static bfd_boolean mips_fix_loongson2f; ++ + /* Given two FIX_VR4120_* values X and Y, bit Y of element X is set if + there must be at least one other instruction between an instruction + of type X and an instruction of type Y. */ +@@ -1048,8 +1059,9 @@ static struct { + enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG }; + + static void append_insn +- (struct mips_cl_insn *ip, expressionS *p, bfd_reloc_code_real_type *r); ++ (struct mips_cl_insn *, expressionS *, bfd_reloc_code_real_type *); + static void mips_no_prev_insn (void); ++static void macro_build (expressionS *, const char *, const char *, ...); + static void mips16_macro_build + (expressionS *, const char *, const char *, va_list); + static void load_register (int, expressionS *, int); +@@ -1918,6 +1930,8 @@ md_begin (void) + if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0) + { + create_insn (&nop_insn, mips_opcodes + i); ++ if (mips_fix_loongson2f_nop) ++ nop_insn.insn_opcode = LOONGSON2F_NOP_INSN; + nop_insn.fixed_p = 1; + } + } +@@ -2731,6 +2745,54 @@ nops_for_insn_or_target (const struct mips_cl_insn *hist, + return nops; + } + ++/* Fix NOP issue: Replace nops by "or at,at,zero". */ ++ ++static void ++fix_loongson2f_nop (struct mips_cl_insn * ip) ++{ ++ if (strcmp (ip->insn_mo->name, "nop") == 0) ++ ip->insn_opcode = LOONGSON2F_NOP_INSN; ++} ++ ++/* Fix Jump Issue: Eliminate instruction fetch from outside 256M region ++ jr target pc &= 'hffff_ffff_cfff_ffff. */ ++ ++static void ++fix_loongson2f_jump (struct mips_cl_insn * ip) ++{ ++ if (strcmp (ip->insn_mo->name, "j") == 0 ++ || strcmp (ip->insn_mo->name, "jr") == 0 ++ || strcmp (ip->insn_mo->name, "jalr") == 0) ++ { ++ int sreg; ++ expressionS ep; ++ ++ if (! mips_opts.at) ++ return; ++ ++ sreg = EXTRACT_OPERAND (RS, *ip); ++ if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG) ++ return; ++ ++ ep.X_op = O_constant; ++ ep.X_add_number = 0xcfff0000; ++ macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16); ++ ep.X_add_number = 0xffff; ++ macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16); ++ macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG); ++ } ++} ++ ++static void ++fix_loongson2f (struct mips_cl_insn * ip) ++{ ++ if (mips_fix_loongson2f_nop) ++ fix_loongson2f_nop (ip); ++ ++ if (mips_fix_loongson2f_jump) ++ fix_loongson2f_jump (ip); ++} ++ + /* Output an instruction. IP is the instruction information. + ADDRESS_EXPR is an operand of the instruction to be used with + RELOC_TYPE. */ +@@ -2744,6 +2806,9 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, + bfd_boolean relaxed_branch = FALSE; + segment_info_type *si = seg_info (now_seg); + ++ if (mips_fix_loongson2f) ++ fix_loongson2f (ip); ++ + /* Mark instruction labels in mips16 mode. */ + mips16_mark_labels (); + +@@ -11216,6 +11281,10 @@ enum options + OPTION_MNO_7000_HILO_FIX, + OPTION_FIX_24K, + OPTION_NO_FIX_24K, ++ OPTION_FIX_LOONGSON2F_JUMP, ++ OPTION_NO_FIX_LOONGSON2F_JUMP, ++ OPTION_FIX_LOONGSON2F_NOP, ++ OPTION_NO_FIX_LOONGSON2F_NOP, + OPTION_FIX_VR4120, + OPTION_NO_FIX_VR4120, + OPTION_FIX_VR4130, +@@ -11304,6 +11373,10 @@ struct option md_longopts[] = + {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX}, + {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, + {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, ++ {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP}, ++ {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP}, ++ {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP}, ++ {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP}, + {"mfix-vr4120", no_argument, NULL, OPTION_FIX_VR4120}, + {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120}, + {"mfix-vr4130", no_argument, NULL, OPTION_FIX_VR4130}, +@@ -11571,6 +11644,22 @@ md_parse_option (int c, char *arg) + mips_fix_24k = 0; + break; + ++ case OPTION_FIX_LOONGSON2F_JUMP: ++ mips_fix_loongson2f_jump = TRUE; ++ break; ++ ++ case OPTION_NO_FIX_LOONGSON2F_JUMP: ++ mips_fix_loongson2f_jump = FALSE; ++ break; ++ ++ case OPTION_FIX_LOONGSON2F_NOP: ++ mips_fix_loongson2f_nop = TRUE; ++ break; ++ ++ case OPTION_NO_FIX_LOONGSON2F_NOP: ++ mips_fix_loongson2f_nop = FALSE; ++ break; ++ + case OPTION_FIX_VR4120: + mips_fix_vr4120 = 1; + break; +@@ -11785,6 +11874,8 @@ md_parse_option (int c, char *arg) + return 0; + } + ++ mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump; ++ + return 1; + } + +@@ -14790,6 +14881,8 @@ void + mips_handle_align (fragS *fragp) + { + char *p; ++ int bytes, size, excess; ++ valueT opcode; + + if (fragp->fr_type != rs_align_code) + return; +@@ -14797,17 +14890,28 @@ mips_handle_align (fragS *fragp) + p = fragp->fr_literal + fragp->fr_fix; + if (*p) + { +- int bytes; ++ opcode = mips16_nop_insn.insn_opcode; ++ size = 2; ++ } ++ else ++ { ++ opcode = nop_insn.insn_opcode; ++ size = 4; ++ } + +- bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; +- if (bytes & 1) +- { +- *p++ = 0; +- fragp->fr_fix++; +- } +- md_number_to_chars (p, mips16_nop_insn.insn_opcode, 2); +- fragp->fr_var = 2; ++ bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; ++ excess = bytes % size; ++ if (excess != 0) ++ { ++ /* If we're not inserting a whole number of instructions, ++ pad the end of the fixed part of the frag with zeros. */ ++ memset (p, 0, excess); ++ p += excess; ++ fragp->fr_fix += excess; + } ++ ++ md_number_to_chars (p, opcode, size); ++ fragp->fr_var = size; + } + + static void +@@ -15519,6 +15623,8 @@ MIPS options:\n\ + -mmt generate MT instructions\n\ + -mno-mt do not generate MT instructions\n")); + fprintf (stream, _("\ ++-mfix-loongson2f-jump work around Loongson2F JUMP instructions\n\ ++-mfix-loongson2f-nop work around Loongson2F NOP errata\n\ + -mfix-vr4120 work around certain VR4120 errata\n\ + -mfix-vr4130 work around VR4130 mflo/mfhi errata\n\ + -mfix-24k insert a nop after ERET and DERET instructions\n\ +diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h +index 4bdf807..502fa8e 100644 +--- a/gas/config/tc-mips.h ++++ b/gas/config/tc-mips.h +@@ -1,6 +1,6 @@ + /* tc-mips.h -- header file for tc-mips.c. + Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004, +- 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ++ 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Contributed by the OSF and Ralph Campbell. + Written by Keith Knowles and Ralph Campbell, working independently. + Modified for ECOFF support by Ian Lance Taylor of Cygnus Support. +@@ -59,7 +59,7 @@ extern char mips_nop_opcode (void); + extern void mips_handle_align (struct frag *); + #define HANDLE_ALIGN(fragp) mips_handle_align (fragp) + +-#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) ++#define MAX_MEM_FOR_RS_ALIGN_CODE (3 + 4) + + struct insn_label_list; + struct mips_segment_info { +diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi +index 34fa694..641e60f 100644 +--- a/gas/doc/c-mips.texi ++++ b/gas/doc/c-mips.texi +@@ -1,5 +1,5 @@ + @c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, +-@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 ++@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + @c Free Software Foundation, Inc. + @c This is part of the GAS manual. + @c For copying conditions, see the file as.texinfo. +@@ -78,7 +78,7 @@ VxWorks-style position-independent macro expansions. + @itemx -mips2 + @itemx -mips3 + @itemx -mips4 +-@itemx -mips5 ++@itemx -mips5xo + @itemx -mips32 + @itemx -mips32r2 + @itemx -mips64 +@@ -172,6 +172,20 @@ This tells the assembler to accept MT instructions. + Cause nops to be inserted if the read of the destination register + of an mfhi or mflo instruction occurs in the following two instructions. + ++@item -mfix-loongson2f-jump ++@itemx -mno-fix-loongson2f-jump ++Eliminate instruction fetch from outside 256M region to work around the ++Loongson2F @samp{jump} instructions. Without it, under extreme cases, ++the kernel may crash. The issue has been solved in latest processor ++batches, but this fix has no side effect to them. ++ ++@item -mfix-loongson2f-nop ++@itemx -mno-fix-loongson2f-nop ++Replace nops by @code{or at,at,zero} to work around the Loongson2F ++@samp{nop} errata. Without it, under extreme cases, cpu might ++deadlock. The issue has been solved in latest loongson2f batches, but ++this fix has no side effect to them. ++ + @item -mfix-vr4120 + @itemx -mno-fix-vr4120 + Insert nops to work around certain VR4120 errata. This option is +diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog +index 3ee595b..439e734 100644 +--- a/gas/testsuite/ChangeLog ++++ b/gas/testsuite/ChangeLog +@@ -1,3 +1,11 @@ ++2010-02-25 Wu Zhangjin ++ ++ * gas/mips/loongson-2f-2.s: New test of -mfix-loongson2f-nop. ++ * gas/mips/loongson-2f-2.d: Likewise. ++ * gas/mips/loongson-2f-3.s: New test of -mfix-loongson2f-jump. ++ * gas/mips/loongson-2f-3.d: Likewise. ++ * gas/mips/mips.exp: Run the new tests. ++ + 2010-02-24 Nick Clifton + + PR binutils/6773 +diff --git a/gas/testsuite/gas/mips/loongson-2f-2.d b/gas/testsuite/gas/mips/loongson-2f-2.d +new file mode 100644 +index 0000000..f5267a8 +--- /dev/null ++++ b/gas/testsuite/gas/mips/loongson-2f-2.d +@@ -0,0 +1,18 @@ ++#as: -mfix-loongson2f-nop ++#objdump: -M reg-names=numeric -dr ++#name: ST Microelectronics Loongson-2F workarounds of nop issue ++ ++.*: file format .* ++ ++ ++Disassembly of section .text: ++ ++00000000 : ++ 0: 00200825 move \$1,\$1 ++ 4: 00200825 move \$1,\$1 ++ 8: 00200825 move \$1,\$1 ++ c: 00200825 move \$1,\$1 ++ 10: 00200825 move \$1,\$1 ++ 14: 00200825 move \$1,\$1 ++ 18: 00200825 move \$1,\$1 ++ 1c: 00200825 move \$1,\$1 +diff --git a/gas/testsuite/gas/mips/loongson-2f-2.s b/gas/testsuite/gas/mips/loongson-2f-2.s +new file mode 100644 +index 0000000..842e157 +--- /dev/null ++++ b/gas/testsuite/gas/mips/loongson-2f-2.s +@@ -0,0 +1,10 @@ ++# Test the work around of the NOP issue of loongson2F ++ .text ++ .set noreorder ++ ++ .align 5 # Test _implicit_ nops ++loongson2f_nop_insn: ++ nop # Test _explicit_ nops ++ ++# align section end to 16-byte boundary for easier testing on multiple targets ++ .p2align 4 +diff --git a/gas/testsuite/gas/mips/loongson-2f-3.d b/gas/testsuite/gas/mips/loongson-2f-3.d +new file mode 100644 +index 0000000..99844d3 +--- /dev/null ++++ b/gas/testsuite/gas/mips/loongson-2f-3.d +@@ -0,0 +1,35 @@ ++#as: -mfix-loongson2f-jump ++#objdump: -M reg-names=numeric -dr ++#name: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue ++ ++.*: file format .* ++ ++ ++Disassembly of section .text: ++ ++00000000 <.text>: ++ 0: 3c01cfff lui \$1,0xcfff ++ 4: 3421ffff ori \$1,\$1,0xffff ++ 8: 03c1f024 and \$30,\$30,\$1 ++ c: 03c00008 jr \$30 ++ 10: 00000000 nop ++ ++ 14: 3c01cfff lui \$1,0xcfff ++ 18: 3421ffff ori \$1,\$1,0xffff ++ 1c: 03e1f824 and \$31,\$31,\$1 ++ 20: 03e00008 jr \$31 ++ 24: 00000000 nop ++ ++ 28: 3c01cfff lui \$1,0xcfff ++ 2c: 3421ffff ori \$1,\$1,0xffff ++ 30: 03c1f024 and \$30,\$30,\$1 ++ 34: 03c0f809 jalr \$30 ++ 38: 00000000 nop ++ ++ 3c: 00200008 jr \$1 ++ 40: 00000000 nop ++ ++ 44: 08000000 j 0x0 ++ 44: R_MIPS_26 external_label ++ 48: 00000000 nop ++ 4c: 00000000 nop +diff --git a/gas/testsuite/gas/mips/loongson-2f-3.s b/gas/testsuite/gas/mips/loongson-2f-3.s +new file mode 100644 +index 0000000..cbb73de +--- /dev/null ++++ b/gas/testsuite/gas/mips/loongson-2f-3.s +@@ -0,0 +1,23 @@ ++# Test the work around of the Jump instruction Issue of Loongson2F ++ .text ++ .set noreorder ++ ++ j $30 # j with register ++ nop ++ ++ jr $31 # jr ++ nop ++ ++ jalr $30 # jalr ++ nop ++ ++ .set noat ++ jr $1 # jr with at register and .set annotation ++ nop ++ .set at ++ ++ j external_label # j with label ++ nop ++ ++# align section end to 16-byte boundary for easier testing on multiple targets ++ .p2align 4 +diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp +index 14ce5cc..34bb5ea 100644 +--- a/gas/testsuite/gas/mips/mips.exp ++++ b/gas/testsuite/gas/mips/mips.exp +@@ -789,6 +789,8 @@ if { [istarget mips*-*-vxworks*] } { + + run_dump_test "loongson-2e" + run_dump_test "loongson-2f" ++ run_dump_test "loongson-2f-2" ++ run_dump_test "loongson-2f-3" + + run_dump_test_arches "octeon" [mips_arch_list_matching octeon] + run_list_test_arches "octeon-ill" "" \ +diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog +index 39cecde..549d565 100644 +--- a/include/opcode/ChangeLog ++++ b/include/opcode/ChangeLog +@@ -1,3 +1,7 @@ ++2010-02-25 Wu Zhangjin ++ ++ * mips.h: (LOONGSON2F_NOP_INSN): New macro. ++ + 2010-02-08 Philipp Tomsich + + * opcode/ppc.h (PPC_OPCODE_TITAN): Define. +diff --git a/include/opcode/mips.h b/include/opcode/mips.h +index 27d10e6..d6b3cf4 100644 +--- a/include/opcode/mips.h ++++ b/include/opcode/mips.h +@@ -1,6 +1,6 @@ + /* mips.h. Mips opcode list for GDB, the GNU debugger. + Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +- 2003, 2004, 2005, 2008, 2009 ++ 2003, 2004, 2005, 2008, 2009, 2010 + Free Software Foundation, Inc. + Contributed by Ralph Campbell and OSF + Commented and modified by Ian Lance Taylor, Cygnus Support +@@ -1106,4 +1106,8 @@ extern int bfd_mips_num_opcodes; + extern const struct mips_opcode mips16_opcodes[]; + extern const int bfd_mips16_num_opcodes; + ++/* A NOP insn impemented as "or at,at,zero". ++ Used to implement -mfix-loongson2f. */ ++#define LOONGSON2F_NOP_INSN 0x00200825 ++ + #endif /* _MIPS_H_ */ +-- +1.6.5.GIT + diff --git a/pkgs/development/tools/misc/binutils/snapshot.nix b/pkgs/development/tools/misc/binutils/snapshot.nix deleted file mode 100644 index 79f01cad4ef3..000000000000 --- a/pkgs/development/tools/misc/binutils/snapshot.nix +++ /dev/null @@ -1,59 +0,0 @@ -{stdenv, fetchurl, noSysDirs, cross ? null}: - -let - basename = "binutils-2.20.51"; -in -stdenv.mkDerivation rec { - name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; - - src = fetchurl { - url = http://nixos.org/tarballs/binutils-2.20.51-pre-20100901.tar.bz2; - sha256 = "1872fdnbnq5z5svq7mvc0vyyad8pknwvx2glxq1bbk0xv7arp72y"; - }; - - patches = [ - # Turn on --enable-new-dtags by default to make the linker set - # RUNPATH instead of RPATH on binaries. This is important because - # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. - ./new-dtags.patch - ]; - - inherit noSysDirs; - - preConfigure = '' - # Clear the default library search path. - if test "$noSysDirs" = "1"; then - echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt - fi - - # Use symlinks instead of hard links to save space ("strip" in the - # fixup phase strips each hard link separately). - for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in; do - substituteInPlace $i --replace 'ln ' 'ln -s ' - done - ''; - - configureFlags = "--disable-werror" # needed for dietlibc build - + stdenv.lib.optionalString (stdenv.system == "mips64-linux") - " --enable-fix-loongson2f-nop" - + stdenv.lib.optionalString (cross != null) " --target=${cross.config}"; - - meta = { - description = "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)"; - - longDescription = '' - The GNU Binutils are a collection of binary tools. The main - ones are `ld' (the GNU linker) and `as' (the GNU assembler). - They also include the BFD (Binary File Descriptor) library, - `gprof', `nm', `strip', etc. - ''; - - homepage = http://www.gnu.org/software/binutils/; - - license = "GPLv3+"; - - /* Give binutils a lower priority than gcc-wrapper to prevent a - collision due to the ld/as wrappers/symlinks in the latter. */ - priority = "10"; - }; -} diff --git a/pkgs/development/tools/misc/binutils/version-bump.patch b/pkgs/development/tools/misc/binutils/version-bump.patch new file mode 100644 index 000000000000..5fc49865c523 --- /dev/null +++ b/pkgs/development/tools/misc/binutils/version-bump.patch @@ -0,0 +1,42 @@ +From 3ca360dab62f7008f42d835affe5c89144db3e07 Mon Sep 17 00:00:00 2001 +From: Tristan Gingold +Date: Fri, 4 Sep 2009 08:48:19 +0000 +Subject: [PATCH] bfd/ + 2009-09-04 Tristan Gingold + + * configure.in: Bump version to 2.20.51 + * configure: Regenerated. +--- + bfd/ChangeLog | 5 +++++ + bfd/configure.in | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/bfd/ChangeLog b/bfd/ChangeLog +index 8a26fa4..8b0f252 100644 +--- a/bfd/ChangeLog ++++ b/bfd/ChangeLog +@@ -1,3 +1,8 @@ ++2009-09-04 Tristan Gingold ++ ++ * configure.in: Bump version to 2.20.51 ++ * configure: Regenerated. ++ + 2009-09-04 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Correct 2009-07-24 logic. +diff --git a/bfd/configure.in b/bfd/configure.in +index 0a8d486..a3cc89a 100644 +--- a/bfd/configure.in ++++ b/bfd/configure.in +@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c]) + AC_CANONICAL_TARGET + AC_ISC_POSIX + +-AM_INIT_AUTOMAKE(bfd, 2.19.51) ++AM_INIT_AUTOMAKE(bfd, 2.20.51) + + dnl These must be called before LT_INIT, because it may want + dnl to call AC_CHECK_PROG. +-- +1.6.5.GIT + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 76b864e80d64..1e8f8a9dd6fa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2289,17 +2289,10 @@ let avrdude = callPackage ../development/tools/misc/avrdude { }; - binutils_release = callPackage ../development/tools/misc/binutils { + binutils = callPackage ../development/tools/misc/binutils { inherit noSysDirs; }; - binutils_snapshot = callPackage ../development/tools/misc/binutils/snapshot.nix { - inherit noSysDirs; - }; - - # We are waiting for a release. Meanwhile, sysvinit and the loongson2f need it. - binutils = binutils_snapshot; - binutilsCross = forceBuildDrv (import ../development/tools/misc/binutils { inherit stdenv fetchurl; noSysDirs = true; From aedebd300f426a32448b70b03a65592af03e139a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 7 Oct 2010 22:45:28 +0000 Subject: [PATCH 222/282] Fixing the binutils expression and patches, so they work fine. I also added some comments on why these patches. Now I tested that the patches work. svn path=/nixpkgs/branches/stdenv-updates/; revision=24165 --- .../tools/misc/binutils/default.nix | 10 +++- .../tools/misc/binutils/loongson2f.patch | 53 ------------------- .../tools/misc/binutils/version-bump.patch | 28 +--------- 3 files changed, 9 insertions(+), 82 deletions(-) diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index caab0b246801..863bf16cf613 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -6,7 +6,9 @@ let targetIsMips = stdenv.system == "mips64-linux" || (cross != null && cross.arch == "mips"); in stdenv.mkDerivation rec { - name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + # In the case of targetIsMips we apply a version-bump patch + name = (if targetIsMips then "binutils-2.20.51" else + basename) + stdenv.lib.optionalString (cross != null) "-${cross.config}"; src = fetchurl { url = "mirror://gnu/binutils/${basename}.tar.bz2"; @@ -18,7 +20,11 @@ stdenv.mkDerivation rec { # RUNPATH instead of RPATH on binaries. This is important because # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. ./new-dtags.patch - ] ++ stdenv.lib.optionals targetIsMips [ ./loongson2f.patch ./version-bump.patch ]; + ] + # For loongson2f (the only mips running nixos now) we need these patches for + # linux to build. It checks the binutils version, so we have even to udpate the + # version. + ++ stdenv.lib.optionals targetIsMips [ ./loongson2f.patch ./version-bump.patch ]; inherit noSysDirs; diff --git a/pkgs/development/tools/misc/binutils/loongson2f.patch b/pkgs/development/tools/misc/binutils/loongson2f.patch index 18d0634d1108..8b89b8fe1525 100644 --- a/pkgs/development/tools/misc/binutils/loongson2f.patch +++ b/pkgs/development/tools/misc/binutils/loongson2f.patch @@ -42,31 +42,6 @@ Subject: [PATCH] * config/tc-mips.c (mips_fix_loongson2f, mips_fix_loong create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.d create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.s -diff --git a/gas/ChangeLog b/gas/ChangeLog -index f35eb3a..6dca72b 100644 ---- a/gas/ChangeLog -+++ b/gas/ChangeLog -@@ -1,3 +1,20 @@ -+2010-02-25 Wu Zhangjin -+ -+ * config/tc-mips.c (mips_fix_loongson2f, mips_fix_loongson2f_nop, -+ mips_fix_loongson2f_jump): New variables. -+ (md_longopts): Add New options -mfix-loongson2f-nop/jump, -+ -mno-fix-loongson2f-nop/jump. -+ (md_parse_option): Initialize variables via above options. -+ (options): New enums for the above options. -+ (md_begin): Initialize nop_insn from LOONGSON2F_NOP_INSN. -+ (fix_loongson2f, fix_loongson2f_nop, fix_loongson2f_jump): -+ New functions. -+ (append_insn): call fix_loongson2f(). -+ (mips_handle_align): Replace the implicit nops. -+ * config/tc-mips.h (MAX_MEM_FOR_RS_ALIGN_CODE): Modified -+ for the new mips_handle_align(). -+ * doc/c-mips.texi: Document the new options. -+ - 2010-02-23 Daniel Gutson - - * config/tc-arm.c (do_rd_rm_rn): Added warning diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 94128fe..f901ae4 100644 --- a/gas/config/tc-mips.c @@ -363,22 +338,6 @@ index 34fa694..641e60f 100644 @item -mfix-vr4120 @itemx -mno-fix-vr4120 Insert nops to work around certain VR4120 errata. This option is -diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog -index 3ee595b..439e734 100644 ---- a/gas/testsuite/ChangeLog -+++ b/gas/testsuite/ChangeLog -@@ -1,3 +1,11 @@ -+2010-02-25 Wu Zhangjin -+ -+ * gas/mips/loongson-2f-2.s: New test of -mfix-loongson2f-nop. -+ * gas/mips/loongson-2f-2.d: Likewise. -+ * gas/mips/loongson-2f-3.s: New test of -mfix-loongson2f-jump. -+ * gas/mips/loongson-2f-3.d: Likewise. -+ * gas/mips/mips.exp: Run the new tests. -+ - 2010-02-24 Nick Clifton - - PR binutils/6773 diff --git a/gas/testsuite/gas/mips/loongson-2f-2.d b/gas/testsuite/gas/mips/loongson-2f-2.d new file mode 100644 index 0000000..f5267a8 @@ -502,18 +461,6 @@ index 14ce5cc..34bb5ea 100644 run_dump_test_arches "octeon" [mips_arch_list_matching octeon] run_list_test_arches "octeon-ill" "" \ -diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog -index 39cecde..549d565 100644 ---- a/include/opcode/ChangeLog -+++ b/include/opcode/ChangeLog -@@ -1,3 +1,7 @@ -+2010-02-25 Wu Zhangjin -+ -+ * mips.h: (LOONGSON2F_NOP_INSN): New macro. -+ - 2010-02-08 Philipp Tomsich - - * opcode/ppc.h (PPC_OPCODE_TITAN): Define. diff --git a/include/opcode/mips.h b/include/opcode/mips.h index 27d10e6..d6b3cf4 100644 --- a/include/opcode/mips.h diff --git a/pkgs/development/tools/misc/binutils/version-bump.patch b/pkgs/development/tools/misc/binutils/version-bump.patch index 5fc49865c523..3860570e8db2 100644 --- a/pkgs/development/tools/misc/binutils/version-bump.patch +++ b/pkgs/development/tools/misc/binutils/version-bump.patch @@ -1,29 +1,3 @@ -From 3ca360dab62f7008f42d835affe5c89144db3e07 Mon Sep 17 00:00:00 2001 -From: Tristan Gingold -Date: Fri, 4 Sep 2009 08:48:19 +0000 -Subject: [PATCH] bfd/ - 2009-09-04 Tristan Gingold - - * configure.in: Bump version to 2.20.51 - * configure: Regenerated. ---- - bfd/ChangeLog | 5 +++++ - bfd/configure.in | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -diff --git a/bfd/ChangeLog b/bfd/ChangeLog -index 8a26fa4..8b0f252 100644 ---- a/bfd/ChangeLog -+++ b/bfd/ChangeLog -@@ -1,3 +1,8 @@ -+2009-09-04 Tristan Gingold -+ -+ * configure.in: Bump version to 2.20.51 -+ * configure: Regenerated. -+ - 2009-09-04 Alan Modra - - * elf32-spu.c (spu_elf_relocate_section): Correct 2009-07-24 logic. diff --git a/bfd/configure.in b/bfd/configure.in index 0a8d486..a3cc89a 100644 --- a/bfd/configure.in @@ -32,7 +6,7 @@ index 0a8d486..a3cc89a 100644 AC_CANONICAL_TARGET AC_ISC_POSIX --AM_INIT_AUTOMAKE(bfd, 2.19.51) +-AM_INIT_AUTOMAKE(bfd, 2.20.1) +AM_INIT_AUTOMAKE(bfd, 2.20.51) dnl These must be called before LT_INIT, because it may want From c93a74426b3bd78795d4fc9a9000361971293fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 8 Oct 2010 06:53:35 +0000 Subject: [PATCH 223/282] Fixing the gnupatch url; it was taking the alpha snapshot for all the platforms at the time of building the stdenv (because there !(stdenv ? glibc)). I changed that to stdenv.isDarwin, in a guess that it may work for those who experienced problems with the last patch release. svn path=/nixpkgs/branches/stdenv-updates/; revision=24171 --- pkgs/tools/text/gnupatch/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix index ff469ddad25b..782c0bec8508 100644 --- a/pkgs/tools/text/gnupatch/default.nix +++ b/pkgs/tools/text/gnupatch/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "patch-2.6.1"; src = - if !(stdenv ? glibc) + if stdenv.isDarwin then fetchurl { # Temporary fix for # http://lists.gnu.org/archive/html/bug-patch/2010-01/msg00004.html . From 143ea0f4913d49c0705a9856907a5c7694fe1311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 8 Oct 2010 14:28:48 +0000 Subject: [PATCH 224/282] gnu grep does not need the patch we set anymore. svn path=/nixpkgs/branches/stdenv-updates/; revision=24186 --- pkgs/tools/text/gnugrep/default.nix | 2 -- pkgs/tools/text/gnugrep/malloc.patch | 15 --------------- 2 files changed, 17 deletions(-) delete mode 100644 pkgs/tools/text/gnugrep/malloc.patch diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 18a6ef5dc69d..3c21bfd2f254 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -5,8 +5,6 @@ let version = "2.7"; in stdenv.mkDerivation { name = "gnugrep-${version}"; - patches = [ ./malloc.patch ]; - src = fetchurl { url = "mirror://gnu/grep/grep-${version}.tar.gz"; sha256 = "1b8vksfd1ngharac3ygaqim3lrf0yqap992sg0vfm7572l88655d"; diff --git a/pkgs/tools/text/gnugrep/malloc.patch b/pkgs/tools/text/gnugrep/malloc.patch deleted file mode 100644 index b645c64a09e1..000000000000 --- a/pkgs/tools/text/gnugrep/malloc.patch +++ /dev/null @@ -1,15 +0,0 @@ -http://www.mail-archive.com/bug-grep@gnu.org/msg02537.html - -diff --git a/src/kwset.c b/src/kwset.c -index 050562e..995be79 100644 ---- a/src/kwset.c -+++ b/src/kwset.c -@@ -40,7 +40,7 @@ - #ifdef GREP - # include "xalloc.h" - # undef malloc --# define malloc(s) xmalloc(s) -+# define malloc xmalloc - #endif - - #define NCHAR (UCHAR_MAX + 1) From 427d99ee1e598018b5dbcf3493f5e6c24ec71a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 10 Oct 2010 14:45:42 +0000 Subject: [PATCH 225/282] Updating from trunk (to get the latest nixUnstable) svn path=/nixpkgs/branches/stdenv-updates/; revision=24205 --- pkgs/tools/package-management/nix/unstable.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 1e98bb44ee20..b5e56464eecb 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -4,11 +4,11 @@ }: stdenv.mkDerivation rec { - name = "nix-1.0pre23787"; + name = "nix-1.0pre24122"; src = fetchurl { - url = "http://hydra.nixos.org/build/632513/download/4/${name}.tar.bz2"; - sha256 = "01zn61ak6glyqpjxkzj8a7qw1vrfml1axky1jh1axkw6j35c34d7"; + url = "http://hydra.nixos.org/build/667798/download/4/${name}.tar.bz2"; + sha256 = "0rz9radz4452bp3sy9yzcawn9yz5z4nyng43a0zrsa5v72cv695f"; }; buildNativeInputs = [ perl ]; From 18372e5a567d5c0c9809d52fdd20f2cde61d6591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 11 Oct 2010 23:18:00 +0000 Subject: [PATCH 226/282] Reverting the patch that disabled using the 'binutils snapshot', because it's needed for the fuloong minipc. It was not enough having the loongson2f patches; only having the patches, we got troubles building cups with a segfault on the dynamic loader running their 'genstrings' program. And if sysvinit needs newer binutils (I can't remember why, but I wrote it in the all-packages.nix before), then let's use the snapshot. As a note about "why this snapshot" (civodul was interested), when I knew that we needed an unreleased version of binutils I went to download the snapshot of the day. And it worked. This is all the story. svn path=/nixpkgs/branches/stdenv-updates/; revision=24229 --- .../tools/misc/binutils/default.nix | 12 +- .../tools/misc/binutils/loongson2f.patch | 487 ------------------ .../tools/misc/binutils/snapshot.nix | 59 +++ .../tools/misc/binutils/version-bump.patch | 16 - pkgs/top-level/all-packages.nix | 9 +- 5 files changed, 69 insertions(+), 514 deletions(-) delete mode 100644 pkgs/development/tools/misc/binutils/loongson2f.patch create mode 100644 pkgs/development/tools/misc/binutils/snapshot.nix delete mode 100644 pkgs/development/tools/misc/binutils/version-bump.patch diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 863bf16cf613..3e3dedd1e833 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -2,13 +2,9 @@ let basename = "binutils-2.20.1"; - - targetIsMips = stdenv.system == "mips64-linux" || (cross != null && cross.arch == "mips"); in stdenv.mkDerivation rec { - # In the case of targetIsMips we apply a version-bump patch - name = (if targetIsMips then "binutils-2.20.51" else - basename) + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; src = fetchurl { url = "mirror://gnu/binutils/${basename}.tar.bz2"; @@ -20,11 +16,7 @@ stdenv.mkDerivation rec { # RUNPATH instead of RPATH on binaries. This is important because # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. ./new-dtags.patch - ] - # For loongson2f (the only mips running nixos now) we need these patches for - # linux to build. It checks the binutils version, so we have even to udpate the - # version. - ++ stdenv.lib.optionals targetIsMips [ ./loongson2f.patch ./version-bump.patch ]; + ]; inherit noSysDirs; diff --git a/pkgs/development/tools/misc/binutils/loongson2f.patch b/pkgs/development/tools/misc/binutils/loongson2f.patch deleted file mode 100644 index 8b89b8fe1525..000000000000 --- a/pkgs/development/tools/misc/binutils/loongson2f.patch +++ /dev/null @@ -1,487 +0,0 @@ -From 43ec71bb4c761538a3c8813856654de756661cce Mon Sep 17 00:00:00 2001 -From: Nick Clifton -Date: Thu, 25 Feb 2010 11:15:46 +0000 -Subject: [PATCH] * config/tc-mips.c (mips_fix_loongson2f, mips_fix_loongson2f_nop, - mips_fix_loongson2f_jump): New variables. - (md_longopts): Add New options -mfix-loongson2f-nop/jump, - -mno-fix-loongson2f-nop/jump. - (md_parse_option): Initialize variables via above options. - (options): New enums for the above options. - (md_begin): Initialize nop_insn from LOONGSON2F_NOP_INSN. - (fix_loongson2f, fix_loongson2f_nop, fix_loongson2f_jump): - New functions. - (append_insn): call fix_loongson2f(). - (mips_handle_align): Replace the implicit nops. - * config/tc-mips.h (MAX_MEM_FOR_RS_ALIGN_CODE): Modified - for the new mips_handle_align(). - * doc/c-mips.texi: Document the new options. - - * gas/mips/loongson-2f-2.s: New test of -mfix-loongson2f-nop. - * gas/mips/loongson-2f-2.d: Likewise. - * gas/mips/loongson-2f-3.s: New test of -mfix-loongson2f-jump. - * gas/mips/loongson-2f-3.d: Likewise. - * gas/mips/mips.exp: Run the new tests. - - * opcode/mips.h (LOONGSON2F_NOP_INSN): New macro. ---- - gas/ChangeLog | 17 ++++ - gas/config/tc-mips.c | 130 +++++++++++++++++++++++++++++--- - gas/config/tc-mips.h | 4 +- - gas/doc/c-mips.texi | 18 ++++- - gas/testsuite/ChangeLog | 8 ++ - gas/testsuite/gas/mips/loongson-2f-2.d | 18 +++++ - gas/testsuite/gas/mips/loongson-2f-2.s | 10 +++ - gas/testsuite/gas/mips/loongson-2f-3.d | 35 +++++++++ - gas/testsuite/gas/mips/loongson-2f-3.s | 23 ++++++ - gas/testsuite/gas/mips/mips.exp | 2 + - include/opcode/ChangeLog | 4 + - include/opcode/mips.h | 6 +- - 12 files changed, 258 insertions(+), 17 deletions(-) - create mode 100644 gas/testsuite/gas/mips/loongson-2f-2.d - create mode 100644 gas/testsuite/gas/mips/loongson-2f-2.s - create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.d - create mode 100644 gas/testsuite/gas/mips/loongson-2f-3.s - -diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c -index 94128fe..f901ae4 100644 ---- a/gas/config/tc-mips.c -+++ b/gas/config/tc-mips.c -@@ -1,6 +1,7 @@ - /* tc-mips.c -- assemble code for a MIPS chip. - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -- 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -+ Free Software Foundation, Inc. - Contributed by the OSF and Ralph Campbell. - Written by Keith Knowles and Ralph Campbell, working independently. - Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus -@@ -751,7 +752,8 @@ static const unsigned int mips16_to_32_reg_map[] = - - /* Classifies the kind of instructions we're interested in when - implementing -mfix-vr4120. */ --enum fix_vr4120_class { -+enum fix_vr4120_class -+{ - FIX_VR4120_MACC, - FIX_VR4120_DMACC, - FIX_VR4120_MULT, -@@ -761,6 +763,15 @@ enum fix_vr4120_class { - NUM_FIX_VR4120_CLASSES - }; - -+/* ...likewise -mfix-loongson2f-jump. */ -+static bfd_boolean mips_fix_loongson2f_jump; -+ -+/* ...likewise -mfix-loongson2f-nop. */ -+static bfd_boolean mips_fix_loongson2f_nop; -+ -+/* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed. */ -+static bfd_boolean mips_fix_loongson2f; -+ - /* Given two FIX_VR4120_* values X and Y, bit Y of element X is set if - there must be at least one other instruction between an instruction - of type X and an instruction of type Y. */ -@@ -1048,8 +1059,9 @@ static struct { - enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG }; - - static void append_insn -- (struct mips_cl_insn *ip, expressionS *p, bfd_reloc_code_real_type *r); -+ (struct mips_cl_insn *, expressionS *, bfd_reloc_code_real_type *); - static void mips_no_prev_insn (void); -+static void macro_build (expressionS *, const char *, const char *, ...); - static void mips16_macro_build - (expressionS *, const char *, const char *, va_list); - static void load_register (int, expressionS *, int); -@@ -1918,6 +1930,8 @@ md_begin (void) - if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0) - { - create_insn (&nop_insn, mips_opcodes + i); -+ if (mips_fix_loongson2f_nop) -+ nop_insn.insn_opcode = LOONGSON2F_NOP_INSN; - nop_insn.fixed_p = 1; - } - } -@@ -2731,6 +2745,54 @@ nops_for_insn_or_target (const struct mips_cl_insn *hist, - return nops; - } - -+/* Fix NOP issue: Replace nops by "or at,at,zero". */ -+ -+static void -+fix_loongson2f_nop (struct mips_cl_insn * ip) -+{ -+ if (strcmp (ip->insn_mo->name, "nop") == 0) -+ ip->insn_opcode = LOONGSON2F_NOP_INSN; -+} -+ -+/* Fix Jump Issue: Eliminate instruction fetch from outside 256M region -+ jr target pc &= 'hffff_ffff_cfff_ffff. */ -+ -+static void -+fix_loongson2f_jump (struct mips_cl_insn * ip) -+{ -+ if (strcmp (ip->insn_mo->name, "j") == 0 -+ || strcmp (ip->insn_mo->name, "jr") == 0 -+ || strcmp (ip->insn_mo->name, "jalr") == 0) -+ { -+ int sreg; -+ expressionS ep; -+ -+ if (! mips_opts.at) -+ return; -+ -+ sreg = EXTRACT_OPERAND (RS, *ip); -+ if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG) -+ return; -+ -+ ep.X_op = O_constant; -+ ep.X_add_number = 0xcfff0000; -+ macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16); -+ ep.X_add_number = 0xffff; -+ macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16); -+ macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG); -+ } -+} -+ -+static void -+fix_loongson2f (struct mips_cl_insn * ip) -+{ -+ if (mips_fix_loongson2f_nop) -+ fix_loongson2f_nop (ip); -+ -+ if (mips_fix_loongson2f_jump) -+ fix_loongson2f_jump (ip); -+} -+ - /* Output an instruction. IP is the instruction information. - ADDRESS_EXPR is an operand of the instruction to be used with - RELOC_TYPE. */ -@@ -2744,6 +2806,9 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, - bfd_boolean relaxed_branch = FALSE; - segment_info_type *si = seg_info (now_seg); - -+ if (mips_fix_loongson2f) -+ fix_loongson2f (ip); -+ - /* Mark instruction labels in mips16 mode. */ - mips16_mark_labels (); - -@@ -11216,6 +11281,10 @@ enum options - OPTION_MNO_7000_HILO_FIX, - OPTION_FIX_24K, - OPTION_NO_FIX_24K, -+ OPTION_FIX_LOONGSON2F_JUMP, -+ OPTION_NO_FIX_LOONGSON2F_JUMP, -+ OPTION_FIX_LOONGSON2F_NOP, -+ OPTION_NO_FIX_LOONGSON2F_NOP, - OPTION_FIX_VR4120, - OPTION_NO_FIX_VR4120, - OPTION_FIX_VR4130, -@@ -11304,6 +11373,10 @@ struct option md_longopts[] = - {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX}, - {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, - {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, -+ {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP}, -+ {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP}, -+ {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP}, -+ {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP}, - {"mfix-vr4120", no_argument, NULL, OPTION_FIX_VR4120}, - {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120}, - {"mfix-vr4130", no_argument, NULL, OPTION_FIX_VR4130}, -@@ -11571,6 +11644,22 @@ md_parse_option (int c, char *arg) - mips_fix_24k = 0; - break; - -+ case OPTION_FIX_LOONGSON2F_JUMP: -+ mips_fix_loongson2f_jump = TRUE; -+ break; -+ -+ case OPTION_NO_FIX_LOONGSON2F_JUMP: -+ mips_fix_loongson2f_jump = FALSE; -+ break; -+ -+ case OPTION_FIX_LOONGSON2F_NOP: -+ mips_fix_loongson2f_nop = TRUE; -+ break; -+ -+ case OPTION_NO_FIX_LOONGSON2F_NOP: -+ mips_fix_loongson2f_nop = FALSE; -+ break; -+ - case OPTION_FIX_VR4120: - mips_fix_vr4120 = 1; - break; -@@ -11785,6 +11874,8 @@ md_parse_option (int c, char *arg) - return 0; - } - -+ mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump; -+ - return 1; - } - -@@ -14790,6 +14881,8 @@ void - mips_handle_align (fragS *fragp) - { - char *p; -+ int bytes, size, excess; -+ valueT opcode; - - if (fragp->fr_type != rs_align_code) - return; -@@ -14797,17 +14890,28 @@ mips_handle_align (fragS *fragp) - p = fragp->fr_literal + fragp->fr_fix; - if (*p) - { -- int bytes; -+ opcode = mips16_nop_insn.insn_opcode; -+ size = 2; -+ } -+ else -+ { -+ opcode = nop_insn.insn_opcode; -+ size = 4; -+ } - -- bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; -- if (bytes & 1) -- { -- *p++ = 0; -- fragp->fr_fix++; -- } -- md_number_to_chars (p, mips16_nop_insn.insn_opcode, 2); -- fragp->fr_var = 2; -+ bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; -+ excess = bytes % size; -+ if (excess != 0) -+ { -+ /* If we're not inserting a whole number of instructions, -+ pad the end of the fixed part of the frag with zeros. */ -+ memset (p, 0, excess); -+ p += excess; -+ fragp->fr_fix += excess; - } -+ -+ md_number_to_chars (p, opcode, size); -+ fragp->fr_var = size; - } - - static void -@@ -15519,6 +15623,8 @@ MIPS options:\n\ - -mmt generate MT instructions\n\ - -mno-mt do not generate MT instructions\n")); - fprintf (stream, _("\ -+-mfix-loongson2f-jump work around Loongson2F JUMP instructions\n\ -+-mfix-loongson2f-nop work around Loongson2F NOP errata\n\ - -mfix-vr4120 work around certain VR4120 errata\n\ - -mfix-vr4130 work around VR4130 mflo/mfhi errata\n\ - -mfix-24k insert a nop after ERET and DERET instructions\n\ -diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h -index 4bdf807..502fa8e 100644 ---- a/gas/config/tc-mips.h -+++ b/gas/config/tc-mips.h -@@ -1,6 +1,6 @@ - /* tc-mips.h -- header file for tc-mips.c. - Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004, -- 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+ 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. - Contributed by the OSF and Ralph Campbell. - Written by Keith Knowles and Ralph Campbell, working independently. - Modified for ECOFF support by Ian Lance Taylor of Cygnus Support. -@@ -59,7 +59,7 @@ extern char mips_nop_opcode (void); - extern void mips_handle_align (struct frag *); - #define HANDLE_ALIGN(fragp) mips_handle_align (fragp) - --#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) -+#define MAX_MEM_FOR_RS_ALIGN_CODE (3 + 4) - - struct insn_label_list; - struct mips_segment_info { -diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi -index 34fa694..641e60f 100644 ---- a/gas/doc/c-mips.texi -+++ b/gas/doc/c-mips.texi -@@ -1,5 +1,5 @@ - @c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, --@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -+@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 - @c Free Software Foundation, Inc. - @c This is part of the GAS manual. - @c For copying conditions, see the file as.texinfo. -@@ -78,7 +78,7 @@ VxWorks-style position-independent macro expansions. - @itemx -mips2 - @itemx -mips3 - @itemx -mips4 --@itemx -mips5 -+@itemx -mips5xo - @itemx -mips32 - @itemx -mips32r2 - @itemx -mips64 -@@ -172,6 +172,20 @@ This tells the assembler to accept MT instructions. - Cause nops to be inserted if the read of the destination register - of an mfhi or mflo instruction occurs in the following two instructions. - -+@item -mfix-loongson2f-jump -+@itemx -mno-fix-loongson2f-jump -+Eliminate instruction fetch from outside 256M region to work around the -+Loongson2F @samp{jump} instructions. Without it, under extreme cases, -+the kernel may crash. The issue has been solved in latest processor -+batches, but this fix has no side effect to them. -+ -+@item -mfix-loongson2f-nop -+@itemx -mno-fix-loongson2f-nop -+Replace nops by @code{or at,at,zero} to work around the Loongson2F -+@samp{nop} errata. Without it, under extreme cases, cpu might -+deadlock. The issue has been solved in latest loongson2f batches, but -+this fix has no side effect to them. -+ - @item -mfix-vr4120 - @itemx -mno-fix-vr4120 - Insert nops to work around certain VR4120 errata. This option is -diff --git a/gas/testsuite/gas/mips/loongson-2f-2.d b/gas/testsuite/gas/mips/loongson-2f-2.d -new file mode 100644 -index 0000000..f5267a8 ---- /dev/null -+++ b/gas/testsuite/gas/mips/loongson-2f-2.d -@@ -0,0 +1,18 @@ -+#as: -mfix-loongson2f-nop -+#objdump: -M reg-names=numeric -dr -+#name: ST Microelectronics Loongson-2F workarounds of nop issue -+ -+.*: file format .* -+ -+ -+Disassembly of section .text: -+ -+00000000 : -+ 0: 00200825 move \$1,\$1 -+ 4: 00200825 move \$1,\$1 -+ 8: 00200825 move \$1,\$1 -+ c: 00200825 move \$1,\$1 -+ 10: 00200825 move \$1,\$1 -+ 14: 00200825 move \$1,\$1 -+ 18: 00200825 move \$1,\$1 -+ 1c: 00200825 move \$1,\$1 -diff --git a/gas/testsuite/gas/mips/loongson-2f-2.s b/gas/testsuite/gas/mips/loongson-2f-2.s -new file mode 100644 -index 0000000..842e157 ---- /dev/null -+++ b/gas/testsuite/gas/mips/loongson-2f-2.s -@@ -0,0 +1,10 @@ -+# Test the work around of the NOP issue of loongson2F -+ .text -+ .set noreorder -+ -+ .align 5 # Test _implicit_ nops -+loongson2f_nop_insn: -+ nop # Test _explicit_ nops -+ -+# align section end to 16-byte boundary for easier testing on multiple targets -+ .p2align 4 -diff --git a/gas/testsuite/gas/mips/loongson-2f-3.d b/gas/testsuite/gas/mips/loongson-2f-3.d -new file mode 100644 -index 0000000..99844d3 ---- /dev/null -+++ b/gas/testsuite/gas/mips/loongson-2f-3.d -@@ -0,0 +1,35 @@ -+#as: -mfix-loongson2f-jump -+#objdump: -M reg-names=numeric -dr -+#name: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue -+ -+.*: file format .* -+ -+ -+Disassembly of section .text: -+ -+00000000 <.text>: -+ 0: 3c01cfff lui \$1,0xcfff -+ 4: 3421ffff ori \$1,\$1,0xffff -+ 8: 03c1f024 and \$30,\$30,\$1 -+ c: 03c00008 jr \$30 -+ 10: 00000000 nop -+ -+ 14: 3c01cfff lui \$1,0xcfff -+ 18: 3421ffff ori \$1,\$1,0xffff -+ 1c: 03e1f824 and \$31,\$31,\$1 -+ 20: 03e00008 jr \$31 -+ 24: 00000000 nop -+ -+ 28: 3c01cfff lui \$1,0xcfff -+ 2c: 3421ffff ori \$1,\$1,0xffff -+ 30: 03c1f024 and \$30,\$30,\$1 -+ 34: 03c0f809 jalr \$30 -+ 38: 00000000 nop -+ -+ 3c: 00200008 jr \$1 -+ 40: 00000000 nop -+ -+ 44: 08000000 j 0x0 -+ 44: R_MIPS_26 external_label -+ 48: 00000000 nop -+ 4c: 00000000 nop -diff --git a/gas/testsuite/gas/mips/loongson-2f-3.s b/gas/testsuite/gas/mips/loongson-2f-3.s -new file mode 100644 -index 0000000..cbb73de ---- /dev/null -+++ b/gas/testsuite/gas/mips/loongson-2f-3.s -@@ -0,0 +1,23 @@ -+# Test the work around of the Jump instruction Issue of Loongson2F -+ .text -+ .set noreorder -+ -+ j $30 # j with register -+ nop -+ -+ jr $31 # jr -+ nop -+ -+ jalr $30 # jalr -+ nop -+ -+ .set noat -+ jr $1 # jr with at register and .set annotation -+ nop -+ .set at -+ -+ j external_label # j with label -+ nop -+ -+# align section end to 16-byte boundary for easier testing on multiple targets -+ .p2align 4 -diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp -index 14ce5cc..34bb5ea 100644 ---- a/gas/testsuite/gas/mips/mips.exp -+++ b/gas/testsuite/gas/mips/mips.exp -@@ -789,6 +789,8 @@ if { [istarget mips*-*-vxworks*] } { - - run_dump_test "loongson-2e" - run_dump_test "loongson-2f" -+ run_dump_test "loongson-2f-2" -+ run_dump_test "loongson-2f-3" - - run_dump_test_arches "octeon" [mips_arch_list_matching octeon] - run_list_test_arches "octeon-ill" "" \ -diff --git a/include/opcode/mips.h b/include/opcode/mips.h -index 27d10e6..d6b3cf4 100644 ---- a/include/opcode/mips.h -+++ b/include/opcode/mips.h -@@ -1,6 +1,6 @@ - /* mips.h. Mips opcode list for GDB, the GNU debugger. - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -- 2003, 2004, 2005, 2008, 2009 -+ 2003, 2004, 2005, 2008, 2009, 2010 - Free Software Foundation, Inc. - Contributed by Ralph Campbell and OSF - Commented and modified by Ian Lance Taylor, Cygnus Support -@@ -1106,4 +1106,8 @@ extern int bfd_mips_num_opcodes; - extern const struct mips_opcode mips16_opcodes[]; - extern const int bfd_mips16_num_opcodes; - -+/* A NOP insn impemented as "or at,at,zero". -+ Used to implement -mfix-loongson2f. */ -+#define LOONGSON2F_NOP_INSN 0x00200825 -+ - #endif /* _MIPS_H_ */ --- -1.6.5.GIT - diff --git a/pkgs/development/tools/misc/binutils/snapshot.nix b/pkgs/development/tools/misc/binutils/snapshot.nix new file mode 100644 index 000000000000..79f01cad4ef3 --- /dev/null +++ b/pkgs/development/tools/misc/binutils/snapshot.nix @@ -0,0 +1,59 @@ +{stdenv, fetchurl, noSysDirs, cross ? null}: + +let + basename = "binutils-2.20.51"; +in +stdenv.mkDerivation rec { + name = basename + stdenv.lib.optionalString (cross != null) "-${cross.config}"; + + src = fetchurl { + url = http://nixos.org/tarballs/binutils-2.20.51-pre-20100901.tar.bz2; + sha256 = "1872fdnbnq5z5svq7mvc0vyyad8pknwvx2glxq1bbk0xv7arp72y"; + }; + + patches = [ + # Turn on --enable-new-dtags by default to make the linker set + # RUNPATH instead of RPATH on binaries. This is important because + # RUNPATH can be overriden using LD_LIBRARY_PATH at runtime. + ./new-dtags.patch + ]; + + inherit noSysDirs; + + preConfigure = '' + # Clear the default library search path. + if test "$noSysDirs" = "1"; then + echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt + fi + + # Use symlinks instead of hard links to save space ("strip" in the + # fixup phase strips each hard link separately). + for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in; do + substituteInPlace $i --replace 'ln ' 'ln -s ' + done + ''; + + configureFlags = "--disable-werror" # needed for dietlibc build + + stdenv.lib.optionalString (stdenv.system == "mips64-linux") + " --enable-fix-loongson2f-nop" + + stdenv.lib.optionalString (cross != null) " --target=${cross.config}"; + + meta = { + description = "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)"; + + longDescription = '' + The GNU Binutils are a collection of binary tools. The main + ones are `ld' (the GNU linker) and `as' (the GNU assembler). + They also include the BFD (Binary File Descriptor) library, + `gprof', `nm', `strip', etc. + ''; + + homepage = http://www.gnu.org/software/binutils/; + + license = "GPLv3+"; + + /* Give binutils a lower priority than gcc-wrapper to prevent a + collision due to the ld/as wrappers/symlinks in the latter. */ + priority = "10"; + }; +} diff --git a/pkgs/development/tools/misc/binutils/version-bump.patch b/pkgs/development/tools/misc/binutils/version-bump.patch deleted file mode 100644 index 3860570e8db2..000000000000 --- a/pkgs/development/tools/misc/binutils/version-bump.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/bfd/configure.in b/bfd/configure.in -index 0a8d486..a3cc89a 100644 ---- a/bfd/configure.in -+++ b/bfd/configure.in -@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c]) - AC_CANONICAL_TARGET - AC_ISC_POSIX - --AM_INIT_AUTOMAKE(bfd, 2.20.1) -+AM_INIT_AUTOMAKE(bfd, 2.20.51) - - dnl These must be called before LT_INIT, because it may want - dnl to call AC_CHECK_PROG. --- -1.6.5.GIT - diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dfcf7d0e4fe6..08067f0197ce 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2291,10 +2291,17 @@ let avrdude = callPackage ../development/tools/misc/avrdude { }; - binutils = callPackage ../development/tools/misc/binutils { + binutils_release = callPackage ../development/tools/misc/binutils { inherit noSysDirs; }; + binutils_snapshot = callPackage ../development/tools/misc/binutils/snapshot.nix { + inherit noSysDirs; + }; + + # We are waiting for a release. Meanwhile, sysvinit and the loongson2f need it. + binutils = binutils_snapshot; + binutilsCross = forceBuildDrv (import ../development/tools/misc/binutils { inherit stdenv fetchurl; noSysDirs = true; From 3c29a00612087dad9466b8332c3cb0d24f05432d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 18:31:11 +0000 Subject: [PATCH 227/282] Making lynx cross-build with widechar support svn path=/nixpkgs/branches/stdenv-updates/; revision=24242 --- pkgs/applications/networking/browsers/lynx/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/applications/networking/browsers/lynx/default.nix b/pkgs/applications/networking/browsers/lynx/default.nix index 97d28dd7e2f5..ed13fb550e5b 100644 --- a/pkgs/applications/networking/browsers/lynx/default.nix +++ b/pkgs/applications/networking/browsers/lynx/default.nix @@ -17,6 +17,11 @@ stdenv.mkDerivation { buildInputs = [ ncurses ] ++ stdenv.lib.optional sslSupport openssl; buildNativeInputs = [ ncurses ]; + crossAttrs = { + configureFlags = "--enable-widec" + + (if sslSupport then " --with-ssl" else ""); + }; + meta = { homepage = http://lynx.isc.org/; description = "A text-mode web browser"; From 46201622cb52be5dfe4bbc5bf857011b8a2cdaad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 18:33:02 +0000 Subject: [PATCH 228/282] Making vim73 cross-build (it needs a patch) svn path=/nixpkgs/branches/stdenv-updates/; revision=24243 --- pkgs/applications/editors/vim/default.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index 4920dd76bd11..dec933271678 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -8,7 +8,8 @@ stdenv.mkDerivation rec { sha256 = "079201qk8g9yisrrb0dn52ch96z3lzw6z473dydw9fzi0xp5spaw"; }; - buildInputs = [ ncurses gettext pkgconfig ]; + buildInputs = [ ncurses pkgconfig ]; + buildNativeInputs = [ gettext ]; configureFlags = [ "--enable-multibyte" @@ -28,9 +29,17 @@ stdenv.mkDerivation rec { "vim_cv_stat_ignores_slash=yes" "ac_cv_sizeof_int=4" "vim_cv_memmove_handles_overlap=yes" + "vim_cv_memmove_handles_overlap=yes" "STRIP=${stdenv.cross.config}-strip" ]; }; + + # To fix the trouble in vim73, that it cannot cross-build with this patch + # to bypass a configure script check that cannot be done cross-building. + # http://groups.google.com/group/vim_dev/browse_thread/thread/66c02efd1523554b?pli=1 + patchPhase = '' + sed -i -e 's/as_fn_error.*int32.*/:/' src/auto/configure + ''; meta = { description = "The most popular clone of the VI editor"; From 57df19fe857552c16e472068a44081b8b26b5d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 19:06:04 +0000 Subject: [PATCH 229/282] utf-8 was not working in cross-built ncurses programs due to some old problem cross-building ncursesw not present anymore. I reenable unicode cross-building. svn path=/nixpkgs/branches/stdenv-updates/; revision=24245 --- pkgs/applications/networking/browsers/lynx/default.nix | 5 ----- pkgs/top-level/all-packages.nix | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/pkgs/applications/networking/browsers/lynx/default.nix b/pkgs/applications/networking/browsers/lynx/default.nix index ed13fb550e5b..97d28dd7e2f5 100644 --- a/pkgs/applications/networking/browsers/lynx/default.nix +++ b/pkgs/applications/networking/browsers/lynx/default.nix @@ -17,11 +17,6 @@ stdenv.mkDerivation { buildInputs = [ ncurses ] ++ stdenv.lib.optional sslSupport openssl; buildNativeInputs = [ ncurses ]; - crossAttrs = { - configureFlags = "--enable-widec" + - (if sslSupport then " --with-ssl" else ""); - }; - meta = { homepage = http://lynx.isc.org/; description = "A text-mode web browser"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 08067f0197ce..acc81541c56a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3590,9 +3590,7 @@ let ncurses = makeOverridable (import ../development/libraries/ncurses) { inherit fetchurl stdenv; - # The "! (stdenv ? cross)" is for the cross-built arm ncurses, which - # don't build for me in unicode. - unicode = (system != "i686-cygwin" && crossSystem == null); + unicode = system != "i686-cygwin"; }; neon = neon029; From 61e9f9cede682bffd3df237098eb5e039b634352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 19:39:30 +0000 Subject: [PATCH 230/282] Cross-building ncursesw was not that easy; it needed this patch, at least for the current nixpkgs (gcc, glibc) svn path=/nixpkgs/branches/stdenv-updates/; revision=24246 --- pkgs/development/libraries/ncurses/default.nix | 4 ++++ pkgs/development/libraries/ncurses/wint_t.patch | 14 ++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 pkgs/development/libraries/ncurses/wint_t.patch diff --git a/pkgs/development/libraries/ncurses/default.nix b/pkgs/development/libraries/ncurses/default.nix index dd3d60e48129..67c3bc5fe93f 100644 --- a/pkgs/development/libraries/ncurses/default.nix +++ b/pkgs/development/libraries/ncurses/default.nix @@ -7,6 +7,10 @@ stdenv.mkDerivation ( rec { url = "mirror://gnu/ncurses/${name}.tar.gz"; sha256 = "1x4q6kma6zgg438llbgiac3kik7j2lln9v97jdffv3fyqyjxx6qa"; }; + + crossAttrs = { + patches = [ ./wint_t.patch ]; + }; configureFlags = '' --with-shared --includedir=''${out}/include --without-debug diff --git a/pkgs/development/libraries/ncurses/wint_t.patch b/pkgs/development/libraries/ncurses/wint_t.patch new file mode 100644 index 000000000000..c9b34efd0bd9 --- /dev/null +++ b/pkgs/development/libraries/ncurses/wint_t.patch @@ -0,0 +1,14 @@ +http://www.mail-archive.com/freewrt-developers@freewrt.org/msg01326.html +--- ncurses-5.6.orig/ncurses/curses.priv.h 2006-12-10 01:55:14.000000000 0100 ++++ ncurses-5.6/ncurses/curses.priv.h 2008-02-11 13:12:04.000000000 +0100 +@@ -253,6 +253,10 @@ color_t; + #include + #include + ++#ifndef _WINT_T ++#include ++#endif ++ + #if NCURSES_EXT_COLORS && USE_WIDEC_SUPPORT + #define if_EXT_COLORS(stmt) stmt + #define NetPair(value,p) (value).ext_color = (p), \ From 27ae94e5669ba40da89d8de55c6308eb978b8cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 20:41:40 +0000 Subject: [PATCH 231/282] The glibc locales expression did not work limiting SUPPORTED-LOCALES. Now it does. svn path=/nixpkgs/branches/stdenv-updates/; revision=24249 --- pkgs/development/libraries/glibc-2.12/locales.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/glibc-2.12/locales.nix b/pkgs/development/libraries/glibc-2.12/locales.nix index 38f3f0723848..d598e0e094dc 100644 --- a/pkgs/development/libraries/glibc-2.12/locales.nix +++ b/pkgs/development/libraries/glibc-2.12/locales.nix @@ -28,12 +28,13 @@ in mkdir -p $TMPDIR/"$(dirname $(readlink -f $(type -p localedef)))/../lib/locale" # Hack to allow building of the locales (needed since glibc-2.12) - sed -i -e 's/^LOCALEDEF=/LOCALEDEF?=/' ../glibc-2*/localedata/Makefile + sed -i -e "s,^LOCALEDEF=.*,LOCALEDEF=localedef --prefix=$TMPDIR," -e \ + /library-path/d ../glibc-2*/localedata/Makefile + ${if allLocales then "" else + "echo SUPPORTED-LOCALES=\"${toString locales}\" > ../glibc-2*/localedata/SUPPORTED"} make localedata/install-locales \ - LOCALEDEF="localedef --prefix=$TMPDIR" \ localedir=$out/lib/locale \ - ${if allLocales then "" else "SUPPORTED-LOCALES=\"${toString locales}\""} ''; installPhase = From 74ae423a6a4b0476dbc5009767a89cbdee2d0b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 12 Oct 2010 20:57:02 +0000 Subject: [PATCH 232/282] Reverting a patch I did removing this special lynx configuration I add again. Otherwise, lynx really does not build with widechar support. svn path=/nixpkgs/branches/stdenv-updates/; revision=24251 --- pkgs/applications/networking/browsers/lynx/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/applications/networking/browsers/lynx/default.nix b/pkgs/applications/networking/browsers/lynx/default.nix index 97d28dd7e2f5..ed13fb550e5b 100644 --- a/pkgs/applications/networking/browsers/lynx/default.nix +++ b/pkgs/applications/networking/browsers/lynx/default.nix @@ -17,6 +17,11 @@ stdenv.mkDerivation { buildInputs = [ ncurses ] ++ stdenv.lib.optional sslSupport openssl; buildNativeInputs = [ ncurses ]; + crossAttrs = { + configureFlags = "--enable-widec" + + (if sslSupport then " --with-ssl" else ""); + }; + meta = { homepage = http://lynx.isc.org/; description = "A text-mode web browser"; From aa19343599db617cb9da8685c48528e16717f4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Wed, 13 Oct 2010 20:47:24 +0000 Subject: [PATCH 233/282] More cross packages for the nanonote svn path=/nixpkgs/branches/stdenv-updates/; revision=24268 --- pkgs/top-level/release-cross.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index d9a5369bd6ac..fd865419487f 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -279,5 +279,14 @@ in { nixUnstable.hostDrv = nativePlatforms; patch.hostDrv = nativePlatforms; zile.hostDrv = nativePlatforms; + prboom.hostDrv = nativePlatforms; + vim.hostDrv = nativePlatforms; + lynx.hostDrv = nativePlatforms; + patchelf.hostDrv = nativePlatforms; + nix.hostDrv = nativePlatforms; + fossil.hostDrv = nativePlatforms; + binutils.hostDrv = nativePlatforms; + mpg123.hostDrv = nativePlatforms; + yacas.hostDrv = nativePlatforms; }; }) From 262bcb3f5808aad6031eb549a7d2ccb5250ce7be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 15 Oct 2010 09:17:34 +0000 Subject: [PATCH 234/282] Blind commit enabling the '-lssp' for nscd in glibc2.12 It looks like we need it when building the glibc212 attribute using nixpkgs's gcc, instead of bootstrap-tools'. svn path=/nixpkgs/branches/stdenv-updates/; revision=24296 --- pkgs/development/libraries/glibc-2.12/common.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 66c6b0eaf9ac..2951c631d85c 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -83,7 +83,9 @@ stdenv.mkDerivation ({ # nscd needs libgcc, and we don't want it dynamically linked # because we don't want it to depend on bootstrap-tools libs. - echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile + # It also needs -lssp when building with nixpkgs gcc (not of + # boostrap-tools) + echo "LDFLAGS-nscd += -static-libgcc -lssp" >> nscd/Makefile ''; configureFlags = [ From 9ed84bc4327227573e48ebdfe6214bfd09714d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 15 Oct 2010 17:56:01 +0000 Subject: [PATCH 235/282] Trying to fix the nscd ssp problem finally. http://sources.redhat.com/bugzilla/show_bug.cgi?id=12125 I also reported this upstream, as it seems broken since 2.11.1 svn path=/nixpkgs/branches/stdenv-updates/; revision=24305 --- pkgs/development/libraries/glibc-2.12/common.nix | 7 ++++--- .../libraries/glibc-2.12/nscd-ssp-linking.patch | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 2951c631d85c..4dd157ea95e5 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -74,6 +74,9 @@ stdenv.mkDerivation ({ /* Allow nixos and nix handle the locale-archive. */ ./nix-locale-archive.patch + + /* Allow nixos and nix handle the locale-archive. */ + ./nscd-ssp-linking.patch ]; postPatch = '' @@ -83,9 +86,7 @@ stdenv.mkDerivation ({ # nscd needs libgcc, and we don't want it dynamically linked # because we don't want it to depend on bootstrap-tools libs. - # It also needs -lssp when building with nixpkgs gcc (not of - # boostrap-tools) - echo "LDFLAGS-nscd += -static-libgcc -lssp" >> nscd/Makefile + echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile ''; configureFlags = [ diff --git a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch new file mode 100644 index 000000000000..764103173bbf --- /dev/null +++ b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch @@ -0,0 +1,16 @@ +http://sources.redhat.com/bugzilla/show_bug.cgi?id=12125 + +diff --git a/nscd/Makefile b/nscd/Makefile +index 93874e5..63f7144 100644 +--- a/nscd/Makefile ++++ b/nscd/Makefile +@@ -90,6 +90,9 @@ CFLAGS-nscd_initgroups.c = -fexceptions + nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 + ifeq (yesyes,$(have-fpie)$(build-shared)) + nscd-cflags += $(pie-ccflag) ++ifeq (yes,$(have-ssp)) ++LDFLAGS-nscd += -lssp_noshared -lssp ++endif + endif + ifeq (yes,$(have-ssp)) + nscd-cflags += -fstack-protector From 6b35b69a287d79e7844bd53e725f632d0dae6def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 15 Oct 2010 18:00:12 +0000 Subject: [PATCH 236/282] Workaround to overcome the glibc/gcc bug: http://sources.redhat.com/bugzilla/show_bug.cgi?id=12123 I also fixed a wrong comment I had committed in the previous commit. svn path=/nixpkgs/branches/stdenv-updates/; revision=24306 --- pkgs/development/libraries/glibc-2.12/common.nix | 5 ++++- .../glibc-2.12/disable-strstr-sse42.patch | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 4dd157ea95e5..dfffafe6edd9 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -75,8 +75,11 @@ stdenv.mkDerivation ({ /* Allow nixos and nix handle the locale-archive. */ ./nix-locale-archive.patch - /* Allow nixos and nix handle the locale-archive. */ + /* A fix for a glibc nscd linking bug, reported upstream already.*/ ./nscd-ssp-linking.patch + + /* Workaround for a glibc bug reported upstraem already */ + ./disable-strstr-sse42.patch ]; postPatch = '' diff --git a/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch b/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch new file mode 100644 index 000000000000..0c473305039e --- /dev/null +++ b/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch @@ -0,0 +1,14 @@ +Workaround for http://sources.redhat.com/bugzilla/show_bug.cgi?id=12123 + +diff --git a/sysdeps/i386/i686/multiarch/strstr-c.c b/sysdeps/i386/i686/multiarch/strstr-c.c +index efa9f78..cd34a88 100644 +--- a/sysdeps/i386/i686/multiarch/strstr-c.c ++++ b/sysdeps/i386/i686/multiarch/strstr-c.c +@@ -10,4 +10,6 @@ + extern char *__strstr_sse42 (const char *, const char *) attribute_hidden; + extern __typeof (__strstr_ia32) __strstr_ia32 attribute_hidden; + +-libc_ifunc (strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_ia32); ++// Disabled any sse42, due to a bug: ++// http://sources.redhat.com/bugzilla/show_bug.cgi?id=12123 ++libc_ifunc (strstr, __strstr_ia32); From d5f6182edc8ae8285193dec2267beaffec573b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 15 Oct 2010 20:06:55 +0000 Subject: [PATCH 237/282] I made one of the glibc patches wrong (typo). I fix it. svn path=/nixpkgs/branches/stdenv-updates/; revision=24309 --- pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch index 764103173bbf..84d1064f6acc 100644 --- a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch +++ b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch @@ -9,7 +9,7 @@ index 93874e5..63f7144 100644 ifeq (yesyes,$(have-fpie)$(build-shared)) nscd-cflags += $(pie-ccflag) +ifeq (yes,$(have-ssp)) -+LDFLAGS-nscd += -lssp_noshared -lssp ++LDFLAGS-nscd += -lssp_nonshared -lssp +endif endif ifeq (yes,$(have-ssp)) From 955fe6f69d3cba0fd9e628190f51face166ceec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 15 Oct 2010 22:58:12 +0000 Subject: [PATCH 238/282] Fixing the nscd patch again. The other attempts did not give a working nscd. The build system was making a nscd dynamically linked with libssp, which we don't want in general. We want a glibc not depending on the gcc that built it. svn path=/nixpkgs/branches/stdenv-updates/; revision=24313 --- pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch index 84d1064f6acc..2e47cee348ed 100644 --- a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch +++ b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch @@ -9,7 +9,7 @@ index 93874e5..63f7144 100644 ifeq (yesyes,$(have-fpie)$(build-shared)) nscd-cflags += $(pie-ccflag) +ifeq (yes,$(have-ssp)) -+LDFLAGS-nscd += -lssp_nonshared -lssp ++link-extra-libs += -Wl,-Bstatic -lssp -Wl,-Bdynamic +endif endif ifeq (yes,$(have-ssp)) From 4309788df022c89765cd7f6b178f4ce7a08db600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 19 Oct 2010 21:20:00 +0000 Subject: [PATCH 239/282] Adding a comment on the status of the nscd patch in glibc svn path=/nixpkgs/branches/stdenv-updates/; revision=24371 --- pkgs/development/libraries/glibc-2.12/common.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index dfffafe6edd9..7157248c1d8c 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -76,6 +76,15 @@ stdenv.mkDerivation ({ ./nix-locale-archive.patch /* A fix for a glibc nscd linking bug, reported upstream already.*/ + /* Currently this fix works only for i686; as it only affects + the building of glibc from a final nixpkgs stdenv, we don't care much + on whether it works or not. The patch does not affect building + from the bootstrap-tools gcc because it does not have libssp at all. + TODO: Link ssp to nscd dynamically, and set the proper rpath to + nscd, although linking dynamically will make this libc + dynamically linked with gcc's libssp, and gcc's libssp is dynamically + linked with stdenv.glibc's libc. This does not look very correct. + */ ./nscd-ssp-linking.patch /* Workaround for a glibc bug reported upstraem already */ From f3da1c5e80efea42926e5161322f8e553a51d823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 25 Oct 2010 18:25:23 +0000 Subject: [PATCH 240/282] Adding a fix for an important glibc vulnerability, very easy to exploit: http://www.securityfocus.com/bid/44347 svn path=/nixpkgs/branches/stdenv-updates/; revision=24475 --- .../libraries/glibc-2.12/audit_suid.patch | 224 ++++++++++++++++++ .../libraries/glibc-2.12/common.nix | 3 + 2 files changed, 227 insertions(+) create mode 100644 pkgs/development/libraries/glibc-2.12/audit_suid.patch diff --git a/pkgs/development/libraries/glibc-2.12/audit_suid.patch b/pkgs/development/libraries/glibc-2.12/audit_suid.patch new file mode 100644 index 000000000000..74ec4b763dbb --- /dev/null +++ b/pkgs/development/libraries/glibc-2.12/audit_suid.patch @@ -0,0 +1,224 @@ +Fix for glibc vulnerability. +http://www.securityfocus.com/bid/44347 + +From: +http://repo.or.cz/w/glibc.git/patch/8e9f92e9d5d7737afdacf79b76d98c4c42980508 + +From 8e9f92e9d5d7737afdacf79b76d98c4c42980508 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Sun, 24 Oct 2010 21:43:15 -0400 +Subject: [PATCH] Require suid bit on audit objects in privileged programs + +--- + ChangeLog | 15 +++++++++++++++ + elf/dl-deps.c | 2 +- + elf/dl-load.c | 20 +++++++++++--------- + elf/dl-open.c | 2 +- + elf/rtld.c | 16 +++++++--------- + include/dlfcn.h | 1 + + sysdeps/generic/ldsodefs.h | 6 ++---- + 7 files changed, 38 insertions(+), 24 deletions(-) + +diff --git a/elf/dl-deps.c b/elf/dl-deps.c +index a58de5c..a51fb6e 100644 +--- a/elf/dl-deps.c ++++ b/elf/dl-deps.c +@@ -62,7 +62,7 @@ openaux (void *a) + { + struct openaux_args *args = (struct openaux_args *) a; + +- args->aux = _dl_map_object (args->map, args->name, 0, ++ args->aux = _dl_map_object (args->map, args->name, + (args->map->l_type == lt_executable + ? lt_library : args->map->l_type), + args->trace_mode, args->open_mode, +diff --git a/elf/dl-load.c b/elf/dl-load.c +index a7162eb..aa8738f 100644 +--- a/elf/dl-load.c ++++ b/elf/dl-load.c +@@ -1812,7 +1812,7 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader, + if MAY_FREE_DIRS is true. */ + + static int +-open_path (const char *name, size_t namelen, int preloaded, ++open_path (const char *name, size_t namelen, int secure, + struct r_search_path_struct *sps, char **realname, + struct filebuf *fbp, struct link_map *loader, int whatcode, + bool *found_other_class) +@@ -1894,7 +1894,7 @@ open_path (const char *name, size_t namelen, int preloaded, + /* Remember whether we found any existing directory. */ + here_any |= this_dir->status[cnt] != nonexisting; + +- if (fd != -1 && __builtin_expect (preloaded, 0) ++ if (fd != -1 && __builtin_expect (secure, 0) + && INTUSE(__libc_enable_secure)) + { + /* This is an extra security effort to make sure nobody can +@@ -1963,7 +1963,7 @@ open_path (const char *name, size_t namelen, int preloaded, + + struct link_map * + internal_function +-_dl_map_object (struct link_map *loader, const char *name, int preloaded, ++_dl_map_object (struct link_map *loader, const char *name, + int type, int trace_mode, int mode, Lmid_t nsid) + { + int fd; +@@ -2067,7 +2067,8 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, + for (l = loader; l; l = l->l_loader) + if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH")) + { +- fd = open_path (name, namelen, preloaded, &l->l_rpath_dirs, ++ fd = open_path (name, namelen, mode & __RTLD_SECURE, ++ &l->l_rpath_dirs, + &realname, &fb, loader, LA_SER_RUNPATH, + &found_other_class); + if (fd != -1) +@@ -2082,14 +2083,15 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, + && main_map != NULL && main_map->l_type != lt_loaded + && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH, + "RPATH")) +- fd = open_path (name, namelen, preloaded, &main_map->l_rpath_dirs, ++ fd = open_path (name, namelen, mode & __RTLD_SECURE, ++ &main_map->l_rpath_dirs, + &realname, &fb, loader ?: main_map, LA_SER_RUNPATH, + &found_other_class); + } + + /* Try the LD_LIBRARY_PATH environment variable. */ + if (fd == -1 && env_path_list.dirs != (void *) -1) +- fd = open_path (name, namelen, preloaded, &env_path_list, ++ fd = open_path (name, namelen, mode & __RTLD_SECURE, &env_path_list, + &realname, &fb, + loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded, + LA_SER_LIBPATH, &found_other_class); +@@ -2098,12 +2100,12 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, + if (fd == -1 && loader != NULL + && cache_rpath (loader, &loader->l_runpath_dirs, + DT_RUNPATH, "RUNPATH")) +- fd = open_path (name, namelen, preloaded, ++ fd = open_path (name, namelen, mode & __RTLD_SECURE, + &loader->l_runpath_dirs, &realname, &fb, loader, + LA_SER_RUNPATH, &found_other_class); + + if (fd == -1 +- && (__builtin_expect (! preloaded, 1) ++ && (__builtin_expect (! (mode & __RTLD_SECURE), 1) + || ! INTUSE(__libc_enable_secure))) + { + /* Check the list of libraries in the file /etc/ld.so.cache, +@@ -2169,7 +2171,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, + && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL + || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1)) + && rtld_search_dirs.dirs != (void *) -1) +- fd = open_path (name, namelen, preloaded, &rtld_search_dirs, ++ fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs, + &realname, &fb, l, LA_SER_DEFAULT, &found_other_class); + + /* Add another newline when we are tracing the library loading. */ +diff --git a/elf/dl-open.c b/elf/dl-open.c +index c394b3f..cf8e8cc 100644 +--- a/elf/dl-open.c ++++ b/elf/dl-open.c +@@ -223,7 +223,7 @@ dl_open_worker (void *a) + + /* Load the named object. */ + struct link_map *new; +- args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0, ++ args->map = new = _dl_map_object (call_map, file, lt_loaded, 0, + mode | __RTLD_CALLMAP, args->nsid); + + /* If the pointer returned is NULL this means the RTLD_NOLOAD flag is +diff --git a/elf/rtld.c b/elf/rtld.c +index 5ecc4fe..06b534a 100644 +--- a/elf/rtld.c ++++ b/elf/rtld.c +@@ -589,7 +589,6 @@ struct map_args + /* Argument to map_doit. */ + char *str; + struct link_map *loader; +- int is_preloaded; + int mode; + /* Return value of map_doit. */ + struct link_map *map; +@@ -627,16 +626,17 @@ static void + map_doit (void *a) + { + struct map_args *args = (struct map_args *) a; +- args->map = _dl_map_object (args->loader, args->str, +- args->is_preloaded, lt_library, 0, args->mode, +- LM_ID_BASE); ++ args->map = _dl_map_object (args->loader, args->str, lt_library, 0, ++ args->mode, LM_ID_BASE); + } + + static void + dlmopen_doit (void *a) + { + struct dlmopen_args *args = (struct dlmopen_args *) a; +- args->map = _dl_open (args->fname, RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT, ++ args->map = _dl_open (args->fname, ++ (RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT ++ | __RTLD_SECURE), + dl_main, LM_ID_NEWLM, _dl_argc, INTUSE(_dl_argv), + __environ); + } +@@ -806,8 +806,7 @@ do_preload (char *fname, struct link_map *main_map, const char *where) + + args.str = fname; + args.loader = main_map; +- args.is_preloaded = 1; +- args.mode = 0; ++ args.mode = __RTLD_SECURE; + + unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded; + +@@ -1054,7 +1053,6 @@ of this helper program; chances are you did not intend to run this program.\n\ + + args.str = rtld_progname; + args.loader = NULL; +- args.is_preloaded = 0; + args.mode = __RTLD_OPENEXEC; + (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, + &args); +@@ -1066,7 +1064,7 @@ of this helper program; chances are you did not intend to run this program.\n\ + else + { + HP_TIMING_NOW (start); +- _dl_map_object (NULL, rtld_progname, 0, lt_library, 0, ++ _dl_map_object (NULL, rtld_progname, lt_library, 0, + __RTLD_OPENEXEC, LM_ID_BASE); + HP_TIMING_NOW (stop); + +diff --git a/include/dlfcn.h b/include/dlfcn.h +index a67426d..af92483 100644 +--- a/include/dlfcn.h ++++ b/include/dlfcn.h +@@ -9,6 +9,7 @@ + #define __RTLD_OPENEXEC 0x20000000 + #define __RTLD_CALLMAP 0x10000000 + #define __RTLD_AUDIT 0x08000000 ++#define __RTLD_SECURE 0x04000000 /* Apply additional security checks. */ + + #define __LM_ID_CALLER -2 + +diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h +index fcc943b..fa4b6b2 100644 +--- a/sysdeps/generic/ldsodefs.h ++++ b/sysdeps/generic/ldsodefs.h +@@ -824,11 +824,9 @@ extern void _dl_receive_error (receiver_fct fct, void (*operate) (void *), + + /* Open the shared object NAME and map in its segments. + LOADER's DT_RPATH is used in searching for NAME. +- If the object is already opened, returns its existing map. +- For preloaded shared objects PRELOADED is set to a non-zero +- value to allow additional security checks. */ ++ If the object is already opened, returns its existing map. */ + extern struct link_map *_dl_map_object (struct link_map *loader, +- const char *name, int preloaded, ++ const char *name, + int type, int trace_mode, int mode, + Lmid_t nsid) + internal_function attribute_hidden; +-- +1.6.5.GIT + diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 7157248c1d8c..5b85cb61bf82 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -89,6 +89,9 @@ stdenv.mkDerivation ({ /* Workaround for a glibc bug reported upstraem already */ ./disable-strstr-sse42.patch + + /* Fix for a vulnerability */ + ./audit_suid.patch ]; postPatch = '' From a95eb06e26528dc9fb2222f9eee749404abd5f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 25 Oct 2010 21:13:05 +0000 Subject: [PATCH 241/282] Updating the patch for ocaml on mips. Reported by rixed@happyleptic.org svn path=/nixpkgs/branches/stdenv-updates/; revision=24476 --- pkgs/development/compilers/ocaml/3.11.1.nix | 2 +- pkgs/development/compilers/ocaml/mips64.patch | 176 +++++++++++------- 2 files changed, 107 insertions(+), 71 deletions(-) diff --git a/pkgs/development/compilers/ocaml/3.11.1.nix b/pkgs/development/compilers/ocaml/3.11.1.nix index 48265f9aa3d0..8acb2bede6bd 100644 --- a/pkgs/development/compilers/ocaml/3.11.1.nix +++ b/pkgs/development/compilers/ocaml/3.11.1.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation rec { prePatch = '' CAT=$(type -tp cat) sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang - patch -p1 -l < ${./mips64.patch} + patch -p0 < ${./mips64.patch} ''; postBuild = '' ensureDir $out/include diff --git a/pkgs/development/compilers/ocaml/mips64.patch b/pkgs/development/compilers/ocaml/mips64.patch index adfebe000d02..cdef9cafb932 100644 --- a/pkgs/development/compilers/ocaml/mips64.patch +++ b/pkgs/development/compilers/ocaml/mips64.patch @@ -1,8 +1,8 @@ -http://www.mail-archive.com/caml-list@yquem.inria.fr/msg04424.html +http://caml.inria.fr/mantis/view.php?id=4849 -diff -u -r ocaml-3.11.1/asmcomp/mips/arch.ml my_ocaml/asmcomp/mips/arch.ml ---- ocaml-3.11.1/asmcomp/mips/arch.ml 2002-11-29 16:03:36.000000000 +0100 -+++ my_ocaml/asmcomp/mips/arch.ml 2009-08-09 23:18:31.000000000 +0200 +diff -bur ocaml-3.11.1/asmcomp/mips/arch.ml my_ocaml/asmcomp/mips/arch.ml +--- asmcomp/mips/arch.ml 2002-11-29 16:03:36.000000000 +0100 ++++ asmcomp/mips/arch.ml 2009-08-09 23:18:31.000000000 +0200 @@ -35,7 +35,7 @@ let big_endian = @@ -12,110 +12,105 @@ diff -u -r ocaml-3.11.1/asmcomp/mips/arch.ml my_ocaml/asmcomp/mips/arch.ml | "irix" -> true | _ -> fatal_error "Arch_mips.big_endian" -diff -u -r ocaml-3.11.1/asmcomp/mips/emit.mlp my_ocaml/asmcomp/mips/emit.mlp ---- ocaml-3.11.1/asmcomp/mips/emit.mlp 2004-01-05 21:25:56.000000000 +0100 -+++ my_ocaml/asmcomp/mips/emit.mlp 2009-08-23 12:11:58.000000000 +0200 +diff -bur ocaml-3.11.1/asmcomp/mips/emit.mlp my_ocaml/asmcomp/mips/emit.mlp +--- asmcomp/mips/emit.mlp 2004-01-05 21:25:56.000000000 +0100 ++++ asmcomp/mips/emit.mlp 2009-08-23 12:11:58.000000000 +0200 +@@ -58,7 +58,7 @@ + !stack_offset + + 4 * num_stack_slots.(0) + 8 * num_stack_slots.(1) + + (if !contains_calls then if !uses_gp then 8 else 4 else 0) in +- Misc.align size 16 ++ Misc.align size 16 (* n32 require quadword alignment *) + + let slot_offset loc cl = + match loc with @@ -252,7 +252,7 @@ | Lop(Icall_ind) -> - ` move $25, {emit_reg i.arg.(0)}\n`; + ` move $25, {emit_reg i.arg.(0)}\n`; liveregs i live_25; -- ` jal {emit_reg i.arg.(0)}\n`; -+ ` jal $25\n`; (* {emit_reg i.arg.(0)}\n; Equivalent but avoids "Warning: MIPS PIC call to register other than $25" on GNU as *) +- ` jal {emit_reg i.arg.(0)}\n`; ++ ` jal $25\n`; (* {emit_reg i.arg.(0)}\n; Equivalent but avoids "Warning: MIPS PIC call to register other than $25" on GNU as *) `{record_frame i.live}\n` | Lop(Icall_imm s) -> liveregs i 0; @@ -269,7 +269,7 @@ liveregs i 0; - ` move $25, {emit_reg i.arg.(0)}\n`; + ` move $25, {emit_reg i.arg.(0)}\n`; liveregs i live_25; -- ` j {emit_reg i.arg.(0)}\n` -+ ` j $25\n` +- ` j {emit_reg i.arg.(0)}\n` ++ ` j $25\n` | Lop(Itailcall_imm s) -> if s = !function_name then begin - ` b {emit_label !tailrec_entry_point}\n` + ` b {emit_label !tailrec_entry_point}\n` @@ -277,11 +277,11 @@ let n = frame_size() in if !contains_calls then - ` lw $31, {emit_int(n - 4)}($sp)\n`; -+ ` la $25, {emit_symbol s}\n`; + ` lw $31, {emit_int(n - 4)}($sp)\n`; ++ ` la $25, {emit_symbol s}\n`; (* Rxd: put before gp restore *) if !uses_gp then - ` lw $gp, {emit_int(n - 8)}($sp)\n`; + ` lw $gp, {emit_int(n - 8)}($sp)\n`; if n > 0 then - ` addu $sp, $sp, {emit_int n}\n`; -- ` la $25, {emit_symbol s}\n`; + ` addu $sp, $sp, {emit_int n}\n`; +- ` la $25, {emit_symbol s}\n`; liveregs i live_25; - ` j $25\n` + ` j $25\n` end @@ -305,8 +305,13 @@ begin match chunk with Double_u -> (* Destination is not 8-aligned, hence cannot use l.d *) -- ` ldl $24, {emit_addressing addr i.arg 0}\n`; -- ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; + if big_endian then begin -+ ` ldl $24, {emit_addressing addr i.arg 0}\n`; -+ ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n` + ` ldl $24, {emit_addressing addr i.arg 0}\n`; +- ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; ++ ` ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n` + end else begin -+ ` ldl $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; -+ ` ldr $24, {emit_addressing addr i.arg 0}\n` ++ ` ldl $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`; ++ ` ldr $24, {emit_addressing addr i.arg 0}\n` + end; - ` dmtc1 $24, {emit_reg dest}\n` + ` dmtc1 $24, {emit_reg dest}\n` | Single -> - ` l.s {emit_reg dest}, {emit_addressing addr i.arg 0}\n`; + ` l.s {emit_reg dest}, {emit_addressing addr i.arg 0}\n`; @@ -328,8 +333,13 @@ Double_u -> (* Destination is not 8-aligned, hence cannot use l.d *) - ` dmfc1 $24, {emit_reg src}\n`; -- ` sdl $24, {emit_addressing addr i.arg 1}\n`; -- ` sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n` + ` dmfc1 $24, {emit_reg src}\n`; + if big_endian then begin -+ ` sdl $24, {emit_addressing addr i.arg 1}\n`; -+ ` sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n` + ` sdl $24, {emit_addressing addr i.arg 1}\n`; + ` sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n` + end else begin -+ ` sdl $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`; -+ ` sdr $24, {emit_addressing addr i.arg 1}\n` ++ ` sdl $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`; ++ ` sdr $24, {emit_addressing addr i.arg 1}\n` + end | Single -> - ` cvt.s.d $f31, {emit_reg src}\n`; - ` s.s $f31, {emit_addressing addr i.arg 1}\n` -@@ -552,16 +562,18 @@ + ` cvt.s.d $f31, {emit_reg src}\n`; + ` s.s $f31, {emit_addressing addr i.arg 1}\n` +@@ -552,6 +562,7 @@ (* There are really two groups of registers: $sp and $30 always point to stack locations $2 - $21 never point to stack locations. *) -- ` .noalias $2,$sp; .noalias $2,$30; .noalias $3,$sp; .noalias $3,$30\n`; -- ` .noalias $4,$sp; .noalias $4,$30; .noalias $5,$sp; .noalias $5,$30\n`; -- ` .noalias $6,$sp; .noalias $6,$30; .noalias $7,$sp; .noalias $7,$30\n`; -- ` .noalias $8,$sp; .noalias $8,$30; .noalias $9,$sp; .noalias $9,$30\n`; -- ` .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`; -- ` .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`; -- ` .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`; -- ` .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`; -- ` .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`; -- ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n`; + if Config.system = "irix" then begin -+ ` .noalias $2,$sp; .noalias $2,$30; .noalias $3,$sp; .noalias $3,$30\n`; -+ ` .noalias $4,$sp; .noalias $4,$30; .noalias $5,$sp; .noalias $5,$30\n`; -+ ` .noalias $6,$sp; .noalias $6,$30; .noalias $7,$sp; .noalias $7,$30\n`; -+ ` .noalias $8,$sp; .noalias $8,$30; .noalias $9,$sp; .noalias $9,$30\n`; -+ ` .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`; -+ ` .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`; -+ ` .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`; -+ ` .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`; -+ ` .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`; -+ ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n` + ` .noalias $2,$sp; .noalias $2,$30; .noalias $3,$sp; .noalias $3,$30\n`; + ` .noalias $4,$sp; .noalias $4,$30; .noalias $5,$sp; .noalias $5,$30\n`; + ` .noalias $6,$sp; .noalias $6,$30; .noalias $7,$sp; .noalias $7,$30\n`; +@@ -561,7 +572,8 @@ + ` .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`; + ` .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`; + ` .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`; +- ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n`; ++ ` .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n` + end; let lbl_begin = Compilenv.make_symbol (Some "data_begin") in - ` .data\n`; - ` .globl {emit_symbol lbl_begin}\n`; -diff -u -r ocaml-3.11.1/asmrun/mips.s my_ocaml/asmrun/mips.s ---- ocaml-3.11.1/asmrun/mips.s 2004-07-13 14:18:53.000000000 +0200 -+++ my_ocaml/asmrun/mips.s 2009-08-20 09:34:36.000000000 +0200 + ` .data\n`; + ` .globl {emit_symbol lbl_begin}\n`; +diff -bur ocaml-3.11.1/asmrun/mips.s my_ocaml/asmrun/mips.s +--- asmrun/mips.s 2004-07-13 14:18:53.000000000 +0200 ++++ asmrun/mips.s 2009-08-20 09:34:36.000000000 +0200 @@ -187,7 +187,7 @@ sw $30, caml_exception_pointer /* Call C function */ move $25, $24 - jal $24 -+ jal $25 ++ jal $25 /* Rxd: $24 replaced by $25 to avoid this "Warning: MIPS PIC call to register other than $25" ? */ /* Reload return address, alloc ptr, alloc limit */ lw $31, 0($16) /* caml_last_return_address */ lw $22, 0($17) /* caml_young_ptr */ @@ -124,13 +119,22 @@ diff -u -r ocaml-3.11.1/asmrun/mips.s my_ocaml/asmrun/mips.s /* Call the Caml code */ move $25, $24 - jal $24 -+ jal $25 ++ jal $25 /* Rxd: 24 replaced by 25 */ $104: /* Pop the trap frame, restoring caml_exception_pointer */ lw $24, 0($sp) -diff -u -r ocaml-3.11.1/configure my_ocaml/configure ---- ocaml-3.11.1/configure 2009-05-20 17:33:09.000000000 +0200 -+++ my_ocaml/configure 2009-08-23 10:55:44.000000000 +0200 +@@ -384,3 +384,8 @@ + .word $104 /* return address into callback */ + .half -1 /* negative frame size => use callback link */ + .half 0 /* no roots here */ ++ ++#if defined(SYS_linux) ++ /* Mark stack as non-executable, PR#4564 */ ++ .section .note.GNU-stack,"",%progbits ++#endif +diff -bur ocaml-3.11.1/configure my_ocaml/configure +--- configure 2009-05-20 17:33:09.000000000 +0200 ++++ configure 2009-08-23 10:55:44.000000000 +0200 @@ -40,7 +40,7 @@ verbose=no withcurses=yes @@ -155,7 +159,7 @@ diff -u -r ocaml-3.11.1/configure my_ocaml/configure echo "#define ARCH_ALIGN_INT64" >> m.h fi;; + mips64el-*) -+ echo "#define ARCH_ALIGN_INT64" >> m.h;; ++ echo "#define ARCH_ALIGN_INT64" >> m.h;; *) sh ./runtest int64align.c case $? in @@ -191,7 +195,7 @@ diff -u -r ocaml-3.11.1/configure my_ocaml/configure mips,*,irix) as='as -n32 -O2 -nocpp -g0' aspp='as -n32 -O2';; + mips,*,gnu) as='as -KPIC' -+ aspp='gcc -c -fPIC';; # got bus error without fPIC ? ++ aspp='gcc -c -fPIC';; # got bus error without fPIC ? power,*,elf) as='as -u -m ppc' aspp='gcc -c';; power,*,bsd) as='as' @@ -202,3 +206,35 @@ diff -u -r ocaml-3.11.1/configure my_ocaml/configure + mips,*,gnu) profiling='prof';; *) profiling='noprof';; esac + +diff -bur ocaml-3.11.1/asmcomp/mips/proc.ml my_ocaml/asmcomp/mips/proc.ml +--- asmcomp/mips/proc.ml 2007-10-30 13:37:16.000000000 +0100 ++++ asmcomp/mips/proc.ml 2010-03-18 08:08:06.000000000 +0100 +@@ -114,7 +114,7 @@ + incr int + end else begin + loc.(i) <- stack_slot (make_stack !ofs) ty; +- ofs := !ofs + size_int ++ ofs := !ofs + 8 + end + | Float -> + if !float <= last_float then begin +@@ -143,7 +143,7 @@ + or float regs $f12...$f19. Each argument "consumes" both one slot + in the int register file and one slot in the float register file. + Extra arguments are passed on stack, in a 64-bits slot, right-justified +- (i.e. at +4 from natural address). *) ++ (i.e. at +4 from natural address for big endians). *) + + let loc_external_arguments arg = + let loc = Array.create (Array.length arg) Reg.dummy in +@@ -158,7 +158,7 @@ + end else begin + begin match arg.(i).typ with + Float -> loc.(i) <- stack_slot (Outgoing !ofs) Float +- | ty -> loc.(i) <- stack_slot (Outgoing (!ofs + 4)) ty ++ | ty -> loc.(i) <- stack_slot (Outgoing (!ofs + (if big_endian then 4 else 0))) ty + end; + ofs := !ofs + 8 + end + From a38202bc8b81c6b1fab62bd07727af28e27b4433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 26 Oct 2010 08:33:18 +0000 Subject: [PATCH 242/282] Updating xz to a stable version. Not beta anymore. (more stdenv rebuild) svn path=/nixpkgs/branches/stdenv-updates/; revision=24483 --- pkgs/tools/compression/xz/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/compression/xz/default.nix b/pkgs/tools/compression/xz/default.nix index 2285d91e0399..b6aa8e96013f 100644 --- a/pkgs/tools/compression/xz/default.nix +++ b/pkgs/tools/compression/xz/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, lib}: stdenv.mkDerivation ({ - name = "xz-4.999.9beta"; + name = "xz-5.0.0"; src = fetchurl { - url = http://tukaani.org/xz/xz-4.999.9beta.tar.bz2; - sha256 = "0p51d9jng9vfh56idhjbc40n3ypapznwfb1npsvxh23n772140rk"; + url = http://tukaani.org/xz/xz-5.0.0.tar.bz2; + sha256 = "1n2nc00d83di0jl5d9qwpngkmlk3wqhs4w9q2ah680v9qijrxa27"; }; meta = { From b9da5de4daccede740289e44b37b81c06fd7a46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 26 Oct 2010 08:33:34 +0000 Subject: [PATCH 243/282] Updating gnu tar svn path=/nixpkgs/branches/stdenv-updates/; revision=24484 --- pkgs/tools/archivers/gnutar/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix index a74b60d95174..eed4a14af6e2 100644 --- a/pkgs/tools/archivers/gnutar/default.nix +++ b/pkgs/tools/archivers/gnutar/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation rec { - name = "gnutar-1.23"; + name = "gnutar-1.24"; src = fetchurl { - url = "mirror://gnu/tar/tar-1.23.tar.bz2"; - sha256 = "0dmyxsh0171m6nv8aw74dps1l4b1r7pkqkly9kcv3yv2vdr86cn9"; + url = "mirror://gnu/tar/tar-1.24.tar.bz2"; + sha256 = "1vddwgpdic4b88819bhg5jk4sj7cp1x1hxx9rqsg0s4gfmjy1ihp"; }; meta = { From 2b34bdd2baef495318e48cadcd445f81fcc81f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 26 Oct 2010 18:56:02 +0000 Subject: [PATCH 244/282] Two fixes in one: - our gcc should not bring libssp, because glibc provides __stack_chk_fail already. libssp is only for some non-glibc systems. The gcc configure script was not finding the header files of our glibc, so it assumed it did not provide __stack_chk_fail. I wrote code in the builder that patches the gcc/configure script properly for that. As a consequence, the glibc does not need anymore the "nscd-ssp-linking" patch, and we have a saner gcc (without libssp when using -fstack-protector) - Instead of disabling the sse42 strstr() implementation in glibc due to the bug http://sourceware.org/bugzilla/show_bug.cgi?id=12123, I provide a better patch written after more reserach (that I submitted upstream already, and it's pending review). svn path=/nixpkgs/branches/stdenv-updates/; revision=24493 --- pkgs/development/compilers/gcc-4.5/builder.sh | 8 ++++++++ .../libraries/glibc-2.12/common.nix | 18 +++--------------- .../glibc-2.12/disable-strstr-sse42.patch | 14 -------------- .../libraries/glibc-2.12/libpthread_init.patch | 15 +++++++++++++++ .../glibc-2.12/nscd-ssp-linking.patch | 16 ---------------- 5 files changed, 26 insertions(+), 45 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch create mode 100644 pkgs/development/libraries/glibc-2.12/libpthread_init.patch delete mode 100644 pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch diff --git a/pkgs/development/compilers/gcc-4.5/builder.sh b/pkgs/development/compilers/gcc-4.5/builder.sh index 5d66cc09532e..aedd5b46b121 100644 --- a/pkgs/development/compilers/gcc-4.5/builder.sh +++ b/pkgs/development/compilers/gcc-4.5/builder.sh @@ -159,6 +159,14 @@ preConfigure() { rm -Rf zlib fi + # Patch the configure script so it finds glibc headers + # It's important for example in order not to get libssp built, because it's + # 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, \ + gcc/configure + if test -n "$crossMingw" -a -n "$crossStageStatic"; then mkdir -p ../mingw # --with-build-sysroot expects that: diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 5b85cb61bf82..164929b5fcb0 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -75,22 +75,10 @@ stdenv.mkDerivation ({ /* Allow nixos and nix handle the locale-archive. */ ./nix-locale-archive.patch - /* A fix for a glibc nscd linking bug, reported upstream already.*/ - /* Currently this fix works only for i686; as it only affects - the building of glibc from a final nixpkgs stdenv, we don't care much - on whether it works or not. The patch does not affect building - from the bootstrap-tools gcc because it does not have libssp at all. - TODO: Link ssp to nscd dynamically, and set the proper rpath to - nscd, although linking dynamically will make this libc - dynamically linked with gcc's libssp, and gcc's libssp is dynamically - linked with stdenv.glibc's libc. This does not look very correct. - */ - ./nscd-ssp-linking.patch + /* Patch already sent upstream against a segafult on libpthread load */ + ./libpthread_init.patch - /* Workaround for a glibc bug reported upstraem already */ - ./disable-strstr-sse42.patch - - /* Fix for a vulnerability */ + /* Fix for a vulnerability, taken from upstream */ ./audit_suid.patch ]; diff --git a/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch b/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch deleted file mode 100644 index 0c473305039e..000000000000 --- a/pkgs/development/libraries/glibc-2.12/disable-strstr-sse42.patch +++ /dev/null @@ -1,14 +0,0 @@ -Workaround for http://sources.redhat.com/bugzilla/show_bug.cgi?id=12123 - -diff --git a/sysdeps/i386/i686/multiarch/strstr-c.c b/sysdeps/i386/i686/multiarch/strstr-c.c -index efa9f78..cd34a88 100644 ---- a/sysdeps/i386/i686/multiarch/strstr-c.c -+++ b/sysdeps/i386/i686/multiarch/strstr-c.c -@@ -10,4 +10,6 @@ - extern char *__strstr_sse42 (const char *, const char *) attribute_hidden; - extern __typeof (__strstr_ia32) __strstr_ia32 attribute_hidden; - --libc_ifunc (strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_ia32); -+// Disabled any sse42, due to a bug: -+// http://sources.redhat.com/bugzilla/show_bug.cgi?id=12123 -+libc_ifunc (strstr, __strstr_ia32); diff --git a/pkgs/development/libraries/glibc-2.12/libpthread_init.patch b/pkgs/development/libraries/glibc-2.12/libpthread_init.patch new file mode 100644 index 000000000000..9ce2e6f846eb --- /dev/null +++ b/pkgs/development/libraries/glibc-2.12/libpthread_init.patch @@ -0,0 +1,15 @@ +http://sourceware.org/bugzilla/show_bug.cgi?id=12123 + +diff --git a/nptl/sysdeps/i386/Makefile b/nptl/sysdeps/i386/Makefile +index 2f0d88f..3d9d223 100644 +--- a/nptl/sysdeps/i386/Makefile ++++ b/nptl/sysdeps/i386/Makefile +@@ -21,6 +21,8 @@ gen-as-const-headers += tcb-offsets.sym + endif + + ifeq ($(subdir),nptl) ++CFLAGS-nptl-init.c += -mpreferred-stack-boundary=4 ++CFLAGS-pt-initfini.c += -mpreferred-stack-boundary=4 + CFLAGS-pthread_create.c += -mpreferred-stack-boundary=4 + CFLAGS-tst-align.c += -mpreferred-stack-boundary=4 + CFLAGS-tst-align2.c += -mpreferred-stack-boundary=4 diff --git a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch b/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch deleted file mode 100644 index 2e47cee348ed..000000000000 --- a/pkgs/development/libraries/glibc-2.12/nscd-ssp-linking.patch +++ /dev/null @@ -1,16 +0,0 @@ -http://sources.redhat.com/bugzilla/show_bug.cgi?id=12125 - -diff --git a/nscd/Makefile b/nscd/Makefile -index 93874e5..63f7144 100644 ---- a/nscd/Makefile -+++ b/nscd/Makefile -@@ -90,6 +90,9 @@ CFLAGS-nscd_initgroups.c = -fexceptions - nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 - ifeq (yesyes,$(have-fpie)$(build-shared)) - nscd-cflags += $(pie-ccflag) -+ifeq (yes,$(have-ssp)) -+link-extra-libs += -Wl,-Bstatic -lssp -Wl,-Bdynamic -+endif - endif - ifeq (yes,$(have-ssp)) - nscd-cflags += -fstack-protector From f823e5c4ef57aed2683c9e6fbd9517125f32f515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 26 Oct 2010 21:08:35 +0000 Subject: [PATCH 245/282] Removing some lines I committed by accident svn path=/nixpkgs/branches/stdenv-updates/; revision=24501 --- pkgs/top-level/all-packages.nix | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fc2219f4ad51..842850f30d7b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2881,14 +2881,6 @@ let gccCross = null; }; - glibc212x = callPackage ../development/libraries/x { - kernelHeaders = linuxHeaders; - installLocales = getPkgConfig "glibc" "locales" false; - machHeaders = null; - hurdHeaders = null; - gccCross = null; - }; - glibc212Cross = forceBuildDrv (makeOverridable (import ../development/libraries/glibc-2.12) (let crossGNU = (crossSystem != null && crossSystem.config == "i586-pc-gnu"); in ({ From acd1e6ee3a22315243597bb6bf9a1a43bb7856f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 28 Oct 2010 23:04:34 +0000 Subject: [PATCH 246/282] Removing a patch for glibc that I thought was needed for i686-linux. Building with gcc 4.4 as minimum was needed, and not this patch. http://sourceware.org/bugzilla/show_bug.cgi?id=12123 I uploaded new i686-linux bootstrap-tools with gcc 4.5.1, but I'll not update the i686 reference to those bootstrap-tools until they are reachable by http. The bootstrap-tools we used until now had gcc 4.3, said not to be able to build glibc 2.12.1. Meanwhile other platforms can go on building this glibc already without the patch. svn path=/nixpkgs/branches/stdenv-updates/; revision=24522 --- pkgs/development/libraries/glibc-2.12/common.nix | 3 --- .../libraries/glibc-2.12/libpthread_init.patch | 15 --------------- 2 files changed, 18 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.12/libpthread_init.patch diff --git a/pkgs/development/libraries/glibc-2.12/common.nix b/pkgs/development/libraries/glibc-2.12/common.nix index 164929b5fcb0..1351df29f573 100644 --- a/pkgs/development/libraries/glibc-2.12/common.nix +++ b/pkgs/development/libraries/glibc-2.12/common.nix @@ -75,9 +75,6 @@ stdenv.mkDerivation ({ /* Allow nixos and nix handle the locale-archive. */ ./nix-locale-archive.patch - /* Patch already sent upstream against a segafult on libpthread load */ - ./libpthread_init.patch - /* Fix for a vulnerability, taken from upstream */ ./audit_suid.patch ]; diff --git a/pkgs/development/libraries/glibc-2.12/libpthread_init.patch b/pkgs/development/libraries/glibc-2.12/libpthread_init.patch deleted file mode 100644 index 9ce2e6f846eb..000000000000 --- a/pkgs/development/libraries/glibc-2.12/libpthread_init.patch +++ /dev/null @@ -1,15 +0,0 @@ -http://sourceware.org/bugzilla/show_bug.cgi?id=12123 - -diff --git a/nptl/sysdeps/i386/Makefile b/nptl/sysdeps/i386/Makefile -index 2f0d88f..3d9d223 100644 ---- a/nptl/sysdeps/i386/Makefile -+++ b/nptl/sysdeps/i386/Makefile -@@ -21,6 +21,8 @@ gen-as-const-headers += tcb-offsets.sym - endif - - ifeq ($(subdir),nptl) -+CFLAGS-nptl-init.c += -mpreferred-stack-boundary=4 -+CFLAGS-pt-initfini.c += -mpreferred-stack-boundary=4 - CFLAGS-pthread_create.c += -mpreferred-stack-boundary=4 - CFLAGS-tst-align.c += -mpreferred-stack-boundary=4 - CFLAGS-tst-align2.c += -mpreferred-stack-boundary=4 From 0eb331fdc98013676bed6382a847248b244ed8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 29 Oct 2010 12:41:50 +0000 Subject: [PATCH 247/282] Updating the reference to the i686-linux bootstrap-tools, so it takes the newest I uploaded yesterday. These have gcc 4.5.1, that fulfills the glibc 2.12.1 requirement of having a compiler equal or greater to gcc 4.4 to build proper x86 32-bit code (http://sourceware.org/bugzilla/show_bug.cgi?id=12123) svn path=/nixpkgs/branches/stdenv-updates/; revision=24523 --- pkgs/stdenv/linux/bootstrap/i686/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/stdenv/linux/bootstrap/i686/default.nix b/pkgs/stdenv/linux/bootstrap/i686/default.nix index f83fa44360d9..1d709766bfdc 100644 --- a/pkgs/stdenv/linux/bootstrap/i686/default.nix +++ b/pkgs/stdenv/linux/bootstrap/i686/default.nix @@ -7,7 +7,7 @@ curl = ./curl.bz2; bootstrapTools = { - url = http://nixos.org/tarballs/stdenv-linux/i686/r16022/bootstrap-tools.cpio.bz2; - sha256 = "1x014icv3dxfs55qzshxjs9gaczmhwlrn144p4314zvl4xz6wq3f"; + url = http://nixos.org/tarballs/stdenv-linux/i686/r24519/bootstrap-tools.cpio.bz2; + sha256 = "0imypaxy6piwbk8ff2y1nr7yk49pqmdgdbv6g8miq1zs5yfip6ij"; }; } From 7f6469fd442894159d4ad41139cd775954064605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 7 Nov 2010 21:17:23 +0000 Subject: [PATCH 248/282] Enabling x11Support in SDL. I think I had committed in error the x11Support = false at some point. svn path=/nixpkgs/branches/stdenv-updates/; revision=24613 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 13d9f573e15f..f17278a3c5ae 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3815,7 +3815,7 @@ let SDL = callPackage ../development/libraries/SDL { openglSupport = false; #mesaSupported; alsaSupport = true; - x11Support = false; + x11Support = true; pulseaudioSupport = false; # better go through ALSA }; From 6e1659b7d152f5aff51cc2aa687cea27710227c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sun, 7 Nov 2010 21:55:01 +0000 Subject: [PATCH 249/282] I also had forgot to enable opengl support in SDL. svn path=/nixpkgs/branches/stdenv-updates/; revision=24616 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f17278a3c5ae..07a2f210fa33 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3813,7 +3813,7 @@ let schroedinger = callPackage ../development/libraries/schroedinger { }; SDL = callPackage ../development/libraries/SDL { - openglSupport = false; #mesaSupported; + openglSupport = mesaSupported; alsaSupport = true; x11Support = true; pulseaudioSupport = false; # better go through ALSA From 162a4a6e6c3a9bf31f195356a7a783813e5ce045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 8 Nov 2010 22:40:05 +0000 Subject: [PATCH 250/282] The way how to build util-linux-ng for 'mount' to work on nixos changed. I make it work so it finds mount.nfs and similar tools in nixos, and now it may even work in non-nixos, as it is going to try /sbin after /var/run/current-system/sw/sbin. svn path=/nixpkgs/branches/stdenv-updates/; revision=24621 --- .../os-specific/linux/util-linux-ng/default.nix | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/pkgs/os-specific/linux/util-linux-ng/default.nix b/pkgs/os-specific/linux/util-linux-ng/default.nix index 60ffeb707376..2ae172c6c190 100644 --- a/pkgs/os-specific/linux/util-linux-ng/default.nix +++ b/pkgs/os-specific/linux/util-linux-ng/default.nix @@ -8,21 +8,16 @@ stdenv.mkDerivation rec { sha256 = "1k1in1ba9kvh0kplri9765wh0yk68qrkk1a55dqsm21qfryc1idq"; }; - configureFlags = '' - --disable-use-tty-group - --enable-write - ${if ncurses == null then "--without-ncurses" else ""} - ''; - - buildInputs = stdenv.lib.optional (ncurses != null) ncurses; - # !!! It would be better to obtain the path to the mount helpers # (/sbin/mount.*) through an environment variable, but that's # somewhat risky because we have to consider that mount can setuid # root... - preConfigure = '' - substituteInPlace mount/mount.c --replace /sbin/mount. /var/run/current-system/sw/sbin/mount. - substituteInPlace mount/umount.c --replace /sbin/umount. /var/run/current-system/sw/sbin/umount. + configureFlags = '' + --disable-use-tty-group + --enable-write + --enable-fs-paths-default=/var/run/current-system/sw/sbin:/sbin + ${if ncurses == null then "--without-ncurses" else ""} ''; + buildInputs = stdenv.lib.optional (ncurses != null) ncurses; } From 7ecc652da4fde15b9063f855eb551231f97dff2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 Nov 2010 09:14:07 +0000 Subject: [PATCH 251/282] Re-add GNU Make 3.81. svn path=/nixpkgs/branches/stdenv-updates/; revision=24623 --- .../tools/build-managers/gnumake/3.81.nix | 46 +++++++ .../build-managers/gnumake/log-3.81.patch | 125 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 3 files changed, 172 insertions(+) create mode 100644 pkgs/development/tools/build-managers/gnumake/3.81.nix create mode 100644 pkgs/development/tools/build-managers/gnumake/log-3.81.patch diff --git a/pkgs/development/tools/build-managers/gnumake/3.81.nix b/pkgs/development/tools/build-managers/gnumake/3.81.nix new file mode 100644 index 000000000000..d28198821e3b --- /dev/null +++ b/pkgs/development/tools/build-managers/gnumake/3.81.nix @@ -0,0 +1,46 @@ +{stdenv, fetchurl}: + +let version = "3.81"; in +stdenv.mkDerivation { + name = "gnumake-${version}"; + + src = fetchurl { + url = "mirror://gnu/make/make-${version}.tar.bz2"; + md5 = "354853e0b2da90c527e35aabb8d6f1e6"; + }; + + doCheck = true; + + patches = + [ + # Provide nested log output for subsequent pretty-printing by + # nix-log2xml. + ./log-3.81.patch + + # Purity: don't look for library dependencies (of the form + # `-lfoo') in /lib and /usr/lib. It's a stupid feature anyway. + # Likewise, when searching for included Makefiles, don't look in + # /usr/include and friends. + ./impure-dirs.patch + ]; + + meta = { + description = "GNU Make, a program controlling the generation of non-source files from sources"; + + longDescription = + '' Make is a tool which controls the generation of executables and + other non-source files of a program from the program's source files. + + Make gets its knowledge of how to build your program from a file + called the makefile, which lists each of the non-source files and + how to compute it from other files. When you write a program, you + should write a makefile for it, so that it is possible to use Make + to build and install the program. + ''; + + homepage = http://www.gnu.org/software/make/; + + license = "GPLv2+"; + maintainers = [ stdenv.lib.maintainers.ludo ]; + }; +} diff --git a/pkgs/development/tools/build-managers/gnumake/log-3.81.patch b/pkgs/development/tools/build-managers/gnumake/log-3.81.patch new file mode 100644 index 000000000000..0f3ed6d7299b --- /dev/null +++ b/pkgs/development/tools/build-managers/gnumake/log-3.81.patch @@ -0,0 +1,125 @@ +diff -rc make-3.81-orig/job.c make-3.81/job.c +*** make-3.81-orig/job.c 2006-03-20 04:03:04.000000000 +0100 +--- make-3.81/job.c 2009-01-19 19:37:28.000000000 +0100 +*************** +*** 1083,1089 **** + appear. */ + + message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag)) +! ? "%s" : (char *) 0, p); + + /* Tell update_goal_chain that a command has been started on behalf of + this target. It is important that this happens here and not in +--- 1083,1089 ---- + appear. */ + + message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag)) +! ? (enable_nested_output ? "\e[3s\e[a%s\e[b" : "%s") : (char *) 0, p); + + /* Tell update_goal_chain that a command has been started on behalf of + this target. It is important that this happens here and not in +diff -rc make-3.81-orig/main.c make-3.81/main.c +*** make-3.81-orig/main.c 2006-03-20 03:36:37.000000000 +0100 +--- make-3.81/main.c 2009-01-19 19:41:41.000000000 +0100 +*************** +*** 886,891 **** +--- 886,900 ---- + } + + ++ static void close_nesting() ++ { ++ while (stdout_nesting_level--) ++ printf("\e[q"); ++ while (stderr_nesting_level--) ++ fprintf(stderr, "\e[q"); ++ } ++ ++ + #ifdef _AMIGA + int + main (int argc, char **argv) +*************** +*** 931,936 **** +--- 940,950 ---- + atexit (close_stdout); + #endif + ++ atexit(close_nesting); ++ ++ if (getenv("NIX_INDENT_MAKE")) ++ enable_nested_output = 1; ++ + /* Needed for OS/2 */ + initialize_main(&argc, &argv); + +*************** +*** 3095,3100 **** +--- 3109,3120 ---- + + /* Use entire sentences to give the translators a fighting chance. */ + ++ if (entering && enable_nested_output) ++ { ++ printf("\e[p"); ++ stdout_nesting_level++; ++ } ++ + if (makelevel == 0) + if (starting_directory == 0) + if (entering) +*************** +*** 3124,3129 **** +--- 3144,3159 ---- + printf (_("%s[%u]: Leaving directory `%s'\n"), + program, makelevel, starting_directory); + ++ if (!entering && enable_nested_output) ++ { ++ printf("\e[q"); ++ stdout_nesting_level--; ++ } ++ + /* Flush stdout to be sure this comes before any stderr output. */ + fflush (stdout); + } ++ ++ int enable_nested_output = 0; ++ int stdout_nesting_level = 0; ++ int stderr_nesting_level = 0; +diff -rc make-3.81-orig/make.h make-3.81/make.h +*** make-3.81-orig/make.h 2006-02-16 00:54:43.000000000 +0100 +--- make-3.81/make.h 2009-01-19 19:32:03.000000000 +0100 +*************** +*** 609,611 **** +--- 609,614 ---- + #define ENULLLOOP(_v,_c) do{ errno = 0; \ + while (((_v)=_c)==0 && errno==EINTR); }while(0) + ++ extern int enable_nested_output; ++ extern int stdout_nesting_level; ++ extern int stderr_nesting_level; +diff -rc make-3.81-orig/remake.c make-3.81/remake.c +*** make-3.81-orig/remake.c 2006-03-20 03:36:37.000000000 +0100 +--- make-3.81/remake.c 2009-01-19 19:39:40.000000000 +0100 +*************** +*** 1120,1126 **** +--- 1120,1137 ---- + /* The normal case: start some commands. */ + if (!touch_flag || file->cmds->any_recurse) + { ++ if (enable_nested_output) ++ { ++ log_working_directory (1); ++ fprintf(stderr, "\e[pbuilding %s\n", file->name); ++ stderr_nesting_level++; ++ } + execute_file_commands (file); ++ if (enable_nested_output) ++ { ++ fprintf(stderr, "\e[q"); ++ stderr_nesting_level--; ++ } + return; + } + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 07a2f210fa33..6cb583710071 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2427,6 +2427,7 @@ let gnumake = callPackage ../development/tools/build-managers/gnumake { }; gnumake380 = callPackage ../development/tools/build-managers/gnumake-3.80 { }; + gnumake381 = callPackage ../development/tools/build-managers/gnumake/3.81.nix { }; gradle = callPackage ../development/tools/build-managers/gradle { }; From a09b3a9d0a61aa05074997df34874062790b651a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 Nov 2010 09:14:12 +0000 Subject: [PATCH 252/282] Fix GNU Emacs 22. svn path=/nixpkgs/branches/stdenv-updates/; revision=24624 --- pkgs/top-level/all-packages.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6cb583710071..103cfaf0e997 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5487,6 +5487,15 @@ let emacs = emacs23; emacs22 = callPackage ../applications/editors/emacs-22 { + /* Using cpp 4.5, we get: + + make[1]: Entering directory `/tmp/nix-build-dhbj8qqmqxwp3iw6sjcgafsrwlwrix1f-emacs-22.3.drv-0/emacs-22.3/lib-src' + Makefile:148: *** recipe commences before first target. Stop. + + Apparently, this is because `lib-src/Makefile' is generated by + processing `lib-src/Makefile.in' with cpp, and the escaping rules for + literal backslashes have changed. */ + stdenv = overrideGCC stdenv gcc44; xaw3dSupport = getPkgConfig "emacs" "xaw3dSupport" false; gtkGUI = getPkgConfig "emacs" "gtkSupport" true; }; From 9e46c5b3e2da157dbe7c24d7d27c216de72870f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 Nov 2010 09:14:16 +0000 Subject: [PATCH 253/282] Fix libcanberra. svn path=/nixpkgs/branches/stdenv-updates/; revision=24625 --- pkgs/top-level/all-packages.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 103cfaf0e997..d281d9483b1e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3216,6 +3216,12 @@ let libcaca = callPackage ../development/libraries/libcaca { }; libcanberra = callPackage ../development/libraries/libcanberra { + /* Using GNU Make 3.82 leads to this: + + Makefile:939: *** missing separator (did you mean TAB instead of 8 spaces?). Stop. + + So use 3.81. */ + stdenv = overrideInStdenv stdenv [gnumake381]; gstreamer = gst_all.gstreamer; }; From e729128faab4a59ff77fb2707357c5b51b0eeac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 Nov 2010 13:12:26 +0000 Subject: [PATCH 254/282] GNU Make 3.82: Ignore test failures on Darwin. See . svn path=/nixpkgs/branches/stdenv-updates/; revision=24626 --- pkgs/development/tools/build-managers/gnumake/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/development/tools/build-managers/gnumake/default.nix b/pkgs/development/tools/build-managers/gnumake/default.nix index 12ac0275bc01..cf33e7a5bbc3 100644 --- a/pkgs/development/tools/build-managers/gnumake/default.nix +++ b/pkgs/development/tools/build-managers/gnumake/default.nix @@ -9,7 +9,9 @@ stdenv.mkDerivation { sha256 = "0ri98385hsd7li6rh4l5afcq92v8l2lgiaz85wgcfh4w2wzsghg2"; }; - doCheck = true; + /* On Darwin, there are 3 test failures that haven't been investigated + yet. */ + doCheck = !stdenv.isDarwin; patches = [ @@ -42,5 +44,6 @@ stdenv.mkDerivation { license = "GPLv3+"; maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; }; } From c317c7f4bdc55d5ba2b3efc3818ed42834a638e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 9 Nov 2010 13:12:31 +0000 Subject: [PATCH 255/282] GNU grep: Fix build on non-GNU platforms. svn path=/nixpkgs/branches/stdenv-updates/; revision=24627 --- pkgs/tools/text/gnugrep/default.nix | 12 ++++++++---- pkgs/top-level/all-packages.nix | 8 +++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 3c21bfd2f254..36012dc6f507 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -1,16 +1,17 @@ -{stdenv, fetchurl, pcre}: +{ stdenv, fetchurl, pcre, libiconv ? null}: let version = "2.7"; in stdenv.mkDerivation { name = "gnugrep-${version}"; - + src = fetchurl { url = "mirror://gnu/grep/grep-${version}.tar.gz"; sha256 = "1b8vksfd1ngharac3ygaqim3lrf0yqap992sg0vfm7572l88655d"; }; - - buildInputs = [pcre]; + + buildInputs = [ pcre ] + ++ (stdenv.lib.optional (libiconv != null) libiconv); doCheck = if stdenv.isDarwin then false else true; @@ -31,6 +32,9 @@ stdenv.mkDerivation { ''; license = "GPLv3+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.all; }; passthru = {inherit pcre;}; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d281d9483b1e..e62e7afbaa56 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -666,7 +666,13 @@ let inherit (gtkLibs) gtk glib; }; - gnugrep = callPackage ../tools/text/gnugrep { }; + gnugrep = + # Use libiconv only on non-GNU platforms (we can't test with + # `stdenv ? glibc' at this point.) + let gnu = stdenv.isLinux; in + callPackage ../tools/text/gnugrep { + libiconv = if gnu then null else libiconv; + }; gnupatch = callPackage ../tools/text/gnupatch { }; From 5cf61c616b880ab8a87f72add3a81e1bab3aeba6 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Tue, 9 Nov 2010 14:09:22 +0000 Subject: [PATCH 256/282] openssl: to make darwin build again, update darwin-arch.patch svn path=/nixpkgs/branches/stdenv-updates/; revision=24629 --- .../libraries/openssl/darwin-arch.patch | 44 +++++++------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/pkgs/development/libraries/openssl/darwin-arch.patch b/pkgs/development/libraries/openssl/darwin-arch.patch index f17a40395d62..ad8e86c6791e 100644 --- a/pkgs/development/libraries/openssl/darwin-arch.patch +++ b/pkgs/development/libraries/openssl/darwin-arch.patch @@ -1,30 +1,16 @@ -Removed -arch flags for darwin as they are not supported by gcc-darwin. +The patch is specific to nix: MacOS gcc supports -arch. +--- a/Configure ++++ b/Configure +@@ -549,9 +549,9 @@ my %table=( + "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::", + "darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", + "darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", +-"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", +-"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", +-"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", ++"darwin-i386-cc","cc:-O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", ++"debug-darwin-i386-cc","cc:-g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", ++"darwin64-x86_64-cc","cc:-O3 -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", + "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -diff -rc openssl-0.9.8n/Configure openssl-0.9.8n-new/Configure -*** openssl-0.9.8n/Configure Mon Nov 9 15:14:26 2009 ---- openssl-0.9.8n-new/Configure Thu Apr 29 10:16:15 2010 -*************** -*** 523,533 **** - - ##### MacOS X (a.k.a. Rhapsody or Darwin) setup - "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::", -! "darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc64.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", - "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", - - ##### A/UX ---- 523,533 ---- - - ##### MacOS X (a.k.a. Rhapsody or Darwin) setup - "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::", -! "darwin-ppc-cc","cc:-O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common: -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin64-ppc-cc","cc:-O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc64.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin-i386-cc","cc:-O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "debug-darwin-i386-cc","cc:-g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", -! "darwin64-x86_64-cc","cc:-O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", - "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", - - ##### A/UX + ##### A/UX From 42c658249102808f2a4508b6f12db0c0af421abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Tue, 9 Nov 2010 19:18:37 +0000 Subject: [PATCH 257/282] Updating a gnat patch made for 4.4 to 4.5 svn path=/nixpkgs/branches/stdenv-updates/; revision=24632 --- .../compilers/gcc-4.5/gnat-cflags.patch | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.5/gnat-cflags.patch b/pkgs/development/compilers/gcc-4.5/gnat-cflags.patch index e85e5076be69..bf2acf065e9b 100644 --- a/pkgs/development/compilers/gcc-4.5/gnat-cflags.patch +++ b/pkgs/development/compilers/gcc-4.5/gnat-cflags.patch @@ -22,12 +22,12 @@ index f5057a0..337e0c6 100644 # Pretend that _Unwind_GetIPInfo is available for the target by default. This # should be autodetected during the configuration of libada and passed down to # here, but we need something for --disable-libada and hope for the best. -@@ -1838,7 +1838,7 @@ ADA_INCLUDE_SRCS =\ +@@ -193,7 +193,7 @@ RTSDIR = rts$(subst /,_,$(MULTISUBDIR)) + # Link flags used to build gnat tools. By default we prefer to statically + # link with libgcc to avoid a dependency on shared libgcc (which is tricky + # to deal with as it may conflict with the libgcc provided by the system). +-GCC_LINK_FLAGS=-static-libgcc ++GCC_LINK_FLAGS=-static-libgcc $(CFLAGS_FOR_TARGET) - LIBGNAT=../$(RTSDIR)/libgnat.a + # End of variables for you to override. --GCC_LINK=$(CC) -static-libgcc $(ADA_INCLUDES) -+GCC_LINK=$(CC) -static-libgcc $(CFLAGS_FOR_TARGET) $(ADA_INCLUDES) - - # when compiling the tools, the runtime has to be first on the path so that - # it hides the runtime files lying with the rest of the sources From 7f5431f09588ed2c0e4c766c0d23d3cbeb3bf06d Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Wed, 10 Nov 2010 07:45:41 +0000 Subject: [PATCH 258/282] gnugrep: trying to fix darwin builds svn path=/nixpkgs/branches/stdenv-updates/; revision=24634 --- pkgs/tools/text/gnugrep/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 36012dc6f507..f06be1b7336e 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -2,7 +2,7 @@ let version = "2.7"; in -stdenv.mkDerivation { +stdenv.mkDerivation ({ name = "gnugrep-${version}"; src = fetchurl { @@ -38,4 +38,4 @@ stdenv.mkDerivation { }; passthru = {inherit pcre;}; -} +} // (if libiconv != null then { NIX_LDFLAGS="-L${libiconv}/lib -liconv"; } else {}) ) From 824e7af1798d182996ff97d93fecb8dec133ba5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Nov 2010 09:16:48 +0000 Subject: [PATCH 259/282] Aumix 2.9.1. svn path=/nixpkgs/branches/stdenv-updates/; revision=24635 --- pkgs/applications/audio/aumix/default.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/audio/aumix/default.nix b/pkgs/applications/audio/aumix/default.nix index 9a8a75600889..52a4483aadcf 100644 --- a/pkgs/applications/audio/aumix/default.nix +++ b/pkgs/applications/audio/aumix/default.nix @@ -5,22 +5,26 @@ assert gtkGUI -> pkgconfig != null && gtk != null; -stdenv.mkDerivation { - name = "aumix-2.8"; +stdenv.mkDerivation rec { + name = "aumix-2.9.1"; src = fetchurl { - url = http://www.jpj.net/~trevor/aumix/aumix-2.8.tar.bz2; - sha256 = "636eef7f400c2f3df489c0d2fa21507e88692113561e75a40a26c52bc422d7fc"; + url = "http://www.jpj.net/~trevor/aumix/${name}.tar.bz2"; + sha256 = "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj"; }; buildInputs = [ gettext ncurses ] ++ (if gtkGUI then [pkgconfig gtk] else []); meta = { + description = "Aumix, an audio mixer for X and the console"; longDescription = '' Aumix adjusts an audio mixer from X, the console, a terminal, the command line or a script. ''; homepage = http://www.jpj.net/~trevor/aumix.html; - license = "GPL"; + license = "GPLv2+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.linux; }; } From 0ef4e570c8ba7282234749d9684d27fb21f1f187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Nov 2010 09:30:03 +0000 Subject: [PATCH 260/282] OpenOffice.org: Build with GCC 4.4. svn path=/nixpkgs/branches/stdenv-updates/; revision=24636 --- pkgs/top-level/all-packages.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e62e7afbaa56..e400a55e9f49 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6084,6 +6084,12 @@ let openjump = callPackage ../applications/misc/openjump { }; openoffice = callPackage ../applications/office/openoffice { + /* OOo wants GCC 4.4 at most: + + ../../inc/uno/lbnames.h:70:2: error: #error "Supported gcc majors are 2 , 3 and 4 <= 4.4. Unsupported gcc major version." + dmake: Error code 1, while making '../../unxlngx6.pro/slo/AffineBridge.obj' + */ + stdenv = overrideGCC stdenv gcc44; inherit (perlPackages) ArchiveZip CompressZlib; inherit (gnome) GConf ORBit2; neon = neon029; From 5e70f43eadcdcf78c184a8e12d190e83bdc37029 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Wed, 10 Nov 2010 15:05:18 +0000 Subject: [PATCH 261/282] reinstate gmp 4.3.1 for i686-darwin (like in trunk) svn path=/nixpkgs/branches/stdenv-updates/; revision=24641 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e400a55e9f49..c5823a58a626 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2963,7 +2963,7 @@ let gmm = callPackage ../development/libraries/gmm { }; gmp = - if false then # XXX: stdenv.system == "i686-darwin" then + if stdenv.system == "i686-darwin" then # GMP 4.3.2 is broken on Darwin, so use 4.3.1. makeOverridable (import ../development/libraries/gmp/4.3.1.nix) { inherit stdenv fetchurl m4; From df2d680da85a860995d8c467998f1c7b334c56b6 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 10 Nov 2010 16:14:18 +0000 Subject: [PATCH 262/282] Kill -I- in fdm svn path=/nixpkgs/branches/stdenv-updates/; revision=24643 --- pkgs/tools/networking/fdm/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/tools/networking/fdm/default.nix b/pkgs/tools/networking/fdm/default.nix index b9e4558bc8fd..0f563cb892af 100644 --- a/pkgs/tools/networking/fdm/default.nix +++ b/pkgs/tools/networking/fdm/default.nix @@ -33,6 +33,7 @@ rec { sed -i */Makefile -i Makefile -e 's@ -o root @ @' sed -i GNUmakefile -e 's@ -g $(BIN_OWNER) @ @' sed -i GNUmakefile -e 's@ -o $(BIN_GROUP) @ @' + sed -i */Makefile -i Makefile -e 's@-I-@@g' '') ["minInit" "doUnpack"]; meta = { From 1410156f2a6562ed19c2792f1c8a12deefe7f831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Nov 2010 16:22:29 +0000 Subject: [PATCH 263/282] OpenOffice.org 3.2.1. svn path=/nixpkgs/branches/stdenv-updates/; revision=24644 --- pkgs/applications/office/openoffice/default.nix | 8 ++++---- pkgs/top-level/all-packages.nix | 6 ------ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/pkgs/applications/office/openoffice/default.nix b/pkgs/applications/office/openoffice/default.nix index 9c8b7cdb3626..67f01f3b9721 100644 --- a/pkgs/applications/office/openoffice/default.nix +++ b/pkgs/applications/office/openoffice/default.nix @@ -6,24 +6,24 @@ , libXinerama, openssl, gperf, cppunit, GConf, ORBit2 }: -let version = "3.2.0"; in +let version = "3.2.1"; in stdenv.mkDerivation rec { name = "openoffice.org-${version}"; builder = ./builder.sh; - downloadRoot = "http://download.services.openoffice.org/files/stable"; + downloadRoot = "http://openoffice.mirrorbrain.org/files/stable"; versionDirs = true; src = fetchurl { url = "${downloadRoot}/${if versionDirs then version + "/" else ""}OOo_${version}_src_core.tar.bz2"; - sha256 = "0jl14rxmvhz86jlhhwqlbr9nfi9p271aknqxada9775qfm6bjjml"; + sha256 = "0gj2hinhnzkazh44k1an05x5cj7n6721f2grqrkjh31cm38r9p6i"; }; patches = [ ./oo.patch ./root-required.patch ]; src_system = fetchurl { url = "${downloadRoot}/${if versionDirs then version + "/" else ""}OOo_${version}_src_system.tar.bz2"; - sha256 = "0nihw4iyh9qc188dkyfjr3zvp6ym6i1spm16j0cyh5rgxcrn6ycp"; + sha256 = "0giy3sza64ij19w7b06rxcrkrb5kq2fvkz486vh3mv08s8xa8zfc"; }; preConfigure = '' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c5823a58a626..487818091cea 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6084,12 +6084,6 @@ let openjump = callPackage ../applications/misc/openjump { }; openoffice = callPackage ../applications/office/openoffice { - /* OOo wants GCC 4.4 at most: - - ../../inc/uno/lbnames.h:70:2: error: #error "Supported gcc majors are 2 , 3 and 4 <= 4.4. Unsupported gcc major version." - dmake: Error code 1, while making '../../unxlngx6.pro/slo/AffineBridge.obj' - */ - stdenv = overrideGCC stdenv gcc44; inherit (perlPackages) ArchiveZip CompressZlib; inherit (gnome) GConf ORBit2; neon = neon029; From 4b6e0f08467edc70537c4e33d72e0e1efed7a69d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Nov 2010 21:37:16 +0000 Subject: [PATCH 264/282] OpenOffice.org: Force compilation with GCC 4.5. svn path=/nixpkgs/branches/stdenv-updates/; revision=24652 --- pkgs/applications/office/openoffice/default.nix | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkgs/applications/office/openoffice/default.nix b/pkgs/applications/office/openoffice/default.nix index 67f01f3b9721..dae4ebdcc3a2 100644 --- a/pkgs/applications/office/openoffice/default.nix +++ b/pkgs/applications/office/openoffice/default.nix @@ -21,6 +21,22 @@ stdenv.mkDerivation rec { patches = [ ./oo.patch ./root-required.patch ]; + postPatch = + /* Compiling with GCC 4.5 fails: + + Compiling: cppu/source/AffineBridge/AffineBridge.cxx + [...] + ../../inc/uno/lbnames.h:67:2: error: #error "Supported gcc majors are 2 , 3 and 4 <= 4.4. Unsupported gcc major version." + + However, we can't compile with GCC 4.4 because then we'd end up with + two different versions of libstdc++ (because the deps are compiled + with 4.5), which isn't supported (link time error.) + + Thus, force compilation with 4.5 and hope for the best. */ + '' sed -i *"/cppu/inc/uno/lbnames.h" \ + -es 's/#[[:blank:]]*error "Supported.*$//g' + ''; + src_system = fetchurl { url = "${downloadRoot}/${if versionDirs then version + "/" else ""}OOo_${version}_src_system.tar.bz2"; sha256 = "0giy3sza64ij19w7b06rxcrkrb5kq2fvkz486vh3mv08s8xa8zfc"; From cadb827ec2e375eeb0f7523c29ad06a763d11b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 10 Nov 2010 22:43:45 +0000 Subject: [PATCH 265/282] OpenOffice.org: Fix typo. svn path=/nixpkgs/branches/stdenv-updates/; revision=24654 --- pkgs/applications/office/openoffice/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/office/openoffice/default.nix b/pkgs/applications/office/openoffice/default.nix index dae4ebdcc3a2..8b6e1653ba9c 100644 --- a/pkgs/applications/office/openoffice/default.nix +++ b/pkgs/applications/office/openoffice/default.nix @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { Thus, force compilation with 4.5 and hope for the best. */ '' sed -i *"/cppu/inc/uno/lbnames.h" \ - -es 's/#[[:blank:]]*error "Supported.*$//g' + -e 's/#[[:blank:]]*error "Supported.*$//g' ''; src_system = fetchurl { From f8a04b6a20eff3811d7bb734fb180cc2006cf359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Nov 2010 11:02:44 +0000 Subject: [PATCH 266/282] OpenOffice.org: Fix `postPatch'. svn path=/nixpkgs/branches/stdenv-updates/; revision=24655 --- pkgs/applications/office/openoffice/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/office/openoffice/default.nix b/pkgs/applications/office/openoffice/default.nix index 8b6e1653ba9c..7c27bef0e451 100644 --- a/pkgs/applications/office/openoffice/default.nix +++ b/pkgs/applications/office/openoffice/default.nix @@ -33,7 +33,7 @@ stdenv.mkDerivation rec { with 4.5), which isn't supported (link time error.) Thus, force compilation with 4.5 and hope for the best. */ - '' sed -i *"/cppu/inc/uno/lbnames.h" \ + '' sed -i "cppu/inc/uno/lbnames.h" \ -e 's/#[[:blank:]]*error "Supported.*$//g' ''; From 523c1de5759970767ce6e80122f2ad5438ca81cc Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Thu, 11 Nov 2010 14:42:35 +0000 Subject: [PATCH 267/282] re-add gettext 0.17 svn path=/nixpkgs/branches/stdenv-updates/; revision=24663 --- pkgs/development/libraries/gettext/0.17.nix | 58 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 60 insertions(+) create mode 100644 pkgs/development/libraries/gettext/0.17.nix diff --git a/pkgs/development/libraries/gettext/0.17.nix b/pkgs/development/libraries/gettext/0.17.nix new file mode 100644 index 000000000000..6b094fdc8394 --- /dev/null +++ b/pkgs/development/libraries/gettext/0.17.nix @@ -0,0 +1,58 @@ +{ stdenv, fetchurl, libiconv }: + +stdenv.mkDerivation (rec { + name = "gettext-0.17"; + + src = fetchurl { + url = "mirror://gnu/gettext/${name}.tar.gz"; + sha256 = "1fipjpaxxwifdw6cbr7mkxp1yvy643i38nhlh7124bqnisxki5i0"; + }; + + configureFlags = "--disable-csharp"; + + # On cross building, gettext supposes that the wchar.h from libc + # does not fulfill gettext needs, so it tries to work with its + # own wchar.h file, which does not cope well with the system's + # wchar.h and stddef.h (gcc-4.3 - glibc-2.9) + preConfigure = '' + if test -n "$crossConfig"; then + echo gl_cv_func_wcwidth_works=yes > cachefile + configureFlags="$configureFlags --cache-file=`pwd`/cachefile" + fi + ''; + + meta = { + description = "GNU gettext, a well integrated set of translation tools and documentation"; + + longDescription = '' + Usually, programs are written and documented in English, and use + English at execution time for interacting with users. Using a common + language is quite handy for communication between developers, + maintainers and users from all countries. On the other hand, most + people are less comfortable with English than with their own native + language, and would rather be using their mother tongue for day to + day's work, as far as possible. Many would simply love seeing their + computer screen showing a lot less of English, and far more of their + own language. + + GNU `gettext' is an important step for the GNU Translation Project, as + it is an asset on which we may build many other steps. This package + offers to programmers, translators, and even users, a well integrated + set of tools and documentation. Specifically, the GNU `gettext' + utilities are a set of tools that provides a framework to help other + GNU packages produce multi-lingual messages. + ''; + + homepage = http://www.gnu.org/software/gettext/; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + }; +} + +// + +(if (!stdenv.isLinux) # any non-GNU system + then { + buildInputs = [ libiconv ]; + } + else {})) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 487818091cea..e72cdf9fb2a8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2850,6 +2850,8 @@ let gettext = callPackage ../development/libraries/gettext { }; + gettext_017 = callPackage ../development/libraries/gettext/0.17.nix { }; + gd = callPackage ../development/libraries/gd { }; gdal = callPackage ../development/libraries/gdal { }; From 9feaed78d2d94d9d71fd271a7008ae7c32aa2e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Nov 2010 17:32:53 +0000 Subject: [PATCH 268/282] ncftp: Get the source from Debian. svn path=/nixpkgs/branches/stdenv-updates/; revision=24664 --- pkgs/tools/networking/ncftp/default.nix | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/networking/ncftp/default.nix b/pkgs/tools/networking/ncftp/default.nix index 5c5cf342da9e..21bcb56bf0dc 100644 --- a/pkgs/tools/networking/ncftp/default.nix +++ b/pkgs/tools/networking/ncftp/default.nix @@ -1,11 +1,13 @@ {stdenv, fetchurl, ncurses, coreutils}: +let version = "3.2.4"; in stdenv.mkDerivation { - name = "ncftp-3.2.3"; + name = "ncftp-${version}"; src = fetchurl { - url = ftp://ftp.ncftp.com/ncftp/ncftp-3.2.4-src.tar.bz2; - sha256 = "0v0cfc4kqsvmfighl47djw5nw82dl5j5g5i2s8wy375fllim0cv6"; + # `ncftp.com' got stolen, apparently, so resort to Debian. + url = "mirror://debian/pool/main/n/ncftp/ncftp_${version}.orig.tar.gz"; + sha256 = "6f26e7891f3eab27eebd2bbbe2bc87d5ae872e610eaf0bc5652aec520adcf68a"; }; preConfigure = '' @@ -22,6 +24,8 @@ stdenv.mkDerivation { meta = { description = "NcFTP Client (also known as just NcFTP) is a set of FREE application programs implementing the File Transfer Protocol (FTP)."; - homepage = http://www.ncftp.com/ncftp/; + + # Homeless! + # homepage = http://www.ncftp.com/ncftp/; }; } From 08d9437bce6dbf7bacfd88bfff17dda6941143ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Nov 2010 22:12:02 +0000 Subject: [PATCH 269/282] Quack 0.39. svn path=/nixpkgs/branches/stdenv-updates/; revision=24670 --- pkgs/applications/editors/emacs-modes/quack/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/emacs-modes/quack/default.nix b/pkgs/applications/editors/emacs-modes/quack/default.nix index c0ba183697ef..317f121f3648 100644 --- a/pkgs/applications/editors/emacs-modes/quack/default.nix +++ b/pkgs/applications/editors/emacs-modes/quack/default.nix @@ -1,12 +1,12 @@ { fetchurl, stdenv, emacs }: stdenv.mkDerivation { - name = "quack-0.37"; + name = "quack-0.39"; src = fetchurl { # XXX: Upstream URL is not versioned, which might eventually break this. url = "http://www.neilvandyke.org/quack/quack.el"; - sha256 = "1q5442cpvw2i0qhmhn7mh45jnmzg0cmd01k5zp4gvg1526c0hbcc"; + sha256 = "1w3p03f1f3l2nldxc7dig1kkgbbvy5j7zid0cfmkcrpp1qrcsqic"; }; buildInputs = [ emacs ]; From f1cd0dd6d9dc41603a8f4485464cfa0bf356038a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 11 Nov 2010 22:12:08 +0000 Subject: [PATCH 270/282] Namazu 2.0.20. svn path=/nixpkgs/branches/stdenv-updates/; revision=24671 --- pkgs/tools/text/namazu/default.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/text/namazu/default.nix b/pkgs/tools/text/namazu/default.nix index 32a08c5367b6..466a7e0c44b1 100644 --- a/pkgs/tools/text/namazu/default.nix +++ b/pkgs/tools/text/namazu/default.nix @@ -1,11 +1,11 @@ { fetchurl, stdenv, perl }: stdenv.mkDerivation rec { - name = "namazu-2.0.18"; + name = "namazu-2.0.20"; src = fetchurl { url = "http://namazu.org/stable/${name}.tar.gz"; - sha256 = "12i5z830yh5sw3087gmna44742gcw2q7lpj6b94k8fj0h45cm26j"; + sha256 = "1czw3l6wmz8887wfjpgds9di8hcg0hsmbc0mc6bkahj8g7lvrnyd"; }; buildInputs = [ perl ]; @@ -21,7 +21,10 @@ stdenv.mkDerivation rec { export PERL5LIB="$out/lib/perl5/site_perl/5.10.0:$PERL5LIB" ''; - doCheck = true; + # FIXME: The `tests/namazu-6' test fails on GNU/Linux, presumably because + # phrase searching is broken somehow. However, it doesn't fail on other + # platforms. + doCheck = !stdenv.isLinux; meta = { description = "Namazu, a full-text search engine"; @@ -34,5 +37,8 @@ stdenv.mkDerivation rec { license = "GPLv2+"; homepage = http://namazu.org/; + + platforms = stdenv.lib.platforms.gnu; # arbitrary choice + maintainers = [ stdenv.lib.maintainers.ludo ]; }; } From 951ccd21a11aa6c931bfc96b42dda7f451cdbbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Fri, 12 Nov 2010 21:04:19 +0000 Subject: [PATCH 271/282] Fixing ghdl build (its Makefiles cannot stand enableParallelBuild) svn path=/nixpkgs/branches/stdenv-updates/; revision=24679 --- pkgs/development/compilers/gcc-4.3/default.nix | 3 ++- pkgs/development/compilers/gcc-4.4/default.nix | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.3/default.nix b/pkgs/development/compilers/gcc-4.3/default.nix index b9d0d9bff5df..57fc0f805c47 100644 --- a/pkgs/development/compilers/gcc-4.3/default.nix +++ b/pkgs/development/compilers/gcc-4.3/default.nix @@ -127,7 +127,8 @@ stdenv.mkDerivation ({ passthru = { inherit langC langCC langFortran langVhdl langTreelang enableMultilib; }; - enableParallelBuilding = true; + # ghdl does not build fine with parallel building + enableParallelBuilding = if langVhdl then false else true; meta = { homepage = "http://gcc.gnu.org/"; diff --git a/pkgs/development/compilers/gcc-4.4/default.nix b/pkgs/development/compilers/gcc-4.4/default.nix index bc9c2c89e1db..6c2897c56c4c 100644 --- a/pkgs/development/compilers/gcc-4.4/default.nix +++ b/pkgs/development/compilers/gcc-4.4/default.nix @@ -247,7 +247,8 @@ stdenv.mkDerivation ({ passthru = { inherit langC langCC langAda langFortran langTreelang langVhdl enableMultilib version; }; - enableParallelBuilding = true; + # ghdl does not build fine with parallel building + enableParallelBuilding = if langVhdl then false else true; meta = { homepage = http://gcc.gnu.org/; From 10306f1b4cd88138a68c64576c4b7e8600880a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 12 Nov 2010 22:02:08 +0000 Subject: [PATCH 272/282] libpano13 2.9.17. svn path=/nixpkgs/branches/stdenv-updates/; revision=24680 --- .../graphics/panotools/default.nix | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/pkgs/applications/graphics/panotools/default.nix b/pkgs/applications/graphics/panotools/default.nix index 579c8744681e..8216c415cb62 100644 --- a/pkgs/applications/graphics/panotools/default.nix +++ b/pkgs/applications/graphics/panotools/default.nix @@ -1,24 +1,22 @@ -{stdenv, fetchsvn, libjpeg, libpng, libtiff, automake, libtool, autoconf }: +{ fetchurl, stdenv, libjpeg, libpng, libtiff, perl }: -stdenv.mkDerivation { - name = "panotools-r955"; +stdenv.mkDerivation rec { + name = "libpano13-2.9.17"; - src = fetchsvn { - url = https://panotools.svn.sourceforge.net/svnroot/panotools/trunk/libpano; - rev = 955; - sha256 = "e896c21caa098d33f33f33f134a8c9a725686c2470fe3cd08b76cd7934a56034"; + src = fetchurl { + url = "mirror://sourceforge/panotools/libpano13/${name}/${name}.tar.gz"; + sha256 = "1zcrkw0xw11170mlhh9r8562gafwx3hd92wahl9xxaah5z4v0am2"; }; - configurePhase = '' - export AUTOGEN_CONFIGURE_ARGS="--prefix $out" - ./bootstrap - ''; + buildInputs = [ perl libjpeg libpng libtiff ]; - buildInputs = [ libjpeg libpng libtiff automake libtool autoconf ]; + doCheck = true; meta = { homepage = http://panotools.sourceforge.net/; description = "Free software suite for authoring and displaying virtual reality panoramas"; - license = "LGPL"; + license = "GPLv2+"; + + platforms = stdenv.lib.platforms.gnu; # arbitrary choice }; } From 7cde3a69cd7be4f7da74e790ced3dd7ac31eaa5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Mon, 15 Nov 2010 19:39:11 +0000 Subject: [PATCH 273/282] Updating the libedit build so it works fine with wide chars. svn path=/nixpkgs/branches/stdenv-updates/; revision=24693 --- pkgs/development/libraries/libedit/default.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/libedit/default.nix b/pkgs/development/libraries/libedit/default.nix index 2121449af5ac..fb45563a1793 100644 --- a/pkgs/development/libraries/libedit/default.nix +++ b/pkgs/development/libraries/libedit/default.nix @@ -1,17 +1,19 @@ { stdenv, fetchurl, ncurses}: stdenv.mkDerivation rec { - name = "libedit-20090923-3.0"; + name = "libedit-20100424-3.0"; src = fetchurl { url = "http://www.thrysoee.dk/editline/${name}.tar.gz"; - sha256 = "02j66qbd1c9wfghpjb8dzshkcj4i0n9xanxy81552j3is9ilxjka"; + sha256 = "11hxaq58gym7kqccjhxywjxdibffzg545z1aj997y1dn0rckhav0"; }; postInstall = '' - sed -i s/-lcurses/-lncurses/g $out/lib/pkgconfig/libedit.pc + sed -i s/-lncurses/-lncursesw/g $out/lib/pkgconfig/libedit.pc ''; + configureFlags = "--enable-widec"; + propagatedBuildInputs = [ ncurses ]; meta = { From 8729f869243f69fab617102c94a525b977b11773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 17 Nov 2010 10:42:53 +0000 Subject: [PATCH 274/282] qtpfsgui: Use fftw3 single-precision. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks to LluĂ­s Batlle! svn path=/nixpkgs/branches/stdenv-updates/; revision=24723 --- pkgs/applications/graphics/qtpfsgui/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/graphics/qtpfsgui/default.nix b/pkgs/applications/graphics/qtpfsgui/default.nix index 633e41e661dc..95d7acca36c5 100644 --- a/pkgs/applications/graphics/qtpfsgui/default.nix +++ b/pkgs/applications/graphics/qtpfsgui/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, qt4, exiv2, openexr, fftw, libtiff, ilmbase }: +{stdenv, fetchurl, qt4, exiv2, openexr, fftwSinglePrec, libtiff, ilmbase }: stdenv.mkDerivation rec { name = "qtpfsgui-1.9.3"; @@ -8,13 +8,13 @@ stdenv.mkDerivation rec { sha256 = "1mlg9dry4mfnnjlnwsw375hzsiagssdhccfmapx5nh6ykqrslsh1"; }; - buildInputs = [ qt4 exiv2 openexr fftw libtiff ]; + buildInputs = [ qt4 exiv2 openexr fftwSinglePrec libtiff ]; configurePhase = '' export CPATH="${ilmbase}/include/OpenEXR:$CPATH" qmake PREFIX=$out EXIV2PATH=${exiv2}/include/exiv2 \ OPENEXRDIR=${openexr}/include/OpenEXR \ - FFTW3DIR=${fftw}/include \ + FFTW3DIR=${fftwSinglePrec}/include \ LIBTIFFDIR=${libtiff}/include ''; From ad1c12d7569220e279d2fcaf915d1815a6d321fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 17 Nov 2010 10:42:57 +0000 Subject: [PATCH 275/282] Aumix: Update the tarball URL. svn path=/nixpkgs/branches/stdenv-updates/; revision=24724 --- pkgs/applications/audio/aumix/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/audio/aumix/default.nix b/pkgs/applications/audio/aumix/default.nix index 52a4483aadcf..d69d9d471336 100644 --- a/pkgs/applications/audio/aumix/default.nix +++ b/pkgs/applications/audio/aumix/default.nix @@ -8,7 +8,7 @@ assert gtkGUI -> pkgconfig != null && gtk != null; stdenv.mkDerivation rec { name = "aumix-2.9.1"; src = fetchurl { - url = "http://www.jpj.net/~trevor/aumix/${name}.tar.bz2"; + url = "http://www.jpj.net/~trevor/aumix/releases/${name}.tar.bz2"; sha256 = "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj"; }; From d3c50a23f41779a4e7715046c8c1876a54645b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 17 Nov 2010 10:43:00 +0000 Subject: [PATCH 276/282] SuperTuxKart: Use GNU Make 3.81. svn path=/nixpkgs/branches/stdenv-updates/; revision=24725 --- pkgs/top-level/all-packages.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f026bb7283c0..51f8a06b4537 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6698,7 +6698,12 @@ let superTux = callPackage ../games/super-tux { }; - superTuxKart = callPackage ../games/super-tux-kart { }; + superTuxKart = callPackage ../games/super-tux-kart { + /* With GNU Make 3.82, the build process is stuck in the `data' + directory, after displaying "Making all in tracks", and `pstree' + indicates that `make' doesn't launch any new process. */ + stdenv = overrideInStdenv stdenv [ gnumake381 ]; + }; teeworlds = callPackage ../games/teeworlds { }; From 44c11bdf47183e366493508c6e48a295fae00e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 17 Nov 2010 10:43:04 +0000 Subject: [PATCH 277/282] Fiddle with priorities to provide a smoother upgrade path. svn path=/nixpkgs/branches/stdenv-updates/; revision=24726 --- pkgs/top-level/all-packages.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 51f8a06b4537..69f75b07eb5b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -822,7 +822,9 @@ let lrzip = callPackage ../tools/compression/lrzip { }; - lsh = callPackage ../tools/networking/lsh { }; + # lsh installs `bin/nettle-lfib-stream' and so does Nettle. Give the + # former a lower priority than Nettle. + lsh = lowPrio (callPackage ../tools/networking/lsh { }); lxc = callPackage ../tools/system/lxc { }; @@ -5602,10 +5604,13 @@ let espeak = callPackage ../applications/audio/espeak { }; - evince = callPackage ../applications/misc/evince { + # FIXME: Evince and other GNOME/GTK+ apps (e.g., Viking) provide + # `share/icons/hicolor/icon-theme.cache'. Arbitrarily give this one a + # higher priority. + evince = hiPrio (callPackage ../applications/misc/evince { inherit (gnome) gnomedocutils gnomeicontheme libgnome libgnomeui libglade glib gtk scrollkeeper gnome_keyring; - }; + }); evolution_data_server = (newScope (gnome // gtkLibs)) ../servers/evolution-data-server { From c3088460555740d248e5571a1bd1908a936eb850 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 17 Nov 2010 12:45:14 +0000 Subject: [PATCH 278/282] Ignore the utime issue - tell tar we do not care about times in the first place svn path=/nixpkgs/branches/stdenv-updates/; revision=24729 --- pkgs/development/compilers/fpc/lazarus.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/fpc/lazarus.nix b/pkgs/development/compilers/fpc/lazarus.nix index 96a05c7880f0..8ebd55e19cb3 100644 --- a/pkgs/development/compilers/fpc/lazarus.nix +++ b/pkgs/development/compilers/fpc/lazarus.nix @@ -24,7 +24,7 @@ rec { export NIX_LDFLAGS='-lXi -lX11 -lglib-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lc -lXext -lpango-1.0 -latk-1.0' export LCL_PLATFORM=gtk2 ensureDir $out/share - tar xf ${fpc.src} --strip-components=1 -C $out/share + tar xf ${fpc.src} --strip-components=1 -C $out/share -m sed -e 's@/usr/fpcsrc@'"$out/share/fpcsrc@" -i ide/include/unix/lazbaseconf.inc '') ["minInit" "defEnsureDir" "doUnpack"]; From 0cfdfadc73ac1ba08658ca6216b64c227815dcc9 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 17 Nov 2010 13:11:41 +0000 Subject: [PATCH 279/282] Add gst-python svn path=/nixpkgs/branches/stdenv-updates/; revision=24733 --- .../libraries/gstreamer/default.nix | 2 ++ .../gstreamer/gst-python/default.nix | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 pkgs/development/libraries/gstreamer/gst-python/default.nix diff --git a/pkgs/development/libraries/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/default.nix index 37c88580a8ac..723d4176e35e 100644 --- a/pkgs/development/libraries/gstreamer/default.nix +++ b/pkgs/development/libraries/gstreamer/default.nix @@ -13,6 +13,8 @@ rec { gnonlin = callPackage ./gnonlin { }; + gst_python = callPackage ./gst-python {}; + # Header files are in include/${prefix}/ prefix = "gstreamer-0.10"; } diff --git a/pkgs/development/libraries/gstreamer/gst-python/default.nix b/pkgs/development/libraries/gstreamer/gst-python/default.nix new file mode 100644 index 000000000000..98a2a07aa61c --- /dev/null +++ b/pkgs/development/libraries/gstreamer/gst-python/default.nix @@ -0,0 +1,30 @@ +{ fetchurl, stdenv, pkgconfig, python, gstreamer + , gstPluginsBase, pygtk +}: + +stdenv.mkDerivation rec { + name = "gst-python-0.10.19"; + + src = fetchurl { + urls = [ + "${meta.homepage}/src/gst-python/${name}.tar.bz2" + "mirror://gentoo/distfiles/${name}.tar.bz2" + ]; + sha256 = "956f81a8c15daa3f17e688a0dc5a5d18a3118141066952d3b201a6ac0c52b415"; + }; + + buildInputs = + [ pkgconfig gstPluginsBase pygtk ] + ; + + propagatedBuildInputs = [ gstreamer python ]; + + meta = { + homepage = http://gstreamer.freedesktop.org; + + description = "Python bindings for GStreamer"; + + license = "LGPLv2+"; + }; +} + From 2254567b311180451dc690f2e0ddcfe9f6d2d44e Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 17 Nov 2010 16:27:48 +0000 Subject: [PATCH 280/282] Update farsight2 and enable python bindings svn path=/nixpkgs/branches/stdenv-updates/; revision=24744 --- .../libraries/farsight2/default.nix | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/farsight2/default.nix b/pkgs/development/libraries/farsight2/default.nix index b77540ce795e..f504849e2d5f 100644 --- a/pkgs/development/libraries/farsight2/default.nix +++ b/pkgs/development/libraries/farsight2/default.nix @@ -1,16 +1,22 @@ -{stdenv, fetchurl, libnice, pkgconfig, python, glib, gstreamer, gstPluginsBase}: +{stdenv, fetchurl, libnice, pkgconfig, python, glib, gstreamer, gstPluginsBase, + pygobject, gst_python}: -stdenv.mkDerivation { - name = "farsight2-0.0.16"; +stdenv.mkDerivation rec { + name = "farsight2-0.0.22"; src = fetchurl { - url = http://farsight.freedesktop.org/releases/farsight2/farsight2-0.0.16.tar.gz; + url = "http://farsight.freedesktop.org/releases/farsight2/${name}.tar.gz"; sha256 = "07yjndkx1p7ij1ifxsnbqbr8943wmq768x4812khka7dx6ii1sv9"; }; - buildInputs = [ libnice pkgconfig python glib gstreamer gstPluginsBase ]; + buildInputs = [ libnice pkgconfig python glib gstreamer gstPluginsBase + pygobject gst_python ]; - configureFlags = "--disable-python"; + preBuild = '' + sed -e '/^[[] -z/d' -i python/Makefile + find . -name Makefile -execdir sed -e '/^[.]NOEXPORT:/d' -i '{}' ';' + find . -name Makefile -execdir sed -r -e 's/^ {8,8}/\t/' -i '{}' ';' + ''; patches = [./makefile.patch]; From a238d43cff107ae14a78e2210033b0bfc6fb52e6 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Thu, 18 Nov 2010 10:16:16 +0000 Subject: [PATCH 281/282] Skip tests - network ones fail svn path=/nixpkgs/branches/stdenv-updates/; revision=24752 --- pkgs/development/interpreters/clisp/2.44.1.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/clisp/2.44.1.nix b/pkgs/development/interpreters/clisp/2.44.1.nix index 3b881558aeda..891fd809bf04 100644 --- a/pkgs/development/interpreters/clisp/2.44.1.nix +++ b/pkgs/development/interpreters/clisp/2.44.1.nix @@ -40,7 +40,7 @@ stdenv.mkDerivation rec { NIX_CFLAGS_COMPILE="-O0"; # TODO : make mod-check fails - doCheck = 1; + doCheck = false; meta = { description = "ANSI Common Lisp Implementation"; From d1f4ec332b95086f2a186583bc6ea6596297e094 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Thu, 18 Nov 2010 10:16:54 +0000 Subject: [PATCH 282/282] Quick-and-dirty insertion of missing include - we would fail on a platform without stat.h anyway svn path=/nixpkgs/branches/stdenv-updates/; revision=24753 --- pkgs/development/libraries/commoncpp2/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/libraries/commoncpp2/default.nix b/pkgs/development/libraries/commoncpp2/default.nix index 8f519a4b43c8..cd719e6a40b7 100644 --- a/pkgs/development/libraries/commoncpp2/default.nix +++ b/pkgs/development/libraries/commoncpp2/default.nix @@ -10,6 +10,10 @@ stdenv.mkDerivation rec { doCheck = true; + preBuild = '' + echo '#include ' >> inc/cc++/config.h + ''; + meta = { description = "GNU Common C++, a portable, highly optimized C++ class framework";