From 846b44b2e958cd38c02f70847736598ce7e4c7a0 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 11 Sep 2018 13:27:13 -0400 Subject: [PATCH 1/3] glibc, kernel-headers: Fix some eval errors on Darwin Need to get the source to get elf.h --- pkgs/development/libraries/glibc/default.nix | 5 ++--- pkgs/os-specific/linux/kernel-headers/default.nix | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc/default.nix index ea443ce9a246..c74c27598ee0 100644 --- a/pkgs/development/libraries/glibc/default.nix +++ b/pkgs/development/libraries/glibc/default.nix @@ -5,8 +5,6 @@ , withGd ? false }: -assert stdenv.cc.isGNU; - callPackage ./common.nix { inherit stdenv; } { name = "glibc" + stdenv.lib.optionalString withGd "-gd"; @@ -96,7 +94,8 @@ callPackage ./common.nix { inherit stdenv; } { mv $bin/bin/getconf_ $bin/bin/getconf ''; - separateDebugInfo = true; + # Hack to get around eval issue. + separateDebugInfo = !stdenv.isDarwin; meta.description = "The GNU C Library"; } diff --git a/pkgs/os-specific/linux/kernel-headers/default.nix b/pkgs/os-specific/linux/kernel-headers/default.nix index e82b785f624a..09fa4fbfd3a7 100644 --- a/pkgs/os-specific/linux/kernel-headers/default.nix +++ b/pkgs/os-specific/linux/kernel-headers/default.nix @@ -2,8 +2,6 @@ , fetchurl, perl }: -assert stdenvNoCC.hostPlatform.isLinux; - let common = { version, sha256, patches ? null }: stdenvNoCC.mkDerivation { name = "linux-headers-${version}"; @@ -13,7 +11,7 @@ let inherit sha256; }; - ARCH = stdenvNoCC.hostPlatform.platform.kernelArch; + ARCH = stdenvNoCC.hostPlatform.platform.kernelArch or (throw "missing kernelArch"); # It may look odd that we use `stdenvNoCC`, and yet explicit depend on a cc. # We do this so we have a build->build, not build->host, C compiler. From 2205beaa8c95746e1ed580875dea202e93a85b5d Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 11 Sep 2018 17:08:40 -0400 Subject: [PATCH 2/3] glibc: Expose the version --- pkgs/development/libraries/glibc/common.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix index 424b212b39d3..a7a4c2fbacdb 100644 --- a/pkgs/development/libraries/glibc/common.nix +++ b/pkgs/development/libraries/glibc/common.nix @@ -139,6 +139,8 @@ stdenv.mkDerivation ({ # prevent a retained dependency on the bootstrap tools in the stdenv-linux # bootstrap. BASH_SHELL = "/bin/sh"; + + passthru = { inherit version; }; } // (removeAttrs args [ "withLinuxHeaders" "withGd" ]) // From b8ce6a31f555a2e4471880cc4c01b629e7d6d36f Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 11 Sep 2018 18:17:20 -0400 Subject: [PATCH 3/3] elf-header: Init at A little shim derivation to get this header for Darwin, where it is needed for cross compilation. There's no real reason to do glibc and musl like that, but as I'm maintaining it I suppose I can go overboard like that. --- .../libraries/elf-header/default.nix | 43 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 8 ++++ 2 files changed, 51 insertions(+) create mode 100644 pkgs/development/libraries/elf-header/default.nix diff --git a/pkgs/development/libraries/elf-header/default.nix b/pkgs/development/libraries/elf-header/default.nix new file mode 100644 index 000000000000..48e5b73d9e72 --- /dev/null +++ b/pkgs/development/libraries/elf-header/default.nix @@ -0,0 +1,43 @@ +{ stdenvNoCC, lib, glibc, musl }: + +let + libc = + if stdenvNoCC.targetPlatform.isMusl + then musl + else glibc; + headerPath = + if stdenvNoCC.targetPlatform.isMusl + then "musl-${libc.version}/include/elf.h" + else "glibc-${libc.version}/elf/elf.h"; +in + +stdenvNoCC.mkDerivation { + name = "elf-header"; + inherit (libc) version; + + src = null; + + unpackPhase = "true"; + + dontBuild = true; + + installPhase = '' + mkdir -p "$out/include"; + tar -xf \ + ${lib.escapeShellArg libc.src} \ + ${lib.escapeShellArg headerPath} \ + --to-stdout \ + | sed -e '/features\.h/d' \ + > "$out/include/elf.h" + ''; + + meta = libc.meta // { + description = "The datastructures of ELF according to the target platform's libc"; + longDescription = '' + The Executable and Linkable Format (ELF, formerly named Extensible Linking + Format), is usually defined in a header like this. + ''; + platforms = lib.platforms.all; + maintainers = [ lib.maintainers.ericson2314 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e09e89b0b90e..f9df4ea4fb83 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9513,6 +9513,14 @@ with pkgs; installLocales = config.glibc.locales or false; }; + # Provided by libc on Operating Systems that use the Extensible Linker Format. + elf-header = + if stdenv.hostPlatform.parsed.kernel.execFormat.name == "elf" + then null + else elf-header-real; + + elf-header-real = callPackage ../development/libraries/elf-header { }; + glibc_memusage = callPackage ../development/libraries/glibc { installLocales = false; withGd = true;