diff --git a/pkgs/development/libraries/elf-header/default.nix b/pkgs/development/libraries/elf-header/default.nix new file mode 100644 index 00000000000..48e5b73d9e7 --- /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/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix index 424b212b39d..a7a4c2fbacd 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" ]) // diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc/default.nix index ea443ce9a24..c74c27598ee 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 e82b785f624..09fa4fbfd3a 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. diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b743127ca88..f029e22d99f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9536,6 +9536,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;