From 3226d8b91db01e3a0cf3ae28671cb9b336c554e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 4 Apr 2012 20:25:51 +0000 Subject: [PATCH] GNU: Avoid `__overrides' altogether, by using a non-recursive attrset. Thanks to Eelco for the suggestion. svn path=/nixpkgs/trunk/; revision=33587 --- pkgs/os-specific/gnu/default.nix | 180 ++++++++++++++++--------------- pkgs/top-level/all-packages.nix | 1 - 2 files changed, 93 insertions(+), 88 deletions(-) diff --git a/pkgs/os-specific/gnu/default.nix b/pkgs/os-specific/gnu/default.nix index d46038c8ea5..19bdf8c0d34 100644 --- a/pkgs/os-specific/gnu/default.nix +++ b/pkgs/os-specific/gnu/default.nix @@ -3,96 +3,102 @@ args@{ fetchgit, stdenv, autoconf, automake, automake111x, libtool , texinfo, glibcCross, hurdPartedCross, libuuid, samba_light , gccCrossStageStatic, gccCrossStageFinal -, forceBuildDrv, forceSystem, callPackage, platform, config, crossSystem +, forceBuildDrv, forceSystem, newScope, platform, config, crossSystem , overrides ? {} }: with args; -rec { +let + callPackage = newScope gnu; + + gnu = { + hurdCross = forceBuildDrv(import ./hurd { + inherit fetchgit stdenv autoconf libtool texinfo + glibcCross hurdPartedCross; + inherit (gnu) machHeaders mig; + libuuid = libuuid.hostDrv; + automake = automake111x; + headersOnly = false; + cross = assert crossSystem != null; crossSystem; + gccCross = gccCrossStageFinal; + }); + + hurdCrossIntermediate = forceBuildDrv(import ./hurd { + inherit fetchgit stdenv autoconf libtool texinfo glibcCross; + inherit (gnu) machHeaders mig; + automake = automake111x; + headersOnly = false; + cross = assert crossSystem != null; crossSystem; + + # The "final" GCC needs glibc and the Hurd libraries (libpthread in + # particular) so we first need an intermediate Hurd built with the + # intermediate GCC. + gccCross = gccCrossStageStatic; + + # This intermediate Hurd is only needed to build libpthread, which needs + # libihash, and to build Parted, which needs libstore and + # libshouldbeinlibc. + buildTarget = "libihash libstore libshouldbeinlibc"; + installTarget = "libihash-install libstore-install libshouldbeinlibc-install"; + }); + + hurdHeaders = callPackage ./hurd { + automake = automake111x; + headersOnly = true; + gccCross = null; + glibcCross = null; + libuuid = null; + hurdPartedCross = null; + }; + + libpthreadHeaders = callPackage ./libpthread { + headersOnly = true; + hurd = null; + }; + + libpthreadCross = forceBuildDrv(import ./libpthread { + inherit fetchgit stdenv autoconf automake libtool glibcCross; + inherit (gnu) machHeaders hurdHeaders; + hurd = gnu.hurdCrossIntermediate; + gccCross = gccCrossStageStatic; + cross = assert crossSystem != null; crossSystem; + }); + + # In theory GNU Mach doesn't have to be cross-compiled. However, since it + # has to be built for i586 (it doesn't work on x86_64), one needs a cross + # compiler for that host. + mach = callPackage ./mach { + automake = automake111x; + }; + + machHeaders = callPackage ./mach { + automake = automake111x; + headersOnly = true; + mig = null; + }; + + mig = callPackage ./mig { + # Build natively, but force use of a 32-bit environment because we're + # targeting `i586-pc-gnu'. + stdenv = (forceSystem "i686-linux").stdenv; + }; + + # XXX: Use this one for its `.hostDrv'. Using the one above from + # `x86_64-linux' leads to building a different cross-toolchain because of + # the `forceSystem'. + mig_raw = callPackage ./mig {}; + + smbfs = callPackage ./smbfs { + samba = samba_light; + hurd = hurdCross; + }; + + unionfs = callPackage ./unionfs { + hurd = hurdCross; + }; + } + # Allow callers to override elements of this attribute set. - __overrides = overrides; + // overrides; - hurdCross = forceBuildDrv(import ./hurd { - inherit fetchgit stdenv autoconf libtool texinfo machHeaders - mig glibcCross hurdPartedCross; - libuuid = libuuid.hostDrv; - automake = automake111x; - headersOnly = false; - cross = assert crossSystem != null; crossSystem; - gccCross = gccCrossStageFinal; - }); - - hurdCrossIntermediate = forceBuildDrv(import ./hurd { - inherit fetchgit stdenv autoconf libtool texinfo machHeaders - mig glibcCross; - automake = automake111x; - headersOnly = false; - cross = assert crossSystem != null; crossSystem; - - # The "final" GCC needs glibc and the Hurd libraries (libpthread in - # particular) so we first need an intermediate Hurd built with the - # intermediate GCC. - gccCross = gccCrossStageStatic; - - # This intermediate Hurd is only needed to build libpthread, which needs - # libihash, and to build Parted, which needs libstore and - # libshouldbeinlibc. - buildTarget = "libihash libstore libshouldbeinlibc"; - installTarget = "libihash-install libstore-install libshouldbeinlibc-install"; - }); - - hurdHeaders = callPackage ./hurd { - automake = automake111x; - headersOnly = true; - gccCross = null; - glibcCross = null; - libuuid = null; - hurdPartedCross = null; - }; - - libpthreadHeaders = callPackage ./libpthread { - headersOnly = true; - hurd = null; - }; - - libpthreadCross = forceBuildDrv(import ./libpthread { - inherit fetchgit stdenv autoconf automake libtool - machHeaders hurdHeaders glibcCross; - hurd = hurdCrossIntermediate; - gccCross = gccCrossStageStatic; - cross = assert crossSystem != null; crossSystem; - }); - - # In theory GNU Mach doesn't have to be cross-compiled. However, since it - # has to be built for i586 (it doesn't work on x86_64), one needs a cross - # compiler for that host. - mach = callPackage ./mach { - automake = automake111x; - }; - - machHeaders = callPackage ./mach { - automake = automake111x; - headersOnly = true; - mig = null; - }; - - mig = callPackage ./mig { - # Build natively, but force use of a 32-bit environment because we're - # targeting `i586-pc-gnu'. - stdenv = (forceSystem "i686-linux").stdenv; - }; - - # XXX: Use this one for its `.hostDrv'. Using the one above from - # `x86_64-linux' leads to building a different cross-toolchain because of - # the `forceSystem'. - mig_raw = callPackage ./mig {}; - - smbfs = callPackage ./smbfs { - samba = samba_light; - hurd = hurdCross; - }; - - unionfs = callPackage ./unionfs { - hurd = hurdCross; - }; -} +in gnu # we trust! diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e795a5caa9c..e6cc7a34066 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5447,7 +5447,6 @@ let # GNU/Hurd core packages. gnu = recurseIntoAttrs (callPackage ../os-specific/gnu { - callPackage = newScope pkgs.gnu; inherit platform crossSystem; });