diff options
author | John Ericson <Ericson2314@Yahoo.com> | 2017-05-21 14:02:19 -0400 |
---|---|---|
committer | John Ericson <Ericson2314@Yahoo.com> | 2017-05-22 00:25:02 -0400 |
commit | c5c66060484800ecd97a811157a31e9cdd2241b1 (patch) | |
tree | dc2c516e319378bce11ecd3d5ecc30f905e7fa11 | |
parent | 2e7ec6fb702be66389405d48693b322565b27c69 (diff) | |
download | nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar.gz nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar.bz2 nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar.lz nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar.xz nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.tar.zst nixpkgs-c5c66060484800ecd97a811157a31e9cdd2241b1.zip |
lib: Infer `libc` field of platform if not specified
This is especially useful when not cross compiling. It means we can remove the `stdenv.isGlibc` predicate too. Additionally, use this to simplify the logic to choose the appropriate libiconv derivation.
-rw-r--r-- | lib/systems/default.nix | 6 | ||||
-rw-r--r-- | pkgs/stdenv/generic/default.nix | 3 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 22 |
3 files changed, 19 insertions, 12 deletions
diff --git a/lib/systems/default.nix b/lib/systems/default.nix index a61e4efc4ef..c37b6be2523 100644 --- a/lib/systems/default.nix +++ b/lib/systems/default.nix @@ -21,6 +21,12 @@ rec { config = parse.tripleFromSystem final.parsed; # Just a guess, based on `system` platform = platforms.selectBySystem final.system; + libc = + /**/ if final.isDarwin then "libSystem" + else if final.isMinGW then "msvcrt" + else if final.isLinux then "glibc" + # TODO(@Ericson2314) think more about other operating systems + else "native/impure"; } // mapAttrs (n: v: v final.parsed) inspect.predicates // args; in final; diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index a063a1ed2dc..e029622dfa4 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -402,9 +402,6 @@ let || system == "aarch64-linux" || system == "mips64el-linux"; isGNU = system == "i686-gnu"; # GNU/Hurd - isGlibc = isGNU # useful for `stdenvNative' - || isLinux - || system == "x86_64-kfreebsd-gnu"; isSunOS = system == "i686-solaris" || system == "x86_64-solaris"; isCygwin = system == "i686-cygwin" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 88f4bc04b9f..a74fd79d6e7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8653,15 +8653,19 @@ with pkgs; libgsf = callPackage ../development/libraries/libgsf { }; - # glibc provides libiconv so systems with glibc don't need to build libiconv - # separately, but we also provide libiconvReal, which will always be a - # standalone libiconv, just in case you want it - libiconv = if stdenv ? cross then - (if stdenv.cross.libc == "glibc" then libcCross - else if stdenv.cross.libc == "libSystem" then darwin.libiconv - else libiconvReal) - else if stdenv.isGlibc then glibcIconv stdenv.cc.libc - else if stdenv.isDarwin then darwin.libiconv + # GNU libc provides libiconv so systems with glibc don't need to build + # libiconv separately. Additionally, Apple forked/repackaged libiconv so we + # use that instead of the vanilla version on that OS. + # + # We also provide `libiconvReal`, which will always be a standalone libiconv, + # just in case you want it regardless of platform. + libiconv = + if hostPlatform.libc == "glibc" + then glibcIconv (if hostPlatform != buildPlatform + then libcCross + else stdenv.cc.libc) + else if hostPlatform.isDarwin + then darwin.libiconv else libiconvReal; glibcIconv = libc: let |