summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2026-05-26 19:23:39 +0700
committerErik Kundiman <erik@megapahit.org>2026-05-26 19:38:34 +0700
commitd8f5cc0f9ac38e8fdbf674664c38ba5f0ee3996a (patch)
tree747da03d7c0d38890ae51b55d4e75192cd87d7c0 /indra
parent60309f027870f8ac7fc1b5eff84d3a2d3d087473 (diff)
Fedora package links to system CEF instead of bundling it
Fedora's system CEF version is 146.0.11 so we choose the Dullahan version that uses the next closest CEF version (146.0.12 and not 146.0.10), which is Dullahan 1.29 and not 1.28. System libcef_dll is somehow distributed only in source form (on Arch too), so in order to be able to link to it, we have to compile it first, but its CMakeLists.txt is a sub one, incomplete, so we use the solution of adding an empty macro: https://www.magpcss.org/ceforum/viewtopic.php?f=6&t=17732 System CEF's library encapsulating folder that contains libcef.so, hence needs to be add to runtime path.
Diffstat (limited to 'indra')
-rw-r--r--indra/cmake/CEFPlugin.cmake81
-rw-r--r--indra/media_plugins/cef/CMakeLists.txt36
-rw-r--r--indra/newview/CMakeLists.txt2
3 files changed, 104 insertions, 15 deletions
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
index 8078575c45..ff3c28112e 100644
--- a/indra/cmake/CEFPlugin.cmake
+++ b/indra/cmake/CEFPlugin.cmake
@@ -6,7 +6,75 @@ include(UnixInstall)
include_guard()
add_library( ll::cef INTERFACE IMPORTED )
-if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64)
+if (${LINUX_DISTRO} MATCHES fedora)
+ if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/dullahan_installed OR NOT ${dullahan_installed} EQUAL 0)
+ file(
+ COPY /usr/src/cef-146.0.11/libcef_dll
+ DESTINATION ${CMAKE_BINARY_DIR}
+ )
+ execute_process(
+ COMMAND sed -i "s/macro(L/cmake_minimum_required(VERSION 3.28)\\nmacro(SET_LIBRARY_TARGET_PROPERTIES)\\nendmacro()\\nmacro(L/" CMakeLists.txt
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/libcef_dll
+ )
+ try_compile(LIBCEF_DLL_RESULT
+ PROJECT libcef_dll
+ SOURCE_DIR ${CMAKE_BINARY_DIR}/libcef_dll
+ BINARY_DIR ${CMAKE_BINARY_DIR}/libcef_dll
+ CMAKE_FLAGS
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef-146.0.11 -fPIC"
+ )
+ if (${LIBCEF_DLL_RESULT})
+ file(
+ COPY ${CMAKE_BINARY_DIR}/libcef_dll/libcef_dll_wrapper.a
+ DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE}
+ )
+ endif ()
+ if (NOT EXISTS ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz)
+ file(DOWNLOAD
+ https://github.com/secondlife/dullahan/archive/refs/tags/v1.29.0-CEF_146.0.12.tar.gz
+ ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz
+ )
+ endif ()
+ file(ARCHIVE_EXTRACT
+ INPUT ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12.tar.gz
+ DESTINATION ${CMAKE_BINARY_DIR}
+ )
+ try_compile(DULLAHAN_RESULT
+ PROJECT dullahan
+ SOURCE_DIR ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12
+ BINARY_DIR ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12
+ CMAKE_FLAGS
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR}
+ -DCMAKE_INSTALL_LIBDIR:PATH=${ARCH_PREBUILT_DIRS_RELEASE}
+ -DCEF_WRAPPER_DIR:PATH=/usr/include/cef
+ -DCEF_WRAPPER_BUILD_DIR:PATH=${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12
+ -DCEF_LIBRARY_RELEASE:FILEPATH=${INSTALL_PREFIX}/${_LIB}/cef/libcef.so
+ -DCEF_DLL_LIBRARY_RELEASE:FILEPATH=${ARCH_PREBUILT_DIRS_RELEASE}/libcef_dll_wrapper.a
+ "-DCMAKE_CXX_FLAGS:STRING=-I/usr/include/cef -I/usr/src/cef-146.0.11 -DWRAPPING_CEF_SHARED"
+ )
+ if (${DULLAHAN_RESULT})
+ file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/bin/release)
+ file(
+ COPY ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/dullahan_host
+ DESTINATION ${LIBS_PREBUILT_DIR}/bin/release
+ )
+ file(
+ COPY ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/libdullahan.a
+ DESTINATION ${ARCH_PREBUILT_DIRS_RELEASE}
+ )
+ file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/cef)
+ file(
+ COPY
+ ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/src/dullahan.h
+ ${CMAKE_BINARY_DIR}/dullahan-1.29.0-CEF_146.0.12/src/dullahan_version.h
+ DESTINATION ${LIBS_PREBUILT_DIR}/include/cef
+ )
+ file(WRITE ${PREBUILD_TRACKING_DIR}/dullahan_installed "0")
+ endif ()
+ endif ()
+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64)
if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/dullahan_installed OR NOT ${dullahan_installed} EQUAL 0)
if (NOT EXISTS ${CMAKE_BINARY_DIR}/dullahan-1.24.0-CEF_139.0.40.tar.gz)
file(DOWNLOAD
@@ -58,7 +126,15 @@ endif ()
execute_process(
COMMAND patchelf --set-rpath ${INSTALL_LIBRARY_DIR} bin/release/dullahan_host
WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}
+)
+
+if (${LINUX_DISTRO} MATCHES fedora)
+ target_include_directories( ll::cef SYSTEM INTERFACE /usr/include/cef/include)
+ execute_process(
+ COMMAND patchelf --add-rpath ${INSTALL_PREFIX}/${_LIB}/cef bin/release/dullahan_host
+ WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}
)
+endif ()
target_include_directories( ll::cef SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/cef)
@@ -126,6 +202,9 @@ elseif (DARWIN)
)
elseif (LINUX)
+ if (${LINUX_DISTRO} MATCHES fedora)
+ target_link_directories( ll::cef INTERFACE ${INSTALL_PREFIX}/${_LIB}/cef )
+ endif ()
target_link_libraries( ll::cef INTERFACE
libdullahan.a
cef
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index e759d85ae5..4ac7bb93ca 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -51,6 +51,9 @@ if (LINUX)
list(APPEND media_plugin_cef_SOURCE_FILES ${LINUX_VOLUME_CATCHER})
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id")
+ if (${LINUX_DISTRO} MATCHES fedora)
+ set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH};${INSTALL_PREFIX}/${_LIB}/cef)
+ endif ()
list(APPEND media_plugin_cef_LINK_LIBRARIES llwindow )
elseif (DARWIN)
list(APPEND media_plugin_cef_SOURCE_FILES volume_catcher_null.cpp)
@@ -159,6 +162,11 @@ if (INSTALL)
DESTINATION lib/${VIEWER_BINARY_NAME}
#PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
+ elseif (${LINUX_DISTRO} MATCHES fedora)
+ install(
+ PROGRAMS ${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host
+ DESTINATION libexec/${VIEWER_BINARY_NAME}
+ )
else (${LINUX_DISTRO} MATCHES arch)
install(
PROGRAMS
@@ -168,21 +176,23 @@ if (INSTALL)
#PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
endif (${LINUX_DISTRO} MATCHES arch)
- install(
- FILES
- ${ARCH_PREBUILT_DIRS_RELEASE}/libcef.so
- ${ARCH_PREBUILT_DIRS_RELEASE}/libvk_swiftshader.so
- ${AUTOBUILD_INSTALL_DIR}/lib/release/v8_context_snapshot.bin
- ${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}/${VIEWER_BINARY_NAME}
+ if (NOT (${LINUX_DISTRO} MATCHES fedora))
+ install(
+ FILES
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libcef.so
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libvk_swiftshader.so
+ ${AUTOBUILD_INSTALL_DIR}/lib/release/v8_context_snapshot.bin
+ ${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}/${VIEWER_BINARY_NAME}
)
- install(
- DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales
- DESTINATION ${_LIB}/${VIEWER_BINARY_NAME}
+ install(
+ DIRECTORY ${AUTOBUILD_INSTALL_DIR}/resources/locales
+ DESTINATION ${_LIB}/${VIEWER_BINARY_NAME}
)
+ endif ()
elseif (WINDOWS)
set(_LIB llplugin)
install(
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 7812735867..f19716af7e 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2399,7 +2399,7 @@ if (LINUX)
set(CPACK_RPM_PACKAGE_DESCRIPTION ${VIEWER_PACKAGE_DESCRIPTION}
CACHE STRING "RPM package description.")
if (${LINUX_DISTRO} MATCHES fedora)
- set(CPACK_RPM_PACKAGE_REQUIRES "freealut, apr-util, boost-fiber, boost-program-options, boost-regex, boost-thread, boost-url, expat, fltk, mesa-libGLU, hunspell, libnghttp2, openjpeg, sdl2-compat, vlc-libs, vlc-plugins-base, libvorbis"
+ set(CPACK_RPM_PACKAGE_REQUIRES "freealut, apr-util, boost-fiber, boost-program-options, boost-regex, boost-thread, boost-url, cef, expat, fltk, mesa-libGLU, hunspell, libnghttp2, openjpeg, sdl2-compat, vlc-libs, vlc-plugins-base, libvorbis"
CACHE STRING "RPM package requirements.")
else ()
set(CPACK_RPM_PACKAGE_REQUIRES "libalut0, libapr-util1-0, libboost_fiber1_91_0, libboost_program_options1_91_0, libboost_regex1_91_0, libboost_thread1_91_0, libboost_url1_91_0, libboost_url1_91_0-x86-64-v3, libpng16-16 expat, libfltk1_3, libGLU1, libhunspell-1_7-0, libnghttp2-14, openjpeg2, libSDL2-2_0-0, libvlc5, libvorbis0"