Skip to content

Commit

Permalink
glibc: Simplify derivation further
Browse files Browse the repository at this point in the history
No native hashes should be changed with this commit
default.nix's cross hash should also not be changed
  • Loading branch information
Ericson2314 committed May 21, 2017
1 parent 7e09602 commit 25edc47
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 72 deletions.
64 changes: 50 additions & 14 deletions pkgs/development/libraries/glibc/common.nix
Original file line number Diff line number Diff line change
@@ -1,26 +1,34 @@
/* Build configuration used to build glibc, Info files, and locale
information. */

cross:

{ name, fetchurl, lib, stdenv, installLocales ? false
, linuxHeaders ? null
, profilingLibraries ? false, meta
, withGd ? false, gd ? null, libpng ? null
, preConfigure ? ""
, buildPackages ? {}
{ stdenv, lib, fetchurl
, gd ? null, libpng ? null
, buildPlatform, hostPlatform
, buildPackages
}:

{ name
, withLinuxHeaders ? false
, profilingLibraries ? false
, installLocales ? false
, withGd ? false
, meta
, ...
} @ args:

let
inherit (buildPackages) linuxHeaders;
version = "2.25";
sha256 = "067bd9bb3390e79aa45911537d13c3721f1d9d3769931a30c2681bfee66f23a0";
cross = if buildPlatform != hostPlatform then hostPlatform else null;
in

assert cross != null -> buildPackages.stdenv ? cc;
assert withLinuxHeaders -> linuxHeaders != null;
assert withGd -> gd != null && libpng != null;

stdenv.mkDerivation ({
inherit linuxHeaders installLocales;
inherit installLocales;
linuxHeaders = if withLinuxHeaders then linuxHeaders else null;

# The host/target system.
crossConfig = if cross != null then cross.config else null;
Expand Down Expand Up @@ -87,13 +95,13 @@ stdenv.mkDerivation ({
"--enable-obsolete-rpc"
"--sysconfdir=/etc"
"--enable-stackguard-randomization"
(if linuxHeaders != null
(if withLinuxHeaders
then "--with-headers=${linuxHeaders}/include"
else "--without-headers")
(if profilingLibraries
then "--enable-profile"
else "--disable-profile")
] ++ lib.optionals (cross == null && linuxHeaders != null) [
] ++ lib.optionals (cross == null && withLinuxHeaders) [
"--enable-kernel=2.6.32"
] ++ lib.optionals (cross != null) [
(if cross.withTLS then "--with-tls" else "--without-tls")
Expand Down Expand Up @@ -125,7 +133,7 @@ stdenv.mkDerivation ({
BASH_SHELL = "/bin/sh";
}

// (removeAttrs args [ "lib" "buildPackages" "fetchurl" "withGd" "gd" "libpng" ]) //
// (removeAttrs args [ "withLinuxHeaders" "withGd" ]) //

{
name = name + "-${version}" +
Expand Down Expand Up @@ -154,7 +162,22 @@ stdenv.mkDerivation ({
''makeFlags="$makeFlags BUILD_LDFLAGS=-Wl,-rpath,${stdenv.cc.libc}/lib"''
}
${preConfigure}
'' + lib.optionalString (cross != null) ''
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
# Only due to a problem in gcc configure scripts:
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
EOF
export BUILD_CC=gcc
export CC="$crossConfig-gcc"
export AR="$crossConfig-ar"
export RANLIB="$crossConfig-ranlib"
'';

preBuild = lib.optionalString withGd "unset NIX_DONT_SET_RPATH";
Expand All @@ -177,4 +200,17 @@ stdenv.mkDerivation ({
maintainers = [ lib.maintainers.eelco ];
platforms = lib.platforms.linux;
} // meta;
}

// lib.optionalAttrs (cross != null) {
preInstall = null; # clobber the native hook

dontStrip = true;

separateDebugInfo = false; # this is currently broken for crossDrv

# To avoid a dependency on the build system 'bash'.
preFixup = ''
rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
'';
})
52 changes: 6 additions & 46 deletions pkgs/development/libraries/glibc/default.nix
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
{ lib, stdenv, fetchurl
{ stdenv, callPackage
, withLinuxHeaders ? true
, installLocales ? true
, profilingLibraries ? false
, withGd ? false, gd ? null, libpng ? null
, buildPlatform, hostPlatform
, buildPackages
, withGd ? false
}:

assert stdenv.cc.isGNU;

let
build = import ./common.nix;
cross = if buildPlatform != hostPlatform then hostPlatform else null;
inherit (buildPackages) linuxHeaders;
in
build cross ({
name = "glibc" + lib.optionalString withGd "-gd";
callPackage ./common.nix { inherit stdenv; } {
name = "glibc" + stdenv.lib.optionalString withGd "-gd";

inherit lib stdenv buildPackages fetchurl linuxHeaders installLocales
profilingLibraries withGd gd libpng;
inherit withLinuxHeaders profilingLibraries installLocales withGd;

NIX_NO_SELF_RPATH = true;

Expand Down Expand Up @@ -106,36 +99,3 @@ in

meta.description = "The GNU C Library";
}

//

(if cross != null
then {
preConfigure = ''
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
# Only due to a problem in gcc configure scripts:
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
EOF
export BUILD_CC=gcc
export CC="$crossConfig-gcc"
export AR="$crossConfig-ar"
export RANLIB="$crossConfig-ranlib"
dontStrip=1
'';

preInstall = null; # clobber the native hook

separateDebugInfo = false; # this is currently broken for crossDrv

# To avoid a dependency on the build system 'bash'.
preFixup = ''
rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
'';
}
else {}))
9 changes: 2 additions & 7 deletions pkgs/development/libraries/glibc/info.nix
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
{ lib, stdenv, fetchurl, texinfo, perl }:
{ callPackage, texinfo, perl }:

let build = import ./common.nix; in

/* null cross builder */
build null {
callPackage ./common.nix {} {
name = "glibc-info";

inherit fetchurl stdenv lib;

outputs = [ "out" ];

configureFlags = [ "--enable-add-ons" ];
Expand Down
9 changes: 4 additions & 5 deletions pkgs/development/libraries/glibc/locales.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc
*/

{ lib, stdenv, fetchurl, writeText, allLocales ? true, locales ? ["en_US.UTF-8/UTF-8"] }:
{ stdenv, callPackage, writeText
, allLocales ? true, locales ? [ "en_US.UTF-8/UTF-8" ]
}:

let build = import ./common.nix; in

build null {
callPackage ./common.nix { inherit stdenv; } {
name = "glibc-locales";

inherit fetchurl stdenv lib;
installLocales = true;

builder = ./locales-builder.sh;
Expand Down
1 change: 1 addition & 0 deletions pkgs/top-level/release-cross.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ let
common = {
buildPackages.binutils = nativePlatforms;
gmp = nativePlatforms;
libcCross = nativePlatforms;
};

gnuCommon = lib.recursiveUpdate common {
Expand Down

0 comments on commit 25edc47

Please sign in to comment.