summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt274
-rw-r--r--cmake/FindGn.cmake10
-rw-r--r--cmake/Functions.cmake319
-rw-r--r--cmake/Gn.cmake69
-rw-r--r--configure.cmake6
-rw-r--r--examples/CMakeLists.txt20
-rw-r--r--src/CMakeLists.txt163
-rw-r--r--src/core/CMakeLists.txt171
-rw-r--r--src/core/api/CMakeLists.txt80
-rw-r--r--src/core/tools/CMakeLists.txt1
-rw-r--r--src/pdf/CMakeLists.txt260
-rw-r--r--src/pdf/plugins/imageformats/pdf/CMakeLists.txt1
-rw-r--r--src/pdfquick/CMakeLists.txt5
-rw-r--r--src/pdfwidgets/CMakeLists.txt1
-rw-r--r--src/process/CMakeLists.txt3
-rw-r--r--src/webenginequick/CMakeLists.txt9
-rw-r--r--src/webenginequick/ui/CMakeLists.txt2
-rw-r--r--src/webenginewidgets/CMakeLists.txt6
-rw-r--r--tests/CMakeLists.txt29
19 files changed, 672 insertions, 757 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b5d5df2a..1fe8f394d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,279 +4,17 @@ include(.cmake.conf)
include(ExternalProject)
include(cmake/Functions.cmake)
-project(QtWebEngineRepoSuperBuild
+project(QtWebEngineAndQtPdf
VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "Qt WebEngine Libraries"
+ DESCRIPTION "QtWebEngine and QtPdf modules"
HOMEPAGE_URL "https://qt.io/"
LANGUAGES CXX C
)
-option(FORCE_TEST_RUN "Forces test run after compilation" FALSE)
-
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
-
-# coin configures 'just' for test build
-if(QT_BUILD_STANDALONE_TESTS)
- qt_build_repo()
- return()
-endif()
-
-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)
-include(src/webenginequick/configure.cmake)
-include(src/pdf/configure.cmake)
-qt_feature_module_end(ONLY_EVALUATE_FEATURES)
-if(NOT ${QtWebEngine_SUPPORT})
- add_custom_target(WebEngineErrorMessage ALL
- ${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${QtWebEngine_ERROR}"
- COMMENT "Check QtWebEngine support"
- VERBATIM
- )
- message("-- Support check for QtWebEngine failed: ${QtWebEngine_ERROR}")
- set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE)
-endif()
-
-if(NOT ${QtPdf_SUPPORT})
- add_custom_target(PdfErrorMessage ALL
- ${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${QtPdf_ERROR}"
- COMMENT "Check QtPdf support"
- VERBATIM
- )
- message("-- Support check for QtPdf failed: ${QtPdf_ERROR}")
- set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE)
-endif()
-
-if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build)
- # coin missing artifacts workaround
- install(FILES coin-bug-707 DESTINATION ${INSTALL_DATADIR})
- return()
-endif()
-
-if(QT_FEATURE_qtwebengine_build)
- add_subdirectory(src/core/api)
- add_subdirectory(src/core/tools)
- add_subdirectory(src/process)
- add_subdirectory(src/webenginewidgets)
- add_subdirectory(src/webenginequick)
-endif()
-
-if(QT_FEATURE_qtpdf_build)
- add_subdirectory(src/pdf)
- add_subdirectory(src/pdfwidgets)
- add_subdirectory(src/pdfquick)
-endif()
-qt_build_repo_end()
-get_install_config(installConfig)
-
-### 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_C_COMPILER=${CMAKE_C_COMPILER}
- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
- -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)
-get_qt_features(featureList qtpdf)
-
-if(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND QT_SUPERBUILD)
- set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/qtbase/lib/cmake/Qt6/qt.toolchain.cmake")
- list(APPEND libsCmakeArgs
- "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
- )
-endif()
-
-if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
- message(FATAL_ERROR "QtWebEngine build requires CMAKE_TOOLCHAIN_FILE. Please provide one or use qt-cmake.")
-endif()
-
-list(TRANSFORM featureList PREPEND "-D")
-list(APPEND libsCmakeArgs
- "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
- "-DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}"
- "-DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}"
- "-DWEBENGINE_REPO_BUILD=TRUE"
- "${featureList}"
-)
-
-if (CMAKE_C_COMPILER_LAUNCHER)
- list(APPEND libsCmakeArgs "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}")
-endif()
-if (CMAKE_CXX_COMPILER_LAUNCHER)
- list(APPEND libsCmakeArgs "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}")
-endif()
-
-if(QT_HOST_PATH)
- list(APPEND libsCmakeArgs "-DQT_HOST_PATH=${QT_HOST_PATH}")
-endif()
-
-if(LINUX)
- set(cmd "${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src")
- file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/build.sh CONTENT "ulimit -n 4096 && ${cmd}\n")
- set(coinBug699 COMMAND bash build.sh)
-else()
- if ("${CMAKE_DEFAULT_CONFIGS}" STREQUAL "all")
- set(coinBug699 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src)
- else()
- set(coinBug699 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src --config $<CONFIG>)
- endif()
-endif()
-
-# use qtwebengine as name since it is should visible for topLevel builds
-externalproject_add(qtwebengine
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src
- PREFIX libs
- USES_TERMINAL_CONFIGURE ON
- USES_TERMINAL_BUILD ON
- BUILD_ALWAYS TRUE
- CMAKE_ARGS ${libsCmakeArgs}
- BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Starting $<CONFIG> build"
- ${coinBug699}
- COMMAND ${CMAKE_COMMAND} -E echo "$<CONFIG> build complete"
- # TODO: this is aworkaround for broken qt_lib_webengine*.pri files,
- # coin does the in-source build and later calls qmake to build examples
- # and this leftover file gets sucked instead of install or src/mkspecs,
- # simply remove it, we need to implment a dry run in qt base to fix it.
- COMMAND ${CMAKE_COMMAND} -E remove_directory ../mkspecs
-)
-
-# required for topLevel build
-qt_get_tool_target_name(cacheGenTarget qmlcachegen)
-add_implicit_dependencies(qtwebengine Core Gui Widgets Network OpenGL
- OpenGLWidgets Quick QuickWidgets Qml PrintSupport WebChannel Positioning ${cacheGenTarget}
+find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS
+ Gui Widgets Network OpenGL OpenGLWidgets Quick Qml PrintSupport
+ WebChannel Positioning QuickControls2 Test QuickWidgets QuickTest WebSockets
)
-# Ensure the libs project is reconfigured if the root project is reconfigured, so that the
-# correct CMake and qmake support files are used when building examples, rather than
-# using the incomplete support files created by the root project.
-qt_internal_add_external_project_dependency_to_root_project(qtwebengine)
-
-if(QT_BUILD_EXAMPLES AND BUILD_SHARED_LIBS)
- externalproject_add(qtwebengine_examples
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/examples
- PREFIX examples
- USES_TERMINAL_BUILD ON
- BUILD_ALWAYS TRUE
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
- "${featureList}"
- )
- externalproject_add_stepdependencies(qtwebengine_examples install qtwebengine)
-endif()
-
-if(FORCE_TEST_RUN OR QT_BUILD_TESTS)
- find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS QuickTest Test)
- find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS WebSockets)
- unset(testRunCommand)
- if(FORCE_TEST_RUN)
- set(testRunCommand TEST_COMMAND ctest)
- endif()
- externalproject_add(qtwebengine_tests
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/tests
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests
- PREFIX tests
- USES_TERMINAL_BUILD ON
- USES_TERMINAL_TEST ON
- BUILD_ALWAYS TRUE
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
- "${featureList}"
- INSTALL_COMMAND ""
- ${testRunCommand}
- )
- externalproject_add_stepdependencies(qtwebengine_tests install qtwebengine)
- add_implicit_dependencies(qtwebengine_tests Test QuickTest WebSockets)
- if(QT_BUILD_EXAMPLES AND BUILD_SHARED_LIBS)
- externalproject_add_stepdependencies(qtwebengine_tests install qtwebengine_examples)
- endif()
-endif()
-
-if(NOT Gn_FOUND)
- externalproject_add_stepdependencies(qtwebengine install gn)
-endif()
-
-if(NOT Ninja_FOUND)
- externalproject_add_stepdependencies(gn install ninja)
-endif()
-
-if(QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_framework)
- # install resources (again), coin calls install with DESTDIR
- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/translations/qtwebengine_locales
- DESTINATION ${CMAKE_INSTALL_PREFIX}/translations
- )
- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources
- DESTINATION ${CMAKE_INSTALL_PREFIX}
- )
-endif()
-
-### CROSS BUILD SETUP
-
-# install gn for cross build
-# TODO: is this really needed, should we skip it and just build gn as host build ?
-if(LINUX AND NOT Gn_FOUND OR INSTALL_GN)
- set(INSTALL_GN 1 CACHE INTERNAL "")
- install(
- PROGRAMS ${installDir}/bin/gn
- CONFIGURATIONS ${installConfig}
- RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}"
- )
-endif()
-
-if(CMAKE_CROSSCOMPILING)
- externalproject_add(hostBuild
- SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/host
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/host
- PREFIX host
- USES_TERMINAL_BUILD ON
- CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${QT_HOST_PATH}/lib/cmake/Qt6/qt.toolchain.cmake
- -DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
- -DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}
- -DGN_TARGET_CPU=${TEST_architecture_arch}
- -DCMAKE_C_FLAGS=
- -DCMAKE_CXX_FLAGS=
- -DQT_FEATURE_qtwebengine_build=${QT_FEATURE_qtwebengine_build}
- -DQT_FEATURE_qtpdf_build=${QT_FEATURE_qtpdf_build}
- )
- externalproject_add_stepdependencies(qtwebengine install hostBuild)
-endif()
+qt_build_repo()
diff --git a/cmake/FindGn.cmake b/cmake/FindGn.cmake
index abfa0fe26..6bef6009e 100644
--- a/cmake/FindGn.cmake
+++ b/cmake/FindGn.cmake
@@ -1,10 +1,14 @@
-if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR)
+if(NOT DEFINED WEBENGINE_ROOT_BUILD_DIR)
set(WEBENGINE_ROOT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
find_program(Gn_EXECUTABLE NAMES gn PATHS "${WEBENGINE_ROOT_BUILD_DIR}/install/bin" NO_DEFAULT_PATH)
if(NOT QT_HOST_PATH STREQUAL "")
find_program(Gn_EXECUTABLE NAMES gn PATHS ${QT_HOST_PATH}/${INSTALL_LIBEXECDIR} NO_DEFAULT_PATH)
endif()
+# script mode does not have QT_HOST_PATH or INSTALL_LIBEXECDIR instead it uses QT_HOST_GN_PATH
+if(NOT QT_HOST_GN_PATH STREQUAL "")
+ find_program(Gn_EXECUTABLE NAMES gn PATHS ${QT_HOST_GN_PATH} NO_DEFAULT_PATH)
+endif()
find_program(Gn_EXECUTABLE NAMES gn)
if(Gn_EXECUTABLE)
@@ -15,7 +19,7 @@ if(Gn_EXECUTABLE)
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
-string(REGEX MATCHALL "([1-9]\.[0-9]\.[0-9])\.qtwebengine\.qt\.io.*" Gn_QT_VERSION "${Gn_VERSION}")
+string(REGEX MATCHALL "([1-9]\\.[0-9]\\.[0-9])\\.qtwebengine\\.qt\\.io.*" Gn_QT_VERSION "${Gn_VERSION}")
if("${Gn_QT_VERSION}")
set(Gn_VERSION "${Gn_QT_VERSION}")
endif()
@@ -31,7 +35,7 @@ find_package_handle_standard_args(Gn
Gn_EXECUTABLE
)
-if(Gn_FOUND AND NOT TARGET Gn::gn)
+if(Gn_FOUND AND NOT TARGET Gn::gn AND NOT CMAKE_SCRIPT_MODE_FILE)
add_executable(Gn::gn IMPORTED)
set_property(TARGET Gn::gn PROPERTY IMPORTED_LOCATION ${Gn_EXECUTABLE})
endif()
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
index 59ee72799..36f554827 100644
--- a/cmake/Functions.cmake
+++ b/cmake/Functions.cmake
@@ -19,6 +19,7 @@ function(assertTargets)
endforeach()
endfunction()
+#TODO: remove me
function(add_implicit_dependencies target)
if(TARGET ${target})
list(REMOVE_ITEM ARGN ${target})
@@ -74,36 +75,40 @@ function(get_qt_features outList module)
endif()
endfunction()
-function(get_configure_mode configureMode)
- if(NOT DEFINED WEBENGINE_REPO_BUILD AND NOT DEFINED QT_SUPERBUILD)
- set(${configureMode} NO_CONFIG_HEADER_FILE NO_SYNC_QT PARENT_SCOPE)
- endif()
+function(create_cxx_config cmakeTarget arch configFileName)
+ file(GENERATE
+ OUTPUT $<CONFIG>/${arch}/${configFileName}
+ CONTENT "\
+ set(GN_INCLUDES $<TARGET_PROPERTY:INCLUDE_DIRECTORIES>)\n\
+ set(GN_DEFINES $<TARGET_PROPERTY:COMPILE_DEFINITIONS>)\n\
+ set(GN_LINK_OPTIONS $<TARGET_PROPERTY:LINK_OPTIONS>)\n\
+ set(GN_CXX_COMPILE_OPTIONS $<TARGET_PROPERTY:COMPILE_OPTIONS>)"
+# set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
+ CONDITION $<COMPILE_LANGUAGE:CXX>
+ TARGET ${cmakeTarget}
+ )
endfunction()
-function(make_config_for_gn target configFileName)
- if(NOT DEFINED WEBENGINE_REPO_BUILD)
- file(GENERATE
- OUTPUT $<CONFIG>/${configFileName}.cxx.cmake
- CONTENT [[
- set(GN_INCLUDES $<TARGET_PROPERTY:INCLUDE_DIRECTORIES>)
- set(GN_DEFINES $<TARGET_PROPERTY:COMPILE_DEFINITIONS>)
- set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
- set(GN_LINK_OPTIONS $<TARGET_PROPERTY:LINK_OPTIONS>)
- set(GN_CXX_COMPILE_OPTIONS $<TARGET_PROPERTY:COMPILE_OPTIONS>)]]
- CONDITION $<COMPILE_LANGUAGE:CXX>
- TARGET ${target})
- file(GENERATE
- OUTPUT $<CONFIG>/${configFileName}.c.cmake
- CONTENT [[ set(GN_C_COMPILE_OPTIONS $<TARGET_PROPERTY:COMPILE_OPTIONS>)]]
- CONDITION $<COMPILE_LANGUAGE:C>
- TARGET ${target})
- endif()
-endfunction()
-
-function(make_install_only target)
- if(NOT DEFINED WEBENGINE_REPO_BUILD)
- set_target_properties(${target} PROPERTIES EXCLUDE_FROM_ALL TRUE)
- endif()
+function(create_c_config cmakeTarget arch configFileName)
+ file(GENERATE
+ OUTPUT $<CONFIG>/${arch}/${configFileName}
+ CONTENT "set(GN_C_COMPILE_OPTIONS $<TARGET_PROPERTY:COMPILE_OPTIONS>)"
+ CONDITION $<COMPILE_LANGUAGE:C>
+ TARGET ${cmakeTarget})
+endfunction()
+
+function(create_gn_target_config target configFile)
+ get_target_property(elementList ${target} ELEMENTS)
+ get_target_property(prefix ${target} PREFIX)
+ file(WRITE ${configFile}
+ "set(PREFIX ${prefix})\nset(ELEMENTS ${elementList})\n"
+ )
+ foreach(element IN LISTS elementList)
+ get_target_property(prop ${target} ${prefix}_${element})
+ if(prop)
+ file(APPEND ${configFile} "set(${prefix}_${element} ${prop})\n")
+ endif()
+ endforeach()
endfunction()
function(add_gn_target target config arch)
@@ -119,18 +124,30 @@ function(add_gn_target target config arch)
)
endfunction()
-function(read_gn_target target filePath)
+function(init_gn_config filePath)
include(${filePath})
- applyToGnTarget(${target})
+ set_directory_properties(PROPERTIES
+ ELEMENTS "${ELEMENTS}"
+ PREFIX "${PREFIX}"
+ )
+ applyToGnTarget(DIRECTORY)
endfunction()
-macro(applyToGnTarget target)
- get_target_property(elementList ${target} ELEMENTS)
- get_target_property(prefix ${target} PREFIX)
+function(read_gn_config filePath)
+ include(${filePath})
+ applyToGnTarget(DIRECTORY)
+endfunction()
+
+# this runs also in script mode, so we use than DIRECTORY
+macro(applyToGnTarget)
+ set(type ${ARGV0})
+ set(target ${ARGV1})
+ get_property(elementList ${type} ${target} PROPERTY ELEMENTS)
+ get_property(prefix ${type} ${target} PROPERTY PREFIX)
foreach(element IN LISTS elementList)
if(${prefix}_${element})
message(DEBUG "${prefix}_${element} = ${${prefix}_${element}}")
- set_property(TARGET ${target} APPEND PROPERTY ${prefix}_${element} ${${prefix}_${element}})
+ set_property(${type} ${target} APPEND PROPERTY ${prefix}_${element} ${${prefix}_${element}})
endif()
endforeach()
endmacro()
@@ -144,7 +161,7 @@ function(extend_gn_target target)
qt_evaluate_config_expression(result ${GN_CONDITION})
if(${result})
message(DEBUG "extend_gn_target(${target} CONDITION ${GN_CONDITION} ...): Evaluated")
- applyToGnTarget(${target})
+ applyToGnTarget(TARGET ${target})
endif()
endfunction()
@@ -166,15 +183,14 @@ function(extend_gn_list outList)
set(${outList} "${${outList}}" PARENT_SCOPE)
endfunction()
-function(configure_gn_target target config inFilePath outFilePath buildPrefix)
-
- # GN_CONFIG
- string(TOUPPER ${config} GN_CONFIG)
+function(configure_gn_target sourceDir inFilePath outFilePath)
+ # FIXME: GN_CONFIG
+ set(GN_CONFIG NOTUSED)
# GN_SOURCES GN_HEADERS
- get_target_property(gnSources ${target} GN_SOURCES)
+ get_property(gnSources DIRECTORY PROPERTY GN_SOURCES)
foreach(gnSourceFile ${gnSources})
- get_filename_component(gnSourcePath ${gnSourceFile} REALPATH)
+ get_filename_component(gnSourcePath ${sourceDir}/${gnSourceFile} REALPATH)
list(APPEND sourceList \"${gnSourcePath}\")
endforeach()
set(GN_HEADERS ${sourceList})
@@ -183,7 +199,7 @@ function(configure_gn_target target config inFilePath outFilePath buildPrefix)
list(FILTER GN_SOURCES EXCLUDE REGEX "^.+\\.h\"$")
# GN_DEFINES
- get_target_property(gnDefines ${target} GN_DEFINES)
+ get_property(gnDefines DIRECTORY PROPERTY GN_DEFINES)
list(REMOVE_DUPLICATES gnDefines)
foreach(gnDefine ${gnDefines})
list(APPEND GN_ARGS_DEFINES \"-D${gnDefine}\")
@@ -191,7 +207,7 @@ function(configure_gn_target target config inFilePath outFilePath buildPrefix)
endforeach()
# GN_INCLUDES
- get_target_property(gnIncludes ${target} GN_INCLUDES)
+ get_property(gnIncludes DIRECTORY PROPERTY GN_INCLUDES)
list(REMOVE_DUPLICATES gnIncludes)
foreach(gnInclude ${gnIncludes})
get_filename_component(gnInclude ${gnInclude} REALPATH)
@@ -200,27 +216,30 @@ function(configure_gn_target target config inFilePath outFilePath buildPrefix)
endforeach()
# MOC
- get_target_property(GN_MOC_BIN_IN Qt6::moc IMPORTED_LOCATION)
- set(GN_ARGS_MOC_BIN \"${GN_MOC_BIN_IN}\")
+ get_property(mocFilePath DIRECTORY PROPERTY GN_MOC_PATH)
+ set(GN_ARGS_MOC_BIN \"${mocFilePath}\")
# GN_CFLAGS_CC
- get_target_property(gnCxxCompileOptions ${target} GN_CXX_COMPILE_OPTIONS)
+ get_property(gnCxxCompileOptions DIRECTORY PROPERTY GN_CXX_COMPILE_OPTIONS)
foreach(gnCxxCompileOption ${gnCxxCompileOptions})
list(APPEND GN_CFLAGS_CC \"${gnCxxCompileOption}\")
endforeach()
list(REMOVE_DUPLICATES GN_CFLAGS_CC)
# GN_CFLAGS_C
- get_target_property(gnCCompileOptions ${target} GN_C_COMPILE_OPTIONS)
+ get_property(gnCCompileOptions DIRECTORY PROPERTY GN_C_COMPILE_OPTIONS)
foreach(gnCCompileOption ${gnCCompileOptions})
list(APPEND GN_CFLAGS_C \"${gnCCompileOption}\")
endforeach()
list(REMOVE_DUPLICATES GN_CFLAGS_C)
# GN_SOURCE_ROOT
- get_filename_component(GN_SOURCE_ROOT "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
- set(GN_RSP_PREFIX ${buildPrefix})
- if(MACOS)
+ get_filename_component(GN_SOURCE_ROOT "${sourceDir}" REALPATH)
+
+ # GN_RSP_PREFIX
+ get_property(GN_RSP_PREFIX DIRECTORY PROPERTY GN_RSP_PREFIX)
+
+ if(APPLE) # this runs in scrpit mode without qt-cmake so on MACOS here
recoverFrameworkBuild(GN_INCLUDE_DIRS GN_CFLAGS_C)
endif()
@@ -260,8 +279,8 @@ function(get_install_config result)
endif()
endfunction()
-macro(assertRunAsTopLevelBuild condition)
- if(NOT DEFINED WEBENGINE_REPO_BUILD AND ${condition})
+macro(assertRunAsTopLevelBuild)
+ if(NOT DEFINED WEBENGINE_REPO_BUILD)
message(FATAL_ERROR "This cmake file should run as top level build.")
return()
endif()
@@ -285,7 +304,7 @@ endfunction()
# forward declarations of NSString.
function(get_forward_declaration_macro result)
if(MACOS)
- set(${result} "Q_FORWARD_DECLARE_OBJC_CLASS(name)=class name;" PARENT_SCOPE)
+ set(${result} " \"Q_FORWARD_DECLARE_OBJC_CLASS(name)=class name;\" " PARENT_SCOPE)
else()
set(${result} "Q_FORWARD_DECLARE_OBJC_CLASS=QT_FORWARD_DECLARE_CLASS" PARENT_SCOPE)
endif()
@@ -316,10 +335,10 @@ function(get_darwin_sdk_version result)
endif()
endfunction()
-function(add_gn_target_for_cmake_target gnTarget cmakeTarget ninjaTarget config arch)
+function(add_ninja_target target cmakeTarget ninjaTarget config arch buildDir)
string(TOUPPER ${config} cfg)
- add_custom_target(${gnTarget})
- set_target_properties(${gnTarget} PROPERTIES
+ add_custom_target(${target} DEPENDS ${buildDir}/${config}/${arch}/${ninjaTarget}.stamp)
+ set_target_properties(${target} PROPERTIES
CONFIG ${config}
ARCH ${arch}
CMAKE_TARGET ${cmakeTarget}
@@ -327,11 +346,11 @@ function(add_gn_target_for_cmake_target gnTarget cmakeTarget ninjaTarget config
)
endfunction()
-function(copy_response_files gnTarget)
- get_target_property(config ${gnTarget} CONFIG)
- get_target_property(ninjaTarget ${gnTarget} NINJA_TARGET)
- get_target_property(cmakeTarget ${gnTarget} CMAKE_TARGET)
- list(REMOVE_ITEM ARGN ${gnTarget})
+function(copy_response_files target)
+ get_target_property(config ${target} CONFIG)
+ get_target_property(ninjaTarget ${target} NINJA_TARGET)
+ get_target_property(cmakeTarget ${target} CMAKE_TARGET)
+ list(REMOVE_ITEM ARGN ${target})
foreach(rsp IN ITEMS ${ARGN})
set(rsp_dst "CMakeFiles_${ninjaTarget}_${config}_${rsp}.rsp")
set(rsp_src "${${rsp}_rsp}")
@@ -339,6 +358,7 @@ function(copy_response_files gnTarget)
OUTPUT ${PROJECT_BINARY_DIR}/${rsp_dst}
COMMAND ${CMAKE_COMMAND} -E copy ${rsp_src} ${PROJECT_BINARY_DIR}/${rsp_dst}
DEPENDS ${rsp_src}
+ USES_TERMINAL
)
set(${rsp}_rsp ${rsp_dst} PARENT_SCOPE)
add_custom_target(${cmakeTarget}_${rsp}_copy_${config}
@@ -348,25 +368,27 @@ function(copy_response_files gnTarget)
endforeach()
endfunction()
-function(extend_target_with_gn_target gnTarget buildDir)
- get_target_property(config ${gnTarget} CONFIG)
- get_target_property(ninjaTarget ${gnTarget} NINJA_TARGET)
- get_target_property(cmakeTarget ${gnTarget} CMAKE_TARGET)
+function(extend_cmake_target target buildDir)
+ get_target_property(config ${target} CONFIG)
+ get_target_property(ninjaTarget ${target} NINJA_TARGET)
+ get_target_property(cmakeTarget ${target} CMAKE_TARGET)
string(TOUPPER ${cmakeTarget} tg)
string(TOUPPER ${config} cfg)
- add_custom_target(ninja_${cmakeTarget}_${config} DEPENDS ${buildDir}/${ninjaTarget}.stamp)
- add_dependencies(${cmakeTarget} ninja_${cmakeTarget}_${config})
set(objects_rsp "${buildDir}/${ninjaTarget}_objects.rsp")
set(archives_rsp "${buildDir}/${ninjaTarget}_archives.rsp")
set(libs_rsp "${buildDir}/${ninjaTarget}_libs.rsp")
if(LINUX)
target_link_options(${cmakeTarget} PRIVATE
"$<$<CONFIG:${config}>:@${objects_rsp}>"
- "-Wl,--start-group"
- "$<$<CONFIG:${config}>:@${archives_rsp}>"
- "-Wl,--end-group"
- "$<$<CONFIG:${config}>:@${libs_rsp}>"
)
+ target_link_libraries(${cmakeTarget} PRIVATE
+ "-Wl,--start-group $<$<CONFIG:${config}>:@${archives_rsp}> -Wl,--end-group"
+ )
+ # linker here options are just to prevent processing it by cmake
+ target_link_libraries(${cmakeTarget} PRIVATE
+ "-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings"
+ )
+
endif()
if(MACOS)
target_link_options(${cmakeTarget} PRIVATE
@@ -376,7 +398,7 @@ function(extend_target_with_gn_target gnTarget buildDir)
)
endif()
if(WIN32)
- copy_response_files(${gnTarget} objects archives libs)
+ copy_response_files(${target} objects archives libs)
target_link_options(${cmakeTarget} PRIVATE
"$<$<CONFIG:${config}>:@${objects_rsp}>"
"$<$<CONFIG:${config}>:@${archives_rsp}>"
@@ -387,11 +409,11 @@ function(extend_target_with_gn_target gnTarget buildDir)
endif()
endfunction()
-function(add_rsp_command gnTarget buildDir)
- get_target_property(config ${gnTarget} CONFIG)
- get_target_property(arch ${gnTarget} ARCH)
- get_target_property(ninjaTarget ${gnTarget} NINJA_TARGET)
- get_target_property(cmakeTarget ${gnTarget} CMAKE_TARGET)
+function(add_rsp_command target buildDir)
+ get_target_property(config ${target} CONFIG)
+ get_target_property(arch ${target} ARCH)
+ get_target_property(ninjaTarget ${target} NINJA_TARGET)
+ get_target_property(cmakeTarget ${target} CMAKE_TARGET)
string(TOUPPER ${config} cfg)
add_custom_command(
OUTPUT ${buildDir}/${cmakeTarget}.a
@@ -415,9 +437,9 @@ function(add_rsp_command gnTarget buildDir)
)
endfunction()
-function(add_lipo_command gnTarget buildDir)
- get_target_property(config ${gnTarget} CONFIG)
- get_target_property(cmakeTarget ${gnTarget} CMAKE_TARGET)
+function(add_lipo_command target buildDir)
+ get_target_property(config ${target} CONFIG)
+ get_target_property(cmakeTarget ${target} CMAKE_TARGET)
set(libs_rsp "${buildDir}/x86_64/${ninjaTarget}_libs.rsp")
# Lipo the object files together to a single fat archive
add_library(${cmakeTarget}_${config} STATIC IMPORTED GLOBAL)
@@ -606,7 +628,7 @@ function(check_thumb result)
set(${result} FALSE PARENT_SCOPE)
endfunction()
-macro(create_pkg_config_host_wrapper)
+macro(create_pkg_config_host_wrapper buildDir)
find_package(PkgConfigHost)
if(CMAKE_CROSSCOMPILING)
create_pkg_config_wrapper("${buildDir}/pkg-config-host_wrapper.sh" "${PKG_CONFIG_HOST_EXECUTABLE}")
@@ -825,38 +847,9 @@ macro(append_pkg_config_setup)
endif()
endmacro()
-macro(execute_gn)
- get_target_property(gnCmd Gn::gn IMPORTED_LOCATION)
- set(gnArg gen ${buildDir}/${config}/${arch})
-
- list(APPEND gnArg
- --script-executable=${Python2_EXECUTABLE}
- --root=${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/chromium)
- list(JOIN gnArgArg " " gnArgArg)
-
- list(APPEND gnArg "--args=${gnArgArg}")
-
- list(JOIN gnArg " " printArg)
- message("-- Running gn for ${config} ${arch}\n-- ${gnCmd} ${printArg}")
- execute_process(
- COMMAND ${gnCmd} ${gnArg}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- RESULT_VARIABLE gnResult
- OUTPUT_VARIABLE gnOutput
- ERROR_VARIABLE gnError
- )
-
- if(NOT gnResult EQUAL 0)
- message(FATAL_ERROR "\n-- GN FAILED\n${gnOutput}\n${gnError}")
- else()
- string(REGEX REPLACE "\n$" "" gnOutput "${gnOutput}")
- message("-- GN ${gnOutput}")
- endif()
-endmacro()
-
function(add_ninja_command)
- qt_parse_all_arguments(arg "add_ninja_comamnd"
- "" "TARGET;OUTPUT;BUILDDIR" "BYPRODUCTS" "${ARGN}"
+ qt_parse_all_arguments(arg "add_ninja_command"
+ "" "TARGET;OUTPUT;BUILDDIR;MODULE" "BYPRODUCTS" "${ARGN}"
)
string(REPLACE " " ";" NINJAFLAGS "$ENV{NINJAFLAGS}")
list(TRANSFORM arg_BYPRODUCTS PREPEND "${arg_BUILDDIR}/")
@@ -865,7 +858,7 @@ function(add_ninja_command)
${arg_BUILDDIR}/${arg_OUTPUT}
${arg_BUILDDIR}/${arg_TARGET} # use generator expression in CMAKE 3.20
BYPRODUCTS ${arg_BYPRODUCTS}
- COMMENT "Ninja for ${arg_BUILDDIR}"
+ COMMENT "Running ninja for ${arg_TARGET} in ${arg_BUILDDIR}"
COMMAND Ninja::ninja
${NINJAFLAGS}
-C ${arg_BUILDDIR}
@@ -873,6 +866,7 @@ function(add_ninja_command)
USES_TERMINAL
VERBATIM
COMMAND_EXPAND_LISTS
+ DEPENDS run_${arg_MODULE}_NinjaReady
)
endfunction()
@@ -892,7 +886,7 @@ function(get_architectures result)
endif()
endfunction()
-function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget buildDir)
+function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDir)
# config loop is a workaround to be able to add_custom_command per config
# note this is fixed in CMAKE.3.20 and should be cleaned up when 3.20 is
# the minimum cmake we support
@@ -900,28 +894,105 @@ function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget buildDir)
get_architectures(archs)
foreach(config ${configs})
foreach(arch ${archs})
- set(gnTarget ${ninjaTarget}_${config}_${arch})
- add_gn_target_for_cmake_target(${gnTarget} ${cmakeTarget} ${ninjaTarget} ${config} ${arch})
+ set(target ${ninjaTarget}_${config}_${arch})
+ add_ninja_target(${target} ${cmakeTarget} ${ninjaTarget} ${config} ${arch} ${buildDir})
add_ninja_command(
TARGET ${ninjaTarget}
OUTPUT ${ninjaTarget}.stamp
- BYPRODUCTS
- ${ninjaTarget}_objects.rsp
- ${ninjaTarget}_archives.rsp
- ${ninjaTarget}_libs.rsp
BUILDDIR ${buildDir}/${config}/${arch}
+ MODULE ${module}
+ )
+ add_dependencies(run_${module}_NinjaDone ${target})
+ set_target_properties(${cmakeTarget} PROPERTIES
+ LINK_DEPENDS ${buildDir}/${config}/${arch}/${ninjaTarget}.stamp
)
if(QT_IS_MACOS_UNIVERSAL)
- add_rsp_command(${gnTarget} ${buildDir}/${config}/${arch})
+ add_rsp_command(${target} ${buildDir}/${config}/${arch})
else()
- extend_target_with_gn_target(${gnTarget} ${buildDir}/${config}/${arch})
+ extend_cmake_target(${target} ${buildDir}/${config}/${arch})
endif()
endforeach()
if(QT_IS_MACOS_UNIVERSAL)
set(arch ${CMAKE_SYSTEM_PROCESSOR})
- set(gnTarget ${ninjaTarget}_${config}_${arch})
- add_lipo_command(${gnTarget} ${buildDir}/${config})
+ set(target ${ninjaTarget}_${config}_${arch})
+ add_lipo_command(${target} ${buildDir}/${config})
endif()
endforeach()
endfunction()
+function(get_config_filenames c_config cxx_config target_config)
+ set(${target_config} gn_config_target.cmake PARENT_SCOPE)
+ set(${cxx_config} gn_config_cxx.cmake PARENT_SCOPE)
+ set(${c_config} gn_config_c.cmake PARENT_SCOPE)
+endfunction()
+
+function(add_gn_command)
+ qt_parse_all_arguments(arg "add_gn_command"
+ "" "CMAKE_TARGET;GN_TARGET;MODULE;BUILDDIR" "NINJA_TARGETS;GN_ARGS" "${ARGN}"
+ )
+
+ get_config_filenames(cConfigFileName cxxConfigFileName targetConfigFileName)
+ set(gnArgArgFile ${arg_BUILDDIR}/args.gn)
+
+ list(JOIN arg_GN_ARGS "\n" arg_GN_ARGS)
+ file(WRITE ${gnArgArgFile} ${arg_GN_ARGS})
+
+ foreach(ninjaTarget ${arg_NINJA_TARGETS})
+ list(APPEND output ${ninjaTarget}_objects.rsp ${ninjaTarget}_archives.rsp ${ninjaTarget}_libs.rsp)
+ endforeach()
+ list(TRANSFORM output PREPEND "${arg_BUILDDIR}/")
+
+ if(QT_HOST_PATH)
+ set(QT_HOST_GN_PATH ${QT_HOST_PATH}/${INSTALL_LIBEXECDIR})
+ endif()
+
+ add_custom_command(
+ OUTPUT ${output}
+ COMMAND ${CMAKE_COMMAND}
+ -DBUILD_DIR=${arg_BUILDDIR}
+ -DSOURCE_DIR=${CMAKE_CURRENT_LIST_DIR}
+ -DMODULE=${arg_MODULE}
+ -DQT_HOST_GN_PATH=${QT_HOST_GN_PATH}
+ -P ${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Gn.cmake
+ WORKING_DIRECTORY ${WEBENGINE_ROOT_BUILD_DIR}
+ COMMENT "Run gn for target ${arg_CMAKE_TARGET} in ${arg_BUILDDIR}"
+ DEPENDS ${gnArgArgFile} run_${arg_MODULE}_GnReady
+ USES_TERMINAL
+ )
+ add_custom_target(runGn_${arg_GN_TARGET}
+ DEPENDS #TODO this is fixed in cmake 3.20 so we could simply use GN_TARGET and not create new one
+ ${output}
+ ${arg_BUILDDIR}/${cxxConfigFileName}
+ ${arg_BUILDDIR}/${cConfigFileName}
+ ${arg_BUILDDIR}/${targetConfigFileName}
+ )
+ add_dependencies(run_${arg_MODULE}_GnDone runGn_${arg_GN_TARGET})
+ create_gn_target_config(${arg_GN_TARGET} ${arg_BUILDDIR}/${targetConfigFileName})
+endfunction()
+
+function(create_cxx_configs cmakeTarget arch)
+ get_config_filenames(cConfigFileName cxxConfigFileName targetConfigFileName)
+ create_c_config(${cmakeTarget} ${arch} ${cConfigFileName})
+ create_cxx_config(${cmakeTarget} ${arch} ${cxxConfigFileName})
+endfunction()
+
+# targets to gather per config / architecture targets
+function(addSyncTargets module)
+ add_custom_target(run_${module}_GnReady)
+ add_custom_target(run_${module}_GnDone)
+ add_custom_target(run_${module}_NinjaReady)
+ add_custom_target(run_${module}_NinjaDone)
+ # make nicer log so all gn has to finish before any ninja build starts
+ add_dependencies(run_${module}_NinjaReady run_${module}_GnDone)
+endfunction()
+
+function(addCopyCommand target src dst)
+ add_custom_command(
+ POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${dst}
+ COMMAND ${CMAKE_COMMAND} -E copy ${src} ${dst}
+ TARGET ${target}
+ DEPENDS ${src}
+ USES_TERMINAL
+ )
+endfunction()
diff --git a/cmake/Gn.cmake b/cmake/Gn.cmake
new file mode 100644
index 000000000..e8dc956ee
--- /dev/null
+++ b/cmake/Gn.cmake
@@ -0,0 +1,69 @@
+# This is gn wrapper script and it assables final BUILD.gn based on:
+# gn_config_target.cmake gn_config_c.cmake gn_config_cxx.cmake
+
+if(NOT CMAKE_SCRIPT_MODE_FILE)
+ message("This files should run only in script mode")
+ return()
+endif()
+
+get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH)
+get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH)
+
+include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf)
+include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake)
+
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
+
+find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT)
+find_package(Python2 2.7.5 REQUIRED)
+
+set(gnCmd ${Gn_EXECUTABLE})
+set(buildDir ${BUILD_DIR})
+set(sourceDir ${SOURCE_DIR})
+set(module ${MODULE})
+set(gnArg gen ${buildDir})
+file(READ ${buildDir}/args.gn gnArgArg)
+
+if(NOT gnCmd)
+ message(FATAL_ERROR "\nCould not find suitable gn to run.\n")
+endif()
+
+init_gn_config(${buildDir}/gn_config_target.cmake)
+read_gn_config(${buildDir}/gn_config_cxx.cmake)
+read_gn_config(${buildDir}/gn_config_c.cmake)
+
+configure_gn_target(
+ "${sourceDir}"
+ "${WEBENGINE_ROOT_SOURCE_DIR}/src/${module}/configure/BUILD.root.gn.in"
+ "${buildDir}/BUILD.gn"
+)
+
+list(APPEND gnArg
+ --script-executable=${Python2_EXECUTABLE}
+ --root=${WEBENGINE_ROOT_SOURCE_DIR}/src/3rdparty/chromium)
+
+STRING(REGEX REPLACE "\n" ";" printArgArg "${gnArgArg}")
+LIST(SORT printArgArg)
+STRING(REGEX REPLACE ";" "\n" printArgArg "${printArgArg}")
+list(JOIN gnArg " " printArg)
+
+message("-- Running gn in ${buildDir}\n"
+ "-- GN command:\n${gnCmd} ${printArg}\n"
+ "-- GN arg file:\n${buildDir}/args.gn\n"
+ "-- GN args: \n${printArgArg}"
+)
+
+execute_process(
+ COMMAND ${gnCmd} ${gnArg}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ RESULT_VARIABLE gnResult
+ OUTPUT_VARIABLE gnOutput
+ ERROR_VARIABLE gnError
+)
+
+if(NOT gnResult EQUAL 0)
+ message(FATAL_ERROR "\n-- GN FAILED\n${gnOutput}\n${gnError}")
+else()
+ string(REGEX REPLACE "\n$" "" gnOutput "${gnOutput}")
+ message("-- GN ${gnOutput}")
+endif()
diff --git a/configure.cmake b/configure.cmake
index 76df23610..d9711a034 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -1,6 +1,3 @@
-#### Inputs
-
-#### Libraries
if(QT_CONFIGURE_RUNNING)
function(assertTargets)
@@ -9,7 +6,7 @@ if(QT_CONFIGURE_RUNNING)
endfunction()
else()
find_package(Ninja 1.7.2)
- find_package(Gn ${QT_REPO_MODULES_VERSION} EXACT)
+ find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT)
find_package(Python2 2.7.5)
find_package(GPerf)
find_package(BISON)
@@ -18,7 +15,6 @@ else()
find_package(PkgConfig)
find_package(Snappy)
find_package(Nodejs 10.19)
- find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml)
endif()
if(PkgConfig_FOUND)
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 2bd079b43..fcc2fa2c7 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,24 +1,6 @@
cmake_minimum_required(VERSION 3.16)
-include(${CMAKE_CURRENT_LIST_DIR}/../.cmake.conf)
-
-project(QtWebEngineExamples
- VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "Qt WebEngine Examples"
- HOMEPAGE_URL "https://qt.io/"
- LANGUAGES CXX C
-)
-
-# Make sure we use the fixed BASE argument of qt_add_resource.
-set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE)
-
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS
- WebEngineCore WebEngineWidgets WebEngineQuick PdfWidgets QuickControls2 Svg
-)
-qt_build_repo_begin()
qt_examples_build_begin()
-
if(QT_FEATURE_qtwebengine_build AND QT_FEATURE_qtwebengine_quick_build)
add_subdirectory(webengine)
endif()
@@ -31,6 +13,4 @@ endif()
if(QT_FEATURE_qtpdf_build AND QT_FEATURE_qtpdf_widgets_build)
add_subdirectory(pdfwidgets)
endif()
-
qt_examples_build_end()
-qt_build_repo_end()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2db5f81e7..a8c331738 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,28 +1,55 @@
cmake_minimum_required(VERSION 3.19)
+##
+# MAIN CONFIGURE
+##
-if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR)
- get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH)
-endif()
+get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." REALPATH)
+get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${PROJECT_BINARY_DIR}" REALPATH)
-include(${WEBENGINE_ROOT_SOURCE_DIR}/.cmake.conf)
-include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake)
+# Note this is configure that does not belong to any module
+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)
+qt_feature_module_end(ONLY_EVALUATE_FEATURES)
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake")
+##
+# SUPPORT CHECK
+##
-assertRunAsTopLevelBuild(TRUE)
+if(NOT ${QtWebEngine_SUPPORT})
+ add_custom_target(WebEngineErrorMessage ALL
+ ${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${QtWebEngine_ERROR}"
+ COMMENT "Check QtWebEngine support"
+ VERBATIM
+ )
+ message("-- Support check for QtWebEngine failed: ${QtWebEngine_ERROR}")
+ set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE)
+ set(QT_FEATURE_qtwebengine_widgets_build OFF CACHE BOOL "Build QtWebEngineWidgets" FORCE)
+ set(QT_FEATURE_qtwebengine_quick_build OFF CACHE BOOL "Build QtWebEngineQuick" FORCE)
+endif()
-project(QtWebEngineRepo
- VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "QtWebEngineRepo for QtWebEngineCore, QtWebEngine, QtWebEngineWidgets, QtPdf modules"
- HOMEPAGE_URL "https://qt.io"
- LANGUAGES CXX C)
+if(NOT ${QtPdf_SUPPORT})
+ add_custom_target(PdfErrorMessage ALL
+ ${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${QtPdf_ERROR}"
+ COMMENT "Check QtPdf support"
+ VERBATIM
+ )
+ message("-- Support check for QtPdf failed: ${QtPdf_ERROR}")
+ set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE)
+ set(QT_FEATURE_qtpdf_widgets_build OFF CACHE BOOL "Build QtPdfWidgets" FORCE)
+ set(QT_FEATURE_qtpdf_quick_build OFF CACHE BOOL "Build QtPdfQuick" FORCE)
+endif()
-# Make sure we use the fixed BASE argument of qt_add_resource.
-set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE)
+if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build)
+ return()
+endif()
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
+##
+# MODULES
+##
-qt_build_repo_begin()
if(QT_FEATURE_qtwebengine_build)
add_subdirectory(core)
add_subdirectory(process)
@@ -35,6 +62,16 @@ if(QT_FEATURE_qtwebengine_build)
endif()
if(QT_FEATURE_qtpdf_build)
add_subdirectory(pdf)
+ # keep log order, pdf build after webengine
+ if(QT_FEATURE_qtwebengine_build)
+ add_dependencies(run_pdf_GnReady WebEngineCore)
+ endif()
+ if(QT_FEATURE_qtwebengine_widgets_build)
+ add_dependencies(run_pdf_GnReady WebEngineWidgets)
+ endif()
+ if(QT_FEATURE_qtwebengine_quick_build)
+ add_dependencies(run_pdf_GnReady WebEngineQuick)
+ endif()
if(QT_FEATURE_qtpdf_widgets_build)
add_subdirectory(pdfwidgets)
endif()
@@ -42,5 +79,97 @@ if(QT_FEATURE_qtpdf_build)
add_subdirectory(pdfquick)
endif()
endif()
-qt_build_repo_end()
+
+##
+# NINJA PROJECT
+##
+
+set(installDir ${PROJECT_BINARY_DIR}/install)
+
+if(NOT Ninja_FOUND)
+ externalproject_add(ninja
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/ninja
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ninja
+ INSTALL_DIR ${installDir}
+ PREFIX ninja
+ USES_TERMINAL_BUILD TRUE
+ EXCLUDE_FROM_ALL TRUE
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
+ )
+ if(QT_FEATURE_qtwebengine_build)
+ add_dependencies(run_core_NinjaReady ninja)
+ endif()
+ if(QT_FEATURE_qtpdf_build)
+ add_dependencies(run_pdf_NinjaReady ninja)
+ endif()
+endif()
+
+##
+# GN PROJECT
+##
+
+if(NOT Gn_FOUND)
+ externalproject_add(gn
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/gn
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn
+ INSTALL_DIR ${installDir}
+ PREFIX gn
+ USES_TERMINAL_BUILD TRUE
+ EXCLUDE_FROM_ALL TRUE
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
+ -DWEBENGINE_ROOT_BUILD_DIR=${PROJECT_BINARY_DIR}
+ )
+ if(QT_FEATURE_qtwebengine_build)
+ add_dependencies(run_core_GnReady gn)
+ endif()
+ if(QT_FEATURE_qtpdf_build)
+ add_dependencies(run_pdf_GnReady gn)
+ endif()
+ set(INSTALL_GN 1 CACHE INTERNAL "")
+endif()
+
+##
+# HOST PROJECT
+##
+
+if(CMAKE_CROSSCOMPILING)
+
+ if(NOT Gn_FOUND)
+ message(FATAL_ERROR "\nHost gn not found - cross compilation not possible")
+ endif()
+
+ externalproject_add(hostBuild
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/host
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/host
+ PREFIX host
+ USES_TERMINAL_BUILD TRUE
+ EXCLUDE_FROM_ALL TRUE
+ CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${QT_HOST_PATH}/lib/cmake/Qt6/qt.toolchain.cmake
+ -DWEBENGINE_ROOT_BUILD_DIR=${PROJECT_BINARY_DIR}
+ -DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}
+ -DGN_TARGET_CPU=${TEST_architecture_arch}
+ -DCMAKE_C_FLAGS=
+ -DCMAKE_CXX_FLAGS=
+ -DQT_FEATURE_qtwebengine_build=${QT_FEATURE_qtwebengine_build}
+ -DQT_FEATURE_qtpdf_build=${QT_FEATURE_qtpdf_build}
+ )
+ add_dependencies(run_core_GnReady hostBuild)
+endif()
+
+# install gn for cross build
+if(LINUX AND INSTALL_GN)
+ get_install_config(installConfig)
+ message(${installConfig})
+ install(
+ PROGRAMS ${installDir}/bin/gn
+ CONFIGURATIONS ${installConfig}
+ RUNTIME DESTINATION "${INSTALL_LIBEXECDIR}"
+ )
+endif()
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 317de3050..e9f8fd01e 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -1,32 +1,19 @@
cmake_minimum_required(VERSION 3.19)
-if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR)
- get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH)
-endif()
-if (NOT DEFINED WEBENGINE_ROOT_BUILD_DIR)
- get_filename_component(WEBENGINE_ROOT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/../.." REALPATH)
-endif()
-
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${WEBENGINE_ROOT_SOURCE_DIR}/cmake")
-set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
-
-include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake)
-assertRunAsTopLevelBuild(TRUE)
-
-add_subdirectory(api)
-add_subdirectory(tools)
-
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
-find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED)
find_package(Ninja 1.7.2 REQUIRED)
find_package(Python2 2.7.5 REQUIRED)
find_package(Nodejs 10.19 REQUIRED)
find_package(PkgConfig)
if(PkgConfig_FOUND)
pkg_check_modules(XSCRNSAVER xscrnsaver)
- create_pkg_config_host_wrapper()
+ create_pkg_config_host_wrapper(${CMAKE_CURRENT_BINARY_DIR})
endif()
+set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
+
+add_subdirectory(api)
+add_subdirectory(tools)
+
##
# TOOLCHAIN SETUP
##
@@ -36,9 +23,11 @@ if(LINUX)
endif()
##
-# MULTICONFIG SETUP
+# GN BUILD SETUP
##
+addSyncTargets(core)
+
get_configs(configs)
get_architectures(archs)
@@ -49,13 +38,14 @@ foreach(arch ${archs})
# BUILD.gn SETUP
##
- unset(buildGn)
set(buildGn core_${config}_${arch})
- add_gn_target(${buildGn} ${config} ${arch} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES)
-
+ add_gn_target(${buildGn} ${config} ${arch}
+ SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES MOC_PATH RSP_PREFIX
+ )
resolve_target_includes(gnIncludes WebEngineCore)
get_forward_declaration_macro(forwardDeclarationMacro)
get_target_property(qtWebEngineProcessName WebEngineCore QTWEBENGINEPROCESS_NAME)
+ get_target_property(mocFilePath Qt6::moc IMPORTED_LOCATION)
if(QT_FEATURE_debug_and_release AND ("${config}" STREQUAL "Debug"))
set(qtWebEngineProcessName "${qtWebEngineProcessName}${CMAKE_DEBUG_POSTFIX}")
@@ -74,15 +64,19 @@ foreach(arch ${archs})
endif()
extend_gn_target(${buildGn}
+ MOC_PATH
+ ${mocFilePath}
+ RSP_PREFIX
+ src/core/${config}/${arch}
INCLUDES
${gnIncludes}
DEFINES
QT_NO_KEYWORDS
QT_USE_QSTRINGBUILDER
- QTWEBENGINECORE_VERSION_STR=\\\\\"${QT_REPO_MODULE_VERSION}\\\\\"
- QTWEBENGINEPROCESS_NAME=\\\\\"${qtWebEngineProcessName}\\\\\"
+ QTWEBENGINECORE_VERSION_STR=\\\\\\\\\"${QT_REPO_MODULE_VERSION}\\\\\\\\\"
+ QTWEBENGINEPROCESS_NAME=\\\\\\\\\"${qtWebEngineProcessName}\\\\\\\\\"
BUILDING_CHROMIUM
- ${forwardDeclarationMacro}
+ "${forwardDeclarationMacro}"
CXX_COMPILE_OPTIONS
${gnCxxCompileOptions}
SOURCES
@@ -268,13 +262,6 @@ foreach(arch ${archs})
renderer/extensions/resource_request_policy_qt.cpp renderer/extensions/resource_request_policy_qt.h
)
- read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/core/api/${config}/gn_config.cxx.cmake)
- read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/core/api/${config}/gn_config.c.cmake)
- configure_gn_target(${buildGn} ${config}
- ${WEBENGINE_ROOT_SOURCE_DIR}/src/core/configure/BUILD.root.gn.in "${buildDir}/${config}/${arch}/BUILD.gn"
- core/${config}/${arch}
- )
-
##
# GN PARAMETERS SETUP
##
@@ -450,17 +437,22 @@ foreach(arch ${archs})
)
endif()
- ##
- # GN CALL
- ##
-
- execute_gn(gnArgArg)
+ add_gn_command(
+ CMAKE_TARGET WebEngineCore
+ NINJA_TARGETS QtWebEngineCore convert_dict
+ GN_TARGET ${buildGn}
+ GN_ARGS "${gnArgArg}"
+ BUILDDIR ${buildDir}/${config}/${arch}
+ MODULE core
+ )
endforeach()
+ create_cxx_configs(WebEngineCore ${arch})
endforeach()
+
##
-# WEBENGINECORE
+# WEBENGINECORE SETUP
##
set(arch ${CMAKE_SYSTEM_PROCESSOR})
@@ -470,7 +462,8 @@ target_include_directories(WebEngineCore PRIVATE
${buildDir}/$<CONFIG>/${arch}/gen/third_party/perfetto/build_config
)
-add_gn_build_aritfacts_to_target(WebEngineCore QtWebEngineCore ${buildDir})
+add_gn_build_aritfacts_to_target(WebEngineCore QtWebEngineCore core ${buildDir})
+add_dependencies(WebEngineCore run_core_NinjaDone)
##
# SANDBOX
@@ -484,6 +477,7 @@ if(WIN32)
TARGET QtWebEngineCoreSandbox
OUTPUT QtWebEngineCoreSandbox.lib
BUILDDIR ${buildDir}/${config}/${arch}
+ MODULE core
)
set(sandboxLibraryPath ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib)
set_property(TARGET WebEngineCoreSandbox
@@ -491,101 +485,12 @@ if(WIN32)
)
add_custom_target(sandboxLibrary_${config}
DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCoreSandbox.lib)
- add_dependencies(WebEngineCoreSandbox sandboxLibrary_${config})
+ add_dependencies(run_core_NinjaDone sandboxLibrary_${config})
add_dependencies(WebEngineCoreSandbox WebEngineCore)
endforeach()
endif()
##
-# WEBENGINECORE RESOURCES
-##
-
-#TODO: use simply filter / globbing-expressions
-set(localeList am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr
- gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk
- sl sr sv sw ta te th tr uk vi zh-CN zh-TW)
-
-set(resourceList qtwebengine_resources.pak
- qtwebengine_resources_100p.pak
- qtwebengine_resources_200p.pak
- qtwebengine_devtools_resources.pak)
-
-get_install_config(config)
-
-foreach(loc ${localeList})
- get_filename_component(locSourcePath ${buildDir}/${config}/${arch}/qtwebengine_locales/${loc}.pak REALPATH)
- list(APPEND localeFiles ${locSourcePath})
-endforeach()
-
-foreach(res ${resourceList})
- get_filename_component(resSourcePath ${buildDir}/${config}/${arch}/${res} REALPATH)
- list(APPEND resourceFiles ${resSourcePath})
-endforeach()
-
-if (NOT QT_FEATURE_webengine_system_icu)
- get_filename_component(icuFile ${buildDir}/${config}/${arch}/icudtl.dat REALPATH)
- list(APPEND resourceFiles ${icuFile})
-endif()
-
-if(QT_FEATURE_framework)
- set(allResourceFiles ${localeFiles} ${resourceFiles})
- target_sources(WebEngineCore PRIVATE ${allResourceFiles})
-
- set_source_files_properties(${localeFiles}
- TARGET_DIRECTORY WebEngineCore
- PROPERTIES MACOSX_PACKAGE_LOCATION Resources/qtwebengine_locales
- GENERATED TRUE
- )
- set_source_files_properties(${resourceFiles}
- TARGET_DIRECTORY WebEngineCore
- PROPERTIES MACOSX_PACKAGE_LOCATION Resources
- GENERATED TRUE
- )
-
- add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp)
- add_custom_target(generate_resources_${config} DEPENDS ${allResourceFiles})
-else()
- install(FILES ${localeFiles}
- DESTINATION translations/qtwebengine_locales
- CONFIGURATIONS ${config}
- )
- install(FILES ${resourceFiles}
- DESTINATION resources
- CONFIGURATIONS ${config}
- )
-# install (again) for superbuild
- install(FILES ${localeFiles}
- DESTINATION ${WEBENGINE_ROOT_BUILD_DIR}/translations/qtwebengine_locales
- CONFIGURATIONS ${config}
- )
- install(FILES ${resourceFiles}
- DESTINATION ${WEBENGINE_ROOT_BUILD_DIR}/resources
- CONFIGURATIONS ${config}
- )
- if(NOT QT_WILL_INSTALL)
- # TODO: Could we get rid of ALL?
- add_custom_target(
- install_resources_${config}
- ALL
- DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp
- COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_INSTALL_PREFIX}/resources
- COMMAND ${CMAKE_COMMAND} -E copy
- ${resourceFiles}
- ${CMAKE_INSTALL_PREFIX}/resources)
- add_custom_target(
- install_locales_${config}
- ALL
- DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp
- COMMAND ${CMAKE_COMMAND} -E make_directory
- ${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales
- COMMAND ${CMAKE_COMMAND} -E copy
- ${localeFiles}
- ${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales)
- endif()
-endif()
-
-##
# WEBENGINECORE DICT TOOL SETUP
##
@@ -594,8 +499,10 @@ if(QT_FEATURE_webengine_spellchecker)
target_include_directories(${dict_target_name} PRIVATE
../3rdparty/chromium
../3rdparty/chromium/third_party/boringssl/src/include
- ${buildDir}/${config}/${arch}/gen
+ ${buildDir}/$<CONFIG>/${arch}/gen
)
- add_gn_build_aritfacts_to_target(${dict_target_name} convert_dict ${buildDir})
+ add_gn_build_aritfacts_to_target(${dict_target_name} convert_dict core ${buildDir})
+ add_dependencies(${dict_target_name} run_core_NinjaDone)
+ add_dependencies(${dict_target_name} WebEngineCore)
endif()
diff --git a/src/core/api/CMakeLists.txt b/src/core/api/CMakeLists.txt
index cee72966d..192afd01b 100644
--- a/src/core/api/CMakeLists.txt
+++ b/src/core/api/CMakeLists.txt
@@ -1,16 +1,9 @@
-if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR)
- get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." REALPATH)
-endif()
find_package(Qt6 ${PROJECT_VERSION} REQUIRED COMPONENTS Gui Network OpenGL Quick)
find_package(Qt6 ${PROJECT_VERSION} QUIET OPTIONAL_COMPONENTS WebChannel Positioning)
-include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake)
-
-get_configure_mode(configureMode)
set(qtWebEngineProcessName QtWebEngineProcess)
qt_internal_add_module(WebEngineCore
- ${configureMode}
SOURCES
qtwebenginecoreglobal.cpp qtwebenginecoreglobal.h qtwebenginecoreglobal_p.h
qwebenginecertificateerror.cpp qwebenginecertificateerror.h
@@ -63,8 +56,6 @@ set_target_properties(WebEngineCore PROPERTIES QTWEBENGINEPROCESS_NAME ${qtWebEn
# Chromium included headers are not clean
qt_skip_warnings_are_errors(WebEngineCore)
-make_install_only(WebEngineCore)
-make_config_for_gn(WebEngineCore gn_config)
if(CLANG OR GCC)
target_compile_options(WebEngineCore PRIVATE "-Wno-unused-parameter")
@@ -79,6 +70,77 @@ qt_internal_extend_target(WebEngineCore CONDITION QT_FEATURE_webengine_geolocati
Qt::Positioning
)
+##
+# DOCS
+##
+
qt_internal_add_docs(WebEngineCore
../doc/qtwebengine.qdocconf
)
+
+##
+# WEBENGINECORE RESOURCES
+##
+
+set(arch ${CMAKE_SYSTEM_PROCESSOR})
+#TODO: use simply filter / globbing-expressions
+set(localeList am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr
+ gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk
+ sl sr sv sw ta te th tr uk vi zh-CN zh-TW)
+
+set(resourceList qtwebengine_resources.pak
+ qtwebengine_resources_100p.pak
+ qtwebengine_resources_200p.pak
+ qtwebengine_devtools_resources.pak)
+
+get_install_config(config)
+
+foreach(loc ${localeList})
+ get_filename_component(locSourcePath ${buildDir}/${config}/${arch}/qtwebengine_locales/${loc}.pak REALPATH)
+ list(APPEND localeFiles ${locSourcePath})
+endforeach()
+
+foreach(res ${resourceList})
+ get_filename_component(resSourcePath ${buildDir}/${config}/${arch}/${res} REALPATH)
+ list(APPEND resourceFiles ${resSourcePath})
+endforeach()
+
+if (NOT QT_FEATURE_webengine_system_icu)
+ get_filename_component(icuFile ${buildDir}/${config}/${arch}/icudtl.dat REALPATH)
+ list(APPEND resourceFiles ${icuFile})
+endif()
+
+if(QT_FEATURE_framework)
+ set(allResourceFiles ${localeFiles} ${resourceFiles})
+ target_sources(WebEngineCore PRIVATE ${allResourceFiles})
+
+ set_source_files_properties(${localeFiles}
+ TARGET_DIRECTORY WebEngineCore
+ PROPERTIES MACOSX_PACKAGE_LOCATION Resources/qtwebengine_locales
+ GENERATED TRUE
+ )
+ set_source_files_properties(${resourceFiles}
+ TARGET_DIRECTORY WebEngineCore
+ PROPERTIES MACOSX_PACKAGE_LOCATION Resources
+ GENERATED TRUE
+ )
+
+ add_custom_command(OUTPUT ${allResourceFiles} DEPENDS ${buildDir}/${config}/${arch}/QtWebEngineCore.stamp)
+ add_custom_target(generate_resources_${config} DEPENDS ${allResourceFiles})
+else()
+ install(FILES ${localeFiles}
+ DESTINATION translations/qtwebengine_locales
+ CONFIGURATIONS ${config}
+ )
+ install(FILES ${resourceFiles}
+ DESTINATION resources
+ CONFIGURATIONS ${config}
+ )
+ if(NOT QT_WILL_INSTALL)
+ set(rootPath ${CMAKE_INSTALL_PREFIX})
+ else()
+ set(rootPath ${PROJECT_BINARY_DIR})
+ endif()
+ addCopyCommand(WebEngineCore "${localeFiles}" ${rootPath}/translations/qtwebengine_locales)
+ addCopyCommand(WebEngineCore "${resourceFiles}" ${rootPath}/resources)
+endif()
diff --git a/src/core/tools/CMakeLists.txt b/src/core/tools/CMakeLists.txt
index 9d778bb08..e16bfb926 100644
--- a/src/core/tools/CMakeLists.txt
+++ b/src/core/tools/CMakeLists.txt
@@ -12,7 +12,6 @@ if(QT_FEATURE_webengine_spellchecker)
SOURCES main.cpp
)
qt_skip_warnings_are_errors(${dict_target_name})
- make_install_only(${dict_target_name})
add_dependencies(${dict_target_name} WebEngineCore)
qt_internal_extend_target(${dict_target_name} CONDITION WIN32
DEFINES WIN32_LEAN_AND_MEAN NOMINMAX
diff --git a/src/pdf/CMakeLists.txt b/src/pdf/CMakeLists.txt
index 12f01a73f..da1aa93ff 100644
--- a/src/pdf/CMakeLists.txt
+++ b/src/pdf/CMakeLists.txt
@@ -1,14 +1,19 @@
-if(NOT DEFINED WEBENGINE_ROOT_SOURCE_DIR)
- get_filename_component(WEBENGINE_ROOT_SOURCE_DIR
- "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH
- )
+cmake_minimum_required(VERSION 3.19)
+find_package(Ninja 1.7.2 REQUIRED)
+find_package(Python2 2.7.5 REQUIRED)
+find_package(Nodejs 10.19 REQUIRED)
+find_package(PkgConfig)
+if(PkgConfig_FOUND)
+ create_pkg_config_host_wrapper(${CMAKE_CURRENT_BINARY_DIR})
endif()
-find_package(Qt6 ${PROJECT_VERSION} REQUIRED COMPONENTS Gui Network OpenGL Quick)
-include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake)
-set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
+set(buildDir "${CMAKE_CURRENT_BINARY_DIR}")
add_subdirectory(plugins/imageformats/pdf)
+##
+# PDF MODULE
+##
+
qt_internal_add_module(Pdf
SOURCES
qpdfbookmarkmodel.cpp qpdfbookmarkmodel.h
@@ -36,128 +41,135 @@ qt_internal_add_module(Pdf
Qt::Gui
)
-make_config_for_gn(Pdf gn_config)
-make_install_only(Pdf)
+##
+# PDF DOCS
+##
+
qt_internal_add_docs(Pdf
doc/qtpdf.qdocconf
)
+
##
-# REPO BUILD
+# TOOLCHAIN SETUP
##
-if(WEBENGINE_REPO_BUILD)
- find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
- find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED)
- find_package(Ninja 1.7.2 REQUIRED)
- find_package(Python2 2.7.5 REQUIRED)
- find_package(Nodejs 10.19 REQUIRED)
- find_package(PkgConfig)
- if(PkgConfig_FOUND)
- create_pkg_config_host_wrapper()
- endif()
-
- ##
- # TOOLCHAIN SETUP
- ##
-
- if(LINUX)
- setup_toolchains()
- endif()
-
- ##
- # MULTICONFIG SETUP
- ##
-
- get_configs(configs)
- get_architectures(archs)
-
- foreach(arch ${archs})
- foreach(config ${configs})
-
- ##
- # BULID.gn SETUP
- ##
-
- set(buildGn pdf_${config}_${arch})
- add_gn_target(${buildGn} ${config} ${arch} SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES)
- resolve_target_includes(gnIncludes Pdf)
- get_forward_declaration_macro(forwardDeclarationMacro)
- read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/pdf/${config}/gn_config.cxx.cmake)
- read_gn_target(${buildGn} ${WEBENGINE_ROOT_BUILD_DIR}/src/pdf/${config}/gn_config.c.cmake)
- configure_gn_target(${buildGn} ${config}
- ${WEBENGINE_ROOT_SOURCE_DIR}/src/pdf/configure/BUILD.root.gn.in "${buildDir}/${config}/${arch}/BUILD.gn"
- pdf/${config}/${arch}
- )
-
- ##
- # GN PARAMETERS
- ##
-
- unset(gnArgArg)
- append_build_type_setup(gnArgArg)
- append_compiler_linker_sdk_setup(gnArgArg)
- append_sanitizer_setup(gnArgArg)
- append_toolchain_setup(gnArgArg)
- append_pkg_config_setup(gnArgArg)
-
- list(APPEND gnArgArg
- qtwebengine_target="${buildDir}/${config}/${arch}:QtPdf"
- enable_remoting=false
- enable_web_speech=false
- chrome_pgo_phase=0
- )
-
- if(LINUX)
- list(APPEND gnArgArg
- use_x11=false
- is_cfi=false
- ozone_auto_platforms=false
- use_gnome_keyring=false)
- endif()
- if(MACOS)
- list(APPEND gnArgArg angle_enable_vulkan=false)
- endif()
- if(WIN32)
- list(APPEND gnArgArg
- ninja_use_custom_environment_files=false
- safe_browsing_mode=0
- )
- endif()
-
- extend_gn_list(gnArgArg
- ARGS pdf_enable_v8
- CONDITION QT_FEATURE_pdf_v8
- )
- extend_gn_list(gnArgArg
- ARGS pdf_enable_xfa
- CONDITION QT_FEATURE_pdf_xfa
- )
- extend_gn_list(gnArgArg
- ARGS pdf_enable_xfa_bmp
- CONDITION QT_FEATURE_pdf_xfa_bmp
- )
- extend_gn_list(gnArgArg
- ARGS pdf_enable_xfa_gif
- CONDITION QT_FEATURE_pdf_xfa_gif
- )
- extend_gn_list(gnArgArg
- ARGS pdf_enable_xfa_png
- CONDITION QT_FEATURE_pdf_xfa_png
- )
- extend_gn_list(gnArgArg
- ARGS pdf_enable_xfa_tiff
- CONDITION QT_FEATURE_pdf_xfa_tiff
- )
-
- ##
- # GN CALL
- ##
-
- execute_gn(gnArgArg)
- endforeach()
- endforeach()
- set(arch ${CMAKE_SYSTEM_PROCESSOR})
- target_include_directories(Pdf PRIVATE ${buildDir}/$<CONFIG>/${arch}/gen)
- add_gn_build_aritfacts_to_target(Pdf QtPdf ${buildDir})
+if(LINUX)
+ setup_toolchains()
endif()
+
+##
+# GN BUILD SETUP
+##
+
+addSyncTargets(pdf)
+
+get_configs(configs)
+get_architectures(archs)
+
+foreach(arch ${archs})
+ foreach(config ${configs})
+
+ ##
+ # BULID.gn SETUP
+ ##
+
+ set(buildGn pdf_${config}_${arch})
+ add_gn_target(${buildGn} ${config} ${arch}
+ SOURCES DEFINES CXX_COMPILE_OPTIONS C_COMPILE_OPTIONS INCLUDES MOC_PATH RSP_PREFIX
+ )
+ resolve_target_includes(gnIncludes Pdf)
+ get_forward_declaration_macro(forwardDeclarationMacro)
+
+ extend_gn_target(${buildGn}
+ MOC_PATH
+ ${mocFilePath}
+ RSP_PREFIX
+ src/pdf/${config}/${arch}
+ INCLUDES
+ ${gnIncludes}
+ )
+
+ ##
+ # GN PARAMETERS
+ ##
+
+ unset(gnArgArg)
+ append_build_type_setup(gnArgArg)
+ append_compiler_linker_sdk_setup(gnArgArg)
+ append_sanitizer_setup(gnArgArg)
+ append_toolchain_setup(gnArgArg)
+ append_pkg_config_setup(gnArgArg)
+
+ list(APPEND gnArgArg
+ qtwebengine_target="${buildDir}/${config}/${arch}:QtPdf"
+ enable_remoting=false
+ enable_web_speech=false
+ chrome_pgo_phase=0
+ )
+
+ if(LINUX)
+ list(APPEND gnArgArg
+ use_x11=false
+ is_cfi=false
+ ozone_auto_platforms=false
+ use_gnome_keyring=false)
+ endif()
+ if(MACOS)
+ list(APPEND gnArgArg angle_enable_vulkan=false)
+ endif()
+ if(WIN32)
+ list(APPEND gnArgArg
+ ninja_use_custom_environment_files=false
+ safe_browsing_mode=0
+ )
+ endif()
+
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_v8
+ CONDITION QT_FEATURE_pdf_v8
+ )
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_xfa
+ CONDITION QT_FEATURE_pdf_xfa
+ )
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_xfa_bmp
+ CONDITION QT_FEATURE_pdf_xfa_bmp
+ )
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_xfa_gif
+ CONDITION QT_FEATURE_pdf_xfa_gif
+ )
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_xfa_png
+ CONDITION QT_FEATURE_pdf_xfa_png
+ )
+ extend_gn_list(gnArgArg
+ ARGS pdf_enable_xfa_tiff
+ CONDITION QT_FEATURE_pdf_xfa_tiff
+ )
+
+ add_gn_command(
+ CMAKE_TARGET Pdf
+ NINJA_TARGETS QtPdf
+ GN_TARGET ${buildGn}
+ GN_ARGS "${gnArgArg}"
+ BUILDDIR ${buildDir}/${config}/${arch}
+ MODULE pdf
+ )
+
+ endforeach()
+ create_cxx_configs(Pdf ${arch})
+endforeach()
+
+
+##
+# PDF SETUP
+##
+
+set(arch ${CMAKE_SYSTEM_PROCESSOR})
+target_include_directories(Pdf PRIVATE ${buildDir}/$<CONFIG>/${arch}/gen)
+add_gn_build_aritfacts_to_target(Pdf QtPdf pdf ${buildDir})
+add_dependencies(Pdf run_pdf_NinjaDone)
+
diff --git a/src/pdf/plugins/imageformats/pdf/CMakeLists.txt b/src/pdf/plugins/imageformats/pdf/CMakeLists.txt
index 8a33e590b..ee290782b 100644
--- a/src/pdf/plugins/imageformats/pdf/CMakeLists.txt
+++ b/src/pdf/plugins/imageformats/pdf/CMakeLists.txt
@@ -8,4 +8,3 @@ qt_internal_add_plugin(QPdfPlugin
Qt::PdfPrivate
)
-make_install_only(QPdfPlugin)
diff --git a/src/pdfquick/CMakeLists.txt b/src/pdfquick/CMakeLists.txt
index 12cb393ff..5bbe66959 100644
--- a/src/pdfquick/CMakeLists.txt
+++ b/src/pdfquick/CMakeLists.txt
@@ -1,7 +1,5 @@
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Core Gui Qml Quick)
-get_configure_mode(configureMode)
-
set(qml_files
# TODO:
# "qml/+material/PdfStyle.qml"
@@ -48,8 +46,5 @@ qt_internal_extend_target(qtpdfquickplugin
Qt::PdfQuickPrivate
)
-make_install_only(PdfQuick)
-make_install_only(qtpdfquickplugin)
-
diff --git a/src/pdfwidgets/CMakeLists.txt b/src/pdfwidgets/CMakeLists.txt
index 04ca1387e..2d2616556 100644
--- a/src/pdfwidgets/CMakeLists.txt
+++ b/src/pdfwidgets/CMakeLists.txt
@@ -12,4 +12,3 @@ qt_internal_add_module(PdfWidgets
Qt::Widgets
Qt::Pdf
)
-make_install_only(PdfWidgets)
diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt
index 9b515f1d9..5e7c1130b 100644
--- a/src/process/CMakeLists.txt
+++ b/src/process/CMakeLists.txt
@@ -56,6 +56,7 @@ if(isFramework)
"$<TARGET_BUNDLE_DIR:WebEngineCore>/Versions/A/Helpers/${qtWebEngineProcessName}.app"
COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/Helpers"
"$<TARGET_BUNDLE_DIR:WebEngineCore>/Helpers"
+ USES_TERMINAL
)
install(TARGETS ${qtWebEngineProcessName}
BUNDLE DESTINATION ./lib/QtWebEngineCore.framework/Versions/A/Helpers
@@ -73,5 +74,3 @@ if(MSVC)
DESTINATION "${INSTALL_LIBEXECDIR}"
)
endif()
-
-make_install_only(${qtWebEngineProcessName})
diff --git a/src/webenginequick/CMakeLists.txt b/src/webenginequick/CMakeLists.txt
index ac9c905e2..30b0fa2cf 100644
--- a/src/webenginequick/CMakeLists.txt
+++ b/src/webenginequick/CMakeLists.txt
@@ -1,12 +1,6 @@
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Gui Qml Quick)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS PrintSupport WebChannel Positioning Test)
-
-get_configure_mode(configureMode)
-
add_subdirectory(ui)
qt_internal_add_qml_module(WebEngineQuick
- ${configureMode}
URI "QtWebEngine"
VERSION "${PROJECT_VERSION}"
CLASS_NAME QtWebEnginePlugin
@@ -61,6 +55,3 @@ qt_internal_extend_target(qtwebenginequickplugin
Qt::CorePrivate
Qt::WebEngineQuickPrivate
)
-
-make_install_only(WebEngineQuick)
-make_install_only(qtwebenginequickplugin)
diff --git a/src/webenginequick/ui/CMakeLists.txt b/src/webenginequick/ui/CMakeLists.txt
index 2de01a210..aa5832ba6 100644
--- a/src/webenginequick/ui/CMakeLists.txt
+++ b/src/webenginequick/ui/CMakeLists.txt
@@ -35,6 +35,4 @@ qt_internal_add_resource(qtwebenginequickdelegatesplugin "qtwebenginequickdelega
${resource_files}
)
-make_install_only(WebEngineQuickDelegatesQml)
-make_install_only(qtwebenginequickdelegatesplugin)
diff --git a/src/webenginewidgets/CMakeLists.txt b/src/webenginewidgets/CMakeLists.txt
index 425eb1d73..6dedf2187 100644
--- a/src/webenginewidgets/CMakeLists.txt
+++ b/src/webenginewidgets/CMakeLists.txt
@@ -1,10 +1,5 @@
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Gui Widgets Quick QuickWidgets)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS PrintSupport WebChannel Positioning)
-
-get_configure_mode(configureMode)
qt_internal_add_module(WebEngineWidgets
- ${configureMode}
SOURCES
api/qtwebenginewidgetsglobal.h
api/qwebenginenotificationpresenter.cpp api/qwebenginenotificationpresenter_p.h
@@ -28,7 +23,6 @@ qt_internal_add_module(WebEngineWidgets
Qt::Widgets
Qt::WebEngineCore
)
-make_install_only(WebEngineWidgets)
qt_internal_extend_target(WebEngineWidgets CONDITION QT_FEATURE_webengine_printing_and_pdf
PUBLIC_LIBRARIES
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index ace11de4a..a8f031a5d 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,28 +1 @@
-if(NOT QT_BUILD_STANDALONE_TESTS)
- cmake_minimum_required(VERSION 3.19)
-
- include(${CMAKE_CURRENT_LIST_DIR}/../.cmake.conf)
-
- project(QtWebEngineTests
- VERSION "${QT_REPO_MODULE_VERSION}"
- DESCRIPTION "Qt WebEngine Tests"
- HOMEPAGE_URL "https://qt.io/"
- LANGUAGES CXX C
- )
-
- # Make sure we use the fixed BASE argument of qt_add_resource.
- set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE)
-endif()
-
-find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
-find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS Gui Widgets
- WebEngineCore WebEngineWidgets WebEngineQuick Pdf QuickWidgets Test QuickTest WebSockets
-)
-
-if(NOT QT_BUILD_STANDALONE_TESTS)
- qt_build_repo_begin()
- qt_build_tests()
- qt_build_repo_end()
-else()
- qt_build_tests()
-endif()
+qt_build_tests()