From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shelley Vohr <shelley.vohr@gmail.com>
Date: Sun, 17 Nov 2024 22:33:19 +0100
Subject: build: allow unbundling of Node.js dependencies

Linux distributions have guidelines on using distro-provided dependencies,
rather than compiling them in statically.

This PR this enables downstream packagers to unbundle these dependencies.
We don't need to do this for zlib, as the existing gn workflow uses the same
//third_party/zlib, so unbundling zlib with Chromium tools in
//build/linux/unbundle works already. This adds support for some of the others.

Upstreamed at https://github.com/nodejs/node/pull/55903

diff --git a/unofficial.gni b/unofficial.gni
index 26ebc811272ef2990f8d090c54e7f5294aab9d37..8886f2a79ae77614789d6ae0defd4f18fc756456 100644
--- a/unofficial.gni
+++ b/unofficial.gni
@@ -160,7 +160,6 @@ template("node_gn_build") {
       ":run_node_js2c",
       "deps/cares",
       "deps/histogram",
-      "deps/llhttp",
       "deps/nbytes",
       "deps/nghttp2",
       "deps/postject",
@@ -198,7 +197,17 @@ template("node_gn_build") {
       configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
       configs += [ "//build/config/gcc:symbol_visibility_default" ]
     }
-
+    if (use_system_llhttp) {
+      libs += [ "llhttp" ]
+    } else {
+      deps += [ "deps/llhttp" ]
+    }
+    if (use_system_histogram) {
+      libs += [ "hdr_histogram" ]
+      include_dirs += [ "/usr/include/hdr" ]
+    } else {
+      deps += [ "deps/histogram" ]
+    }
     if (v8_enable_i18n_support) {
       deps += [ "//third_party/icu" ]
     }
@@ -231,6 +240,19 @@ template("node_gn_build") {
       sources += node_inspector.node_inspector_sources +
                  node_inspector.node_inspector_generated_sources
     }
+    if (is_linux) {
+      import("//build/config/linux/pkg_config.gni")
+        if (use_system_cares) {
+          pkg_config("cares") {
+            packages = [ "libcares" ]
+          }
+        }
+      if (use_system_nghttp2) {
+        pkg_config("nghttp2") {
+          packages = [ "libnghttp2" ]
+        }
+      }
+    }
   }
 
   config("zstd_include_config") {
