Skip to content

Commit

Permalink
glibc: use (lib.getBin pkgsBuildBuild.glibc) to generate locales
Browse files Browse the repository at this point in the history
This is an alternative resolution of the problem identified in

  #259964

which stated that "glibc depends on buildPackages.glibc for locale
things.  buildPackages.glibc depended on buildPackages.libgcc,
which, since it's GCC, depends on the target's bintools, which
depend on the target's glibc, which, again, depends on
buildPackages.glibc, causing an infinute recursion when evaluating
buildPackages.glibc when glibc hasn't come from stdenv (e.g. on
musl)."

The fact that we use pkgsBuildHost.glibc instead of
pkgsBuildBuild.glibc to generate the locales has always been a gross
hack.  If we simply remove the gross hack the circularity goes away.
  • Loading branch information
Adam Joseph authored and Adam Joseph committed Oct 26, 2023
1 parent 5c7aa4a commit 27a73cd
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions pkgs/development/libraries/glibc/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
, profilingLibraries ? false
, withGd ? false
, withLibcrypt? false
, buildPackages
, pkgsBuildBuild
, libgcc
}:

Expand Down Expand Up @@ -98,14 +98,23 @@ in
postInstall = previousAttrs.postInstall + (if stdenv.hostPlatform == stdenv.buildPlatform then ''
echo SUPPORTED-LOCALES=C.UTF-8/UTF-8 > ../glibc-2*/localedata/SUPPORTED
make -j''${NIX_BUILD_CORES:-1} localedata/install-locales
'' else lib.optionalString stdenv.buildPlatform.isLinux ''
'' else lib.optionalString stdenv.buildPlatform.isLinux
# This is based on http://www.linuxfromscratch.org/lfs/view/development/chapter06/glibc.html
# Instead of using their patch to build a build-native localedef,
# we simply use the one from buildPackages
# we simply use the one from pkgsBuildBuild.
#
# Note that we can't use pkgsBuildHost (aka buildPackages) here, because
# that will cause an eval-time infinite recursion: "buildPackages.glibc
# depended on buildPackages.libgcc, which, since it's GCC, depends on the
# target's bintools, which depend on the target's glibc, which, again,
# depends on buildPackages.glibc, causing an infinute recursion when
# evaluating buildPackages.glibc when glibc hasn't come from stdenv
# (e.g. on musl)." https://github.com/NixOS/nixpkgs/pull/259964
''
pushd ../glibc-2*/localedata
export I18NPATH=$PWD GCONV_PATH=$PWD/../iconvdata
mkdir -p $NIX_BUILD_TOP/${buildPackages.glibc}/lib/locale
${lib.getBin buildPackages.glibc}/bin/localedef \
mkdir -p $NIX_BUILD_TOP/${pkgsBuildBuild.glibc}/lib/locale
${lib.getBin pkgsBuildBuild.glibc}/bin/localedef \
--alias-file=../intl/locale.alias \
-i locales/C \
-f charmaps/UTF-8 \
Expand All @@ -115,7 +124,7 @@ in
else
"--big-endian"} \
C.UTF-8
cp -r $NIX_BUILD_TOP/${buildPackages.glibc}/lib/locale $out/lib
cp -r $NIX_BUILD_TOP/${pkgsBuildBuild.glibc}/lib/locale $out/lib
popd
'') + ''
Expand Down

0 comments on commit 27a73cd

Please sign in to comment.