Skip to content

Commit

Permalink
Merge pull request #46684 from obsidiansystems/elf-header
Browse files Browse the repository at this point in the history
elf-header: Init at <libc version> for 18.09
  • Loading branch information
Ericson2314 committed Sep 15, 2018
2 parents b998319 + b8ce6a3 commit d1593ba
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 6 deletions.
43 changes: 43 additions & 0 deletions 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 ];
};
}
2 changes: 2 additions & 0 deletions pkgs/development/libraries/glibc/common.nix
Expand Up @@ -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" ]) //
Expand Down
5 changes: 2 additions & 3 deletions pkgs/development/libraries/glibc/default.nix
Expand Up @@ -5,8 +5,6 @@
, withGd ? false
}:

assert stdenv.cc.isGNU;

callPackage ./common.nix { inherit stdenv; } {
name = "glibc" + stdenv.lib.optionalString withGd "-gd";

Expand Down Expand Up @@ -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";
}
4 changes: 1 addition & 3 deletions pkgs/os-specific/linux/kernel-headers/default.nix
Expand Up @@ -2,8 +2,6 @@
, fetchurl, perl
}:

assert stdenvNoCC.hostPlatform.isLinux;

let
common = { version, sha256, patches ? null }: stdenvNoCC.mkDerivation {
name = "linux-headers-${version}";
Expand All @@ -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.
Expand Down
8 changes: 8 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -9507,6 +9507,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;
Expand Down

0 comments on commit d1593ba

Please sign in to comment.