summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2024-01-18 13:03:49 +0800
committerErik Kundiman <erik@megapahit.org>2024-01-18 14:23:53 +0800
commit62920151b1365dde59937e8381512fc35712bb31 (patch)
tree1014eab598507f6a173df065dbaeaf55c503a74e
parent729f8fa037219cdf0fd42b78866e869dc5ee8227 (diff)
GNU/Linux internal web browser
The lllibs need to be built as static libs now, otherwise SLPlugin would lose reference to gSavedSettings. The media plugins still need to be built as dynamic libs however, so they can't rely on the condition in LibraryInstall.cmake any more. Since the Megapahit viewer, when built using GCC, is using the default value for _GLIBCXX_USE_CXX11_ABI (which is 1 for the newer C++11 ABI as opposed to 0 for the older C++03 ABI), the Dullahan dependency needs to be built with the very same _GLIBCXX_USE_CXX11_ABI setting too, otherwise apr_dso would fail at loading libmedia_plugin_cef.so because of the failure to refer to the setOnConsoleMessageCallback function with strictly the same (not differing between std::__cxx11::basic_string vs. std::basic_string) parameter types. The CEF build is Spotify's, so no live streaming support, while the Dullahan package used by the viewer was built using Kokua's dullahan fork. After rebuilding it with _GLIBCXX_USE_CXX11_ABI kept at default by not overriding it in variables (from the build-variables repo), the order of the target link libraries in CEFPlugin.cmake doesn't seem to matter any more (it did before!). Now EXTERNAL_TOS can be safely omitted from GNU/Linux added compile definitions (but still used on FreeBSD).
-rw-r--r--indra/cmake/00-Common.cmake6
-rw-r--r--indra/cmake/CEFPlugin.cmake7
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp6
-rw-r--r--indra/media_plugins/CMakeLists.txt8
-rw-r--r--indra/media_plugins/cef/CMakeLists.txt16
-rw-r--r--indra/media_plugins/libvlc/CMakeLists.txt11
-rw-r--r--indra/newview/CMakeLists.txt10
-rw-r--r--indra/newview/ViewerInstall.cmake35
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llviewermedia.cpp4
-rw-r--r--indra/newview/skins/default/xui/en/mime_types_linux.xml40
11 files changed, 105 insertions, 42 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index aa2fd1caae..2ac6cd4bc2 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -120,10 +120,14 @@ if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
add_compile_definitions(
_REENTRANT
_FORTIFY_SOURCE=2
- EXTERNAL_TOS
APPID=secondlife
LL_IGNORE_SIGCHLD
)
+
+ if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ add_compile_definitions(EXTERNAL_TOS)
+ endif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+
add_compile_options(
-fexceptions
-fno-math-errno
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
index c38da3de64..2a1d30e548 100644
--- a/indra/cmake/CEFPlugin.cmake
+++ b/indra/cmake/CEFPlugin.cmake
@@ -5,7 +5,7 @@ include(Prebuilt)
include_guard()
add_library( ll::cef INTERFACE IMPORTED )
-use_prebuilt_binary(dullahan)
+#use_prebuilt_binary(dullahan)
target_include_directories( ll::cef SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include ${LIBS_PREBUILT_DIR}/include/cef)
if (WINDOWS)
@@ -33,4 +33,9 @@ elseif (DARWIN)
)
elseif (LINUX)
+ target_link_libraries( ll::cef INTERFACE
+ dullahan
+ cef_dll_wrapper
+ cef
+ )
endif (WINDOWS)
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 14d0ea18cf..54cb04f811 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -33,8 +33,10 @@
#include "llpluginmessageclasses.h"
#include "llcontrol.h"
-#if LL_DARWIN
+#if LL_DARWIN || LL_LINUX
extern LLControlGroup gSavedSettings;
+#endif
+#if LL_DARWIN
extern BOOL gHiDPISupport;
#endif
@@ -934,7 +936,7 @@ void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path_cache
message.setValue("username", username); // cef shares cache between users but creates user-based contexts
message.setValue("cef_log_file", user_data_path_cef_log);
-#if LL_DARWIN
+#if LL_DARWIN || LL_LINUX
bool cef_verbose_log = gSavedSettings.getBOOL("CefVerboseLog");
message.setValueBoolean("cef_verbose_log", cef_verbose_log);
#endif
diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt
index fe0a0f0796..20a8a74042 100644
--- a/indra/media_plugins/CMakeLists.txt
+++ b/indra/media_plugins/CMakeLists.txt
@@ -2,16 +2,16 @@
add_subdirectory(base)
-if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
add_subdirectory(libvlc)
add_subdirectory(example)
-endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+endif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
-if (DARWIN)
+if (DARWIN OR LINUX)
add_subdirectory(cef)
add_subdirectory(libvlc)
add_subdirectory(example)
-endif (DARWIN)
+endif (DARWIN OR LINUX)
if (WINDOWS)
add_subdirectory(cef)
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 410778114d..15b2d71923 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -32,8 +32,9 @@ set(media_plugin_cef_HEADER_FILES
# Select which VolumeCatcher implementation to use
if (LINUX)
- message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n"
- " Please create a volume_catcher implementation for this platform.")
+# message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n"
+# " Please create a volume_catcher implementation for this platform.")
+ list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp)
elseif (DARWIN)
list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp)
find_library(CORESERVICES_LIBRARY CoreServices)
@@ -90,3 +91,14 @@ if (DARWIN)
)
endif (DARWIN)
+
+if (INSTALL)
+ if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else ()
+ set(_LIB lib)
+ endif ()
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+endif ()
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index 9e5c0abb62..d5d9a5d147 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -56,4 +56,13 @@ if (DARWIN)
endif (DARWIN)
-include(LibraryInstall)
+if (INSTALL)
+ if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else ()
+ set(_LIB lib)
+ endif ()
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+endif ()
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index eb5936132b..3c0fd97bcc 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -61,9 +61,9 @@ include(URIPARSER)
include(LLPrimitive)
if (ENABLE_MEDIA_PLUGINS)
include(LibVLCPlugin)
- if (DARWIN)
+ if (DARWIN OR LINUX)
include(CEFPlugin)
- endif (DARWIN)
+ endif (DARWIN OR LINUX)
endif (ENABLE_MEDIA_PLUGINS)
include(UnixInstall)
@@ -1961,9 +1961,9 @@ target_link_libraries(${VIEWER_BINARY_NAME}
if (ENABLE_MEDIA_PLUGINS)
target_link_libraries(${VIEWER_BINARY_NAME} ll::libvlc )
- if (DARWIN)
+ if (DARWIN OR LINUX)
target_link_libraries(${VIEWER_BINARY_NAME} ll::cef )
- endif (DARWIN)
+ endif (DARWIN OR LINUX)
endif (ENABLE_MEDIA_PLUGINS)
if( TARGET ll::intel_memops )
@@ -2149,7 +2149,7 @@ if (DARWIN)
)
if (ENABLE_MEDIA_PLUGINS)
- if (DARWIN)
+ if (DARWIN OR LINUX)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc media_plugin_cef)
else (DARWIN)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc)
diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake
index 18f34cc8ff..93601865f9 100644
--- a/indra/newview/ViewerInstall.cmake
+++ b/indra/newview/ViewerInstall.cmake
@@ -6,6 +6,41 @@ install(PROGRAMS linux_tools/launch_url.sh
DESTINATION libexec/${VIEWER_BINARY_NAME}
)
+if (LINUX)
+ if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else ()
+ set(_LIB lib)
+ endif ()
+ install(FILES
+ ${AUTOBUILD_INSTALL_DIR}/lib/release/libcef.so
+ ${AUTOBUILD_INSTALL_DIR}/lib/release/libminigbm.so
+ DESTINATION ${_LIB})
+ install(PROGRAMS
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/chrome-sandbox
+ DESTINATION libexec/${VIEWER_BINARY_NAME}
+ PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+ install(PROGRAMS
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host
+ DESTINATION libexec/${VIEWER_BINARY_NAME})
+ install(FILES
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/snapshot_blob.bin
+ ${AUTOBUILD_INSTALL_DIR}/bin/release/v8_context_snapshot.bin
+ DESTINATION ${_LIB})
+ install(FILES
+ ${AUTOBUILD_INSTALL_DIR}/resources/chrome_100_percent.pak
+ ${AUTOBUILD_INSTALL_DIR}/resources/chrome_200_percent.pak
+ ${AUTOBUILD_INSTALL_DIR}/resources/icudtl.dat
+ ${AUTOBUILD_INSTALL_DIR}/resources/resources.pak
+ DESTINATION ${_LIB})
+ install(DIRECTORY
+ ${AUTOBUILD_INSTALL_DIR}/resources/locales
+ DESTINATION ${_LIB})
+endif (LINUX)
+
install(DIRECTORY skins app_settings fonts
DESTINATION share/${VIEWER_BINARY_NAME}
PATTERN ".svn" EXCLUDE
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c2da6eaede..3128ff0e51 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -132,7 +132,7 @@
#include "stringize.h"
#include "llcoros.h"
#include "llexception.h"
-#if LL_DARWIN
+#if LL_DARWIN || LL_LINUX
#include "cef/dullahan_version.h"
#endif
#include "vlc/libvlc_version.h"
@@ -3367,7 +3367,7 @@ LLSD LLAppViewer::getViewerInfo() const
info["VOICE_VERSION"] = LLTrans::getString("NotConnected");
}
-#if LL_DARWIN
+#if LL_DARWIN || LL_LINUX
std::ostringstream cef_ver_codec;
cef_ver_codec << "Dullahan: ";
cef_ver_codec << DULLAHAN_VERSION_MAJOR;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 02108e861a..26c473df76 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1733,9 +1733,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
}
else if(LLFile::stat(plugin_name, &s))
{
-#if !LL_LINUX
LL_WARNS_ONCE("Media") << "Couldn't find plugin at " << plugin_name << LL_ENDL;
-#endif
}
else
{
@@ -1789,9 +1787,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
}
}
}
-#if !LL_LINUX
LL_WARNS_ONCE("Plugin") << "plugin initialization failed for mime type: " << media_type << LL_ENDL;
-#endif
if(gAgent.isInitialized())
{
diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml
index 7188b1e699..a130d2b0e9 100644
--- a/indra/newview/skins/default/xui/en/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/en/mime_types_linux.xml
@@ -7,7 +7,7 @@
none
</defaultwidget>
<defaultimpl>
- media_plugin_webkit
+ media_plugin_cef
</defaultimpl>
<widgetset name="web">
<label name="web_label">
@@ -141,7 +141,7 @@
none
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="none/none">
@@ -152,7 +152,7 @@
none
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="audio/*">
@@ -185,7 +185,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="video/vnd.secondlife.qt.legacy">
@@ -207,7 +207,7 @@
web
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/ogg">
@@ -229,7 +229,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/postscript">
@@ -240,7 +240,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/rtf">
@@ -251,7 +251,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/smil">
@@ -262,7 +262,7 @@
movie
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/xhtml+xml">
@@ -273,7 +273,7 @@
web
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="application/x-director">
@@ -284,7 +284,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="audio/mid">
@@ -339,7 +339,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="image/gif">
@@ -350,7 +350,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="image/jpeg">
@@ -361,7 +361,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="image/png">
@@ -372,7 +372,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="image/svg+xml">
@@ -383,7 +383,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="image/tiff">
@@ -394,7 +394,7 @@
image
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="text/html">
@@ -405,7 +405,7 @@
web
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="text/plain">
@@ -416,7 +416,7 @@
text
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype name="text/xml">
@@ -427,7 +427,7 @@
text
</widgettype>
<impl>
- media_plugin_webkit
+ media_plugin_cef
</impl>
</mimetype>
<mimetype menu="1" name="video/mpeg">