From 31fc553efc840fc5404d04776dff40074d05dd06 Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Tue, 13 Jun 2023 22:28:36 +0200
Subject: [PATCH 1/7] Build libnode from source

---
 cmake/ports/node/portfile.cmake | 62 +++++++++++++++++++++++++--------
 1 file changed, 48 insertions(+), 14 deletions(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index 5a203e06a9..eca5337352 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -26,12 +26,41 @@ elseif (APPLE)
 else ()
     # else Linux desktop
     if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
-        vcpkg_download_distfile(
-            NODE_SOURCE_ARCHIVE
-            URLS "${EXTERNAL_BUILD_ASSETS}/dependencies/node/node-install-18.14.2-ubuntu-18.04-amd64-release.tar.xz"
-            SHA512 ff5ca5c27b811d20ac524346ee122bcd72e9e85c6de6f4799f620bb95dac959ce910cc5bb2162ed741a7f65043aa78173ecd2ce5b92f5a4d91ecb07ce71fa560
-            FILENAME node-install-18.14.2-ubuntu-18.04-amd64-release.tar.xz
+        #vcpkg_download_distfile(
+        #    NODE_SOURCE_ARCHIVE
+        #    URLS "https://daleglass.eu-central-1.linodeobjects.com/node-install-18.14.2-ubuntu-18.04-amd64-patched.tar.xz"
+        #    SHA512 ecaf8139cd9e49528db349cf17b16b477b6153b8c8d9b08e7aea9cb378dd5126fa0a9a0f97bb6987da452c351047dec5abfede92404d7d940edeecb248b6b8b7
+        #    FILENAME node-install-18.14.2-ubuntu-18.04-amd64-release.tar.xz
+        #)
+        vcpkg_from_github(
+            OUT_SOURCE_PATH
+            SOURCE_PATH
+            REPO
+            nodejs/node
+            REF
+            v18.16.0
+            SHA512
+            9b983b899acd02e7ed761bc3633fc56855e10335fcdb558a29d1cf068ce1125991c9a781616d82a9dc90be6e8ba1bf4a34a10a92c6b7db9cbe33ef7fa7dda67f
+            HEAD_REF
+            v18.16.0
         )
+        file(COPY ${SOURCE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}")
+        vcpkg_execute_build_process(
+            COMMAND ./configure --gdb --shared --v8-enable-object-print --shared-openssl --prefix=${CURRENT_BUILDTREES_DIR}/node-install/
+            WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+            LOGNAME "configure-node"
+        )
+        vcpkg_execute_build_process(
+                COMMAND make -j20
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                LOGNAME "make-node"
+        )
+        vcpkg_execute_build_process(
+                COMMAND make -j20 install
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                LOGNAME "install-node"
+        )
+        set(NODE_INSTALL_PATH ${CURRENT_BUILDTREES_DIR})
     elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
             vcpkg_download_distfile(
             NODE_SOURCE_ARCHIVE
@@ -42,18 +71,23 @@ else ()
     endif ()
 endif ()
 
-vcpkg_extract_source_archive(MASTER_COPY_SOURCE_PATH ARCHIVE ${NODE_SOURCE_ARCHIVE} NO_REMOVE_ONE_LEVEL)
+if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+
+else()
+    vcpkg_extract_source_archive(SOURCE_PATH ARCHIVE ${NODE_SOURCE_ARCHIVE} NO_REMOVE_ONE_LEVEL)
+    set(NODE_INSTALL_PATH ${MASTER_COPY_SOURCE_PATH})
+endif()
 
 # move WIN dll to /bin and WIN .lib to /lib
 
 if (WIN32)
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/include DESTINATION ${CURRENT_PACKAGES_DIR})
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/libnode.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/v8_libplatform.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/libnode.dll DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
+    file(COPY ${NODE_INSTALL_PATH}/node-install/include DESTINATION ${CURRENT_PACKAGES_DIR})
+    file(COPY ${NODE_INSTALL_PATH}/node-install/libnode.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+    file(COPY ${NODE_INSTALL_PATH}/node-install/v8_libplatform.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+    file(COPY ${NODE_INSTALL_PATH}/node-install/libnode.dll DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
 else ()
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/include DESTINATION ${CURRENT_PACKAGES_DIR})
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/lib DESTINATION ${CURRENT_PACKAGES_DIR})
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/share DESTINATION ${CURRENT_PACKAGES_DIR})
-    file(COPY ${MASTER_COPY_SOURCE_PATH}/node-install/bin DESTINATION ${CURRENT_PACKAGES_DIR})
+    file(COPY ${NODE_INSTALL_PATH}/node-install/include DESTINATION ${CURRENT_PACKAGES_DIR})
+    file(COPY ${NODE_INSTALL_PATH}/node-install/lib DESTINATION ${CURRENT_PACKAGES_DIR})
+    file(COPY ${NODE_INSTALL_PATH}/node-install/share DESTINATION ${CURRENT_PACKAGES_DIR})
+    file(COPY ${NODE_INSTALL_PATH}/node-install/bin DESTINATION ${CURRENT_PACKAGES_DIR})
 endif ()

From 7da45e2d64286683860a543c96006aa7eaaafdd2 Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Wed, 14 Jun 2023 22:02:50 +0200
Subject: [PATCH 2/7] Fixed number of jobs for libnode build

---
 cmake/ports/node/portfile.cmake | 44 +++++++++++++++++++++++----------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index eca5337352..67760c0134 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -26,12 +26,6 @@ elseif (APPLE)
 else ()
     # else Linux desktop
     if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
-        #vcpkg_download_distfile(
-        #    NODE_SOURCE_ARCHIVE
-        #    URLS "https://daleglass.eu-central-1.linodeobjects.com/node-install-18.14.2-ubuntu-18.04-amd64-patched.tar.xz"
-        #    SHA512 ecaf8139cd9e49528db349cf17b16b477b6153b8c8d9b08e7aea9cb378dd5126fa0a9a0f97bb6987da452c351047dec5abfede92404d7d940edeecb248b6b8b7
-        #    FILENAME node-install-18.14.2-ubuntu-18.04-amd64-release.tar.xz
-        #)
         vcpkg_from_github(
             OUT_SOURCE_PATH
             SOURCE_PATH
@@ -50,16 +44,40 @@ else ()
             WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
             LOGNAME "configure-node"
         )
-        vcpkg_execute_build_process(
-                COMMAND make -j20
+        if(VCPKG_MAX_CONCURRENCY GREATER 0)
+            vcpkg_execute_build_process(
+                COMMAND make -j${VCPKG_MAX_CONCURRENCY}
                 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
                 LOGNAME "make-node"
-        )
-        vcpkg_execute_build_process(
-                COMMAND make -j20 install
+            )
+            vcpkg_execute_build_process(
+                    COMMAND make -j${VCPKG_MAX_CONCURRENCY} install
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    LOGNAME "install-node"
+            )
+        elseif (VCPKG_CONCURRENCY GREATER 0)
+            vcpkg_execute_build_process(
+                COMMAND make -j${VCPKG_CONCURRENCY}
                 WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
-                LOGNAME "install-node"
-        )
+                LOGNAME "make-node"
+            )
+            vcpkg_execute_build_process(
+                    COMMAND make -j${VCPKG_CONCURRENCY} install
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    LOGNAME "install-node"
+            )
+        else ()
+            vcpkg_execute_build_process(
+                COMMAND make -j$(nproc)
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                LOGNAME "make-node"
+            )
+            vcpkg_execute_build_process(
+                    COMMAND make -j$(nproc) install
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    LOGNAME "install-node"
+            )
+        endif ()
         set(NODE_INSTALL_PATH ${CURRENT_BUILDTREES_DIR})
     elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
             vcpkg_download_distfile(

From 1f7b4ef350f7685cfad8ab3d9a64da057b4b14e0 Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Thu, 15 Jun 2023 23:57:27 +0200
Subject: [PATCH 3/7] Fix libnode vcpkg failure on Windows

---
 cmake/ports/node/portfile.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index 67760c0134..9ecd006993 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -89,7 +89,7 @@ else ()
     endif ()
 endif ()
 
-if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+if (NODE_INSTALL_PATH)
 
 else()
     vcpkg_extract_source_archive(SOURCE_PATH ARCHIVE ${NODE_SOURCE_ARCHIVE} NO_REMOVE_ONE_LEVEL)

From bb428edcac4aaf7c584ce6d6af23c6a570dd720a Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Fri, 16 Jun 2023 13:20:51 +0200
Subject: [PATCH 4/7] Another fix for libnode portfile on Windows

---
 .gitignore                      | 1 +
 cmake/ports/node/portfile.cmake | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 91e80c1fb0..bbcbadf2b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ cmake-build-minsizerelease-visual-studio/
 cmake-build-release-visual-studio/
 cmake-build-relwithdebinfo-visual-studio/
 cmake-build-debug-visual-studio/
+cmake-build-debug/
 /release*/
 /debug*/
 /gprof*/
diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index 9ecd006993..7667f475c8 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -92,7 +92,7 @@ endif ()
 if (NODE_INSTALL_PATH)
 
 else()
-    vcpkg_extract_source_archive(SOURCE_PATH ARCHIVE ${NODE_SOURCE_ARCHIVE} NO_REMOVE_ONE_LEVEL)
+    vcpkg_extract_source_archive(MASTER_COPY_SOURCE_PATH ARCHIVE ${NODE_SOURCE_ARCHIVE} NO_REMOVE_ONE_LEVEL)
     set(NODE_INSTALL_PATH ${MASTER_COPY_SOURCE_PATH})
 endif()
 

From d6e5b5faf72bdde918ba878e1b3eed003f7b1ec4 Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Sun, 18 Jun 2023 23:45:08 +0200
Subject: [PATCH 5/7] Fixed formatting and added a comment

---
 cmake/ports/node/portfile.cmake | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index 7667f475c8..aaf10f35dd 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -27,17 +27,13 @@ else ()
     # else Linux desktop
     if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
         vcpkg_from_github(
-            OUT_SOURCE_PATH
-            SOURCE_PATH
-            REPO
-            nodejs/node
-            REF
-            v18.16.0
-            SHA512
-            9b983b899acd02e7ed761bc3633fc56855e10335fcdb558a29d1cf068ce1125991c9a781616d82a9dc90be6e8ba1bf4a34a10a92c6b7db9cbe33ef7fa7dda67f
-            HEAD_REF
-            v18.16.0
+            OUT_SOURCE_PATH SOURCE_PATH
+            REPO nodejs/node
+            REF v18.16.0
+            SHA512 9b983b899acd02e7ed761bc3633fc56855e10335fcdb558a29d1cf068ce1125991c9a781616d82a9dc90be6e8ba1bf4a34a10a92c6b7db9cbe33ef7fa7dda67f
+            HEAD_REF v18.16.0
         )
+        # v18.16.0-e8bd828d3a.clean is getting added by VCPKG. It will need to be updated when we update libnode version.
         file(COPY ${SOURCE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}")
         vcpkg_execute_build_process(
             COMMAND ./configure --gdb --shared --v8-enable-object-print --shared-openssl --prefix=${CURRENT_BUILDTREES_DIR}/node-install/

From 69ab504349e322d292f0c180bb7881d2757910b7 Mon Sep 17 00:00:00 2001
From: ksuprynowicz <ksuprynowicz@post.pl>
Date: Sun, 18 Jun 2023 23:51:18 +0200
Subject: [PATCH 6/7] Libnode portfile cleanup

---
 cmake/ports/node/portfile.cmake | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index aaf10f35dd..c3b6397181 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -34,43 +34,44 @@ else ()
             HEAD_REF v18.16.0
         )
         # v18.16.0-e8bd828d3a.clean is getting added by VCPKG. It will need to be updated when we update libnode version.
+        set(NODE_SOURCE_DIRECTORY_NAME "v18.16.0-e8bd828d3a.clean")
         file(COPY ${SOURCE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}")
         vcpkg_execute_build_process(
             COMMAND ./configure --gdb --shared --v8-enable-object-print --shared-openssl --prefix=${CURRENT_BUILDTREES_DIR}/node-install/
-            WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+            WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
             LOGNAME "configure-node"
         )
         if(VCPKG_MAX_CONCURRENCY GREATER 0)
             vcpkg_execute_build_process(
                 COMMAND make -j${VCPKG_MAX_CONCURRENCY}
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j${VCPKG_MAX_CONCURRENCY} install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                     LOGNAME "install-node"
             )
         elseif (VCPKG_CONCURRENCY GREATER 0)
             vcpkg_execute_build_process(
                 COMMAND make -j${VCPKG_CONCURRENCY}
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j${VCPKG_CONCURRENCY} install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                     LOGNAME "install-node"
             )
         else ()
             vcpkg_execute_build_process(
                 COMMAND make -j$(nproc)
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j$(nproc) install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/v18.16.0-e8bd828d3a.clean
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
                     LOGNAME "install-node"
             )
         endif ()

From df4621b1621d84c5d0f809a2f81c8ad8b2751ac3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Julian=20Gro=C3=9F?= <julian.g@posteo.de>
Date: Mon, 19 Jun 2023 12:49:14 +0200
Subject: [PATCH 7/7] Get rid of need for NODE_SOURCE_DIRECTORY_NAME

---
 cmake/ports/node/portfile.cmake | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/cmake/ports/node/portfile.cmake b/cmake/ports/node/portfile.cmake
index c3b6397181..b231d5faf8 100644
--- a/cmake/ports/node/portfile.cmake
+++ b/cmake/ports/node/portfile.cmake
@@ -33,45 +33,43 @@ else ()
             SHA512 9b983b899acd02e7ed761bc3633fc56855e10335fcdb558a29d1cf068ce1125991c9a781616d82a9dc90be6e8ba1bf4a34a10a92c6b7db9cbe33ef7fa7dda67f
             HEAD_REF v18.16.0
         )
-        # v18.16.0-e8bd828d3a.clean is getting added by VCPKG. It will need to be updated when we update libnode version.
-        set(NODE_SOURCE_DIRECTORY_NAME "v18.16.0-e8bd828d3a.clean")
-        file(COPY ${SOURCE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}")
+        file(COPY ${SOURCE_PATH}/ DESTINATION "${CURRENT_BUILDTREES_DIR}")
         vcpkg_execute_build_process(
             COMMAND ./configure --gdb --shared --v8-enable-object-print --shared-openssl --prefix=${CURRENT_BUILDTREES_DIR}/node-install/
-            WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+            WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
             LOGNAME "configure-node"
         )
         if(VCPKG_MAX_CONCURRENCY GREATER 0)
             vcpkg_execute_build_process(
                 COMMAND make -j${VCPKG_MAX_CONCURRENCY}
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j${VCPKG_MAX_CONCURRENCY} install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                     LOGNAME "install-node"
             )
         elseif (VCPKG_CONCURRENCY GREATER 0)
             vcpkg_execute_build_process(
                 COMMAND make -j${VCPKG_CONCURRENCY}
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j${VCPKG_CONCURRENCY} install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                     LOGNAME "install-node"
             )
         else ()
             vcpkg_execute_build_process(
                 COMMAND make -j$(nproc)
-                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                 LOGNAME "make-node"
             )
             vcpkg_execute_build_process(
                     COMMAND make -j$(nproc) install
-                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${NODE_SOURCE_DIRECTORY_NAME}
+                    WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}
                     LOGNAME "install-node"
             )
         endif ()