From 405aae9d75af234b175647a4bfa7078a7694257d Mon Sep 17 00:00:00 2001
From: Peter Marton <peter.marton@rockstargames.com>
Date: Fri, 1 Nov 2024 16:14:53 +0100
Subject: [PATCH] build libuv as shared

---
 .github/workflows/build.yml |  4 +++
 patches/libuv_shared.patch  | 68 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 patches/libuv_shared.patch

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ea8d97f..b204e84 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -83,7 +83,11 @@ jobs:
             ${{ github.workspace }}/libnode-Windows-x64/libnode22.dll
             ${{ github.workspace }}/libnode-Windows-x64/libnode22.lib
             ${{ github.workspace }}/libnode-Windows-x64/libnode22.pdb
+            ${{ github.workspace }}/libnode-Windows-x64/libuv.dll
+            ${{ github.workspace }}/libnode-Windows-x64/libuv.lib
+            ${{ github.workspace }}/libnode-Windows-x64/libuv.so
             ${{ github.workspace }}/libnode-Linux-x64/libnode22.so
+            ${{ github.workspace }}/libnode-Linux-x64/libuv.so
 
       - name: Delete artifacts
         uses: geekyeggo/delete-artifact@v5
diff --git a/patches/libuv_shared.patch b/patches/libuv_shared.patch
new file mode 100644
index 0000000..7e6c59a
--- /dev/null
+++ b/patches/libuv_shared.patch
@@ -0,0 +1,68 @@
+diff --git a/common.gypi b/common.gypi
+index de83a56672..1f5c1781bb 100644
+--- a/common.gypi
++++ b/common.gypi
+@@ -23,7 +23,7 @@
+     'node_shared_openssl%': 'false',
+ 
+     'node_tag%': '',
+-    'uv_library%': 'static_library',
++    'uv_library%': 'shared_library',
+ 
+     'clang%': 0,
+     'error_on_warn%': 'false',
+diff --git a/deps/uv/uv.gyp b/deps/uv/uv.gyp
+index 6c86c3fa50..589b7b0a31 100644
+--- a/deps/uv/uv.gyp
++++ b/deps/uv/uv.gyp
+@@ -151,6 +151,20 @@
+   },
+ 
+   'targets': [
++  {
++    'target_name': 'libuv_postbuild',
++    'type': 'none',
++    'dependencies': ['libuv'],
++    'copies': [{
++      'destination': '<(PRODUCT_DIR)/lib',
++      'files': [
++        '<(PRODUCT_DIR)/libuv<(STATIC_LIB_SUFFIX)',
++      ],
++      'conditions': [
++        ['OS=="win"', {}],
++      ]
++    }],
++  },
+     {
+       'target_name': 'libuv',
+       'toolsets': ['host', 'target'],
+@@ -246,7 +260,7 @@
+               # This will cause gyp to set soname
+               # Must correspond with UV_VERSION_MAJOR
+               # in include/uv/version.h
+-              'product_extension': 'so.1',
++              'product_extension': 'so',
+             }],
+           ],
+         }],
+diff --git a/node.gyp b/node.gyp
+index 11474953b1..a45c909938 100644
+--- a/node.gyp
++++ b/node.gyp
+@@ -19,7 +19,7 @@
+     'node_shared_zlib%': 'false',
+     'node_shared_http_parser%': 'false',
+     'node_shared_cares%': 'false',
+-    'node_shared_libuv%': 'false',
++    'node_shared_libuv%': 'true',
+     'node_shared_sqlite%': 'false',
+     'node_shared_uvwasi%': 'false',
+     'node_shared_nghttp2%': 'false',
+@@ -863,6 +863,7 @@
+         'deps/ada/ada.gyp:ada',
+         'deps/nbytes/nbytes.gyp:nbytes',
+         'node_js2c#host',
++        'deps/uv/uv.gyp:libuv_postbuild',
+       ],
+ 
+       'sources': [