Allow usage of static loader with wxWebViewEdge
Add a new build option wxUSE_WEBVIEW_EDGE_STATIC. If it is set to 1 the WebView2 loader is static linked into the binary and removes the runtime dependency on WebView2Loader.dll.
This commit is contained in:
committed by
Tobias Taschner
parent
f0c6b42ad0
commit
57ebad4f7d
@@ -184,6 +184,22 @@
|
||||
<if cond="TOOLKIT=='MSW' and IS_MSVC=='0'">$(TOP_SRCDIR)include/wx/msw/wrl</if>
|
||||
</set>
|
||||
|
||||
<set var="webview_additional_libdirs_arch">
|
||||
<if cond="TARGET_CPU=='amd64'">x64</if>
|
||||
<if cond="TARGET_CPU=='AMD64'">x64</if>
|
||||
<if cond="TARGET_CPU=='arm64'">arm64</if>
|
||||
<if cond="TARGET_CPU=='ARM64'">arm64</if>
|
||||
<if cond="TARGET_CPU=='x64'">x64</if>
|
||||
<if cond="TARGET_CPU=='X64'">x64</if>
|
||||
<if cond="TARGET_CPU=='x86'">x86</if>
|
||||
<if cond="TARGET_CPU=='X86'">x86</if>
|
||||
<if cond="TARGET_CPU==''">x86</if>
|
||||
</set>
|
||||
|
||||
<set var="webview_additional_libdirs">
|
||||
<if cond="IS_MSVC=='1' and TOOLKIT=='MSW'">$(TOP_SRCDIR)3rdparty/webview2/build/native/$(webview_additional_libdirs_arch)</if>
|
||||
</set>
|
||||
|
||||
<set var="webview_edge_pragma_warning">
|
||||
<if cond="TOOLKIT=='MSW' and IS_MSVC=='0'">-Wno-unknown-pragmas</if>
|
||||
</set>
|
||||
@@ -195,6 +211,7 @@
|
||||
<sources>$(WEBVIEW_SRC)</sources>
|
||||
<library>coredll</library>
|
||||
<library>basedll</library>
|
||||
<lib-path>$(webview_additional_libdirs)</lib-path>
|
||||
<ldlibs>$(EXTRALIBS_WEBVIEW)</ldlibs>
|
||||
<msvc-headers>$(WEBVIEW_HDR)</msvc-headers>
|
||||
<include>$(webview_additional_include_wrl)</include>
|
||||
@@ -208,6 +225,7 @@
|
||||
<msvc-headers>$(WEBVIEW_HDR)</msvc-headers>
|
||||
<include>$(webview_additional_include_wrl)</include>
|
||||
<include>$(webview_additional_include)</include>
|
||||
<lib-path>$(webview_additional_libdirs)</lib-path>
|
||||
<cxxflags-mingw>$(webview_edge_pragma_warning)</cxxflags-mingw>
|
||||
</lib>
|
||||
|
||||
|
||||
@@ -87,8 +87,13 @@ elseif(WXMSW)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (wxUSE_WEBVIEW_EDGE_STATIC)
|
||||
target_link_directories(wxwebview PUBLIC "${WEBVIEW2_PACKAGE_DIR}/build/native/$(LibrariesArchitecture)/")
|
||||
else()
|
||||
wx_webview_copy_webview2_loader(wxwebview)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
elseif(WXGTK)
|
||||
if(LIBSOUP_FOUND)
|
||||
wx_lib_include_directories(wxwebview PUBLIC ${LIBSOUP_INCLUDE_DIRS})
|
||||
|
||||
@@ -477,6 +477,7 @@ if(WIN32)
|
||||
wx_option(wxUSE_TASKBARICON_BALLOONS "enable wxTaskBarIcon::ShowBalloon() method (Win32 only)")
|
||||
wx_option(wxUSE_UXTHEME "enable support for Windows XP themed look (Win32 only)")
|
||||
wx_option(wxUSE_WEBVIEW_EDGE "use wxWebView Edge (Chromium) backend (Windows 7+ only)" ${wxUSE_WEBVIEW_EDGE_DEFAULT})
|
||||
wx_option(wxUSE_WEBVIEW_EDGE_STATIC "use wxWebView Edge with static loader" OFF)
|
||||
wx_option(wxUSE_WEBVIEW_IE "use wxWebView IE backend (Win32 only)")
|
||||
wx_option(wxUSE_WINRT "enable WinRT support" ${wxUSE_WINRT_DEFAULT})
|
||||
wx_option(wxUSE_WXDIB "use wxDIB class (Win32 only)")
|
||||
|
||||
@@ -332,6 +332,8 @@
|
||||
|
||||
#cmakedefine01 wxUSE_WEBVIEW_EDGE
|
||||
|
||||
#cmakedefine01 wxUSE_WEBVIEW_EDGE_STATIC
|
||||
|
||||
#if (defined(__WXGTK__) && !defined(__WXGTK3__)) || defined(__WXOSX__)
|
||||
#cmakedefine01 wxUSE_WEBVIEW_WEBKIT
|
||||
#else
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
<AdditionalDependencies>wxtiff$(wxSuffixDebug).lib;wxjpeg$(wxSuffixDebug).lib;wxpng$(wxSuffixDebug).lib;wxzlib$(wxSuffixDebug).lib;wxregex$(wxSuffix).lib;wxexpat$(wxSuffixDebug).lib;$(wxToolkitLibNamePrefix)core.lib;$(wxBaseLibNamePrefix).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ImportLibrary>$(OutDir)$(wxToolkitLibNamePrefix)$(ProjectName).lib</ImportLibrary>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>$(OutDir);..\..\3rdparty\webview2\build\native\$(LibrariesArchitecture);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
@@ -435,7 +435,7 @@
|
||||
<AdditionalDependencies>wxtiff$(wxSuffixDebug).lib;wxjpeg$(wxSuffixDebug).lib;wxpng$(wxSuffixDebug).lib;wxzlib$(wxSuffixDebug).lib;wxregex$(wxSuffix).lib;wxexpat$(wxSuffixDebug).lib;$(wxToolkitLibNamePrefix)core.lib;$(wxBaseLibNamePrefix).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ImportLibrary>$(OutDir)$(wxToolkitLibNamePrefix)$(ProjectName).lib</ImportLibrary>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>$(OutDir);..\..\3rdparty\webview2\build\native\$(LibrariesArchitecture);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
|
||||
@@ -802,6 +802,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -803,6 +803,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -803,6 +803,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
#ifndef wxWebViewEdge_PRIVATE_H
|
||||
#define wxWebViewEdge_PRIVATE_H
|
||||
|
||||
#if !wxUSE_WEBVIEW_EDGE_STATIC
|
||||
#include "wx/dynlib.h"
|
||||
#endif
|
||||
#include "wx/msw/private/comptr.h"
|
||||
|
||||
#include <WebView2.h>
|
||||
@@ -98,7 +100,9 @@ public:
|
||||
|
||||
void UpdateWebMessageHandler();
|
||||
|
||||
#if !wxUSE_WEBVIEW_EDGE_STATIC
|
||||
static wxDynamicLibrary ms_loaderDll;
|
||||
#endif
|
||||
static wxString ms_browserExecutableDir;
|
||||
|
||||
static bool Initialize();
|
||||
|
||||
@@ -809,6 +809,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -799,6 +799,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -802,6 +802,13 @@
|
||||
// Recommended setting: 1 when building for Windows with WebView2 SDK
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
// Use the Edge (Chromium) wxWebView backend without loader DLL
|
||||
//
|
||||
// Default is 0, set it to 1 if you don't want to depend on WebView2Loader.dll.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
// Use the WebKit wxWebView backend
|
||||
//
|
||||
// Default is 1 on GTK and OSX
|
||||
|
||||
@@ -362,6 +362,9 @@ public:
|
||||
loaded and Edge (Chromium) is installed)
|
||||
- Make sure to add a note about using the WebView2 SDK to your application
|
||||
documentation, as required by its licence
|
||||
- With Visual Studio 2019 or newer @c wxUSE_WEBVIEW_EDGE_STATIC can be used
|
||||
to static link the loader and remove the dependency on @c WebView2Loader.dll
|
||||
at runtime.
|
||||
|
||||
If enabled and available at runtime Edge will be selected as the default
|
||||
backend. If you require the IE backend use @c wxWebViewBackendIE when
|
||||
|
||||
@@ -332,6 +332,8 @@
|
||||
|
||||
#define wxUSE_WEBVIEW_EDGE 0
|
||||
|
||||
#define wxUSE_WEBVIEW_EDGE_STATIC 0
|
||||
|
||||
#if (defined(__WXGTK__) && !defined(__WXGTK3__)) || defined(__WXOSX__)
|
||||
#define wxUSE_WEBVIEW_WEBKIT 0
|
||||
#else
|
||||
|
||||
@@ -42,6 +42,13 @@ wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEdge, wxWebView);
|
||||
event.SetInt(wxerror); \
|
||||
break;
|
||||
|
||||
#if wxUSE_WEBVIEW_EDGE_STATIC
|
||||
#define wxCreateCoreWebView2EnvironmentWithOptions ::CreateCoreWebView2EnvironmentWithOptions
|
||||
#define wxGetAvailableCoreWebView2BrowserVersionString ::GetAvailableCoreWebView2BrowserVersionString
|
||||
|
||||
// Automatically link the static loader lib with MSVC
|
||||
#pragma comment(lib, "WebView2LoaderStatic")
|
||||
#else
|
||||
// WebView2Loader typedefs
|
||||
typedef HRESULT (__stdcall *CreateCoreWebView2EnvironmentWithOptions_t)(
|
||||
PCWSTR browserExecutableFolder,
|
||||
@@ -54,8 +61,9 @@ typedef HRESULT(__stdcall *GetAvailableCoreWebView2BrowserVersionString_t)(
|
||||
|
||||
CreateCoreWebView2EnvironmentWithOptions_t wxCreateCoreWebView2EnvironmentWithOptions = NULL;
|
||||
GetAvailableCoreWebView2BrowserVersionString_t wxGetAvailableCoreWebView2BrowserVersionString = NULL;
|
||||
|
||||
wxDynamicLibrary wxWebViewEdgeImpl::ms_loaderDll;
|
||||
#endif // wxUSE_WEBVIEW_EDGE_STATIC
|
||||
|
||||
wxString wxWebViewEdgeImpl::ms_browserExecutableDir;
|
||||
|
||||
wxWebViewEdgeImpl::wxWebViewEdgeImpl(wxWebViewEdge* webview):
|
||||
@@ -132,6 +140,7 @@ HRESULT wxWebViewEdgeImpl::OnEnvironmentCreated(
|
||||
|
||||
bool wxWebViewEdgeImpl::Initialize()
|
||||
{
|
||||
#if !wxUSE_WEBVIEW_EDGE_STATIC
|
||||
if (ms_loaderDll.IsLoaded())
|
||||
return true;
|
||||
|
||||
@@ -144,7 +153,7 @@ bool wxWebViewEdgeImpl::Initialize()
|
||||
wxDL_INIT_FUNC(wx, GetAvailableCoreWebView2BrowserVersionString, loaderDll);
|
||||
if (!wxGetAvailableCoreWebView2BrowserVersionString || !wxCreateCoreWebView2EnvironmentWithOptions)
|
||||
return false;
|
||||
|
||||
#endif
|
||||
// Check if a Edge browser can be found by the loader DLL
|
||||
wxCoTaskMemPtr<wchar_t> versionStr;
|
||||
HRESULT hr = wxGetAvailableCoreWebView2BrowserVersionString(
|
||||
@@ -155,14 +164,18 @@ bool wxWebViewEdgeImpl::Initialize()
|
||||
return false;
|
||||
}
|
||||
|
||||
#if !wxUSE_WEBVIEW_EDGE_STATIC
|
||||
ms_loaderDll.Attach(loaderDll.Detach());
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxWebViewEdgeImpl::Uninitialize()
|
||||
{
|
||||
#if !wxUSE_WEBVIEW_EDGE_STATIC
|
||||
ms_loaderDll.Unload();
|
||||
#endif
|
||||
}
|
||||
|
||||
void wxWebViewEdgeImpl::UpdateBounds()
|
||||
|
||||
Reference in New Issue
Block a user