diff options
| author | Erik Kundiman <erik@megapahit.org> | 2026-05-26 19:23:39 +0700 |
|---|---|---|
| committer | Erik Kundiman <erik@megapahit.org> | 2026-05-26 19:38:34 +0700 |
| commit | d8f5cc0f9ac38e8fdbf674664c38ba5f0ee3996a (patch) | |
| tree | 747da03d7c0d38890ae51b55d4e75192cd87d7c0 /indra | |
| parent | 60309f027870f8ac7fc1b5eff84d3a2d3d087473 (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.cmake | 81 | ||||
| -rw-r--r-- | indra/media_plugins/cef/CMakeLists.txt | 36 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 |
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" |
