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>