diff options
-rw-r--r-- | .cmake.conf | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 113 | ||||
-rw-r--r-- | cmake/FindGPerf.cmake | 20 | ||||
-rw-r--r-- | cmake/FindGn.cmake | 23 | ||||
-rw-r--r-- | cmake/FindNinja.cmake | 31 | ||||
-rw-r--r-- | cmake/FindNodejs.cmake | 32 | ||||
-rw-r--r-- | cmake/FindSnappy.cmake | 35 | ||||
-rw-r--r-- | cmake/Functions.cmake | 58 | ||||
-rw-r--r-- | configure.cmake | 462 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 66 | ||||
-rw-r--r-- | src/core/api/configure.cmake | 155 | ||||
-rw-r--r-- | src/core/configure/BUILD.root.gn.in | 516 | ||||
-rw-r--r-- | src/core/configure/BUILD.toolchain.gn.in | 43 | ||||
-rw-r--r-- | src/core/generator.cmake | 263 | ||||
-rw-r--r-- | src/core/media_capture_devices_dispatcher.cpp | 3 | ||||
-rw-r--r-- | src/gn/CMakeLists.txt | 36 | ||||
-rw-r--r-- | src/ninja/CMakeLists.txt | 37 | ||||
-rw-r--r-- | tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp | 12 |
18 files changed, 1893 insertions, 13 deletions
diff --git a/.cmake.conf b/.cmake.conf new file mode 100644 index 000000000..930548045 --- /dev/null +++ b/.cmake.conf @@ -0,0 +1 @@ +set(QT_REPO_MODULE_VERSION "6.0.0") diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..fd00f06e9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,113 @@ +cmake_minimum_required(VERSION 3.18.0) + +include(.cmake.conf) +include(ExternalProject) +include(cmake/Functions.cmake) + +project(QtWebEngineSuperBuild + VERSION "${QT_REPO_MODULE_VERSION}" + DESCRIPTION "Qt WebEngine Libraries" + HOMEPAGE_URL "https://qt.io/" + LANGUAGES CXX C +) + +find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) + +set(installDir ${CMAKE_CURRENT_BINARY_DIR}/install) + +### FEATURES + +qt_build_repo_begin() +qt_feature_module_begin(ONLY_EVALUATE_FEATURES) +# Enable printing of feature summary by forcing qt_configure_record_command +# to work in spite of ONLY_EVALUATE_FEATURES. +set(__QtFeature_only_evaluate_features OFF) +include(configure.cmake) +include(src/core/api/configure.cmake) +qt_feature_module_end(ONLY_EVALUATE_FEATURES) +qt_build_repo_end() + +if(NOT ${webEngineSupport}) + add_custom_target(WebEngineErrorMessage ALL + ${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${webEngineError}" + COMMENT "Check QtWebEngine support") + message("-- Support check for QtWebEngine failed: ${webEngineError}") + set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE) +endif() + +if(NOT ${pdfSupport}) + add_custom_target(PdfErrorMessage ALL + ${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${pdfError}" + COMMENT "Check QtPdf support") + message("-- Support check for QtPdf failed: ${pdfError}") + set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE) +endif() + +if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build) + return() +endif() + +### NINJA + +if(NOT Ninja_FOUND) + externalproject_add(ninja + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/ninja + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ninja + INSTALL_DIR ${installDir} + PREFIX ninja + USES_TERMINAL_BUILD ON + CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> + -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR> +) +endif() + +### GN + +if(NOT Gn_FOUND) + externalproject_add(gn + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/gn + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn + INSTALL_DIR ${installDir} + PREFIX gn + USES_TERMINAL_BUILD ON + CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> + -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR> + -DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR} +) +endif() + +### LIBS + +# on windows source path can be specified without hard drive letter, +# however we need that for gn use REALPATH +get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH) +get_qt_features(featureList webengine) +get_qt_features(featureList qtwebengine) + +list(TRANSFORM featureList PREPEND "-D") +list(APPEND webenginecoreCmakeArgs + "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" + "-DWEBENGINE_ROOT_BUILD_PATH=${CMAKE_CURRENT_BINARY_DIR}" + "-DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}" + "${featureList}") + +externalproject_add(libs + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/core + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/core + INSTALL_DIR ${installDir} + PREFIX libs + USES_TERMINAL_CONFIGURE ON + USES_TERMINAL_BUILD ON + CMAKE_ARGS ${webenginecoreCmakeArgs} +) + +if(NOT Gn_FOUND) + externalproject_add_stepdependencies(libs install gn) +endif() + +if(NOT Ninja_FOUND) + externalproject_add_stepdependencies(gn install ninja) +endif() + diff --git a/cmake/FindGPerf.cmake b/cmake/FindGPerf.cmake new file mode 100644 index 000000000..85b55f1b8 --- /dev/null +++ b/cmake/FindGPerf.cmake @@ -0,0 +1,20 @@ +find_program(GPerf_EXECUTABLE NAMES gperf) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GPerf + FOUND_VAR + GPerf_FOUND + REQUIRED_VARS + GPerf_EXECUTABLE +) + +if(GPerf_FOUND AND NOT TARGET GPerf::GPerf) + add_executable(GPerf::GPerf IMPORTED) + set_target_properties(GPerf::GPerf PROPERTIES IMPORTED_LOCATION "${GPerf_EXECUTABLE}") +endif() + +include(FeatureSummary) +set_package_properties(GPerf PROPERTIES + URL "https://www.gnu.org/software/gperf/" + DESCRIPTION "Perfect hash function generator" +) diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake new file mode 100644 index 000000000..dfbe5b363 --- /dev/null +++ b/cmake/FindGn.cmake @@ -0,0 +1,23 @@ +if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) + set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/../..) +endif() + +set(CMAKE_PROGRAM_PATH ${WEBENGINE_ROOT_BUILD_DIR}/install/bin) +find_program(Gn_EXECUTABLE NAMES gn) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args( + Gn + REQUIRED_VARS Gn_EXECUTABLE) + +if(Gn_FOUND AND NOT TARGET Gn::gn) + add_executable(Gn::gn IMPORTED) + set_property(TARGET Gn::gn PROPERTY IMPORTED_LOCATION ${Gn_EXECUTABLE}) +endif() + +include(FeatureSummary) +set_package_properties(Gn PROPERTIES + URL "https://gn.googlesource.com/gn/" + DESCRIPTION "Meta-build system" +) diff --git a/cmake/FindNinja.cmake b/cmake/FindNinja.cmake new file mode 100644 index 000000000..3615d58b9 --- /dev/null +++ b/cmake/FindNinja.cmake @@ -0,0 +1,31 @@ +if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR) + set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/..) +endif() + +set(CMAKE_PROGRAM_PATH ${WEBENGINE_ROOT_BUILD_DIR}/install/bin) +find_program(Ninja_EXECUTABLE NAMES ninja ninja-build) + +if(Ninja_EXECUTABLE) + execute_process( + COMMAND ${Ninja_EXECUTABLE} --version + OUTPUT_VARIABLE Ninja_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Ninja + REQUIRED_VARS Ninja_EXECUTABLE + VERSION_VAR Ninja_VERSION) + +if(Ninja_FOUND AND NOT TARGET Ninja::ninja) + add_executable(Ninja::ninja IMPORTED) + set_property(TARGET Ninja::ninja PROPERTY IMPORTED_LOCATION ${Ninja_EXECUTABLE}) +endif() + +include(FeatureSummary) +set_package_properties(Ninja PROPERTIES + URL "https://ninja-build.org/" + DESCRIPTION "Build tool" +) diff --git a/cmake/FindNodejs.cmake b/cmake/FindNodejs.cmake new file mode 100644 index 000000000..0e5efe4a3 --- /dev/null +++ b/cmake/FindNodejs.cmake @@ -0,0 +1,32 @@ +find_program(Nodejs_EXECUTABLE NAMES node nodejs) + +if(Nodejs_EXECUTABLE) + execute_process( + COMMAND ${Nodejs_EXECUTABLE} --version + OUTPUT_VARIABLE Nodejs_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() + +string (REGEX MATCHALL "([1-9][0-9])\..*" Nodejs_VERSION "${Nodejs_VERSION}") + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Nodejs + FOUND_VAR + Nodejs_FOUND + VERSION_VAR + Nodejs_VERSION + REQUIRED_VARS + Nodejs_EXECUTABLE +) + +if(Nodejs_FOUND AND NOT TARGET Nodejs::Nodejs) + add_executable(Nodejs::Nodejs IMPORTED) + set_target_properties(Nodejs::Nodejs PROPERTIES IMPORTED_LOCATION "${Nodejs_EXECUTABLE}") +endif() + +include(FeatureSummary) +set_package_properties(Nodejs PROPERTIES + URL "https://nodejs.org/" + DESCRIPTION "JavaScript runtime environment that runs on the V8 engine" +) diff --git a/cmake/FindSnappy.cmake b/cmake/FindSnappy.cmake new file mode 100644 index 000000000..1470c55a9 --- /dev/null +++ b/cmake/FindSnappy.cmake @@ -0,0 +1,35 @@ + +if(TARGET Snappy::Snappy) + set(Snappy_FOUND TRUE) + return() +endif() +find_package(PkgConfig QUIET) + +if(PkgConfig_FOUND) + pkg_check_modules(Snappy snappy IMPORTED_TARGET) + + if (TARGET PkgConfig::Snappy) + add_library(Snappy::Snappy INTERFACE IMPORTED) + target_link_libraries(Snappy::Snappy INTERFACE PkgConfig::Snappy) + set(Snappy_FOUND TRUE) + endif() +endif() + +if(NOT TARGET Snappy::Snappy) + find_path(SNAPPY_INCLUDE_DIR NAMES snappy.h) + find_library(SNAPPY_LIBRARY NAMES snappy) + + if(SNAPPY_LIBRARY AND SNAPPY_INCLUDE_DIR) + add_library(Snappy::Snappy UNKNOWN IMPORTED) + set_target_properties(Snappy::Snappy PROPERTIES + IMPORTED_LOCATION ${SNAPPY_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${SNAPPY_INCLUDE_DIR} + ) + endif() + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Snappy REQUIRED_VARS + SNAPPY_LIBRARY + SNAPPY_INCLUDE_DIR + ) +endif() diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake new file mode 100644 index 000000000..89dff400f --- /dev/null +++ b/cmake/Functions.cmake @@ -0,0 +1,58 @@ +function(assertTargets errorResult supportResult) + if(NOT DEFINED ${supportResult}) + set(${supportResult} ON PARENT_SCOPE) + set(${supportResult} ON) + endif() + if(${${supportResult}}) + list(REMOVE_ITEM ARGN ${errorResult}) + list(REMOVE_ITEM ARGN ${supportResult}) + foreach(qtTarget IN ITEMS ${ARGN}) + if(NOT TARGET Qt::${qtTarget}) + set(${errorResult} "Missing required Qt::${qtTarget}." PARENT_SCOPE) + set(${supportResult} OFF PARENT_SCOPE) + return() + endif() + endforeach() + endif() +endfunction() + +# TODO: this should be idealy in qtbase +function(add_check_for_support errorResult supportResult) + if(NOT DEFINED ${supportResult}) + set(${supportResult} ON PARENT_SCOPE) + set(${supportResult} ON) + endif() + if (${${supportResult}}) + qt_parse_all_arguments(arg "add_check_for_support" + "" "MODULE" "MESSAGE;CONDITION" "${ARGN}") + if ("x${arg_CONDITION}" STREQUAL x) + set(arg_CONDITION ON) + endif() + qt_evaluate_config_expression(result ${arg_CONDITION}) + if(NOT ${result}) + set(${supportResult} OFF PARENT_SCOPE) + set(${errorResult} ${arg_MESSAGE} PARENT_SCOPE) + qt_configure_add_report_entry(TYPE WARNING + MESSAGE "${arg_MODULE} won't be built. ${arg_MESSAGE}" + CONDITION ON + ) + endif() + endif() +endfunction() + +function(get_qt_features outList module) + get_cmake_property(variableList VARIABLES) + set(_featureList "") + foreach (variableKey ${variableList}) + unset(FOUND) + string(REGEX MATCH QT_FEATURE_${module} FOUND ${variableKey}) + if (FOUND) + list(APPEND _featureList "${variableKey}=${${variableKey}}") + endif() + endforeach() + if ("${${outList}}" STREQUAL "") + set(${outList} ${_featureList} PARENT_SCOPE) + else() + set(${outList} "${${outList}}" "${_featureList}" PARENT_SCOPE) + endif() +endfunction() diff --git a/configure.cmake b/configure.cmake new file mode 100644 index 000000000..906e64017 --- /dev/null +++ b/configure.cmake @@ -0,0 +1,462 @@ +#### Inputs + +#### Libraries + +find_package(Ninja 1.7.2) +find_package(Gn) +find_package(Python2 2.7.5) +find_package(GPerf) +find_package(BISON) +find_package(FLEX) +find_package(Protobuf) +find_package(PkgConfig) +find_package(Snappy) +find_package(Nodejs) +find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml) + +if(PkgConfig_FOUND) + pkg_check_modules(DBUS dbus-1) + pkg_check_modules(FONTCONFIG fontconfig) + pkg_check_modules(LIBDRM libdrm) + pkg_check_modules(XCOMPOSITE xcomposite) + pkg_check_modules(XCURSOR xcursor) + pkg_check_modules(XI xi) + pkg_check_modules(XTST xtst) + pkg_check_modules(NSS nss>=3.26) + pkg_check_modules(X11 x11) + pkg_check_modules(XPROTO glproto) + pkg_check_modules(GLIB glib-2.0>=2.32.0) + pkg_check_modules(HARFBUZZ harfbuzz>=2.4.0 harfbuzz-subset>=2.4.0) + pkg_check_modules(JPEG libjpeg IMPORTED_TARGET) + pkg_check_modules(LIBEVENT libevent) + pkg_check_modules(MINIZIP minizip) + pkg_check_modules(PNG libpng>=1.6.0) + pkg_check_modules(ZLIB zlib) + pkg_check_modules(RE2 re2 IMPORTED_TARGET) + pkg_check_modules(ICU icu-uc>=65 icu-i18n>=65) + pkg_check_modules(WEBP libwebp libwebpmux libwebpdemux) + pkg_check_modules(LCMS2 lcms2) + pkg_check_modules(FREETYPE freetype2 IMPORTED_TARGET) + pkg_check_modules(LIBXML2 libxml-2.0 libxslt IMPORTED_TARGET) + pkg_check_modules(FFMPEG libavcodec libavformat libavutil) + pkg_check_modules(OPUS opus>=1.3.1) + pkg_check_modules(VPX vpx>=1.10.0 IMPORTED_TARGET) + pkg_check_modules(LIBPCI libpci) +endif() + +#### Tests + +qt_config_compile_test(re2 + LABEL "re2" + LIBRARIES + PkgConfig::RE2 + CODE +" +#include \"re2/filtered_re2.h\" +int main() { + std::string s; + re2::FilteredRE2 fre2(1); + int id = 0; + fre2.Add(s, {}, &id); + const RE2 &re2 = fre2.GetRE2(id); +}" +) + +qt_config_compile_test(vpx + LABEL "vpx" + LIBRARIES + PkgConfig::VPX + CODE +" +#include \"vpx/vpx_encoder.h\" +#include \"vpx/vp8cx.h\" +#include \"vpx/vpx_image.h\" +int main() { + vpx_codec_cx_pkt pkt; + pkt.data.frame.width[0] = 0u; + pkt.data.frame.height[0] = 0u; + auto a = CONSTRAINED_FROM_ABOVE_DROP; + auto b = VPX_IMG_FMT_NV12; +}" +) + +qt_config_compile_test(snappy + LABEL "snappy" + LIBRARIES + Snappy::Snappy + CODE +" +#include \"snappy.h\" +int main() { + snappy::Source *src = 0; + snappy::Sink *sink = 0; + return 0; +}" +) + +qt_config_compile_test(libxml2 + LABEL "compatible libxml2 and libxslt" + LIBRARIES + PkgConfig::LIBXML2 + CODE +" +#include \"libxml/xmlversion.h\" +#if !defined(LIBXML_ICU_ENABLED) +#error libxml icu not enabled +#endif +int main() { + return 0; +}" +) + +qt_config_compile_test(jpeg + LABEL "compatible libjpeg" + LIBRARIES + PkgConfig::JPEG + CODE +" +#include <cstdio> +#include <cstring> +extern \"C\" { + #include <jpeglib.h> +} +int main() { + JDIMENSION dummy; + jpeg_crop_scanline(nullptr, &dummy, &dummy); + jpeg_skip_scanlines(nullptr, dummy); +}" +) + +qt_config_compile_test(freetype + LABEL "freetype >= 2.4.2" + LIBRARIES + PkgConfig::FREETYPE + CODE +" +#include <ft2build.h> +#include FT_FREETYPE_H +#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20402) +# error This version of freetype is too old. +#endif +int main() { + FT_Face ft_face = 0; + FT_Reference_Face(ft_face); + return 0; +}" +) + +qt_config_compile_test(glibc + LABEL "glibc > 2.16" + CODE +" +#include <features.h> +#if __GLIBC__ < 2 || __GLIBC_MINOR__ < 17 +#error glibc versions below 2.17 are not supported +#endif +int main(void) { + return 0; +}" +) + +qt_config_compile_test(khr + LABEL "khr" + CODE +" +#include <KHR/khrplatform.h> +int main(void) { + return 0; +}" +) + +qt_config_compile_test(winversion + LABEL "winversion" + CODE +" +#if !defined(__clang__) && _MSC_FULL_VER < 191426428 +#error unsupported Visual Studio version +#endif +int main(void){ + return 0; +}" +) + + +#### Features + +qt_feature("qtwebengine-build" PRIVATE + LABEL "Build Qt WebEngine" + PURPOSE "Enables building the Qt WebEngine modules." +) +qt_feature("qtwebengine-widgets-build" PRIVATE + LABEL "Build Qt WebEngineWidgets" + PURPOSE "Enables building the Qt WebEngineWidgets module." + CONDITION TARGET Qt::Widgets +) +qt_feature("qtwebengine-quick-build" PRIVATE + LABEL "Build Qt WebEngineQuick" + PURPOSE "Enables building the Qt WebEngineQuick module." + CONDITION TARGET Qt::Quick AND TARGET Qt::Qml +) +qt_feature("qtpdf-build" PRIVATE + LABEL "Build Qt PDF" + PURPOSE "Enables building the Qt PDF rendering module." +) +qt_feature("webengine-system-ninja" PRIVATE + LABEL "Use system ninja" + CONDITION Ninja_FOUND +) +qt_feature("webengine-system-gn" PRIVATE + LABEL "Use system gn" + AUTODETECT FALSE + CONDITION GN_Found +) +qt_feature("webengine-developer-build" PRIVATE + LABEL "Developer build" + PURPOSE "Enables the developer build configuration." + AUTODETECT QT_FEATURE_private_tests +) +qt_feature("webengine-system-re2" PRIVATE + LABEL "re2" + AUTODETECT UNIX AND TEST_re2 +) +qt_feature("webengine-system-icu" PRIVATE + LABEL "icu" + AUTODETECT FALSE + CONDITION ICU_FOUND +) +qt_feature("webengine-system-libwebp" PRIVATE + LABEL "libwebp, libwebpmux and libwebpdemux" + CONDITION UNIX AND WEBP_FOUND +) +qt_feature("webengine-system-opus" PRIVATE + LABEL "opus" + CONDITION UNIX AND OPUS_FOUND +) +qt_feature("webengine-system-ffmpeg" PRIVATE + LABEL "ffmpeg" + AUTODETECT FALSE + CONDITION FFMPEG_FOUND AND QT_FEATURE_webengine_system_opus AND QT_FEATURE_webengine_system_libwebp +) +qt_feature("webengine-system-libvpx" PRIVATE + LABEL "libvpx" + CONDITION UNIX AND TEST_vpx +) +qt_feature("webengine-system-snappy" PRIVATE + LABEL "snappy" + CONDITION UNIX AND TEST_snappy +) +qt_feature("webengine-system-glib" PRIVATE + LABEL "glib" + CONDITION UNIX AND GLIB_FOUND +) +qt_feature("webengine-system-zlib" PRIVATE + LABEL "zlib" + CONDITION UNIX AND QT_FEATURE_system_zlib AND ZLIB_FOUND +) +qt_feature("webengine-system-minizip" PRIVATE + LABEL "minizip" + CONDITION UNIX AND MINIZIP_FOUND +) +qt_feature("webengine-system-libevent" PRIVATE + LABEL "libevent" + AUTODETECT FALSE # coin bug 711 + CONDITION UNIX AND LIBEVENT_FOUND +) +qt_feature("webengine-system-protobuf" PRIVATE + LABEL "protobuf" + CONDITION UNIX AND Protobuf_FOUND +) +qt_feature("webengine-system-libxml" PRIVATE + LABEL "libxml2 and libxslt" + CONDITION UNIX AND TEST_libxml2 +) +qt_feature("webengine-system-lcms2" PRIVATE + LABEL "lcms2" + CONDITION UNIX AND LCMS2_FOUND +) +qt_feature("webengine-system-libpng" PRIVATE + LABEL "png" + CONDITION UNIX AND TARGET Qt::Gui AND PNG_FOUND AND QT_FEATURE_system_png +) +qt_feature("webengine-system-libjpeg" PRIVATE + LABEL "jpeg" + CONDITION UNIX AND TARGET Qt::Gui AND TEST_jpeg AND QT_FEATURE_system_jpeg +) +qt_feature("webengine-system-harfbuzz" PRIVATE + LABEL "harfbuzz" + CONDITION UNIX AND TARGET Qt::Gui AND HARFBUZZ_FOUND AND QT_FEATURE_system_harfbuzz +) +qt_feature("webengine-system-freetype" PRIVATE + LABEL "freetype" + CONDITION UNIX AND TARGET Qt::Gui AND TEST_freetype AND QT_FEATURE_system_freetype +) +qt_feature("webengine-system-libpci" PRIVATE + LABEL "libpci" + CONDITION UNIX AND LIBPCI_FOUND +) + +qt_feature("webengine-ozone-x11" PRIVATE + LABEL "Support qpa-xcb" + CONDITION LINUX + AND TARGET Qt::Gui + AND QT_FEATURE_xcb + AND X11_FOUND + AND LIBDRM_FOUND + AND XCOMPOSITE_FOUND + AND XCURSOR_FOUND + AND XI_FOUND + AND XPROTO_FOUND + AND XTST_FOUND +) + +#### Support Checks + +assertTargets(webEngineError webEngineSupport Gui Widgets OpenGL OpenGLWidgets Quick Qml) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION LINUX OR WIN32 OR MACOS + MESSAGE "Build can be done only on Linux, Windows or macOS." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION TARGET Nodejs::Nodejs + MESSAGE "Nodejs is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION Python2_FOUND + MESSAGE "Python version 2 (2.7.5 or later) is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION GPerf_FOUND + MESSAGE "Tool gperf is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION BISON_FOUND + MESSAGE "Tool bison is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION FLEX_FOUND + MESSAGE "Tool flex is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR PkgConfig_FOUND + MESSAGE "A pkg-config support is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR TEST_glibc + MESSAGE "A suitable version >= 2.17 of glibc is required." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR TEST_khr + MESSAGE "Build requires Khronos development headers for build(see mesa/libegl1-mesa-dev)." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR FONTCONFIG_FOUND + MESSAGE "Build requires fontconfig." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR NSS_FOUND + MESSAGE "Build requires nss >= 3.26." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR DBUS_FOUND + MESSAGE "Build requires dbus." +) +set(xcbSupport X11 LIBDRM XCOMPOSITE XCURSOR XI XPROTO XTST) +foreach(xs ${xcbSupport}) + if(${xs}_FOUND) + set(xcbErrorMessage "${xcbErrorMessage} ${xs}:YES") + else() + set(xcbErrorMessage "${xcbErrorMessage} ${xs}:NO") + endif() +endforeach() +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT LINUX OR NOT QT_FEATURE_xcb OR QT_FEATURE_webengine_ozone_x11 + MESSAGE "Could not find all necessary libraries for qpa-xcb support.\ +${xcbErrorMessage}" +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION NOT WIN32 OR TEST_winversion + MESSAGE "Build requires Visual Studio 2019 or higher." +) +add_check_for_support(webEngineError webEngineSupport + MODULE QtWebEngine + CONDITION + (LINUX AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) OR + (LINUX AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) OR + (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL MSVC) OR + (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang AND + CMAKE_CXX_SIMULATE_ID STREQUAL MSVC) OR + (MACOS AND CMAKE_CXX_COMPILER_ID STREQUAL AppleClang) + MESSAGE "${CMAKE_CXX_COMPILER_ID} compiler is not supported." +) +add_check_for_support(pdfError pdfSupport + MODULE QtPdf + CONDITION OFF + MESSAGE "QtPdf is missing cmake port." +) + +#### Summary + +# > Qt WebEngine Build Features +qt_configure_add_summary_section(NAME "Build Features") +qt_configure_add_summary_entry(ARGS "webengine-system-ninja") +qt_configure_add_summary_entry(ARGS "webengine-system-gn") +qt_configure_add_summary_entry(ARGS "webengine-developer-build") +# >> Optional system libraries +if(UNIX) + qt_configure_add_summary_section(NAME "Optional system libraries") + qt_configure_add_summary_entry(ARGS "webengine-system-re2") + qt_configure_add_summary_entry(ARGS "webengine-system-icu") + qt_configure_add_summary_entry(ARGS "webengine-system-libwebp") + qt_configure_add_summary_entry(ARGS "webengine-system-opus") + qt_configure_add_summary_entry(ARGS "webengine-system-ffmpeg") + qt_configure_add_summary_entry(ARGS "webengine-system-libvpx") + qt_configure_add_summary_entry(ARGS "webengine-system-snappy") + qt_configure_add_summary_entry(ARGS "webengine-system-glib") + qt_configure_add_summary_entry(ARGS "webengine-system-zlib") + qt_configure_add_summary_entry(ARGS "webengine-system-minizip") + qt_configure_add_summary_entry(ARGS "webengine-system-libevent") + qt_configure_add_summary_entry(ARGS "webengine-system-protobuf") + qt_configure_add_summary_entry(ARGS "webengine-system-libxml") + qt_configure_add_summary_entry(ARGS "webengine-system-lcms2") + qt_configure_add_summary_entry(ARGS "webengine-system-libpng") + qt_configure_add_summary_entry(ARGS "webengine-system-libjpeg") + qt_configure_add_summary_entry(ARGS "webengine-system-harfbuzz") + qt_configure_add_summary_entry(ARGS "webengine-system-freetype") + qt_configure_add_summary_entry(ARGS "webengine-system-libpci") + qt_configure_end_summary_section() +endif() +# << Optional system libraries +qt_configure_end_summary_section() +# < Qt WebEngine Build Features + +qt_configure_add_report_entry( + TYPE NOTE + MESSAGE "QtWebEngine build is disabled by user." + CONDITION ${webEngineSupport} AND NOT QT_FEATURE_qtwebengine_build +) + +qt_configure_add_report_entry( + TYPE NOTE + MESSAGE "QtPdf build is disabled by user." + CONDITION ${pdfSupport} AND NOT QT_FEATURE_qtpdf_build +) + +qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "Building fat libray with device and simulator architectures will disable NEON." + CONDITION IOS AND simulator AND device AND QT_FEATURE_qtpdf_build +) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 000000000..bdb937e19 --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.18.0) + +project(QtWebEngineCore + VERSION "6.0.0" + DESCRIPTION "QtWebEngineCore" + HOMEPAGE_URL "https://doc.qt.io/qt-5/qtwebenginecore-module.html" + LANGUAGES CXX C) + +if (NOT DEFINED CMAKE_WEBENGINE_ROOT_BUILD_PATH) + get_filename_component(CMAKE_WEBENGINE_ROOT_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/../.. ABSOLUTE) +endif() + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/../../cmake") +set(buildDir "${CMAKE_CURRENT_BINARY_DIR}/debug") + +include(${PROJECT_SOURCE_DIR}/../../cmake/Functions.cmake) + +get_qt_features(featureList webengine) +message(${featureList}) + +find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) +find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml QuickTest Test) +find_package(Gn REQUIRED) +find_package(Ninja REQUIRED) +find_package(Python2 REQUIRED) + +qt_build_repo_begin() + +include(generator.cmake) +configure_file(${PROJECT_SOURCE_DIR}/configure/BUILD.toolchain.gn.in ${buildDir}/toolchain/BUILD.gn @ONLY) +configure_file(${PROJECT_SOURCE_DIR}/configure/BUILD.root.gn.in ${buildDir}/BUILD.gn @ONLY) + +get_target_property(gnCmd Gn::gn IMPORTED_LOCATION) + +set(gnArg help) + +message("configure with gn") +execute_process( + COMMAND ${gnCmd} ${gnArg} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND_ECHO STDOUT + RESULT_VARIABLE gnResult + OUTPUT_VARIABLE gnOutput + ERROR_VARIABLE gnError + ) + +if(NOT gnResult EQUAL 0) + message(FATAL_ERROR "Calling gn - FAILED ! \n${gnOutput}\n${gnError}") +endif() + +add_custom_command( + OUTPUT QtWebEngineCore.stamp + WORKING_DIRECTORY ${buildDir} + COMMAND Ninja::ninja + $ENV{NINJAFLAGS} + -C ${buildDir} + ${CMAKE_PROJECT_NAME} + USES_TERMINAL + VERBATIM +) +add_custom_target(ninja ALL DEPENDS QtWebEngineCore.stamp) + +message("CMD: ${gn_cmd}\nARGS: ${gnArg}\nOUTPUT: ${gnOutput}") + +qt_build_repo_end() + diff --git a/src/core/api/configure.cmake b/src/core/api/configure.cmake new file mode 100644 index 000000000..8986bf54e --- /dev/null +++ b/src/core/api/configure.cmake @@ -0,0 +1,155 @@ +#### Libraries + +find_package(PkgConfig) +if(PkgConfig_FOUND) + pkg_check_modules(ALSA alsa IMPORTED_TARGET) + pkg_check_modules(PULSEAUDIO libpulse>=0.9.10 libpulse-mainloop-glib) + pkg_check_modules(GIO gio-2.0) +endif() + +find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Positioning WebChannel PrintSupport) + +#### Tests + +qt_config_compile_test(alsa + LABEL "alsa" + LIBRARIES + PkgConfig::ALSA + CODE +" +#include \"alsa/asoundlib.h\" +#if SND_LIB_VERSION < 0x1000a // 1.0.10 +#error Alsa version found too old, require >= 1.0.10 +#endif +int main(){}; +") + +#### Features + +qt_feature("webengine-embedded-build" PRIVATE + LABEL "Embedded build" + PURPOSE "Enables the embedded build configuration." + AUTODETECT tests.webengine-embedded-build OR FIXME + CONDITION UNIX +) +qt_feature("webengine-system-alsa" PRIVATE + LABEL "Use ALSA" + CONDITION UNIX AND TEST_alsa +) +qt_feature("webengine-v8-snapshot-support" PRIVATE + LABEL "Building v8 snapshot supported" + CONDITION NOT UNIX OR NOT QT_FEATURE_cross_compile OR ( TEST_architecture_arch STREQUAL arm64 ) OR TEST_webengine_host_compiler +) +qt_feature("webengine-geolocation" PUBLIC + LABEL "Geolocation" + CONDITION TARGET Qt::Positioning +) +qt_feature("webengine-system-pulseaudio" PRIVATE + LABEL "Use PulseAudio" + AUTODETECT UNIX + CONDITION PULSEAUDIO_FOUND +) +qt_feature("webengine-pepper-plugins" PRIVATE + LABEL "Pepper Plugins" + PURPOSE "Enables use of Pepper Flash plugins." + AUTODETECT NOT QT_FEATURE_webengine_embedded_build +) +qt_feature("webengine-printing-and-pdf" PRIVATE + LABEL "Printing and PDF" + PURPOSE "Provides printing and output to PDF." + AUTODETECT NOT QT_FEATURE_webengine_embedded_build + CONDITION TARGET Qt::PrintSupport AND QT_FEATURE_printer +) +qt_feature("webengine-webchannel" PUBLIC + SECTION "WebEngine" + LABEL "WebChannel support" + PURPOSE "Provides QtWebChannel integration." + CONDITION TARGET Qt::WebChannel +) +qt_feature("webengine-proprietary-codecs" PRIVATE + LABEL "Proprietary Codecs" + PURPOSE "Enables the use of proprietary codecs such as h.264/h.265 and MP3." + AUTODETECT OFF +) +qt_feature("webengine-kerberos" PRIVATE + SECTION "WebEngine" + LABEL "Kerberos Authentication" + PURPOSE "Enables Kerberos Authentication Support" + AUTODETECT WIN32 +) +qt_feature("webengine-spellchecker" PUBLIC + LABEL "Spellchecker" + PURPOSE "Provides a spellchecker." + AUTODETECT OFF +) +qt_feature("webengine-native-spellchecker" PUBLIC + LABEL "Native Spellchecker" + PURPOSE "Use the system's native spellchecking engine." + AUTODETECT OFF + CONDITION MACOS AND QT_FEATURE_webengine_spellchecker +) +qt_feature("webengine-extensions" PUBLIC + SECTION "WebEngine" + LABEL "Extensions" + PURPOSE "Enables Chromium extensions within certain limits. Currently used for enabling the pdf viewer." + AUTODETECT QT_FEATURE_webengine_printing_and_pdf + CONDITION QT_FEATURE_webengine_printing_and_pdf +) +qt_feature("webengine-webrtc" PRIVATE + LABEL "WebRTC" + PURPOSE "Provides WebRTC support." + AUTODETECT OFF +) +qt_feature("webengine-webrtc-pipewire" PRIVATE + LABEL "PipeWire over GIO" + PURPOSE "Provides PipeWire support in WebRTC using GIO." + AUTODETECT false + CONDITION QT_FEATURE_webengine_webrtc AND GIO_FOUND +) +qt_feature_config("webengine-full-debug-info" QMAKE_PRIVATE_CONFIG + NAME "v8base_debug" +) +qt_feature_config("webengine-full-debug-info" QMAKE_PRIVATE_CONFIG + NAME "webcore_debug" +) +qt_configure_add_summary_section(NAME "Qt WebEngineCore") +qt_configure_add_summary_entry(ARGS "webengine-embedded-build") +qt_configure_add_summary_entry(ARGS "webengine-full-debug-info") +qt_configure_add_summary_entry(ARGS "webengine-pepper-plugins") +qt_configure_add_summary_entry(ARGS "webengine-printing-and-pdf") +qt_configure_add_summary_entry(ARGS "webengine-proprietary-codecs") +qt_configure_add_summary_entry(ARGS "webengine-spellchecker") +qt_configure_add_summary_entry(ARGS "webengine-native-spellchecker") +qt_configure_add_summary_entry(ARGS "webengine-webrtc") +qt_configure_add_summary_entry(ARGS "webengine-webrtc-pipewire") +qt_configure_add_summary_entry(ARGS "webengine-geolocation") +qt_configure_add_summary_entry(ARGS "webengine-webchannel") +qt_configure_add_summary_entry(ARGS "webengine-kerberos") +qt_configure_add_summary_entry(ARGS "webengine-extensions") +qt_configure_add_summary_entry( + ARGS "webengine-ozone-x11" + CONDITION UNIX +) +qt_configure_add_summary_entry( + ARGS "webengine-v8-snapshot-support" + CONDITION UNIX AND cross_compile +) +qt_configure_add_summary_entry( + ARGS "webengine-system-alsa" + CONDITION UNIX +) +qt_configure_add_summary_entry( + ARGS "webengine-system-pulseaudio" + CONDITION UNIX +) +qt_configure_end_summary_section() # end of "Qt WebEngineCore" section +qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "Thumb instruction set is required to build ffmpeg for QtWebEngine." + CONDITION LINUX AND QT_FEATURE_webengine_embedded_build AND NOT QT_FEATURE_webengine_system_ffmpeg AND ( TEST_architecture_arch STREQUAL arm ) AND NOT QT_FEATURE_webengine_arm_thumb +) +qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "V8 snapshot cannot be built. Most likely, the 32-bit host compiler does not work. Please make sure you have 32-bit devel environment installed." + CONDITION UNIX AND cross_compile AND NOT QT_FEATURE_webengine_v8_snapshot_support +) diff --git a/src/core/configure/BUILD.root.gn.in b/src/core/configure/BUILD.root.gn.in new file mode 100644 index 000000000..116c6bbeb --- /dev/null +++ b/src/core/configure/BUILD.root.gn.in @@ -0,0 +1,516 @@ +import("//build/config/features.gni") +import("//build/config/ui.gni") +import("//chrome/common/features.gni") +import("//components/spellcheck/spellcheck_build_features.gni") +import("//pdf/features.gni") +import("//ppapi/buildflags/buildflags.gni") +import("//printing/buildflags/buildflags.gni") +import("//extensions/buildflags/buildflags.gni") +import("//tools/grit/repack.gni") +import("//build/config/locales.gni") +import("//chrome/chrome_repack_locales.gni") +import("//extensions/buildflags/buildflags.gni") + +moc_source_h_files = exec_script("@WEBENGINE_ROOT_SOURCE_DIR@/tools/scripts/gn_find_mocables.py", + [ + @GN_HEADERS@ + ], "list lines", ["@WEBENGINE_ROOT_SOURCE_DIR@/src/core/CMakeLists.txt"] +) +moc_source_cpp_files = exec_script("@WEBENGINE_ROOT_SOURCE_DIR@/tools/scripts/gn_find_mocables.py", + [ + @GN_SOURCES@ + ], "list lines", ["@WEBENGINE_ROOT_SOURCE_DIR@/src/core/CMakeLists.txt"] +) +if (moc_source_h_files != []) { + action_foreach("generate_h_mocs") { + script = "@WEBENGINE_ROOT_SOURCE_DIR@/tools/scripts/gn_run_binary.py" + sources = moc_source_h_files + outputs = [ "${target_gen_dir}/.moc/moc_{{source_name_part}}.cpp" ] + inputs = [ "@WEBENGINE_ROOT_SOURCE_DIR@/CMakeLists.txt" ] + args = [ + @GN_ARGS_MOC_BIN@, + @GN_ARGS_DEFINES@, + @GN_ARGS_INCLUDES@, + "{{source}}", + "-o", + rebase_path("${target_gen_dir}/.moc/moc_{{source_name_part}}.cpp") + ] + } +} + +if (moc_source_cpp_files != []) { + action_foreach("generate_cpp_mocs") { + script = "@WEBENGINE_ROOT_SOURCE_DIR@/tools/scripts/gn_run_binary.py" + sources = moc_source_cpp_files + outputs = [ "${target_gen_dir}/.moc/{{source_name_part}}.moc" ] + inputs = [ "@WEBENGINE_ROOT_SOURCE_DIR@/src/core/CMakeLists.txt" ] + args = [ + @GN_ARGS_MOC_BIN@, + @GN_ARGS_DEFINES@, + @GN_ARGS_INCLUDES@, + "{{source}}", + "-o", + rebase_path("${target_gen_dir}/.moc/{{source_name_part}}.moc") + ] + } +} + +config("QtWebEngineCore_config") { + cflags = [ + @GN_CFLAGS_C@, + ] + cflags_cc = [ + @GN_CFLAGS_CC@, + ] + defines = [ + @GN_DEFINES@, + ] + include_dirs = [ + @GN_INCLUDE_DIRS@, + rebase_path("${target_gen_dir}/.moc/") + ] +} + +config("cpp17_config") { + # static initialized constexpr expressions must be compiled always as c++14 or always as c++17 + # and our qtwebengine core sources use them as c++17 + if (is_win) { + cflags_cc = [ "/std:c++17" ] + } else { + cflags_cc = [ "-std=c++17" ] + } +} + +shared_library("QtWebEngineCore") { + cmake_config = "@GN_CONFIG@" + import("@WEBENGINE_ROOT_SOURCE_DIR@/src/core/qtwebengine.gni") + configs += [ + ":cpp17_config", + ":QtWebEngineCore_config", + "//build/config:precompiled_headers" + ] + sources = [ + @GN_HEADERS@, + @GN_SOURCES@ + ] + if (moc_source_h_files != []) { + deps += [ + ":generate_h_mocs", + ] + sources += get_target_outputs(":generate_h_mocs") + } + if (moc_source_cpp_files != []) { + deps += [ + ":generate_cpp_mocs", + ] + } +} + +source_set("qtwebengine_spellcheck_sources") { + include_dirs = [ "@WEBENGINE_ROOT_SOURCE_DIR@/src/core/service" ] + configs += [ "//third_party/boringssl:external_config" ] + sources = [ + "//chrome/browser/spellchecker/spell_check_host_chrome_impl.cc", + "//chrome/browser/spellchecker/spell_check_host_chrome_impl.h", + "//chrome/browser/spellchecker/spellcheck_custom_dictionary.cc", + "//chrome/browser/spellchecker/spellcheck_custom_dictionary.h", + "//chrome/browser/spellchecker/spellcheck_factory.cc", + "//chrome/browser/spellchecker/spellcheck_factory.h", + "//chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc", + "//chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h", + "//chrome/browser/spellchecker/spellcheck_service.cc", + "//chrome/browser/spellchecker/spellcheck_service.h", + "//components/language/core/browser/pref_names.cc", + "//components/language/core/browser/pref_names.h", + ] + deps = [ + "//components/spellcheck/browser", + "//components/spellcheck/renderer", + "//third_party/blink/public:blink", + "//third_party/hunspell", + ] + if (is_mac && use_browser_spellchecker) { + sources += [ + "//chrome/browser/spellchecker/spell_check_host_chrome_impl_mac.cc", + ] + } +} + +source_set("qtwebengine_sources") { + configs += [ + ":cpp17_config", + "//skia:skia_config", + "//third_party/boringssl:external_config", + ] + deps = [ + "//build:branding_buildflags", + "//chrome/browser/resources/quota_internals:quota_internals_resources", + "//chrome/common:buildflags", + "//components/nacl/common:buildflags", + "//components/performance_manager", + "//components/plugins/renderer/", + "//extensions/buildflags:buildflags", + "//rlz/buildflags:buildflags", + "//third_party/blink/public/mojom:mojom_platform", + ] + sources = [ + "//chrome/browser/accessibility/accessibility_ui.cc", + "//chrome/browser/accessibility/accessibility_ui.h", + "//chrome/browser/custom_handlers/protocol_handler_registry.cc", + "//chrome/browser/custom_handlers/protocol_handler_registry.h", + "//chrome/browser/custom_handlers/protocol_handler_registry_factory.cc", + "//chrome/browser/custom_handlers/protocol_handler_registry_factory.h", + "//chrome/browser/devtools/devtools_eye_dropper.cc", + "//chrome/browser/devtools/devtools_eye_dropper.h", + "//chrome/browser/media/webrtc/desktop_media_list.h", + "//chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc", + "//chrome/browser/net/chrome_mojo_proxy_resolver_factory.h", + "//chrome/browser/prefs/chrome_command_line_pref_store.cc", + "//chrome/browser/prefs/chrome_command_line_pref_store.h", + "//chrome/browser/profiles/profile.cc", + "//chrome/browser/profiles/profile.h", + "//chrome/browser/tab_contents/form_interaction_tab_helper.cc", + "//chrome/browser/tab_contents/form_interaction_tab_helper.h", + "//chrome/browser/ui/webui/devtools_ui.cc", + "//chrome/browser/ui/webui/devtools_ui.h", + "//chrome/browser/ui/webui/devtools_ui_data_source.cc", + "//chrome/browser/ui/webui/devtools_ui_data_source.h", + "//chrome/browser/ui/webui/net_internals/net_internals_ui.cc", + "//chrome/browser/ui/webui/net_internals/net_internals_ui.h", + "//chrome/browser/ui/webui/quota_internals/quota_internals_handler.cc", + "//chrome/browser/ui/webui/quota_internals/quota_internals_handler.h", + "//chrome/browser/ui/webui/quota_internals/quota_internals_proxy.cc", + "//chrome/browser/ui/webui/quota_internals/quota_internals_proxy.h", + "//chrome/browser/ui/webui/quota_internals/quota_internals_types.cc", + "//chrome/browser/ui/webui/quota_internals/quota_internals_types.h", + "//chrome/browser/ui/webui/quota_internals/quota_internals_ui.cc", + "//chrome/browser/ui/webui/quota_internals/quota_internals_ui.h", + "//chrome/browser/ui/webui/user_actions/user_actions_ui.cc", + "//chrome/browser/ui/webui/user_actions/user_actions_ui.h", + "//chrome/browser/ui/webui/user_actions/user_actions_ui_handler.cc", + "//chrome/browser/ui/webui/user_actions/user_actions_ui_handler.h", + "//chrome/common/custom_handlers/protocol_handler.cc", + "//chrome/common/custom_handlers/protocol_handler.h", + "//chrome/browser/ui/webui/webui_util.cc", + "//chrome/browser/ui/webui/webui_util.h", + "//chrome/common/chrome_switches.cc", + "//chrome/common/chrome_switches.h", + "//chrome/common/pref_names.cc", + "//chrome/common/pref_names.h", + "//chrome/common/url_constants.cc", + "//chrome/common/url_constants.h", + "//chrome/common/webui_url_constants.cc", + "//chrome/common/webui_url_constants.h", + ] + if (enable_extensions) { + deps += [ + ":qtwebengine_extensions_features", + "//chrome/app:generated_resources", + "//chrome/browser/extensions/api:api_registration", + "//chrome/browser/resources:component_extension_resources_grit", + "//chrome/common/extensions/api", + "//chrome/common/extensions/api:api", + "//chrome/common/extensions/api:extensions_features", + "//components/crx_file", + "//components/crx_file:crx_creator", + "//components/spellcheck:buildflags", + "//extensions/buildflags:buildflags", + "//extensions/common", + "//extensions/common/api", + "//extensions/common:core_api_provider", + "//extensions/browser", + "//extensions/browser/api", + "//extensions/browser:core_api_provider", + "//extensions/renderer", + "//extensions:extensions_resources", + "//extensions/strings", + "//qtwebengine/browser/extensions/api:api_registration", + "//qtwebengine/common/extensions/api:api", + ] + sources += [ + "//chrome/browser/extensions/api/streams_private/streams_private_api.cc", + "//chrome/browser/extensions/api/streams_private/streams_private_api.h", + "//chrome/browser/extensions/api/enterprise_hardware_platform/enterprise_hardware_platform_api.cc", + "//chrome/browser/extensions/api/enterprise_hardware_platform/enterprise_hardware_platform_api.h", + "//chrome/common/extensions/permissions/chrome_api_permissions.cc", + "//chrome/common/extensions/permissions/chrome_api_permissions.h", + "//chrome/common/extensions/permissions/chrome_permission_message_provider.cc", + "//chrome/common/extensions/permissions/chrome_permission_message_provider.h", + "//chrome/common/extensions/permissions/chrome_permission_message_rules.cc", + "//chrome/common/extensions/permissions/chrome_permission_message_rules.h", + ] + } else { + deps += [ + "//extensions/common:common_constants", + ] + sources += [ + "//extensions/common/url_pattern.cc", + "//extensions/common/url_pattern.h", + ] + } + if (is_linux) { + sources += [ + "//chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc", + "//chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h", + ] + } + if (enable_spellcheck) { + deps += [ + ":qtwebengine_spellcheck_sources", + "//chrome/tools/convert_dict", + ] + } + if (enable_plugins) { + sources += [ + "//chrome/renderer/pepper/pepper_flash_font_file_host.cc", + "//chrome/renderer/pepper/pepper_flash_font_file_host.h", + "//chrome/renderer/pepper/pepper_shared_memory_message_filter.cc", + "//chrome/renderer/pepper/pepper_shared_memory_message_filter.h", + ] + } + if (enable_basic_printing || enable_print_preview) { + sources += [ + "//chrome/browser/printing/printer_query.cc", + "//chrome/browser/printing/printer_query.h", + "//chrome/browser/printing/print_job.cc", + "//chrome/browser/printing/print_job.h", + "//chrome/browser/printing/print_job_manager.cc", + "//chrome/browser/printing/print_job_manager.h", + "//chrome/browser/printing/print_job_worker.cc", + "//chrome/browser/printing/print_job_worker.h", + ] + deps += [ + "//printing/buildflags:buildflags", + ] + } + if (enable_pdf) { + deps += [ + "//pdf", + "//pdf:buildflags", + "//pdf:pdf_ppapi", + "//components/pdf/browser:browser", + "//components/pdf/renderer:renderer", + "//components/printing/browser", + "//components/printing/renderer", + ] + } + + if (enable_webrtc && enable_extensions) { + deps += [ + "//chrome/browser/resources/media:webrtc_logs_resources", + "//components/upload_list", + "//components/webrtc_logging/browser", + "//components/webrtc_logging/common", + ] + + sources += [ + "//chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc", + "//chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.h", + "//chrome/browser/media/webrtc/audio_debug_recordings_handler.cc", + "//chrome/browser/media/webrtc/audio_debug_recordings_handler.h", + "//chrome/browser/media/webrtc/webrtc_event_log_history.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_history.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_common.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_common.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_local.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_local.h", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_remote.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_manager_remote.h", + "//chrome/browser/media/webrtc/webrtc_event_log_uploader.cc", + "//chrome/browser/media/webrtc/webrtc_event_log_uploader.h", + "//chrome/browser/media/webrtc/webrtc_log_buffer.cc", + "//chrome/browser/media/webrtc/webrtc_log_buffer.h", + "//chrome/browser/media/webrtc/webrtc_log_uploader.cc", + "//chrome/browser/media/webrtc/webrtc_log_uploader.h", + "//chrome/browser/media/webrtc/webrtc_logging_controller.cc", + "//chrome/browser/media/webrtc/webrtc_logging_controller.h", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_handler.h", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_writer.cc", + "//chrome/browser/media/webrtc/webrtc_rtp_dump_writer.h", + "//chrome/browser/media/webrtc/webrtc_text_log_handler.cc", + "//chrome/browser/media/webrtc/webrtc_text_log_handler.h", + "//chrome/browser/ui/webui/media/webrtc_logs_ui.cc", + "//chrome/browser/ui/webui/media/webrtc_logs_ui.h", + "//chrome/renderer/media/webrtc_logging_agent_impl.cc", + "//chrome/renderer/media/webrtc_logging_agent_impl.h", + ] + } +} + +if (is_win) { + shared_library("qtwebengine_sandbox_win") { + cmake_config = "@GN_CONFIG@" + public_deps = [ "//sandbox/win:sandbox" ] + } +} + +group("qtwebengine_resources") { + deps = [ + "//chrome/app:generated_resources", + "//chrome/browser:resources", + "//chrome/browser/resources:component_extension_resources", + "//chrome/common:resources", + "//components/resources:components_resources", + ":qtwebengine_repack_resources", + ":qtwebengine_repack_resources_100", + ":qtwebengine_repack_resources_200", + ":qtwebengine_repack_resources_devtools", + ":qtwebengine_repack_locales_pack" + ] +} + +repack("qtwebengine_repack_resources") { + sources = [ + "$root_gen_dir/qtwebengine/qt_webengine_resources.pak", + "$root_gen_dir/chrome/common_resources.pak", + "$root_gen_dir/chrome/net_internals_resources.pak", + "$root_gen_dir/chrome/quota_internals_resources.pak", + "$root_gen_dir/components/components_resources.pak", + "$root_gen_dir/components/dev_ui_components_resources.pak", + "$root_gen_dir/content/browser/resources/media/media_internals_resources.pak", + "$root_gen_dir/content/browser/tracing/tracing_resources.pak", + "$root_gen_dir/content/content_resources.pak", + "$root_gen_dir/content/dev_ui_content_resources.pak", + "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak", + "$root_gen_dir/net/net_resources.pak", + "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", + "$root_gen_dir/ui/resources/webui_resources.pak", + "$root_gen_dir/ui/resources/webui_generated_resources.pak", + ] + output = "$root_out_dir/qtwebengine_resources.pak" + deps = [ + "//qtwebengine/browser:qt_webengine_resources", + "//chrome/browser/resources/net_internals:net_internals_resources", + "//chrome/browser/resources/quota_internals:quota_internals_resources", + "//chrome/common:resources_grit", + "//components/resources:components_resources_grit", + "//components/resources:dev_ui_components_resources_grit", + "//content/browser/resources/media:media_internals_resources", + "//content/browser/tracing:resources", + "//content:content_resources_grit", + "//content:dev_ui_content_resources_grit", + "//mojo/public/js:resources", + "//net:net_resources_grit", + "//third_party/blink/public:resources_grit", + "//ui/resources:webui_resources_grd_grit", + "//ui/resources:webui_generated_resources_grd", + ] + if (enable_extensions) { + sources += [ + "$root_gen_dir/chrome/component_extension_resources.pak", + "$root_gen_dir/extensions/extensions_renderer_resources.pak", + "$root_gen_dir/extensions/extensions_resources.pak", + ] + deps += [ + "//chrome/browser/resources:component_extension_resources_grit", + "//extensions:extensions_renderer_resources_grit", + "//extensions:extensions_resources_grd_grit", + ] + } + if (enable_webrtc) { + sources += [ + "$root_gen_dir/content/browser/webrtc/resources/webrtc_internals_resources.pak", + ] + deps += [ + "//content/browser/webrtc/resources", + ] + } +} + +repack("qtwebengine_repack_resources_100") { + sources = [ + "$root_gen_dir/chrome/renderer_resources_100_percent.pak", + "$root_gen_dir/components/components_resources_100_percent.pak", + "$root_gen_dir/content/app/resources/content_resources_100_percent.pak", + "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak", + "$root_gen_dir/ui/resources/ui_resources_100_percent.pak", + ] + output = "$root_out_dir/qtwebengine_resources_100p.pak" + deps = [ + "//chrome/renderer:resources_grit", + "//components/resources:components_scaled_resources_grit", + "//content/app/resources:resources_grit", + "//third_party/blink/public:scaled_resources_100_percent", + "//ui/resources:ui_resources_grd_grit" + ] + if (enable_extensions) { + sources += [ + "$root_gen_dir/extensions/extensions_browser_resources_100_percent.pak" + ] + deps += [ + "//extensions:extensions_browser_resources_grit" + ] + } +} + +repack("qtwebengine_repack_resources_200") { + sources = [ + "$root_gen_dir/chrome/renderer_resources_200_percent.pak", + "$root_gen_dir/components/components_resources_200_percent.pak", + "$root_gen_dir/content/app/resources/content_resources_200_percent.pak", + "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_200_percent.pak", + "$root_gen_dir/ui/resources/ui_resources_200_percent.pak", + ] + output = "$root_out_dir/qtwebengine_resources_200p.pak" + deps = [ + "//chrome/renderer:resources_grit", + "//components/resources:components_scaled_resources_grit", + "//content/app/resources:resources_grit", + "//third_party/blink/public:scaled_resources_200_percent", + "//ui/resources:ui_resources_grd_grit" + ] + if (enable_extensions) { + sources += [ + "$root_gen_dir/extensions/extensions_browser_resources_200_percent.pak" + ] + deps += [ + "//extensions:extensions_browser_resources_grit" + ] + } +} + +repack("qtwebengine_repack_resources_devtools") { + sources = [ + "$root_gen_dir/content/browser/devtools/devtools_resources.pak", + ] + output = "$root_out_dir/qtwebengine_devtools_resources.pak" + deps = [ + "//content/browser/devtools:devtools_resources_grit", + ] +} + +chrome_repack_locales("qtwebengine_repack_locales_pack") { + input_locales = locales + output_dir = "$root_out_dir/qtwebengine_locales" + output_locales = locales +} + +if (enable_extensions) { + import("//tools/json_schema_compiler/json_features.gni") + json_features("qt_api_features") { + feature_type = "APIFeature" + method_name = "AddQtAPIFeatures" + sources = [ + "//extensions/common/api/_webengine_api_features.json" + ] + } + json_features("qt_permission_features") { + feature_type = "PermissionFeature" + method_name = "AddQtPermissionFeatures" + sources = [ + "//chrome/common/extensions/api/_permission_features.json", + "//extensions/common/api/_permission_features.json", + ] + } + group("qtwebengine_extensions_features") { + public_deps = [ + ":qt_api_features", + ":qt_permission_features", + "//chrome/common/extensions/api:extensions_features", + "//extensions/common/api:extensions_features", + ] + } +} diff --git a/src/core/configure/BUILD.toolchain.gn.in b/src/core/configure/BUILD.toolchain.gn.in new file mode 100644 index 000000000..e44fa42de --- /dev/null +++ b/src/core/configure/BUILD.toolchain.gn.in @@ -0,0 +1,43 @@ +import("//build/config/sysroot.gni") +import("//build/toolchain/gcc_toolchain.gni") +gcc_toolchain("host") { + cc = "@CMAKE_C_COMPILER@" + cxx = "@CMAKE_CXX_COMPILER@" + ld = "@CMAKE_CXX_COMPILER@" + ar = "@CMAKE_AR@" + nm = "@CMAKE_NM@" + extra_cppflags = "" + toolchain_args = { + current_os = "linux" + current_cpu = "x64" + is_clang = false + use_gold = false + } +} +gcc_toolchain("v8_snapshot") { + cc = "@CMAKE_C_COMPILER@" + cxx = "@CMAKE_CXX_COMPILER@" + ld = "@CMAKE_CXX_COMPILER@" + ar = "@CMAKE_AR@" + nm = "@CMAKE_NM@" + toolchain_args = { + current_os = "linux" + current_cpu = "x64" + v8_current_cpu = "x64" + is_clang = false + use_gold = false + } + } +gcc_toolchain("target") { + cc = "@CMAKE_C_COMPILER@" + cxx = "@CMAKE_CXX_COMPILER@" + ld = "@CMAKE_CXX_COMPILER@" + ar = "@CMAKE_AR@" + nm = "@CMAKE_NM@" + toolchain_args = { + current_os = "linux" + current_cpu = "x64" + is_clang = false + use_gold = false + } +} diff --git a/src/core/generator.cmake b/src/core/generator.cmake new file mode 100644 index 000000000..60042fb97 --- /dev/null +++ b/src/core/generator.cmake @@ -0,0 +1,263 @@ +set(GN_DEFINES QT_NO_KEYWORDS + QT_USE_QSTRINGBUILDER + QTWEBENGINECORE_VERSION_STR=\\\"${QT_REPO_MODULE_VERSION}\\\" + QTWEBENGINEPROCESS_NAME=\\\"${QTWEBENGINEPROCESS_NAME}\\\" + BUILDING_CHROMIUM) + +set(GN_SOURCES_IN + accessibility_activation_observer.cpp + accessibility_tree_formatter_qt.cpp + authentication_dialog_controller.cpp + browser_accessibility_manager_qt.cpp + browser_accessibility_qt.cpp + browsing_data_remover_delegate_qt.cpp + browser_main_parts_qt.cpp + browser_message_filter_qt.cpp + certificate_error_controller.cpp + chromium_overrides.cpp + client_cert_select_controller.cpp + clipboard_qt.cpp + color_chooser_qt.cpp + color_chooser_controller.cpp + common/qt_ipc_logging.cpp + common/qt_messages.cpp + compositor/compositor.cpp + compositor/content_gpu_client_qt.cpp + compositor/display_overrides.cpp + compositor/display_software_output_surface.cpp + content_client_qt.cpp + content_browser_client_qt.cpp + content_main_delegate_qt.cpp + content_utility_client_qt.cpp + delegated_frame_host_client_qt.cpp + desktop_screen_qt.cpp + devtools_frontend_qt.cpp + devtools_manager_delegate_qt.cpp + download_manager_delegate_qt.cpp + favicon_manager.cpp + file_picker_controller.cpp + find_text_helper.cpp + javascript_dialog_controller.cpp + javascript_dialog_manager_qt.cpp + login_delegate_qt.cpp + media_capture_devices_dispatcher.cpp + native_web_keyboard_event_qt.cpp + net/client_cert_override.cpp + net/client_cert_store_data.cpp + net/cookie_monster_delegate_qt.cpp + net/custom_url_loader_factory.cpp + net/proxy_config_monitor.cpp + net/proxy_config_service_qt.cpp + net/proxying_url_loader_factory_qt.cpp + net/proxying_restricted_cookie_manager_qt.cpp + net/qrc_url_scheme_handler.cpp + net/ssl_host_state_delegate_qt.cpp + net/system_network_context_manager.cpp + net/url_request_custom_job_delegate.cpp + net/url_request_custom_job_proxy.cpp + net/webui_controller_factory_qt.cpp + ozone/gl_context_qt.cpp + ozone/gl_share_context_qt.cpp + ozone/gl_ozone_egl_qt.cpp + ozone/gl_surface_qt.cpp + ozone/gl_surface_egl_qt.cpp + ozone/gl_surface_wgl_qt.cpp + ozone/platform_window_qt.cpp + ozone/surface_factory_qt.cpp + permission_manager_qt.cpp + platform_notification_service_qt.cpp + process_main.cpp + profile_adapter.cpp + profile_adapter_client.cpp + profile_qt.cpp + profile_io_data_qt.cpp + quota_permission_context_qt.cpp + quota_request_controller_impl.cpp + pref_service_adapter.cpp + register_protocol_handler_request_controller_impl.cpp + render_view_context_menu_qt.cpp + render_widget_host_view_qt.cpp + render_widget_host_view_qt_delegate_client.cpp + renderer/content_renderer_client_qt.cpp + renderer/content_settings_observer_qt.cpp + renderer/render_frame_observer_qt.cpp + renderer/web_engine_page_render_frame.cpp + renderer/render_configuration.cpp + renderer/user_resource_controller.cpp + renderer/plugins/plugin_placeholder_qt.cpp + renderer_host/web_engine_page_host.cpp + renderer_host/user_resource_controller_host.cpp + resource_bundle_qt.cpp + resource_context_qt.cpp + touch_handle_drawable_qt.cpp + touch_selection_controller_client_qt.cpp + touch_selection_menu_controller.cpp + type_conversion.cpp + user_notification_controller.cpp + user_script.cpp + visited_links_manager_qt.cpp + web_contents_adapter.cpp + web_contents_delegate_qt.cpp + web_contents_view_qt.cpp + web_engine_context.cpp + web_engine_context_threads.cpp + web_engine_error.cpp + web_engine_library_info.cpp + web_engine_settings.cpp + web_event_factory.cpp + ozone/gl_surface_glx_qt.cpp + ozone/gl_ozone_glx_qt.cpp + compositor/compositor_resource_fence.cpp + compositor/display_gl_output_surface.cpp) + +set(GN_HEADERS_IN + accessibility_activation_observer.h + authentication_dialog_controller_p.h + authentication_dialog_controller.h + build_config_qt.h + browser_accessibility_manager_qt.h + browser_accessibility_qt.h + browsing_data_remover_delegate_qt.h + browser_main_parts_qt.h + browser_message_filter_qt.h + certificate_error_controller.h + client_cert_select_controller.h + clipboard_change_observer.h + clipboard_qt.h + color_chooser_qt.h + color_chooser_controller_p.h + color_chooser_controller.h + common/qt_messages.h + compositor/compositor.h + compositor/content_gpu_client_qt.h + compositor/display_software_output_surface.h + content_client_qt.h + content_browser_client_qt.h + content_main_delegate_qt.h + content_utility_client_qt.h + delegated_frame_host_client_qt.h + desktop_screen_qt.h + devtools_frontend_qt.h + devtools_manager_delegate_qt.h + download_manager_delegate_qt.h + favicon_manager.h + file_picker_controller.h + find_text_helper.h + global_descriptors_qt.h + javascript_dialog_controller_p.h + javascript_dialog_controller.h + javascript_dialog_manager_qt.h + login_delegate_qt.h + media_capture_devices_dispatcher.h + net/client_cert_override.h + net/client_cert_store_data.h + net/cookie_monster_delegate_qt.h + net/custom_url_loader_factory.h + net/proxying_url_loader_factory_qt.h + net/proxying_restricted_cookie_manager_qt.h + net/qrc_url_scheme_handler.h + net/ssl_host_state_delegate_qt.h + net/system_network_context_manager.h + net/url_request_custom_job_delegate.h + net/url_request_custom_job_proxy.h + net/webui_controller_factory_qt.h + ozone/gl_context_qt.h + ozone/gl_share_context_qt.h + ozone/gl_ozone_egl_qt.h + ozone/gl_surface_qt.h + ozone/gl_surface_egl_qt.h + ozone/gl_surface_wgl_qt.h + ozone/platform_window_qt.h + ozone/surface_factory_qt.h + permission_manager_qt.h + platform_notification_service_qt.h + pref_service_adapter.h + process_main.h + profile_adapter.h + profile_adapter_client.h + profile_qt.h + profile_io_data_qt.h + proxy_config_monitor.h + proxy_config_service_qt.h + quota_permission_context_qt.h + quota_request_controller.h + quota_request_controller_impl.h + register_protocol_handler_request_controller.h + register_protocol_handler_request_controller_impl.h + render_view_context_menu_qt.h + render_widget_host_view_qt.h + render_widget_host_view_qt_delegate.h + render_widget_host_view_qt_delegate_client.h + renderer/content_renderer_client_qt.h + renderer/content_settings_observer_qt.h + renderer/render_frame_observer_qt.h + renderer/web_engine_page_render_frame.h + renderer/render_configuration.h + renderer/user_resource_controller.h + renderer/plugins/plugin_placeholder_qt.h + renderer_host/web_engine_page_host.h + renderer_host/user_resource_controller_host.h + request_controller.h + resource_context_qt.h + touch_handle_drawable_client.h + touch_handle_drawable_qt.h + touch_selection_controller_client_qt.h + touch_selection_menu_controller.h + type_conversion.h + user_notification_controller.h + user_script.h + visited_links_manager_qt.h + web_contents_adapter.h + web_contents_adapter_client.h + web_contents_delegate_qt.h + web_contents_view_qt.h + web_engine_context.h + web_engine_error.h + web_engine_library_info.h + web_engine_settings.h + web_event_factory.h + ozone/gl_ozone_glx_qt.h + ozone/gl_surface_glx_qt.h + compositor/compositor_resource_fence.h + compositor/display_gl_output_surface.h) + +foreach(GN_HEADER_FILE ${GN_HEADERS_IN}) + get_filename_component(GN_HEADER_PATH ${GN_HEADER_FILE} ABSOLUTE) + list(APPEND GN_HEADERS \"${GN_HEADER_PATH}\") +endforeach() +string(REPLACE ";" ",\n " GN_HEADERS "${GN_HEADERS}") +foreach(GN_SOURCE_FILE ${GN_SOURCES_IN}) + get_filename_component(GN_SOURCE_PATH ${GN_SOURCE_FILE} ABSOLUTE) + list(APPEND GN_SOURCES \"${GN_SOURCE_PATH}\") +endforeach() +string(REPLACE ";" ",\n " GN_SOURCES "${GN_SOURCES}") +include(${CMAKE_WEBENGINE_ROOT_BUILD_PATH}/src/core/api/gn_config.cxx.cmake) +include(${CMAKE_WEBENGINE_ROOT_BUILD_PATH}/src/core/api/gn_config.c.cmake) +list(APPEND GN_DEFINES_IN ${GN_DEFINES}) +list(REMOVE_DUPLICATES GN_DEFINES_IN) +unset(GN_DEFINES) +foreach(GN_DEFINE ${GN_DEFINES_IN}) + list(APPEND GN_ARGS_DEFINES \"-D${GN_DEFINE}\") + list(APPEND GN_DEFINES \"${GN_DEFINE}\") +endforeach() +string(REPLACE ";" ",\n " GN_ARGS_DEFINES "${GN_ARGS_DEFINES}") +string(REPLACE ";" ",\n " GN_DEFINES "${GN_DEFINES}") +list(REMOVE_DUPLICATES GN_INCLUDES_IN) +foreach(GN_INCLUDE ${GN_INCLUDES_IN}) + list(APPEND GN_ARGS_INCLUDES \"-I${GN_INCLUDE}\") + list(APPEND GN_INCLUDE_DIRS \"${GN_INCLUDE}\") +endforeach() +string(REPLACE ";" ",\n " GN_ARGS_INCLUDES "${GN_ARGS_INCLUDES}") +string(REPLACE ";" ",\n " GN_INCLUDE_DIRS "${GN_INCLUDE_DIRS}") +get_target_property(GN_MOC_BIN_IN Qt6::moc IMPORTED_LOCATION) +set(GN_ARGS_MOC_BIN \"${GN_MOC_BIN_IN}\") +foreach(GN_CXX_COMPILE_OPTION ${GN_CXX_COMPILE_OPTIONS_IN}) + list(APPEND GN_CFLAGS_CC \"${GN_CXX_COMPILE_OPTION}\") +endforeach() +list(REMOVE_DUPLICATES GN_CFLAGS_CC) +string(REPLACE ";" ",\n " GN_CFLAGS_CC "${GN_CFLAGS_CC}") +foreach(GN_C_COMPILE_OPTION ${GN_C_COMPILE_OPTIONS_IN}) + list(APPEND GN_CFLAGS_C \"${GN_C_COMPILE_OPTION}\") +endforeach() +list(REMOVE_DUPLICATES GN_CFLAGS_C) +string(REPLACE ";" ",\n " GN_CFLAGS_C "${GN_CFLAGS_C}") diff --git a/src/core/media_capture_devices_dispatcher.cpp b/src/core/media_capture_devices_dispatcher.cpp index 3a1c20718..1b7cf5855 100644 --- a/src/core/media_capture_devices_dispatcher.cpp +++ b/src/core/media_capture_devices_dispatcher.cpp @@ -277,7 +277,8 @@ private: } void OnDeviceStopped(const std::string &label, const content::DesktopMediaID &media_id) override { - NOTIMPLEMENTED(); + Q_UNUSED(label); + Q_UNUSED(media_id); } void SetStopCallback(base::OnceClosure stop) override diff --git a/src/gn/CMakeLists.txt b/src/gn/CMakeLists.txt new file mode 100644 index 000000000..9e98e152b --- /dev/null +++ b/src/gn/CMakeLists.txt @@ -0,0 +1,36 @@ + +cmake_minimum_required(VERSION 3.18.0) + +project(Gn + DESCRIPTION "Meta-build system" + HOMEPAGE_URL "https://gn.googlesource.com/gn/" + LANGUAGES CXX C +) + +set(GN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/gn) +set(GN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn) +set(GN_EXECUTABLE ${GN_BINARY_DIR}/gn) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") + +find_package(Python2 REQUIRED) +find_package(Ninja 1.7.2 REQUIRED) + +file(MAKE_DIRECTORY ${GN_BINARY_DIR}) +add_custom_command( + OUTPUT ${GN_EXECUTABLE} + WORKING_DIRECTORY ${GN_BINARY_DIR} + COMMAND ${Python2_EXECUTABLE} ${GN_SOURCE_DIR}/build/gen.py + --no-last-commit-position + --out-path . + --cc ${CMAKE_C_COMPILER} + --cxx ${CMAKE_CXX_COMPILER} + --ld ${CMAKE_CXX_COMPILER} + COMMAND Ninja::ninja gn + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS +) +add_custom_target(gn ALL DEPENDS ${GN_EXECUTABLE}) +install(FILES ${GN_EXECUTABLE} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + DESTINATION bin) diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt new file mode 100644 index 000000000..1ac89df5a --- /dev/null +++ b/src/ninja/CMakeLists.txt @@ -0,0 +1,37 @@ + +cmake_minimum_required(VERSION 3.18.0) + +project(Ninja + DESCRIPTION "Ninja Build Tool" + HOMEPAGE_URL "https://ninja-build.org/" + LANGUAGES CXX C +) + +set(NINJA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/ninja) +set(NINJA_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) + +find_package(Python2 REQUIRED) + +if(WIN32) + set(NINJA_EXECUTABLE ninja.exe) +else() + set(NINJA_EXECUTABLE ninja) +endif() + +file(MAKE_DIRECTORY ${NINJA_BINARY_DIR}) + +add_custom_command( + OUTPUT ${NINJA_EXECUTABLE} + WORKING_DIRECTORY ${NINJA_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory ${NINJA_BINARY_DIR}/$<CONFIG> + COMMAND ${CMAKE_COMMAND} -E chdir ${NINJA_BINARY_DIR}/$<CONFIG> + ${Python2_EXECUTABLE} ${NINJA_SOURCE_DIR}/configure.py --bootstrap + USES_TERMINAL + VERBATIM +) +add_custom_target(Ninja ALL DEPENDS ${NINJA_EXECUTABLE}) +install(FILES ${NINJA_BINARY_DIR}/$<CONFIG>/${NINJA_EXECUTABLE} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + DESTINATION bin +) + diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp index 0d4e172ee..34ef111f2 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp +++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp @@ -536,12 +536,6 @@ void tst_QWebEngineUrlRequestInterceptor::firstPartyUrlHttp() QList<RequestInfo> infos; - // SubFrame - QTRY_VERIFY(interceptor.hasUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeSubFrame)); - infos = interceptor.getUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeSubFrame); - foreach (auto info, infos) - QCOMPARE(info.firstPartyUrl, firstPartyUrl); - // Stylesheet QTRY_VERIFY(interceptor.hasUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeStylesheet)); infos = interceptor.getUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeStylesheet); @@ -659,12 +653,6 @@ void tst_QWebEngineUrlRequestInterceptor::initiator() QList<RequestInfo> infos; - // SubFrame - QTRY_VERIFY(interceptor.hasUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeSubFrame)); - infos = interceptor.getUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeSubFrame); - foreach (auto info, infos) - QVERIFY(interceptor.requestInitiatorUrls[info.requestUrl].contains(info.initiator)); - // Stylesheet QTRY_VERIFY(interceptor.hasUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeStylesheet)); infos = interceptor.getUrlRequestForType(QWebEngineUrlRequestInfo::ResourceTypeStylesheet); |