From e39a8719fdebebe20c11e7f242f104759886cf30 Mon Sep 17 00:00:00 2001 From: Undefine Date: Sun, 29 Mar 2026 17:43:46 +0200 Subject: [PATCH] Meta: Move most dependency checks to check_for_dependencies.cmake This file was here for quite a long while now. Let's finally move most of the dependency checks to one centralized place. --- AK/CMakeLists.txt | 11 +---- CMakeLists.txt | 13 ------ Libraries/LibCompress/CMakeLists.txt | 1 - Libraries/LibCrypto/CMakeLists.txt | 4 -- Libraries/LibDatabase/CMakeLists.txt | 2 - Libraries/LibGC/CMakeLists.txt | 1 - Libraries/LibGfx/CMakeLists.txt | 15 ------- Libraries/LibJS/CMakeLists.txt | 5 +-- Libraries/LibTLS/CMakeLists.txt | 1 - Libraries/LibThreading/CMakeLists.txt | 1 - Libraries/LibUnicode/CMakeLists.txt | 1 - Libraries/LibWeb/CMakeLists.txt | 11 ----- Libraries/LibXML/CMakeLists.txt | 1 - Meta/CMake/audio.cmake | 1 - Meta/CMake/check_for_dependencies.cmake | 58 +++++++++++++++++++++++-- Meta/CMake/utils.cmake | 1 - Services/RequestServer/CMakeLists.txt | 3 -- Services/WebWorker/CMakeLists.txt | 1 - Tests/ClangPlugins/CMakeLists.txt | 2 - Tests/LibWeb/test-web/CMakeLists.txt | 3 -- 20 files changed, 56 insertions(+), 80 deletions(-) diff --git a/AK/CMakeLists.txt b/AK/CMakeLists.txt index 65fd99ee54..65d4a88594 100644 --- a/AK/CMakeLists.txt +++ b/AK/CMakeLists.txt @@ -50,8 +50,6 @@ ladybird_lib(AK ak) configure_file(Debug.h.in Debug.h @ONLY) -find_package(cpptrace CONFIG) -find_package(Backtrace) if(cpptrace_FOUND AND LADYBIRD_ENABLE_CPPTRACE) target_link_libraries(AK PRIVATE cpptrace::cpptrace) @@ -68,14 +66,7 @@ else() endif() configure_file(Backtrace.h.in Backtrace.h @ONLY) -find_package(simdutf REQUIRED) -target_link_libraries(AK PRIVATE simdutf::simdutf) - -find_package(FastFloat CONFIG REQUIRED) -target_link_libraries(AK PRIVATE FastFloat::fast_float) - -find_package(fmt CONFIG REQUIRED) -target_link_libraries(AK PRIVATE fmt::fmt) +target_link_libraries(AK PRIVATE FastFloat::fast_float fmt::fmt simdutf::simdutf) set(MIMALLOC_VISIBILITY PRIVATE) if (NOT BUILD_SHARED_LIBS) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b682fcf4a..90f40246ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,9 +42,6 @@ endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# We need to find OpenSSL in order to link it explicitly with all targets. -find_package(OpenSSL REQUIRED) - # Ensure that when single-value arguments are passed to `cmake_parse_arguments()` # with no or empty string arguments, they are still defined. if (POLICY CMP0174) @@ -63,8 +60,6 @@ if(ENABLE_ALL_THE_DEBUG_MACROS) include(all_the_debug_macros) endif() -find_package(Threads REQUIRED) - if (ENABLE_LAGOM_CCACHE) include(setup_ccache) endif() @@ -129,13 +124,6 @@ include_directories(${CMAKE_BINARY_DIR}/Services) include(lagom_install) -if (WIN32) - find_package(pthread REQUIRED) - find_package(mman REQUIRED) -endif() - -find_package(mimalloc CONFIG REQUIRED) - include(rust_crate) include(targets) @@ -184,7 +172,6 @@ add_custom_target(lint-shell-scripts USES_TERMINAL ) -find_package(Python3 COMPONENTS Interpreter) if (Python3_FOUND) add_custom_target(check-style COMMAND ${Python3_EXECUTABLE} "${ladybird_SOURCE_DIR}/Meta/check-style.py" diff --git a/Libraries/LibCompress/CMakeLists.txt b/Libraries/LibCompress/CMakeLists.txt index b3a48efb8c..6c593d6615 100644 --- a/Libraries/LibCompress/CMakeLists.txt +++ b/Libraries/LibCompress/CMakeLists.txt @@ -9,5 +9,4 @@ set(SOURCES ladybird_lib(LibCompress compress) target_link_libraries(LibCompress PRIVATE LibCore LibCrypto) -find_package(ZLIB REQUIRED) target_link_libraries(LibCompress PRIVATE ZLIB::ZLIB) diff --git a/Libraries/LibCrypto/CMakeLists.txt b/Libraries/LibCrypto/CMakeLists.txt index 14d95f884f..599f790273 100644 --- a/Libraries/LibCrypto/CMakeLists.txt +++ b/Libraries/LibCrypto/CMakeLists.txt @@ -32,9 +32,5 @@ set(SOURCES ladybird_lib(LibCrypto crypto) -find_package(PkgConfig REQUIRED) -pkg_check_modules(libtommath REQUIRED IMPORTED_TARGET libtommath) target_link_libraries(LibCrypto PRIVATE PkgConfig::libtommath) - -find_package(OpenSSL REQUIRED) target_link_libraries(LibCrypto PUBLIC OpenSSL::Crypto) diff --git a/Libraries/LibDatabase/CMakeLists.txt b/Libraries/LibDatabase/CMakeLists.txt index 7f736a3417..b5a70cb90a 100644 --- a/Libraries/LibDatabase/CMakeLists.txt +++ b/Libraries/LibDatabase/CMakeLists.txt @@ -2,8 +2,6 @@ set(SOURCES Database.cpp ) -find_package(SQLite3 REQUIRED) - ladybird_lib(LibDatabase database EXPLICIT_SYMBOL_EXPORT) target_link_libraries(LibDatabase PRIVATE LibCore) diff --git a/Libraries/LibGC/CMakeLists.txt b/Libraries/LibGC/CMakeLists.txt index 7ccfa058f7..f50b953ebe 100644 --- a/Libraries/LibGC/CMakeLists.txt +++ b/Libraries/LibGC/CMakeLists.txt @@ -15,7 +15,6 @@ set(SOURCES ladybird_lib(LibGC gc EXPLICIT_SYMBOL_EXPORT) target_link_libraries(LibGC PRIVATE LibCore) -find_package(cpptrace CONFIG) if(cpptrace_FOUND AND LADYBIRD_ENABLE_CPPTRACE) target_link_libraries(LibGC PRIVATE cpptrace::cpptrace) target_compile_definitions(LibGC PRIVATE LIBGC_HAS_CPPTRACE=1) diff --git a/Libraries/LibGfx/CMakeLists.txt b/Libraries/LibGfx/CMakeLists.txt index 55b0ce0872..505e866963 100644 --- a/Libraries/LibGfx/CMakeLists.txt +++ b/Libraries/LibGfx/CMakeLists.txt @@ -83,8 +83,6 @@ target_link_libraries(LibGfx PRIVATE LibCompress LibCore LibCrypto LibFileSystem set(generated_sources TIFFMetadata.h TIFFTagHandler.cpp) list(TRANSFORM generated_sources PREPEND "ImageFormats/") -find_package(Python3 COMPONENTS Interpreter REQUIRED) - add_custom_command( OUTPUT ${generated_sources} COMMAND ${Python3_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/TIFFGenerator.py" -o "${CMAKE_CURRENT_BINARY_DIR}/ImageFormats" @@ -105,16 +103,6 @@ if (ENABLE_INSTALL_HEADERS) install(FILES ${generated_sources} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/LibGfx/ImageFormats") endif() -# Third-party -find_package(PkgConfig) - -pkg_check_modules(WOFF2 REQUIRED IMPORTED_TARGET libwoff2dec) -find_package(JPEG REQUIRED) -find_package(PNG REQUIRED) -find_package(LIBAVIF REQUIRED) -find_package(WebP REQUIRED) -find_package(harfbuzz REQUIRED) - target_link_libraries(LibGfx PRIVATE PkgConfig::WOFF2 JPEG::JPEG PNG::PNG avif WebP::webp WebP::webpdecoder WebP::webpdemux WebP::libwebpmux skia harfbuzz) @@ -140,7 +128,6 @@ if (NOT LIBPNG_HAS_APNG) endif() if (NOT ANDROID) - pkg_check_modules(Jxl REQUIRED IMPORTED_TARGET libjxl) # FIXME: Build vcpkg libraries with clang-cl so they can also build in sanitize. # https://github.com/LadybirdBrowser/ladybird/issues/5224 if (WIN32 AND ENABLE_ADDRESS_SANITIZER) @@ -150,8 +137,6 @@ if (NOT ANDROID) endif() target_link_libraries(LibGfx PRIVATE PkgConfig::Jxl) else() - find_package(libjxl REQUIRED) - find_package(hwy REQUIRED) target_link_libraries(LibGfx PRIVATE libjxl::libjxl hwy::hwy) endif() diff --git a/Libraries/LibJS/CMakeLists.txt b/Libraries/LibJS/CMakeLists.txt index b4329863e1..b506d19920 100644 --- a/Libraries/LibJS/CMakeLists.txt +++ b/Libraries/LibJS/CMakeLists.txt @@ -269,10 +269,7 @@ set(GENERATED_SOURCES Bytecode/Op.cpp) ladybird_lib(LibJS js EXPLICIT_SYMBOL_EXPORT) -find_package(simdjson CONFIG REQUIRED) -target_link_libraries(LibJS PRIVATE simdjson::simdjson) - -target_link_libraries(LibJS PRIVATE LibCore LibCrypto LibFileSystem LibRegex LibSyntax LibGC) +target_link_libraries(LibJS PRIVATE LibCore LibCrypto LibFileSystem LibRegex LibSyntax LibGC simdjson::simdjson) # Link LibUnicode publicly to ensure ICU data (which is in libicudata.a) is available in any process using LibJS. target_link_libraries(LibJS PUBLIC LibUnicode) diff --git a/Libraries/LibTLS/CMakeLists.txt b/Libraries/LibTLS/CMakeLists.txt index 9cdeb000ab..4f97785b5d 100644 --- a/Libraries/LibTLS/CMakeLists.txt +++ b/Libraries/LibTLS/CMakeLists.txt @@ -7,5 +7,4 @@ set(SOURCES ladybird_lib(LibTLS tls) target_link_libraries(LibTLS PRIVATE LibCore LibCrypto LibFileSystem) -find_package(OpenSSL REQUIRED) target_link_libraries(LibTLS PUBLIC OpenSSL::SSL) diff --git a/Libraries/LibThreading/CMakeLists.txt b/Libraries/LibThreading/CMakeLists.txt index 4a6863c25e..9c77abaf11 100644 --- a/Libraries/LibThreading/CMakeLists.txt +++ b/Libraries/LibThreading/CMakeLists.txt @@ -8,7 +8,6 @@ ladybird_lib(LibThreading threading) target_link_libraries(LibThreading PRIVATE LibCore) if (WIN32) - find_package(pthread REQUIRED) target_include_directories(LibThreading PUBLIC $) target_link_libraries(LibThreading PUBLIC ${PTHREAD_LIBRARY}) endif() diff --git a/Libraries/LibUnicode/CMakeLists.txt b/Libraries/LibUnicode/CMakeLists.txt index 5dc8c5a2a1..0806025bc6 100644 --- a/Libraries/LibUnicode/CMakeLists.txt +++ b/Libraries/LibUnicode/CMakeLists.txt @@ -27,7 +27,6 @@ set(GENERATED_SOURCES ${CURRENT_LIB_GENERATED}) ladybird_lib(LibUnicode unicode) -find_package(ICU 78.2 EXACT REQUIRED COMPONENTS data i18n uc) target_link_libraries(LibUnicode PRIVATE ICU::i18n ICU::uc ICU::data) import_rust_crate(MANIFEST_PATH Rust/Cargo.toml CRATE_NAME libunicode_rust FEATURES allocator FFI_HEADER RustFFI.h) diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index cb3bf48428..efbedfc208 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -4,15 +4,6 @@ include(vulkan) include(skia) include(SDL3) -find_package(unofficial-angle CONFIG) -if(unofficial-angle_FOUND) - set(ANGLE_TARGETS unofficial::angle::libEGL unofficial::angle::libGLESv2) -else() - find_package(PkgConfig) - pkg_check_modules(angle REQUIRED IMPORTED_TARGET angle) - set(ANGLE_TARGETS PkgConfig::angle) -endif() - set(SOURCES Animations/Animatable.cpp Animations/Animation.cpp @@ -1231,8 +1222,6 @@ set(GENERATED_SOURCES ladybird_lib(LibWeb web EXPLICIT_SYMBOL_EXPORT) -find_package(LibXml2 REQUIRED) - target_link_libraries(LibWeb PRIVATE LibCore LibCompress LibCrypto LibJS LibHTTP LibGfx LibIPC LibRegex LibSyntax LibTextCodec LibUnicode LibMedia LibWasm LibXML LibIDL LibURL LibTLS LibRequests LibGC LibThreading skia ${ANGLE_TARGETS} SDL3::SDL3 LibXml2::LibXml2) if (HAS_FONTCONFIG) diff --git a/Libraries/LibXML/CMakeLists.txt b/Libraries/LibXML/CMakeLists.txt index 32cb0953c3..4df5ad1fdb 100644 --- a/Libraries/LibXML/CMakeLists.txt +++ b/Libraries/LibXML/CMakeLists.txt @@ -5,5 +5,4 @@ set(SOURCES ladybird_lib(LibXML xml EXPLICIT_SYMBOL_EXPORT) -find_package(LibXml2 REQUIRED) target_link_libraries(LibXML PRIVATE LibXml2::LibXml2) diff --git a/Meta/CMake/audio.cmake b/Meta/CMake/audio.cmake index 56df44ede4..2fa79829ad 100644 --- a/Meta/CMake/audio.cmake +++ b/Meta/CMake/audio.cmake @@ -5,7 +5,6 @@ if (APPLE AND NOT IOS) set(LADYBIRD_AUDIO_BACKEND "AUDIO_UNIT") return() elseif (NOT WIN32) - find_package(PkgConfig REQUIRED) pkg_check_modules(PULSEAUDIO IMPORTED_TARGET libpulse) if (PULSEAUDIO_FOUND) diff --git a/Meta/CMake/check_for_dependencies.cmake b/Meta/CMake/check_for_dependencies.cmake index 12ee0cd92a..6f3b34ce3a 100644 --- a/Meta/CMake/check_for_dependencies.cmake +++ b/Meta/CMake/check_for_dependencies.cmake @@ -1,5 +1,55 @@ -# -# Check for the dependencies that the Serenity (target) and Lagom (host) builds require. -# +include_guard() -# None at the moment! +find_package(PkgConfig REQUIRED) + +find_package(mimalloc CONFIG REQUIRED) + +# AK dependencies +find_package(Backtrace) +find_package(cpptrace CONFIG) +find_package(FastFloat CONFIG REQUIRED) +find_package(fmt CONFIG REQUIRED) +find_package(simdutf REQUIRED) + +# LibGfx dependencies +find_package(harfbuzz REQUIRED) +find_package(JPEG REQUIRED) +find_package(LIBAVIF REQUIRED) +find_package(PNG REQUIRED) +find_package(WebP REQUIRED) + +pkg_check_modules(WOFF2 REQUIRED IMPORTED_TARGET libwoff2dec) + +# TODO: Figure out if we can do this the same way on all platforms +if (NOT ANDROID) + pkg_check_modules(Jxl REQUIRED IMPORTED_TARGET libjxl) +else() + find_package(libjxl REQUIRED) + find_package(hwy REQUIRED) +endif() + +find_package(CURL REQUIRED) +find_package(ICU 78.2 EXACT REQUIRED COMPONENTS data i18n uc) +find_package(LibXml2 REQUIRED) +find_package(OpenSSL REQUIRED) +find_package(simdjson CONFIG REQUIRED) +find_package(SQLite3 REQUIRED) +find_package(Threads REQUIRED) +find_package(ZLIB REQUIRED) + +pkg_check_modules(libtommath REQUIRED IMPORTED_TARGET libtommath) + +find_package(unofficial-angle CONFIG) +if(unofficial-angle_FOUND) + set(ANGLE_TARGETS unofficial::angle::libEGL unofficial::angle::libGLESv2) +else() + pkg_check_modules(angle REQUIRED IMPORTED_TARGET angle) + set(ANGLE_TARGETS PkgConfig::angle) +endif() + +if (WIN32) + find_package(pthread REQUIRED) + find_package(mman REQUIRED) +endif() + +find_package(Python3 REQUIRED COMPONENTS Interpreter) diff --git a/Meta/CMake/utils.cmake b/Meta/CMake/utils.cmake index bc9e96472e..ea77ed0ea4 100644 --- a/Meta/CMake/utils.cmake +++ b/Meta/CMake/utils.cmake @@ -93,7 +93,6 @@ endfunction() function(invoke_py_generator name script primary_source header implementation) cmake_parse_arguments(invoke_py_generator "" "EXTRA_HEADER" "arguments;dependencies" ${ARGN}) - find_package(Python3 REQUIRED COMPONENTS Interpreter) set(py_generator_arguments ${invoke_py_generator_arguments}) if (invoke_py_generator_EXTRA_HEADER) diff --git a/Services/RequestServer/CMakeLists.txt b/Services/RequestServer/CMakeLists.txt index ef1f56f3b8..fce73e7d89 100644 --- a/Services/RequestServer/CMakeLists.txt +++ b/Services/RequestServer/CMakeLists.txt @@ -29,9 +29,6 @@ endif() add_library(requestserverservice ${RS_LIB_TYPE} ${SOURCES} ${GENERATED_SOURCES}) ladybird_generated_sources(requestserverservice) -find_package(PkgConfig) -find_package(CURL REQUIRED) - add_executable(RequestServer main.cpp) target_include_directories(requestserverservice PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../..) diff --git a/Services/WebWorker/CMakeLists.txt b/Services/WebWorker/CMakeLists.txt index 8c404b4008..5453e342ca 100644 --- a/Services/WebWorker/CMakeLists.txt +++ b/Services/WebWorker/CMakeLists.txt @@ -22,7 +22,6 @@ target_include_directories(WebWorker PRIVATE ${LADYBIRD_SOURCE_DIR}) target_link_libraries(WebWorker PRIVATE webworkerservice OpenSSL::Crypto OpenSSL::SSL) if(WIN32) - find_package(pthread REQUIRED) target_include_directories(WebWorker PRIVATE $) lagom_windows_bin(WebWorker CONSOLE) endif() diff --git a/Tests/ClangPlugins/CMakeLists.txt b/Tests/ClangPlugins/CMakeLists.txt index 4b5bcd5e41..542b170375 100644 --- a/Tests/ClangPlugins/CMakeLists.txt +++ b/Tests/ClangPlugins/CMakeLists.txt @@ -1,8 +1,6 @@ include(clang_development) include(AddLLVM) -find_package(Python3 REQUIRED COMPONENTS Interpreter) - get_property(CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS GLOBAL PROPERTY CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS) list(APPEND CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS diff --git a/Tests/LibWeb/test-web/CMakeLists.txt b/Tests/LibWeb/test-web/CMakeLists.txt index e564ed9a24..5796528a6d 100644 --- a/Tests/LibWeb/test-web/CMakeLists.txt +++ b/Tests/LibWeb/test-web/CMakeLists.txt @@ -18,7 +18,6 @@ if (APPLE) target_compile_definitions(test-web PRIVATE LADYBIRD_BINARY_PATH="$") elseif (WIN32) target_link_libraries(test-web PRIVATE LibDevTools) - find_package(pthread REQUIRED) target_include_directories(test-web PRIVATE $) lagom_windows_bin(test-web CONSOLE) endif() @@ -29,8 +28,6 @@ if (WIN32) endif() if (BUILD_TESTING) - find_package(Python3 REQUIRED) - add_test( NAME LibWeb COMMAND $ --python-executable ${Python3_EXECUTABLE} --per-test-timeout 120 -v -v