blob: 3079b76a6489f7b118b7f73dafb19b767555e956 (
plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 | # Copyright (C) 2024 The Qt Company Ltd.# SPDX-License-Identifier: BSD-3-Clausecmake_minimum_required(VERSION3.16)# Query the var name from the CMake cache or the environment or use a default value.function(qt_internal_get_cmake_or_env_or_default out_var var_name_to_check default_value)if(${var_name_to_check})set(value "${var_name_to_check}")elseif(DEFINED ENV{${var_name_to_check}})set(value "$ENV{${var_name_to_check}}")else()set(value "${default_value}")endif()set(${out_var}"${value}"PARENT_SCOPE)endfunction()# Prepares paths for the cloning of the sources, the build and the installation.function(qt_internal_prepare_build_paths)set(current_dir "${CMAKE_CURRENT_BINARY_DIR}")qt_internal_get_cmake_or_env_or_default(working_dir QT_CI_DOC_TOOLS_WORKING_DIR"${current_dir}/qdoc_build")qt_internal_get_cmake_or_env_or_default(qt_src_dir QT_CI_DOC_TOOLS_SRC_DIR"${working_dir}/qt5")qt_internal_get_cmake_or_env_or_default(qt_build_dir QT_CI_DOC_TOOLS_BUILD__DIR"${working_dir}/build")qt_internal_get_cmake_or_env_or_default(qt_installed_dir QT_CI_DOC_TOOLS_INSTALL_DIR"${working_dir}/install")set(QT_DOC_TOOLS_WORKING_DIR"${working_dir}"PARENT_SCOPE)set(QT_DOC_TOOLS_SRC_DIR"${qt_src_dir}"PARENT_SCOPE)set(QT_DOC_TOOLS_BUILD_DIR"${qt_build_dir}"PARENT_SCOPE)set(QT_DOC_TOOLS_INSTALL_DIR"${qt_installed_dir}"PARENT_SCOPE)endfunction()# Gets the remote git base URL for qt repositories.function(qt_internal_get_repo_base_url out_var)# This Coin CI git daemon IP is set in all CI jobs.# Prefer using it when available, to avoid general network issues.# Sample value: QT_COIN_GIT_DAEMON=10.215.0.212:9418qt_internal_get_cmake_or_env_or_default(coin_git_ip_port QT_COIN_GIT_DAEMON"")# Allow opting out of using the coin git daemon.qt_internal_get_cmake_or_env_or_default(skip_coin_git QT_DOC_TOOLS_SKIP_COIN_GIT_DAEMON FALSE)# Allow override of the default remote.qt_internal_get_cmake_or_env_or_default(git_remote QT_CI_DOC_TOOLS_GIT_REMOTE"")if(coin_git_ip_port AND NOT skip_coin_git)set(value "git://${coin_git_ip_port}/qt-project")elseif(git_remote)set(value "${git_remote}")else()set(value "https://code.qt.io")endif()set(${out_var}"${value}"PARENT_SCOPE)endfunction()# Clones qt5.git into the specified src directory.function(qt_internal_clone_qt5)file(MAKE_DIRECTORY"${QT_DOC_TOOLS_SRC_DIR}")qt_internal_get_repo_base_url(remote_url)execute_process(COMMAND git clone "${remote_url}/qt/qt5.git""${QT_DOC_TOOLS_SRC_DIR}"COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_WORKING_DIR}"RESULT_VARIABLE result ERROR_VARIABLE proc_err OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(WARNING"Cloning qt5.git sources failed. Output: ${result}")endif()# Allow pinning the qt5.git sha1 or any other git ref, based on a cmake var or env var.qt_internal_get_cmake_or_env_or_default(super_repo_ref QT_CI_DOC_TOOLS_TOP_LEVEL_PIN_GIT_REF"dev")# Allow using the branch that the Coin CI sets, as an opt-in.qt_internal_get_cmake_or_env_or_default(use_ci_branch QT_CI_DOC_TOOLS_USE_CI_TOP_LEVEL_BRANCH"OFF")qt_internal_get_cmake_or_env_or_default(ci_branch TESTED_MODULE_BRANCH_COIN"")if(use_ci_branch AND ci_branch)set(super_repo_ref "${ci_branch}")endif()execute_process(COMMAND git checkout "${super_repo_ref}"COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_SRC_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Checking out qt5.git '${super_repo_ref}' ref failed. Output: ${result}")endif()endfunction()# Checks out qttools to the dev branch (or other specified ref) and syncs its submodule# dependencies according to qttools dependencies.yaml file.function(qt_internal_sync_to_qttools)execute_process(COMMAND git submodule update --init --recursive --progress --depth 1 qttools # TODO: Remove these once the sync-to script is taught to automatically clone these. qtbase qtshadertools qtdeclarative qtsvg qtimageformats qtactiveqt qtlanguageserver COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_SRC_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Cloning qttools submodule failed. Output: ${result}")endif()# Allow pinning the qttools sha1 or any other git ref, based on a cmake var or env var.qt_internal_get_cmake_or_env_or_default(qttools_sync_to_ref QT_CI_DOC_TOOLS_PIN_GIT_REF"dev")execute_process(COMMAND${CMAKE_COMMAND}-DSYNC_TO_MODULE=qttools "-DSYNC_TO_BRANCH=${qttools_sync_to_ref}"-DSHOW_PROGRESS=1-DVERBOSE=1-P cmake/QtSynchronizeRepo.cmake --log-level=DEBUGCOMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_SRC_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Syncing qttools submodule dependencies failed: Output: ${result}")endif()endfunction()# Configures a top-level static qt build for the checked out qt5.git sources.function(qt_internal_configure_qt)file(MAKE_DIRECTORY"${QT_DOC_TOOLS_BUILD_DIR}")file(MAKE_DIRECTORY"${QT_DOC_TOOLS_INSTALL_DIR}")# Get the common CI args, to set the sccache args, etc.qt_internal_get_cmake_or_env_or_default(ci_common_cmake_args COMMON_CMAKE_ARGS"")if(ci_common_cmake_args)separate_arguments(ci_common_cmake_args NATIVE_COMMAND${ci_common_cmake_args})endif()execute_process(COMMAND"${QT_DOC_TOOLS_SRC_DIR}/configure"-release -static -prefix "${QT_DOC_TOOLS_INSTALL_DIR}"# Skip optional dependencies we don't need to build.-skip qtactiveqt,qtimageformats,qtlanguageserver,qtsvg ---DWARNINGS_ARE_ERRORS=OFF# When 6.x.y version bumps are not merged in DAG-dependency order, this avoids# blocking integrations due to mismatch of qtools package version and any of its# dependencies.-DQT_NO_PACKAGE_VERSION_INCOMPATIBLE_WARNING=ON--log-level STATUS--fresh -GNinja ${ci_common_cmake_args}COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_BUILD_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Configuring top-level qt5.git build failed. Output: ${result}")endif()endfunction()# Builds the main doc tools in a configured qt5.git build.function(qt_internal_build_tools)execute_process(COMMAND cmake --build .--verbose --parallel --target qdoc qtattributionsscanner qdbusxml2cpp qdbuscpp2xml qvkgen COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_BUILD_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Failed to build doc tools. Output: ${result}")endif()endfunction()# Installs the built doc tools.function(qt_internal_install_tools)execute_process(COMMAND cmake --build .--target # TODO: Replace with ninja install_doc_tools_stripped once it lands. qttools/src/qdoc/qdoc/install/strip qttools/src/qtattributionsscanner/install/strip qtbase/src/tools/qdbusxml2cpp/install/strip qtbase/src/tools/qdbuscpp2xml/install/strip qtbase/src/tools/qvkgen/install/strip COMMAND_ECHO STDOUTWORKING_DIRECTORY"${QT_DOC_TOOLS_BUILD_DIR}"RESULT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE)if(result)message(FATAL_ERROR"Failed to install doc tools. Output: ${result}")endif()endfunction()function(qt_internal_run_script)qt_internal_prepare_build_paths()qt_internal_clone_qt5()qt_internal_sync_to_qttools()qt_internal_configure_qt()qt_internal_build_tools()qt_internal_install_tools()endfunction()qt_internal_run_script()
|