diff --git a/docs/Linux Dependencies.md b/docs/Linux Dependencies.md index 3dc1502c95..8b22e39667 100644 --- a/docs/Linux Dependencies.md +++ b/docs/Linux Dependencies.md @@ -44,7 +44,14 @@ or - libxrender-dev (unless `JUCE_USE_XRENDER=0`) #### juce_gui_extra -- libwebkit2gtk-4.0-dev (unless `JUCE_WEB_BROWSER=0`) +- libwebkit2gtk-4.1-dev (unless `JUCE_WEB_BROWSER=0`) + +On older systems, where 4.1 is not available, you can also use + +- libwebkit2gtk-4.0-dev + +Compiled JUCE applications will dynamically load whichever library version is +available during runtime. #### juce_opengl - libglu1-mesa-dev @@ -58,5 +65,5 @@ The full command is as follows: libcurl4-openssl-dev \ libfreetype6-dev \ libx11-dev libxcomposite-dev libxcursor-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libxrender-dev \ - libwebkit2gtk-4.0-dev \ + libwebkit2gtk-4.1-dev \ libglu1-mesa-dev mesa-common-dev diff --git a/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp b/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp index ac25557343..40b08ba8b6 100644 --- a/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp +++ b/modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp @@ -373,14 +373,37 @@ private: makeSymbolBinding (juce_g_free, "g_free")); } + struct WebKitAndDependencyLibraryNames + { + const char* webkitLib; + const char* jsLib; + const char* soupLib; + }; + + bool openWebKitAndDependencyLibraries (const WebKitAndDependencyLibraryNames& names) + { + if (webkitLib.open (names.webkitLib) && jsLib.open (names.jsLib) && soupLib.open (names.soupLib)) + return true; + + for (auto* l : { &webkitLib, &jsLib, &soupLib }) + l->close(); + + return false; + } + //============================================================================== + DynamicLibrary webkitLib, jsLib, soupLib; + DynamicLibrary gtkLib { "libgtk-3.so" }, - webkitLib { "libwebkit2gtk-4.0.so" }, - jsLib { "libjavascriptcoregtk-4.0.so" }, - soupLib { "libsoup-2.4.so" }, glib { "libglib-2.0.so" }; - const bool webKitIsAvailable = loadWebkitSymbols() + const bool webKitIsAvailable = ( openWebKitAndDependencyLibraries ({ "libwebkit2gtk-4.1.so", + "libjavascriptcoregtk-4.1.so", + "libsoup-3.0.so" }) + || openWebKitAndDependencyLibraries ({ "libwebkit2gtk-4.0.so", + "libjavascriptcoregtk-4.0.so", + "libsoup-2.4.so" })) + && loadWebkitSymbols() && loadGtkSymbols() && loadJsLibSymbols() && loadSoupLibSymbols()