From df46add1165314bce93d70e611ddc453561ffb60 Mon Sep 17 00:00:00 2001 From: Scott Talbert Date: Mon, 12 Jun 2023 20:28:35 -0400 Subject: [PATCH] Add support for building WebView with libwebkit2gtk-4.1 libwebkit2gtk-4.1 has the same API as libwebkit2gtk-4.0, except that the former links with libsoup-3.0 and the latter links with libsoup-2.4. Fixes #23630. (cherry picked from commit 1b8664426603376b68f8ca3c54de97ec630e5940) --- build/cmake/init.cmake | 10 ++- build/cmake/modules/FindLIBSOUP.cmake | 14 +++- build/cmake/modules/FindWEBKIT2.cmake | 5 +- configure | 95 +++++++++++++++++++++++++-- configure.in | 16 ++++- src/gtk/webview_webkit2.cpp | 4 ++ 6 files changed, 129 insertions(+), 15 deletions(-) diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake index fc206cf2e03a..5d88a7e487cc 100644 --- a/build/cmake/init.cmake +++ b/build/cmake/init.cmake @@ -453,15 +453,21 @@ if(wxUSE_GUI) if(wxUSE_WEBVIEW) if(WXGTK) if(wxUSE_WEBVIEW_WEBKIT) - find_package(LIBSOUP) + set(WEBKIT_LIBSOUP_VERSION 2.4) if(WXGTK2) find_package(WEBKIT 1.0) elseif(WXGTK3) - find_package(WEBKIT2) + find_package(WEBKIT2 4.1 QUIET) + if(WEBKIT2_FOUND) + set(WEBKIT_LIBSOUP_VERSION 3.0) + else() + find_package(WEBKIT2 4.0) + endif() if(NOT WEBKIT2_FOUND) find_package(WEBKIT 3.0) endif() endif() + find_package(LIBSOUP ${WEBKIT_LIBSOUP_VERSION}) endif() set(wxUSE_WEBVIEW_WEBKIT OFF) set(wxUSE_WEBVIEW_WEBKIT2 OFF) diff --git a/build/cmake/modules/FindLIBSOUP.cmake b/build/cmake/modules/FindLIBSOUP.cmake index cbfba1cf9366..2433d141eaf7 100644 --- a/build/cmake/modules/FindLIBSOUP.cmake +++ b/build/cmake/modules/FindLIBSOUP.cmake @@ -31,19 +31,27 @@ # LibSoup does not provide an easy way to retrieve its version other than its # .pc file, so we need to rely on PC_LIBSOUP_VERSION and REQUIRE the .pc file # to be found. +SET(LIBSOUP_VERSION 2.4) +if(DEFINED LIBSOUP_FIND_VERSION) + SET(LIBSOUP_VERSION ${LIBSOUP_FIND_VERSION}) +endif() + +set(LIBSOUP_INCLUDE_DIRS LIBSOUP_INCLUDE_DIRS-NOTFOUND) +set(LIBSOUP_LIBRARIES LIBSOUP_LIBRARIES-NOTFOUND) + FIND_PACKAGE(PkgConfig) -PKG_CHECK_MODULES(PC_LIBSOUP QUIET libsoup-2.4) +PKG_CHECK_MODULES(PC_LIBSOUP QUIET libsoup-${LIBSOUP_VERSION}) if(PC_LIBSOUP_FOUND) FIND_PATH(LIBSOUP_INCLUDE_DIRS NAMES libsoup/soup.h HINTS ${PC_LIBSOUP_INCLUDEDIR} ${PC_LIBSOUP_INCLUDE_DIRS} - PATH_SUFFIXES libsoup-2.4 + PATH_SUFFIXES libsoup-${LIBSOUP_VERSION} ) FIND_LIBRARY(LIBSOUP_LIBRARIES - NAMES soup-2.4 + NAMES soup-${LIBSOUP_VERSION} HINTS ${PC_LIBSOUP_LIBDIR} ${PC_LIBSOUP_LIBRARY_DIRS} ) diff --git a/build/cmake/modules/FindWEBKIT2.cmake b/build/cmake/modules/FindWEBKIT2.cmake index 133e7a4563ea..e39077ac4a71 100644 --- a/build/cmake/modules/FindWEBKIT2.cmake +++ b/build/cmake/modules/FindWEBKIT2.cmake @@ -5,7 +5,10 @@ # WEBKIT2_LIBRARIES - List of libraries when using Webkit2. # WEBKIT2_FOUND - True if Webkit2 found. -SET( WEBKIT2_VERSION 4.0) +SET(WEBKIT2_VERSION 4.0) +if(DEFINED WEBKIT2_FIND_VERSION) + SET(WEBKIT2_VERSION ${WEBKIT2_FIND_VERSION}) +endif() set(WEBKIT2_INCLUDE_DIR WEBKIT2_INCLUDE_DIR-NOTFOUND) set(WEBKIT2_LIBRARY WEBKIT2_LIBRARY-NOTFOUND) diff --git a/configure.in b/configure.in index 957be8dda34c..257c95a6009b 100644 --- a/configure.in +++ b/configure.in @@ -7529,15 +7529,27 @@ if test "$wxUSE_WEBVIEW" = "yes"; then if test "$wxUSE_GTK" = 1; then if test "$WXGTK3" = 1; then PKG_CHECK_MODULES([WEBKIT], - [webkit2gtk-4.0], + [webkit2gtk-4.1], [ USE_WEBVIEW_WEBKIT2=1 CXXFLAGS="$CXXFLAGS $WEBKIT_CFLAGS" EXTRALIBS_WEBVIEW="$WEBKIT_LIBS" ], [ - AC_MSG_WARN([webkit2gtk not found, falling back to webkitgtk]) + AC_MSG_WARN([webkit2gtk-4.1 not found, falling back to webkit2gtk-4.0]) ]) + if test "$USE_WEBVIEW_WEBKIT2" = 0; then + PKG_CHECK_MODULES([WEBKIT], + [webkit2gtk-4.0], + [ + USE_WEBVIEW_WEBKIT2=1 + CXXFLAGS="$CXXFLAGS $WEBKIT_CFLAGS" + EXTRALIBS_WEBVIEW="$WEBKIT_LIBS" + ], + [ + AC_MSG_WARN([webkit2gtk-4.0 not found, falling back to webkitgtk]) + ]) + fi fi if test "$USE_WEBVIEW_WEBKIT2" = 0; then webkitgtk=webkit-1.0 diff --git a/src/gtk/webview_webkit2.cpp b/src/gtk/webview_webkit2.cpp index 191cbcf2cc18..87a9bd5ad3a8 100644 --- a/src/gtk/webview_webkit2.cpp +++ b/src/gtk/webview_webkit2.cpp @@ -173,15 +173,18 @@ wxgtk_webview_webkit_load_failed(WebKitWebView *, { switch (error->code) { +#if SOUP_MAJOR_VERSION < 3 case SOUP_STATUS_CANCELLED: type = wxWEBVIEW_NAV_ERR_USER_CANCELLED; break; case SOUP_STATUS_CANT_RESOLVE: +#endif case SOUP_STATUS_NOT_FOUND: type = wxWEBVIEW_NAV_ERR_NOT_FOUND; break; +#if SOUP_MAJOR_VERSION < 3 case SOUP_STATUS_CANT_RESOLVE_PROXY: case SOUP_STATUS_CANT_CONNECT: case SOUP_STATUS_CANT_CONNECT_PROXY: @@ -193,6 +196,7 @@ wxgtk_webview_webkit_load_failed(WebKitWebView *, case SOUP_STATUS_MALFORMED: type = wxWEBVIEW_NAV_ERR_REQUEST; break; +#endif case SOUP_STATUS_BAD_REQUEST: type = wxWEBVIEW_NAV_ERR_REQUEST;