summary refs log tree commit diff
diff options
context:
space:
mode:
authorRandy Eckenrode <randy@largeandhighquality.com>2023-10-27 16:38:20 -0400
committerRandy Eckenrode <randy@largeandhighquality.com>2023-10-29 09:58:01 -0400
commitb034e4cbf12f7c0d749674c102e31e6a47fa2d7f (patch)
treefff7ccc49b7a805881e19a661259a0e150795ae0
parent81d2db9460d74688a64d63fe2b31ddab46560848 (diff)
downloadnixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar.gz
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar.bz2
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar.lz
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar.xz
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.tar.zst
nixpkgs-b034e4cbf12f7c0d749674c102e31e6a47fa2d7f.zip
nodejs_18: fix build with clang 16 mk2
Trying to backport the fixes from v8 caused crashes with npm when
building other packages, so just build it with clang 15.
-rw-r--r--pkgs/development/web/nodejs/v18.nix14
1 files changed, 13 insertions, 1 deletions
diff --git a/pkgs/development/web/nodejs/v18.nix b/pkgs/development/web/nodejs/v18.nix
index 3c8abbb2918..b36e8e3d0f3 100644
--- a/pkgs/development/web/nodejs/v18.nix
+++ b/pkgs/development/web/nodejs/v18.nix
@@ -1,8 +1,20 @@
-{ callPackage, fetchpatch, openssl, python3, enableNpm ? true }:
+{ callPackage, lib, overrideCC, pkgs, buildPackages, fetchpatch, openssl, python3, enableNpm ? true }:
 
 let
+  # Clang 16+ cannot build Node v18 due to -Wenum-constexpr-conversion errors.
+  # Use an older version of clang with the current libc++ for compatibility (e.g., with icu).
+  ensureCompatibleCC = packages:
+    if packages.stdenv.cc.isClang && lib.versionAtLeast (lib.getVersion packages.stdenv.cc.cc) "16"
+      then overrideCC packages.llvmPackages_15.stdenv (packages.llvmPackages_15.stdenv.cc.override {
+        inherit (packages.llvmPackages) libcxx;
+        extraPackages = [ packages.llvmPackages.libcxxabi ];
+      })
+      else packages.stdenv;
+
   buildNodejs = callPackage ./nodejs.nix {
     inherit openssl;
+    stdenv = ensureCompatibleCC pkgs;
+    buildPackages = buildPackages // { stdenv = ensureCompatibleCC buildPackages; };
     python = python3;
   };
 in