glibc: fix locale fallback on non-nixos systems
There is a nixpkgs' glibc patch that makes it look at environment variables to locate the locale-archive. It has a fallback to /usr/lib/locale/locale-archive, which is a pretty good one since nearly all non-nixos systems use that exact path since glibc hard codes it looking at PREFIX/lib/locale/locale-archive. IE debian/EL/Arch/Gentoo and others all use the same path for locale-archive. That hard coding in glibc is why nixpkgs even has this patch in the first place. Other wise you would need to rebuild every single package whenever you wanted to change the locale-archive at runtime. The problem with that final fallback is that glibc in nixpkgs includes a minimal locale-archive with just C.UTF-8. It does this so tests that require UTF-8 support can work in nixpkgs. The current patch will _always_ find the minimal locale-archive and never actually fall back to the system one. This can be very confusing, especially when looking at the patch and wondering why your CI system is throwing locale errors. Eventually you realize that some test sanitizes the environment, but still confused since it should fall back to the system's locale-archive. On systems that do not set LOCALE_ARCHIVE and do not have /usr/lib/locale/locale-archive then we fall back to that super minimal locale-archive included with the default nixpkgs' glibc. Testing: == Before == % env -u LOCALE_ARCHIVE_2_27 -u LOCALE_ARCHIVE LANG=en_US.UTF-8 /nix/store/gdq185xa4cmka46nv67vkmjlmkd9yr1k-cowsay-3.8.3/bin/cowsay hello perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "", LC_ALL = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). _______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || == After == % env -u LOCALE_ARCHIVE_2_27 -u LOCALE_ARCHIVE LANG=en_US.UTF-8 /nix/store/hhc2gzs6gax4frk8985w2ada2ra35zyw-cowsay-3.8.3/bin/cowsay hello _______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || === On NixOS === % env -u LOCALE_ARCHIVE_2_27 -u LOCALE_ARCHIVE LANG=en_US.UTF-8 /nix/store/hhc2gzs6gax4frk8985w2ada2ra35zyw-cowsay-3.8.3/bin/cowsay hello perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = (unset), LC_NUMERIC = (unset), LC_COLLATE = (unset), LC_TIME = (unset), LC_MESSAGES = (unset), LC_MONETARY = (unset), LC_ADDRESS = (unset), LC_IDENTIFICATION = (unset), LC_MEASUREMENT = (unset), LC_PAPER = (unset), LC_TELEPHONE = (unset), LC_NAME = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). _______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || === Still can get the minimal locale-archive included with glibc === % env -u LOCALE_ARCHIVE_2_27 -u LOCALE_ARCHIVE LANG=C.UTF-8 /nix/store/hhc2gzs6gax4frk8985w2ada2ra35zyw-cowsay-3.8.3/bin/cowsay hello _______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
This commit is contained in:
parent
9fda0f5ae0
commit
de64f49396
@ -17,9 +17,9 @@ index 512769eaec..171dbb4ad9 100644
|
||||
+ if (path && fd < 0)
|
||||
+ fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ fd = __open_nocancel ("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);
|
||||
+ return fd;
|
||||
+}
|
||||
+
|
||||
@ -64,9 +64,9 @@ index ca0a95be99..e484783402 100644
|
||||
+ if (path && fd < 0)
|
||||
+ fd = open64 (path, O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ fd = open64 (ARCHIVE_NAME, O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ fd = open64 ("/usr/lib/locale/locale-archive", O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ fd = open64 (ARCHIVE_NAME, O_RDONLY);
|
||||
+ return fd;
|
||||
+}
|
||||
+
|
||||
|
Loading…
x
Reference in New Issue
Block a user