diff --git a/pkgs/development/interpreters/perl/fix-build-with-only-C-locale-5.40.0.patch b/pkgs/development/interpreters/perl/fix-build-with-only-C-locale-5.40.0.patch new file mode 100644 index 000000000000..9f9e1e96f619 --- /dev/null +++ b/pkgs/development/interpreters/perl/fix-build-with-only-C-locale-5.40.0.patch @@ -0,0 +1,57 @@ +From bd0ab509f890a6638bd5033ef58526f8c74f7e4b Mon Sep 17 00:00:00 2001 +From: Andrei Horodniceanu +Date: Wed, 4 Sep 2024 12:46:44 +0300 +Subject: [PATCH] locale.c: Fix compilation on platforms with only a C locale + +Signed-off-by: Andrei Horodniceanu +--- + AUTHORS | 1 + + locale.c | 16 ++++++++++++++++ + 2 files changed, 17 insertions(+) + +diff --git a/AUTHORS b/AUTHORS +index b2e0bf2043a9..b196b93bda13 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -103,6 +103,7 @@ Andreas König + Andreas Marienborg + Andreas Schwab + Andreas Voegele ++Andrei Horodniceanu + Andrei Yelistratov + Andrej Borsenkow + Andrew Bettison +diff --git a/locale.c b/locale.c +index 168b94914318..d764b4b3c11e 100644 +--- a/locale.c ++++ b/locale.c +@@ -8963,6 +8963,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn) + * categories into our internal indices. */ + if (map_LC_ALL_position_to_index[0] == LC_ALL_INDEX_) { + ++# ifdef PERL_LC_ALL_CATEGORY_POSITIONS_INIT + /* Use this array, initialized by a config.h constant */ + int lc_all_category_positions[] = PERL_LC_ALL_CATEGORY_POSITIONS_INIT; + STATIC_ASSERT_STMT( C_ARRAY_LENGTH(lc_all_category_positions) +@@ -8975,6 +8976,21 @@ Perl_init_i18nl10n(pTHX_ int printwarn) + map_LC_ALL_position_to_index[i] = + get_category_index(lc_all_category_positions[i]); + } ++# else ++ /* It is possible for both PERL_LC_ALL_USES_NAME_VALUE_PAIRS and ++ * PERL_LC_ALL_CATEGORY_POSITIONS_INIT not to be defined, e.g. on ++ * systems with only a C locale during ./Configure. Assume that this ++ * can only happen as part of some sort of bootstrapping so allow ++ * compilation to succeed by ignoring correctness. ++ */ ++ for (unsigned int i = 0; ++ i < C_ARRAY_LENGTH(map_LC_ALL_position_to_index); ++ i++) ++ { ++ map_LC_ALL_position_to_index[i] = 0; ++ } ++# endif ++ + } + + LOCALE_UNLOCK; diff --git a/pkgs/development/interpreters/perl/interpreter.nix b/pkgs/development/interpreters/perl/interpreter.nix index f04b352388ec..4b929f2c5d1d 100644 --- a/pkgs/development/interpreters/perl/interpreter.nix +++ b/pkgs/development/interpreters/perl/interpreter.nix @@ -67,6 +67,9 @@ stdenv.mkDerivation (rec { ++ lib.optional ((lib.versions.majorMinor version) == "5.38") ./no-sys-dirs-5.38.0.patch ++ lib.optional ((lib.versions.majorMinor version) == "5.40") ./no-sys-dirs-5.40.0.patch + # Fix compilation on platforms with only a C locale: https://github.com/Perl/perl5/pull/22569 + ++ lib.optional (version == "5.40.0") ./fix-build-with-only-C-locale-5.40.0.patch + ++ lib.optional stdenv.hostPlatform.isSunOS ./ld-shared.patch ++ lib.optionals stdenv.hostPlatform.isDarwin [ ./cpp-precomp.patch ./sw_vers.patch ] ++ lib.optional (crossCompiling && (lib.versionAtLeast version "5.40.0")) ./cross540.patch diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 49d75cbf8a00..b8111f34e30a 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -308,8 +308,7 @@ in # This is not an issue for the final stdenv, because this perl # won't be included in the final stdenv and won't be exported to # top-level pkgs as an override either. - # FIXME: Pinning this stage to 538 as 540 doesn't build in stage1 atm - perl = super.perl538.override { enableThreading = false; enableCrypt = false; }; + perl = super.perl.override { enableThreading = false; enableCrypt = false; }; }; # `gettext` comes with obsolete config.sub/config.guess that don't recognize LoongArch64.