Merge pull request #46574 from obsidiansystems/elf-header

elf-header: Init at <libc version>
This commit is contained in:
John Ericson 2018-09-15 01:37:18 -04:00 committed by GitHub
commit 0bfdab21cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 6 deletions

View File

@ -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 ];
};
}

View File

@ -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" ]) //

View File

@ -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";
}

View File

@ -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.

View File

@ -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;