b89d63515b
syncqt.pl adds an extra dependency on perl when building Qt. Modern C++ provides the convenient cross-platform way to access a filesystem and to use regular expressions, so we may replace the perl script with C++ application. The syncqt executable is built at configure time and installed as QtCore tool. It's running at configure time to deliver the required header files for IDE to build a consistent code model and at the build time to keep tracking changes in header files and generate the missing aliases without reconfiguring. 'syncqt' only parses header files from a CMake build tree, so the resulting Qt installation only contains interfacing headers that belong to the platform that Qt is built for. 'sync.profile' files are not used as the 'source of truth' for sync qt procedure anymore, all the necessary information is taken from either CMake files at configure time or from the module header files while parsing them. syncqt.pl is still in place since it's required as fallback solution for a smooth transition to the new syncqt implementation for all qt repositories. This patchset only enables the C++ based syncqt for 'qtbase' repository. From the performance perspective C++ version works faster then perl script, also the configure time is reduced significally on subsequent reconfigurations - up x2 times faster when re-configuring repository, but it also takes time to compile the tool itself the first time. Numbers for qtbase: syncqt.pl syncqt.cpp initial: 0m16,035s 0m20,413s reconfig: 0m6,819s 0m3,725s The syncing procedure can be run separately for each module using <ModuleName>_sync_headers targets. The 'sync_headers' target can be used to sync all the modules at once. Task-number: QTBUG-87480 Task-number: QTBUG-103196 Change-Id: I8c938bcaf88a8713b39bbfd66d9e7ef12b2c3523 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
145 lines
4.6 KiB
CMake
145 lines
4.6 KiB
CMake
# Copyright (C) 2022 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Generated from qmake.pro.
|
|
|
|
#####################################################################
|
|
## qmake Tool:
|
|
#####################################################################
|
|
|
|
# The common object library, that should be available regardless of the presence of qmake.
|
|
qt_add_library(QtLibraryInfo OBJECT
|
|
library/proitems.cpp library/proitems.h
|
|
library/qmake_global.h
|
|
property.cpp property.h
|
|
propertyprinter.cpp propertyprinter.h
|
|
qmakelibraryinfo.cpp qmakelibraryinfo.h
|
|
)
|
|
|
|
qt_internal_add_sync_header_dependencies(QtLibraryInfo Core)
|
|
|
|
set_target_properties(QtLibraryInfo PROPERTIES
|
|
COMPILE_OPTIONS $<TARGET_PROPERTY:Qt::Core,INTERFACE_COMPILE_OPTIONS>
|
|
COMPILE_DEFINITIONS $<TARGET_PROPERTY:Qt::Core,INTERFACE_COMPILE_DEFINITIONS>
|
|
INCLUDE_DIRECTORIES $<TARGET_PROPERTY:Qt::Core,INTERFACE_INCLUDE_DIRECTORIES>
|
|
INCLUDE_DIRECTORIES $<TARGET_PROPERTY:Qt::CorePrivate,INTERFACE_INCLUDE_DIRECTORIES>
|
|
)
|
|
target_include_directories(QtLibraryInfo PUBLIC
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/library"
|
|
)
|
|
|
|
# Chop off the "/mkspecs" part of INSTALL_MKSPECSDIR
|
|
get_filename_component(hostdatadir "${INSTALL_MKSPECSDIR}" DIRECTORY)
|
|
if("${hostdatadir}" STREQUAL "")
|
|
set(hostdatadir ".")
|
|
endif()
|
|
|
|
target_compile_definitions(QtLibraryInfo PUBLIC
|
|
PROEVALUATOR_FULL
|
|
QT_BUILD_QMAKE
|
|
QT_USE_QSTRINGBUILDER
|
|
QT_NO_FOREACH
|
|
QT_HOST_MKSPEC="${QT_QMAKE_HOST_MKSPEC}"
|
|
QT_TARGET_MKSPEC="${QT_QMAKE_TARGET_MKSPEC}"
|
|
QT_HOST_DATADIR="${hostdatadir}"
|
|
)
|
|
|
|
if(NOT QT_FEATURE_qmake)
|
|
return()
|
|
endif()
|
|
|
|
qt_get_tool_target_name(target_name qmake)
|
|
qt_internal_add_tool(${target_name}
|
|
TOOLS_TARGET Core # special case
|
|
USER_FACING
|
|
INSTALL_VERSIONED_LINK
|
|
SOURCES
|
|
cachekeys.h
|
|
generators/mac/pbuilder_pbx.cpp generators/mac/pbuilder_pbx.h
|
|
generators/makefile.cpp generators/makefile.h
|
|
generators/makefiledeps.cpp generators/makefiledeps.h
|
|
generators/metamakefile.cpp generators/metamakefile.h
|
|
generators/projectgenerator.cpp generators/projectgenerator.h
|
|
generators/unix/unixmake.cpp generators/unix/unixmake.h
|
|
generators/unix/unixmake2.cpp
|
|
generators/win32/mingw_make.cpp generators/win32/mingw_make.h
|
|
generators/win32/msbuild_objectmodel.cpp generators/win32/msbuild_objectmodel.h
|
|
generators/win32/msvc_nmake.cpp generators/win32/msvc_nmake.h
|
|
generators/win32/msvc_objectmodel.cpp generators/win32/msvc_objectmodel.h
|
|
generators/win32/msvc_vcproj.cpp generators/win32/msvc_vcproj.h
|
|
generators/win32/msvc_vcxproj.cpp generators/win32/msvc_vcxproj.h
|
|
generators/win32/winmakefile.cpp generators/win32/winmakefile.h
|
|
generators/xmloutput.cpp generators/xmloutput.h
|
|
library/ioutils.cpp library/ioutils.h
|
|
library/qmakebuiltins.cpp
|
|
library/qmakeevaluator.cpp library/qmakeevaluator.h library/qmakeevaluator_p.h
|
|
library/qmakeglobals.cpp library/qmakeglobals.h
|
|
library/qmakeparser.cpp library/qmakeparser.h
|
|
library/qmakevfs.cpp library/qmakevfs.h
|
|
main.cpp
|
|
meta.cpp meta.h
|
|
option.cpp option.h
|
|
project.cpp project.h
|
|
DEFINES
|
|
HAVE_CONFIG_H
|
|
INCLUDE_DIRECTORIES
|
|
generators
|
|
generators/mac
|
|
generators/unix
|
|
generators/win32
|
|
library
|
|
PRECOMPILED_HEADER
|
|
"qmake_pch.h"
|
|
LIBRARIES
|
|
Qt::CorePrivate
|
|
QtLibraryInfo
|
|
)
|
|
qt_internal_return_unless_building_tools()
|
|
|
|
# Add QMAKE_VERSION_STR only if qmake is part of the build.
|
|
target_compile_definitions(QtLibraryInfo PUBLIC
|
|
QMAKE_VERSION_STR="3.1"
|
|
)
|
|
|
|
#### Keys ignored in scope 1:.:.:qmake.pro:<TRUE>:
|
|
# _OPTION = "host_build"
|
|
|
|
## Scopes:
|
|
#####################################################################
|
|
|
|
qt_internal_extend_target(${target_name} CONDITION MACOS
|
|
COMPILE_OPTIONS
|
|
"-fconstant-cfstrings"
|
|
)
|
|
|
|
# special case big
|
|
qt_internal_extend_target(${target_name} CONDITION WIN32
|
|
SOURCES
|
|
library/registry.cpp
|
|
DEFINES
|
|
_SCL_SECURE_NO_WARNINGS
|
|
)
|
|
|
|
qt_internal_extend_target(${target_name} CONDITION CLANG AND WIN32
|
|
COMPILE_OPTIONS
|
|
"-fms-compatibility-version=19.00.23506"
|
|
"-Wno-microsoft-enum-value"
|
|
)
|
|
|
|
# special case:
|
|
set_target_properties(${target_name} PROPERTIES
|
|
AUTOMOC OFF
|
|
AUTORCC OFF
|
|
AUTOUIC OFF
|
|
)
|
|
|
|
qt_internal_apply_gc_binaries(${target_name} PRIVATE) # special case
|
|
qt_skip_warnings_are_errors(${target_name}) # special case
|
|
|
|
# special case begin
|
|
qt_internal_add_docs(${target_name}
|
|
doc/qmake.qdocconf
|
|
)
|
|
# special case end
|