summary refs log tree commit diff
path: root/pkgs/system/all-packages.nix
blob: 70feb66a4361b197e8b3949c6f108b920addb081 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# This file evaluates to a function that, when supplied with a system
# identifier, returns the set of all packages provided by the Nix
# Package Collection.  It does this by supplying
# `all-packages-generic.nix' with a standard build environment.
#
# On Linux systems, the standard build environment consists of
# Nix-built instances glibc and the `standard' Unix tools, i.e., the
# Posix utilities, the GNU C compiler, and so on.  On other systems,
# we use the native C library.

{system}: let {
  allPackages = import ./all-packages-generic.nix;


  # The native (i.e., impure) build environment.  This one uses the
  # tools installed on the system outside of the Nix environment,
  # i.e., the stuff in /bin, /usr/bin, etc.  This environment should
  # be used with care, since many Nix packages will not build properly
  # with it (e.g., because they require GNU Make).
  stdenvNative = (import ../stdenv/native) {system = system;};
  stdenvNativePkgs = allPackages {system = system; stdenv = stdenvNative;};


  # The Nix build environment.
  stdenvNix = (import ../stdenv/nix) {
    bootStdenv = stdenvNative;
    pkgs = stdenvNativePkgs;
  };
  stdenvNixPkgs = allPackages {system = system; stdenv = stdenvNix;};


  # The Linux build environment consists of the Nix build environment
  # built against the GNU C Library.
  stdenvLinuxGlibc = stdenvNativePkgs.glibc;
  stdenvLinuxBoot = (import ../stdenv/nix-linux/boot.nix) {
    system = system;
    glibc = stdenvLinuxGlibc;
  };
  stdenvLinuxBootPkgs = allPackages {system = system; stdenv = stdenvLinuxBoot;};

  stdenvLinux = (import ../stdenv/nix-linux) {
    bootStdenv = stdenvLinuxBoot;
    pkgs = stdenvLinuxBootPkgs;
    glibc = stdenvLinuxGlibc;
  };
  stdenvLinuxPkgs =
    allPackages {system = system; stdenv = stdenvLinux;} //
    {inherit (stdenvLinuxBootPkgs)
      gzip bzip2 /* bash */ binutils coreutils diffutils findutils gawk gcc
      gnumake gnused gnutar gnugrep wget;
    } //
    {glibc = stdenvLinuxGlibc;};


  # Select the right instantiation.
  body =
    if system == "i686-linux"
    then stdenvLinuxPkgs
    else stdenvNixPkgs;
}