Commit 2e9b721d43 for freeswitch.com

commit 2e9b721d436fff256595277fb5611fa8da03e463
Author: Andrey Volk <andywolk@gmail.com>
Date:   Thu Jun 11 03:00:34 2026 +0300

    [mod_v8] Use pre-compiled libnode 20.19.2 binary instead of custom v8-6.1 lib on Windows. (#3053)

diff --git a/libs/.gitignore b/libs/.gitignore
index 685ce0fc72..9a8b6fc2d4 100644
--- a/libs/.gitignore
+++ b/libs/.gitignore
@@ -566,8 +566,8 @@ opal

 /zeromq-*/
 /jpeg-8d/
-/v8-*/
-/v8-*.zip
+/libnode-*/
+/libnode-*.zip

 # build products we should remove
 !/libg722_1/config/depcomp
diff --git a/src/mod/languages/mod_v8/mod_v8.2017.vcxproj b/src/mod/languages/mod_v8/mod_v8.2017.vcxproj
index 434b2715f1..6d2dd32e1c 100644
--- a/src/mod/languages/mod_v8/mod_v8.2017.vcxproj
+++ b/src/mod/languages/mod_v8/mod_v8.2017.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
@@ -47,7 +47,7 @@
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <Import Project="$(SolutionDir)\w32\curl.props" />
-  <Import Project="$(SolutionDir)\w32\v8.props" />
+  <Import Project="$(SolutionDir)\w32\libnode.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
diff --git a/w32/v8-version.props b/w32/libnode-version.props
similarity index 61%
rename from w32/v8-version.props
rename to w32/libnode-version.props
index f31874859d..1204ab2b59 100644
--- a/w32/v8-version.props
+++ b/w32/libnode-version.props
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ImportGroup Label="PropertySheets">
     <Import Project="basedir.props" Condition=" '$(BaseDirImported)' == ''"/>
   </ImportGroup>
   <PropertyGroup Label="UserMacros">
-    <V8Version>6.1.298</V8Version>
+    <LibNodeVersion>20.19.2</LibNodeVersion>
   </PropertyGroup>
   <PropertyGroup>
-    <V8VersionImported>true</V8VersionImported>
+    <LibNodeVersionImported>true</LibNodeVersionImported>
   </PropertyGroup>
   <PropertyGroup />
   <ItemDefinitionGroup />
   <ItemGroup>
-    <BuildMacro Include="V8Version">
-      <Value>$(V8Version)</Value>
+    <BuildMacro Include="LibNodeVersion">
+      <Value>$(LibNodeVersion)</Value>
     </BuildMacro>
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/w32/libnode.props b/w32/libnode.props
new file mode 100644
index 0000000000..35971bace2
--- /dev/null
+++ b/w32/libnode.props
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets">
+    <Import Project="libnode-version.props" Condition=" '$(LibNodeVersionImported)' == '' "/>
+    <Import Project="downloadpackage.task" Condition=" '$(downloadpackagetask_Imported)' == '' " />
+  </ImportGroup>
+
+  <PropertyGroup Label="UserMacros">
+    <LibNodeDir>$(BaseDir)libs\libnode-$(LibNodeVersion)</LibNodeDir>
+  </PropertyGroup>
+
+  <!--
+       Download Target.
+       Name must be unique.
+       By design, targets are executed only once per project.
+
+       Usage:
+
+       package: URI
+
+       expectfileordirectory: Skips the download and extraction if exists
+
+       outputfolder: Folder to store a downloaded file.
+                     By default "$(BaseDir)libs", if empty
+
+       outputfilename: If not empty, overrides filename from URI.
+                       .exe files don't get extracted
+
+       extractto: Folder to extract an archive to
+   -->
+
+  <Target Name="libnodeBinariesDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+    <DownloadPackageTask
+        package="https://github.com/freeswitch/libnode-packaging/releases/download/libnode-v$(LibNodeVersion)/libnode-$(LibNodeVersion)-binaries-$(Platform.ToLower())-$(Configuration.ToLower()).zip"
+        expectfileordirectory="$(LibNodeDir)\binaries\$(Platform)\$(Configuration)\libnode.dll"
+        outputfolder=""
+        outputfilename=""
+        extractto="$(BaseDir)libs\"
+    />
+  </Target>
+  <Target Name="libnodeHeadersDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+    <DownloadPackageTask
+        package="https://github.com/freeswitch/libnode-packaging/releases/download/libnode-v$(LibNodeVersion)/libnode-$(LibNodeVersion)-headers.zip"
+        expectfileordirectory="$(LibNodeDir)\include\v8.h"
+        outputfolder=""
+        outputfilename=""
+        extractto="$(BaseDir)libs\"
+    />
+  </Target>
+
+  <Target Name="libnodeCopyTarget" BeforeTargets="CustomBuild" DependsOnTargets="libnodeBinariesDownloadTarget">
+    <Message Text="Copying libnode.dll to the freeswitch output folder." Importance="High" />
+    <ItemGroup>
+      <libnodeFiles Include="$(LibNodeDir)\binaries\$(Platform)\$(Configuration)\*.dll"/>
+    </ItemGroup>
+    <Copy Condition="!exists('$(BaseDir)\$(Platform)\$(Configuration)\libnode.dll')"
+          SourceFiles="@(libnodeFiles)"
+          DestinationFiles="@(libnodeFiles->'$(BaseDir)\$(Platform)\$(Configuration)\%(Filename)%(Extension)')"
+    />
+  </Target>
+
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <!-- V8 14.x headers require C++20 (v8config.h hard-errors otherwise). On MSVC,
+           __cplusplus stays 199711L unless /Zc:__cplusplus is passed, so v8config.h's
+           `#if __cplusplus <= 201703L` fires even with /std:c++20. Set both here. -->
+      <LanguageStandard>stdcpp20</LanguageStandard>
+      <AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalIncludeDirectories>$(SolutionDir)libs\libnode-$(LibNodeVersion)\include;$(SolutionDir)src\mod\languages\mod_v8;$(SolutionDir)src\mod\languages\mod_v8\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>USING_V8_SHARED;USING_V8_PLATFORM_SHARED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(SolutionDir)libs\libnode-$(LibNodeVersion)\binaries\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>libnode.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+</Project>
diff --git a/w32/v8.props b/w32/v8.props
deleted file mode 100644
index c041e5b5f7..0000000000
--- a/w32/v8.props
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ImportGroup Label="PropertySheets">
-    <Import Project="v8-version.props" Condition=" '$(V8VersionImported)' == '' "/>
-    <Import Project="downloadpackage.task" Condition=" '$(downloadpackagetask_Imported)' == '' " />
-  </ImportGroup>
-
-  <PropertyGroup Label="UserMacros">
-    <V8libDir>$(BaseDir)libs\v8-$(V8Version)</V8libDir>
-  </PropertyGroup>
-
-  <!--
-       Download Target.
-       Name must be unique.
-       By design, targets are executed only once per project.
-
-       Usage:
-
-       package: URI
-
-       expectfileordirectory: Skips the download and extraction if exists
-
-       outputfolder: Folder to store a downloaded file.
-                     By default "$(BaseDir)libs", if empty
-
-       outputfilename: If not empty, overrides filename from URI.
-                       .exe files don't get extracted
-
-       extractto: Folder to extract an archive to
-   -->
-
-  <Target Name="v8BinariesDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
-      <DownloadPackageTask
-           package="http://files.freeswitch.org/windows/packages/v8/$(V8Version)/v8-$(V8Version)-binaries-$(Platform.ToLower())-$(Configuration.ToLower()).zip"
-           expectfileordirectory="$(V8libDir)\binaries\$(Platform)\$(Configuration)\v8.dll"
-           outputfolder=""
-           outputfilename=""
-           extractto="$(BaseDir)libs\"
-      />
-  </Target>
-  <Target Name="v8HeadersDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
-      <DownloadPackageTask
-           package="http://files.freeswitch.org/windows/packages/v8/$(V8Version)/v8-$(V8Version)-headers.zip"
-           expectfileordirectory="$(V8libDir)\include\v8.h"
-           outputfolder=""
-           outputfilename=""
-           extractto="$(BaseDir)libs\"
-      />
-  </Target>
-
-  <Target Name="v8copyTarget" BeforeTargets="CustomBuild" DependsOnTargets="v8BinariesDownloadTarget">
-        <Message Text="Copying v8 libraries to the freeswitch output folder." Importance="High" />
-        <ItemGroup>
-             <v8Files Include="$(V8libDir)\binaries\$(Platform)\$(Configuration)\*.dll"/>
-        </ItemGroup>
-        <Copy Condition="!exists('$(BaseDir)\$(Platform)\$(Configuration)\v8.dll')"
-            SourceFiles="@(v8Files)"
-            DestinationFiles="@(v8Files->'$(BaseDir)\$(Platform)\$(Configuration)\%(Filename)%(Extension)')"
-        />
-  </Target>
-
-  <ItemDefinitionGroup>
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <AdditionalIncludeDirectories>$(SolutionDir)libs\v8-$(V8Version)\include;$(SolutionDir)src\mod\languages\mod_v8;$(SolutionDir)src\mod\languages\mod_v8\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <AdditionalLibraryDirectories>$(SolutionDir)libs\v8-$(V8Version)\binaries\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>v8.dll.lib;v8_libbase.dll.lib;v8_libplatform.dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-</Project>