pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / stdenv / native / default.nix
blob242bf9d1b3f9004491ee4c4b6fb8f31a63d70caf
1 { lib
2 , localSystem, crossSystem, config, overlays, crossOverlays ? []
3 }:
5 assert crossSystem == localSystem;
7 let
8   inherit (localSystem) system;
10   shell =
11     if system == "i686-freebsd" || system == "x86_64-freebsd" then "/usr/local/bin/bash"
12     else "/bin/bash";
14   path =
15     (lib.optionals (system == "i686-solaris") [ "/usr/gnu" ]) ++
16     (lib.optionals (system == "i686-netbsd") [ "/usr/pkg" ]) ++
17     (lib.optionals (system == "x86_64-solaris") [ "/opt/local/gnu" ]) ++
18     ["/" "/usr" "/usr/local"];
20   prehookBase = ''
21     # Disable purity tests; it's allowed (even needed) to link to
22     # libraries outside the Nix store (like the C library).
23     export NIX_ENFORCE_PURITY=
24     export NIX_ENFORCE_NO_NATIVE="''${NIX_ENFORCE_NO_NATIVE-1}"
25   '';
27   prehookFreeBSD = ''
28     ${prehookBase}
30     alias make=gmake
31     alias tar=gtar
32     alias sed=gsed
33     export MAKE=gmake
34     shopt -s expand_aliases
35   '';
37   prehookOpenBSD = ''
38     ${prehookBase}
40     alias make=gmake
41     alias grep=ggrep
42     alias mv=gmv
43     alias ln=gln
44     alias sed=gsed
45     alias tar=gtar
47     export MAKE=gmake
48     shopt -s expand_aliases
49   '';
51   prehookNetBSD = ''
52     ${prehookBase}
54     alias make=gmake
55     alias sed=gsed
56     alias tar=gtar
57     export MAKE=gmake
58     shopt -s expand_aliases
59   '';
61   # prevent libtool from failing to find dynamic libraries
62   prehookCygwin = ''
63     ${prehookBase}
65     shopt -s expand_aliases
66     export lt_cv_deplibs_check_method=pass_all
67   '';
69   extraNativeBuildInputsCygwin = [
70     ../cygwin/all-buildinputs-as-runtimedep.sh
71     ../cygwin/wrap-exes-to-find-dlls.sh
72   ] ++ (if system == "i686-cygwin" then [
73     ../cygwin/rebase-i686.sh
74   ] else if system == "x86_64-cygwin" then [
75     ../cygwin/rebase-x86_64.sh
76   ] else []);
78   # A function that builds a "native" stdenv (one that uses tools in
79   # /usr etc.).
80   makeStdenv =
81     { cc, fetchurl, extraPath ? [], overrides ? (self: super: { }), extraNativeBuildInputs ? [] }:
83     import ../generic {
84       buildPlatform = localSystem;
85       hostPlatform = localSystem;
86       targetPlatform = localSystem;
88       preHook =
89         if system == "i686-freebsd" then prehookFreeBSD else
90         if system == "x86_64-freebsd" then prehookFreeBSD else
91         if system == "i686-openbsd" then prehookOpenBSD else
92         if system == "i686-netbsd" then prehookNetBSD else
93         if system == "i686-cygwin" then prehookCygwin else
94         if system == "x86_64-cygwin" then prehookCygwin else
95         prehookBase;
97       extraNativeBuildInputs = extraNativeBuildInputs ++
98         (if system == "i686-cygwin" then extraNativeBuildInputsCygwin else
99         if system == "x86_64-cygwin" then extraNativeBuildInputsCygwin else
100         []);
102       initialPath = extraPath ++ path;
104       fetchurlBoot = fetchurl;
106       inherit shell cc overrides config;
107     };
113   ({}: rec {
114     __raw = true;
116     stdenv = makeStdenv {
117       cc = null;
118       fetchurl = null;
119     };
120     stdenvNoCC = stdenv;
122     cc = let
123       nativePrefix = { # switch
124         i686-solaris = "/usr/gnu";
125         x86_64-solaris = "/opt/local/gcc47";
126       }.${system} or "/usr";
127     in
128     import ../../build-support/cc-wrapper {
129       name = "cc-native";
130       nativeTools = true;
131       nativeLibc = true;
132       inherit lib nativePrefix;
133       bintools = import ../../build-support/bintools-wrapper {
134         name = "bintools";
135         inherit lib stdenvNoCC nativePrefix;
136         nativeTools = true;
137         nativeLibc = true;
138       };
139       inherit stdenvNoCC;
140     };
142     fetchurl = import ../../build-support/fetchurl {
143       inherit lib stdenvNoCC;
144       # Curl should be in /usr/bin or so.
145       curl = null;
146     };
148   })
150   # First build a stdenv based only on tools outside the store.
151   (prevStage: {
152     inherit config overlays;
153     stdenv = makeStdenv {
154       inherit (prevStage) cc fetchurl;
155       overrides = self: super: { inherit (prevStage) fetchurl; };
156     } // {
157       inherit (prevStage) fetchurl;
158     };
159   })
161   # Using that, build a stdenv that adds the ‘xz’ command (which most systems
162   # don't have, so we mustn't rely on the native environment providing it).
163   (prevStage: {
164     inherit config overlays;
165     stdenv = makeStdenv {
166       inherit (prevStage.stdenv) cc fetchurl;
167       extraPath = [ prevStage.xz ];
168       overrides = self: super: { inherit (prevStage) fetchurl xz; };
169       extraNativeBuildInputs = if localSystem.isLinux then [ prevStage.patchelf ] else [];
170     };
171   })