about summary refs log tree commit diff
path: root/pkgs-ng/system/all-packages.fix
blob: d0228c3da1e994f6c2217343f4fe5603290393ce (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
# 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.fix' 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.fix;

  # 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.fix) {
    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};

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