elf-header: Init at <libc version>

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.
This commit is contained in:
John Ericson 2018-09-11 18:17:20 -04:00
parent 2205beaa8c
commit b8ce6a31f5
2 changed files with 51 additions and 0 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

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