diff options
25 files changed, 550 insertions, 565 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index aa4445c3e4..c328a738b1 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -476,7 +476,6 @@ set(__qt_add_plugin_multi_args set(__qt_internal_add_executable_optional_args GUI BOOTSTRAP - NO_QT NO_INSTALL EXCEPTIONS DELAY_RC diff --git a/cmake/QtExecutableHelpers.cmake b/cmake/QtExecutableHelpers.cmake index 5ab7848aae..c6ffd69fc2 100644 --- a/cmake/QtExecutableHelpers.cmake +++ b/cmake/QtExecutableHelpers.cmake @@ -83,7 +83,7 @@ function(qt_internal_add_executable name) qt_skip_warnings_are_errors_when_repo_unclean("${name}") set(extra_libraries "") - if(NOT arg_BOOTSTRAP AND NOT arg_NO_QT) + if(NOT arg_BOOTSTRAP) set(extra_libraries "Qt::Core") endif() diff --git a/cmake/QtQmakeHelpers.cmake b/cmake/QtQmakeHelpers.cmake index cf15ada7b3..8f3c026fd6 100644 --- a/cmake/QtQmakeHelpers.cmake +++ b/cmake/QtQmakeHelpers.cmake @@ -20,7 +20,7 @@ macro(qt_add_string_to_qconfig_cpp str) math(EXPR QT_CONFIG_STR_OFFSET "${QT_CONFIG_STR_OFFSET}+${length}+1") endmacro() -function(qt_generate_qconfig_cpp) +function(qt_generate_qconfig_cpp in_file out_file) set(QT_CONFIG_STR_OFFSET "0") set(QT_CONFIG_STR_OFFSETS "") set(QT_CONFIG_STRS "") @@ -92,7 +92,7 @@ function(qt_generate_qconfig_cpp) set(QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH "${from_bin_dir_to_prefix}") set(QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH "${from_bin_dir_to_prefix}") - configure_file(global/qconfig.cpp.in global/qconfig.cpp @ONLY) + configure_file(${in_file} ${out_file} @ONLY) endfunction() # In the cross-compiling case, creates a wrapper around the host Qt's diff --git a/cmake/QtToolHelpers.cmake b/cmake/QtToolHelpers.cmake index e6246ba94a..869a6e3300 100644 --- a/cmake/QtToolHelpers.cmake +++ b/cmake/QtToolHelpers.cmake @@ -22,7 +22,7 @@ function(qt_internal_add_tool target_name) qt_tool_target_to_name(name ${target_name}) set(one_value_keywords TOOLS_TARGET EXTRA_CMAKE_FILES INSTALL_DIR ${__default_target_info_args}) - qt_parse_all_arguments(arg "qt_add_tool" "BOOTSTRAP;NO_QT;NO_INSTALL" + qt_parse_all_arguments(arg "qt_add_tool" "BOOTSTRAP;NO_INSTALL" "${one_value_keywords}" "${__default_private_args}" ${ARGN}) @@ -109,19 +109,11 @@ function(qt_internal_add_tool target_name) endif() set(disable_autogen_tools "${arg_DISABLE_AUTOGEN_TOOLS}") - if (arg_NO_QT) - # FIXME: Remove NO_QT again once qmake can use a "normal" Qt! - if (arg_BOOTSTRAP) - message(FATAL_ERROR "Tool can not be NO_QT and BOOTSTRAP at the same time!") - endif() - set(corelib "") + if (arg_BOOTSTRAP) + set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Bootstrap) + list(APPEND disable_autogen_tools "uic" "moc" "rcc") else() - if (arg_BOOTSTRAP) - set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Bootstrap) - list(APPEND disable_autogen_tools "uic" "moc" "rcc") - else() - set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Core) - endif() + set(corelib ${QT_CMAKE_EXPORT_NAMESPACE}::Core) endif() set(bootstrap "") @@ -129,11 +121,6 @@ function(qt_internal_add_tool target_name) set(bootstrap BOOTSTRAP) endif() - set(no_qt "") - if(arg_NO_QT) - set(no_qt NO_QT) - endif() - set(install_dir "${INSTALL_BINDIR}") if(arg_INSTALL_DIR) set(install_dir "${arg_INSTALL_DIR}") @@ -141,7 +128,6 @@ function(qt_internal_add_tool target_name) qt_internal_add_executable("${target_name}" OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${install_dir}" ${bootstrap} - ${no_qt} NO_INSTALL SOURCES ${arg_SOURCES} INCLUDE_DIRECTORIES @@ -178,7 +164,7 @@ function(qt_internal_add_tool target_name) if(TARGET host_tools) add_dependencies(host_tools "${target_name}") - if(bootstrap OR no_qt) + if(bootstrap) add_dependencies(bootstrap_tools "${target_name}") endif() endif() diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt index 3897ea192c..08b23df587 100644 --- a/qmake/CMakeLists.txt +++ b/qmake/CMakeLists.txt @@ -4,131 +4,27 @@ ## qmake Tool: ##################################################################### +# TODO: Probably it's time to introduce QT_FEATURE_qmake? +if(NOT (QT_FEATURE_settings AND QT_FEATURE_alloca AND (QT_FEATURE_alloca_malloc_h OR NOT WIN32) AND + QT_FEATURE_cborstreamwriter AND QT_FEATURE_datestring AND QT_FEATURE_regularexpression AND + QT_FEATURE_temporaryfile)) + message(WARNING "Skip building qmake in specified configuration.\ +Required features: + QT_FEATURE_settings ${QT_FEATURE_settings} + QT_FEATURE_alloca ${QT_FEATURE_alloca} + QT_FEATURE_cborstreamwriter ${QT_FEATURE_cborstreamwriter} + QT_FEATURE_datestring ${QT_FEATURE_datestring} + QT_FEATURE_getauxval ${QT_FEATURE_getauxval} + QT_FEATURE_regularexpression ${QT_FEATURE_regularexpression} + QT_FEATURE_temporaryfile ${QT_FEATURE_temporaryfile} +") + return() +endif() + qt_get_tool_target_name(target_name qmake) qt_internal_add_tool(${target_name} - NO_QT # special case TOOLS_TARGET Core # special case - # GUI # special case: remove this SOURCES - ../src/3rdparty/pcre2/src/config.h - ../src/3rdparty/pcre2/src/pcre2.h - ../src/3rdparty/pcre2/src/pcre2_auto_possess.c - ../src/3rdparty/pcre2/src/pcre2_chartables.c - ../src/3rdparty/pcre2/src/pcre2_compile.c - ../src/3rdparty/pcre2/src/pcre2_config.c - ../src/3rdparty/pcre2/src/pcre2_context.c - ../src/3rdparty/pcre2/src/pcre2_dfa_match.c - ../src/3rdparty/pcre2/src/pcre2_error.c - ../src/3rdparty/pcre2/src/pcre2_extuni.c - ../src/3rdparty/pcre2/src/pcre2_find_bracket.c - ../src/3rdparty/pcre2/src/pcre2_internal.h - ../src/3rdparty/pcre2/src/pcre2_intmodedep.h - ../src/3rdparty/pcre2/src/pcre2_jit_compile.c - ../src/3rdparty/pcre2/src/pcre2_maketables.c - ../src/3rdparty/pcre2/src/pcre2_match.c - ../src/3rdparty/pcre2/src/pcre2_match_data.c - ../src/3rdparty/pcre2/src/pcre2_newline.c - ../src/3rdparty/pcre2/src/pcre2_ord2utf.c - ../src/3rdparty/pcre2/src/pcre2_pattern_info.c - ../src/3rdparty/pcre2/src/pcre2_script_run.c - ../src/3rdparty/pcre2/src/pcre2_serialize.c - ../src/3rdparty/pcre2/src/pcre2_string_utils.c - ../src/3rdparty/pcre2/src/pcre2_study.c - ../src/3rdparty/pcre2/src/pcre2_substitute.c - ../src/3rdparty/pcre2/src/pcre2_substring.c - ../src/3rdparty/pcre2/src/pcre2_tables.c - ../src/3rdparty/pcre2/src/pcre2_ucd.c - ../src/3rdparty/pcre2/src/pcre2_ucp.h - ../src/3rdparty/pcre2/src/pcre2_valid_utf.c - ../src/3rdparty/pcre2/src/pcre2_xclass.c - ../src/corelib/global/qcontainerinfo.h - ../src/corelib/global/qendian.cpp # special case - ../src/corelib/global/qglobal.cpp ../src/corelib/global/qglobal.h - ../src/corelib/global/qlibraryinfo.cpp - ../src/corelib/global/qlogging.cpp - ../src/corelib/global/qmalloc.cpp - ../src/corelib/global/qnumeric.cpp ../src/corelib/global/qnumeric.h - ../src/corelib/global/qoperatingsystemversion.cpp # special case - ../src/corelib/global/qrandom.cpp # special case - ../src/corelib/io/qabstractfileengine.cpp ../src/corelib/io/qabstractfileengine_p.h - ../src/corelib/io/qbuffer.cpp ../src/corelib/io/qbuffer.h - ../src/corelib/io/qdebug.cpp # special case - ../src/corelib/io/qdir.cpp ../src/corelib/io/qdir.h ../src/corelib/io/qdir_p.h - ../src/corelib/io/qdiriterator.cpp ../src/corelib/io/qdiriterator.h - ../src/corelib/io/qfile.cpp ../src/corelib/io/qfile.h - ../src/corelib/io/qfiledevice.cpp - ../src/corelib/io/qfileinfo.cpp ../src/corelib/io/qfileinfo.h - ../src/corelib/io/qfilesystemengine.cpp - ../src/corelib/io/qfilesystementry.cpp - ../src/corelib/io/qfsfileengine.cpp - ../src/corelib/io/qfsfileengine_iterator.cpp - ../src/corelib/io/qiodevicebase.h - ../src/corelib/io/qiodevice.cpp ../src/corelib/io/qiodevice.h - ../src/corelib/io/qsettings.cpp - ../src/corelib/io/qtemporaryfile.cpp ../src/corelib/io/qtemporaryfile.h - ../src/corelib/kernel/qiterable.cpp ../src/corelib/kernel/qiterable.h - ../src/corelib/kernel/qmetacontainer.cpp ../src/corelib/kernel/qmetacontainer.h - ../src/corelib/kernel/qmetatype.cpp ../src/corelib/kernel/qmetatype.h - ../src/corelib/kernel/qsystemerror.cpp ../src/corelib/kernel/qsystemerror_p.h - ../src/corelib/kernel/qvariant.cpp - ../src/corelib/plugin/quuid.cpp ../src/corelib/plugin/quuid.h - ../src/corelib/serialization/qcborstreamwriter.cpp ../src/corelib/serialization/qcborstreamwriter.h - ../src/corelib/serialization/qcborvalue.cpp ../src/corelib/serialization/qcborvalue.h ../src/corelib/serialization/qcborvalue_p.h - ../src/corelib/serialization/qdatastream.cpp ../src/corelib/serialization/qdatastream.h - ../src/corelib/serialization/qjson_p.h - ../src/corelib/serialization/qjsonarray.cpp ../src/corelib/serialization/qjsonarray.h - ../src/corelib/serialization/qjsoncbor.cpp - ../src/corelib/serialization/qjsondocument.cpp ../src/corelib/serialization/qjsondocument.h - ../src/corelib/serialization/qjsonobject.cpp ../src/corelib/serialization/qjsonobject.h - ../src/corelib/serialization/qjsonparser.cpp ../src/corelib/serialization/qjsonparser_p.h - ../src/corelib/serialization/qjsonvalue.cpp ../src/corelib/serialization/qjsonvalue.h - ../src/corelib/serialization/qjsonwriter_p.h - ../src/corelib/serialization/qtextstream.cpp ../src/corelib/serialization/qtextstream.h - ../src/corelib/text/qbytearray.cpp ../src/corelib/text/qbytearray.h - ../src/corelib/text/qbytearraylist.cpp ../src/corelib/text/qbytearraylist.h # special case - ../src/corelib/text/qbytearraymatcher.cpp ../src/corelib/text/qbytearraymatcher.h - ../src/corelib/text/qchar.h - ../src/corelib/text/qlocale.cpp ../src/corelib/text/qlocale.h - ../src/corelib/text/qlocale_tools.cpp ../src/corelib/text/qlocale_tools_p.h - ../src/corelib/text/qregularexpression.cpp ../src/corelib/text/qregularexpression.h - ../src/corelib/text/qstring.cpp ../src/corelib/text/qstring.h - ../src/corelib/text/qstringbuilder.cpp ../src/corelib/text/qstringbuilder.h - ../src/corelib/text/qstringconverter.cpp ../src/corelib/text/qstringconverter.h ../src/corelib/text/qstringconverter_p.h - ../src/corelib/text/qstringlist.cpp ../src/corelib/text/qstringlist.h - ../src/corelib/text/qstringmatcher.h - ../src/corelib/text/qvsnprintf.cpp - ../src/corelib/time/qcalendar.cpp ../src/corelib/time/qcalendar.h - ../src/corelib/time/qcalendarbackend_p.h - ../src/corelib/time/qcalendarmath_p.h - ../src/corelib/time/qdatetime.cpp ../src/corelib/time/qdatetime.h ../src/corelib/time/qdatetime_p.h - ../src/corelib/time/qgregoriancalendar.cpp ../src/corelib/time/qgregoriancalendar_p.h - ../src/corelib/time/qromancalendar.cpp ../src/corelib/time/qromancalendar_p.h - ../src/corelib/tools/qarraydata.cpp ../src/corelib/tools/qarraydata.h - ../src/corelib/tools/qarraydataops.h - ../src/corelib/tools/qarraydatapointer.h - ../src/corelib/tools/qbitarray.cpp ../src/corelib/tools/qbitarray.h - ../src/corelib/tools/qcryptographichash.cpp ../src/corelib/tools/qcryptographichash.h - ../src/corelib/time/qcalendar.cpp ../src/corelib/time/qcalendar.h # special case - ../src/corelib/time/qcalendarbackend_p.h ../src/corelib/time/qcalendarmath_p.h # special case - ../src/corelib/time/qgregoriancalendar.cpp ../src/corelib/time/qgregoriancalendar_p.h # special case - ../src/corelib/time/qromancalendar.cpp ../src/corelib/time/qromancalendar_p.h # special case - ../src/corelib/time/qdatetime.cpp ../src/corelib/time/qdatetime.h ../src/corelib/time/qdatetime_p.h # special case - ../src/corelib/tools/qduplicatetracker_p.h - ../src/corelib/tools/qhash.cpp ../src/corelib/tools/qhash.h - ../src/corelib/tools/qlist.h - ../src/corelib/tools/qmap.h - ../src/corelib/text/qlocale.cpp ../src/corelib/text/qlocale.h - ../src/corelib/text/qlocale_tools.cpp ../src/corelib/text/qlocale_tools_p.h - ../src/corelib/text/qregularexpression.cpp ../src/corelib/text/qregularexpression.h - ../src/corelib/tools/qringbuffer.cpp # special case - ../src/corelib/text/qstring.cpp ../src/corelib/text/qstring.h - ../src/corelib/text/qstringbuilder.cpp ../src/corelib/text/qstringbuilder.h - ../src/corelib/text/qstringconverter.cpp ../src/corelib/text/qstringconverter.h ../src/corelib/text/qstringconverter_p.h - ../src/corelib/text/qstringlist.cpp ../src/corelib/text/qstringlist.h - ../src/corelib/text/qstringmatcher.h - ../src/corelib/tools/qvector.h - ../src/corelib/tools/qversionnumber.cpp ../src/corelib/tools/qversionnumber.h - ../src/corelib/text/qvsnprintf.cpp cachekeys.h generators/mac/pbuilder_pbx.cpp generators/mac/pbuilder_pbx.h generators/makefile.cpp generators/makefile.h @@ -153,6 +49,7 @@ qt_internal_add_tool(${target_name} library/qmakeglobals.cpp library/qmakeglobals.h library/qmakeparser.cpp library/qmakeparser.h library/qmakevfs.cpp library/qmakevfs.h + qmakelibraryinfo.cpp qmakelibraryinfo.h main.cpp meta.cpp meta.h option.cpp option.h @@ -160,9 +57,7 @@ qt_internal_add_tool(${target_name} property.cpp property.h DEFINES HAVE_CONFIG_H - PCRE2_DISABLE_JIT PROEVALUATOR_FULL - QT_BOOTSTRAPPED QT_BUILD_QMAKE QT_USE_QSTRINGBUILDER QT_NO_FOREACH @@ -170,95 +65,38 @@ qt_internal_add_tool(${target_name} QT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} # special case QT_VERSION_MINOR=${PROJECT_VERSION_MINOR} # special case QT_VERSION_PATCH=${PROJECT_VERSION_PATCH} # special case - PCRE2_CODE_UNIT_WIDTH=16 - PCRE2_DISABLE_JIT - HAVE_CONFIG_H INCLUDE_DIRECTORIES - # . # special case remove generators generators/mac generators/unix generators/win32 library - $<TARGET_PROPERTY:Qt::Core,INCLUDE_DIRECTORIES> # special case - "${PROJECT_BINARY_DIR}/src/corelib/global" # special case: for qconfig.cpp + "${CMAKE_CURRENT_BINARY_DIR}/library" # for qmakeconfig.cpp PRECOMPILED_HEADER "qmake_pch.h" + LIBRARIES + Qt::CorePrivate ) +qt_generate_qconfig_cpp(../src/corelib/global/qconfig.cpp.in library/qmakeconfig.cpp) + #### Keys ignored in scope 1:.:.:qmake.pro:<TRUE>: # _OPTION = "host_build" ## Scopes: ##################################################################### -qt_internal_extend_target(${target_name} CONDITION WIN32 - SOURCES - ../src/corelib/global/qoperatingsystemversion_win.cpp - ../src/corelib/io/qfilesystemengine_win.cpp - ../src/corelib/io/qfilesystemiterator_win.cpp - ../src/corelib/io/qfsfileengine_win.cpp - ../src/corelib/io/qsettings_win.cpp - ../src/corelib/plugin/qsystemlibrary.cpp - ../src/corelib/text/qlocale_win.cpp - library/registry.cpp - DEFINES - UNICODE - _CRT_SECURE_NO_WARNINGS - _ENABLE_EXTENDED_ALIGNED_STORAGE - _SCL_SECURE_NO_WARNINGS - PUBLIC_DEFINES - PCRE2_STATIC - PUBLIC_LIBRARIES - advapi32 - kernel32 - netapi32 - ole32 -) - -qt_internal_extend_target(${target_name} CONDITION UNIX - SOURCES - ../src/corelib/io/qfilesystemengine_unix.cpp - ../src/corelib/io/qfilesystemiterator_unix.cpp - ../src/corelib/io/qfsfileengine_unix.cpp - ../src/corelib/kernel/qcore_unix.cpp - ../src/corelib/text/qlocale_unix.cpp -) - qt_internal_extend_target(${target_name} CONDITION MACOS - SOURCES - ../src/corelib/kernel/qcore_foundation.mm # special case - ../src/corelib/kernel/qcore_mac.mm # special case - ../src/corelib/global/qoperatingsystemversion_darwin.mm # special case - ../src/corelib/io/qsettings_mac.cpp # special case - PUBLIC_LIBRARIES - ${FWApplicationServices} - ${FWCoreServices} - ${FWFoundation} COMPILE_OPTIONS "-fconstant-cfstrings" ) # special case big -qt_internal_extend_target(qmake CONDITION WIN32 +qt_internal_extend_target(${target_name} CONDITION WIN32 SOURCES - ../src/corelib/io/qfilesystemengine_win.cpp - ../src/corelib/io/qfilesystemiterator_win.cpp - ../src/corelib/io/qfsfileengine_win.cpp - ../src/corelib/text/qlocale_win.cpp - ../src/corelib/io/qsettings_win.cpp - # ../src/corelib/global/qoperatingsystemversion.cpp special case: remove this - ../src/corelib/plugin/qsystemlibrary.cpp library/registry.cpp DEFINES - UNICODE _ENABLE_EXTENDED_ALIGNED_STORAGE _CRT_SECURE_NO_WARNINGS _SCL_SECURE_NO_WARNINGS - LIBRARIES - ole32 advapi32 kernel32 netapi32 -) - -qt_internal_extend_target(${target_name} CONDITION MINGW AND WIN32 - PUBLIC_LIBRARIES - uuid + _SCL_SECURE_NO_WARNINGS ) qt_internal_extend_target(${target_name} CONDITION CLANG AND WIN32 @@ -275,10 +113,7 @@ set_target_properties(${target_name} PROPERTIES ) qt_internal_apply_gc_binaries(${target_name} PRIVATE) # special case - -qt_set_msvc_cplusplus_options(${target_name} PUBLIC) # special case qt_skip_warnings_are_errors(${target_name}) # special case -qt_internal_apply_intel_cet(Bootstrap PUBLIC) # special case # special case begin qt_internal_add_docs(${target_name} diff --git a/qmake/option.cpp b/qmake/option.cpp index 0d5746bb09..09d790c9c2 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -33,7 +33,7 @@ #include <qregularexpression.h> #include <qhash.h> #include <qdebug.h> -#include <qlibraryinfo.h> +#include <qmakelibraryinfo.h> #include <stdlib.h> #include <stdarg.h> @@ -218,7 +218,9 @@ Option::parseCommandLine(QStringList &args, QMakeCmdLineParserState &state) "QMake version %s\n" "Using Qt version %s in %s\n", QMAKE_VERSION_STR, QT_VERSION_STR, - QLibraryInfo::path(QLibraryInfo::LibrariesPath).toLatin1().constData()); + QMakeLibraryInfo::path(QLibraryInfo::LibrariesPath) + .toLatin1() + .constData()); #ifdef QMAKE_OPENSOURCE_VERSION fprintf(stdout, "QMake is Open Source software from The Qt Company Ltd and/or its subsidiary(-ies).\n"); #endif @@ -353,9 +355,9 @@ Option::init(int argc, char **argv) } if (Q_UNLIKELY(globals->qmake_abslocation.isNull())) { // This is rather unlikely to ever happen on a modern system ... - globals->qmake_abslocation = QLibraryInfo::rawLocation( - QLibraryInfo::HostBinariesPath, - QLibraryInfo::EffectivePaths) + globals->qmake_abslocation = + QMakeLibraryInfo::rawLocation(QMakeLibraryInfo::HostBinariesPath, + QMakeLibraryInfo::EffectivePaths) #ifdef Q_OS_WIN + "/qmake.exe"; #else diff --git a/qmake/property.cpp b/qmake/property.cpp index 63048f906d..2487ecb5a9 100644 --- a/qmake/property.cpp +++ b/qmake/property.cpp @@ -31,7 +31,7 @@ #include <qdir.h> #include <qsettings.h> -#include <qlibraryinfo.h> +#include <qmakelibraryinfo.h> #include <qstringlist.h> #include <stdio.h> @@ -39,11 +39,11 @@ QT_BEGIN_NAMESPACE static const struct { const char *name; - QLibraryInfo::LibraryPath loc; + int loc; bool raw; bool singular; } propList[] = { - { "QT_SYSROOT", QLibraryInfo::SysrootPath, true, true }, + { "QT_SYSROOT", QMakeLibraryInfo::SysrootPath, true, true }, { "QT_INSTALL_PREFIX", QLibraryInfo::PrefixPath, false, false }, { "QT_INSTALL_ARCHDATA", QLibraryInfo::ArchDataPath, false, false }, { "QT_INSTALL_DATA", QLibraryInfo::DataPath, false, false }, @@ -59,13 +59,13 @@ static const struct { { "QT_INSTALL_CONFIGURATION", QLibraryInfo::SettingsPath, false, false }, { "QT_INSTALL_EXAMPLES", QLibraryInfo::ExamplesPath, false, false }, { "QT_INSTALL_DEMOS", QLibraryInfo::ExamplesPath, false, false }, // Just backwards compat - { "QT_HOST_PREFIX", QLibraryInfo::HostPrefixPath, true, false }, - { "QT_HOST_DATA", QLibraryInfo::HostDataPath, true, false }, - { "QT_HOST_BINS", QLibraryInfo::HostBinariesPath, true, false }, - { "QT_HOST_LIBS", QLibraryInfo::HostLibrariesPath, true, false }, - { "QT_HOST_LIBEXECS", QLibraryInfo::HostLibraryExecutablesPath, true, false }, - { "QMAKE_SPEC", QLibraryInfo::HostSpecPath, true, true }, - { "QMAKE_XSPEC", QLibraryInfo::TargetSpecPath, true, true }, + { "QT_HOST_PREFIX", QMakeLibraryInfo::HostPrefixPath, true, false }, + { "QT_HOST_DATA", QMakeLibraryInfo::HostDataPath, true, false }, + { "QT_HOST_BINS", QMakeLibraryInfo::HostBinariesPath, true, false }, + { "QT_HOST_LIBEXECS", QMakeLibraryInfo::HostLibraryExecutablesPath, true, false }, + { "QT_HOST_LIBS", QMakeLibraryInfo::HostLibrariesPath, true, false }, + { "QMAKE_SPEC", QMakeLibraryInfo::HostSpecPath, true, true }, + { "QMAKE_XSPEC", QMakeLibraryInfo::TargetSpecPath, true, true }, }; QMakeProperty::QMakeProperty() : settings(nullptr) @@ -75,17 +75,20 @@ QMakeProperty::QMakeProperty() : settings(nullptr) void QMakeProperty::reload() { - QLibraryInfo::reload(); + QMakeLibraryInfo::reload(); for (unsigned i = 0; i < sizeof(propList)/sizeof(propList[0]); i++) { QString name = QString::fromLatin1(propList[i].name); if (!propList[i].singular) { - m_values[ProKey(name + "/src")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectiveSourcePaths); - m_values[ProKey(name + "/get")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectivePaths); + m_values[ProKey(name + "/src")] = QMakeLibraryInfo::rawLocation( + propList[i].loc, QMakeLibraryInfo::EffectiveSourcePaths); + m_values[ProKey(name + "/get")] = QMakeLibraryInfo::rawLocation( + propList[i].loc, QMakeLibraryInfo::EffectivePaths); } - QString val = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::FinalPaths); + QString val = QMakeLibraryInfo::rawLocation(propList[i].loc, QMakeLibraryInfo::FinalPaths); if (!propList[i].raw) { - m_values[ProKey(name + "/dev")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::DevicePaths); - m_values[ProKey(name)] = QLibraryInfo::path(propList[i].loc); + m_values[ProKey(name + "/dev")] = + QMakeLibraryInfo::rawLocation(propList[i].loc, QMakeLibraryInfo::DevicePaths); + m_values[ProKey(name)] = QMakeLibraryInfo::path(propList[i].loc); name += "/raw"; } m_values[ProKey(name)] = val; diff --git a/qmake/qmakelibraryinfo.cpp b/qmake/qmakelibraryinfo.cpp new file mode 100644 index 0000000000..581d1ad086 --- /dev/null +++ b/qmake/qmakelibraryinfo.cpp @@ -0,0 +1,313 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2016 Intel Corporation. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmakelibraryinfo.h" + +#include <qdir.h> +#include <qfile.h> +#include <qglobalstatic.h> +#include <qsettings.h> +#include <qscopedpointer.h> +#include <qstringlist.h> + +#include <qmakeconfig.cpp> + +QT_BEGIN_NAMESPACE + +// qmake_libraryInfoFile and qmake_abslocation are defined in option.cpp +QString qmake_libraryInfoFile(); +QString qmake_abslocation(); + +struct QMakeLibrarySettings +{ + QMakeLibrarySettings() { load(); } + + void load(); + + QScopedPointer<QSettings> settings; + bool haveDevicePaths; + bool haveEffectiveSourcePaths; + bool haveEffectivePaths; + bool havePaths; + bool reloadOnQAppAvailable; +}; +Q_GLOBAL_STATIC(QMakeLibrarySettings, qmake_library_settings) + +QSettings *QMakeLibraryInfo::findConfiguration() +{ + QString qtconfig = qmake_libraryInfoFile(); + if (!qtconfig.isEmpty()) + return new QSettings(qtconfig, QSettings::IniFormat); + return nullptr; // no luck +} + +QSettings *QMakeLibraryInfo::configuration() +{ + QMakeLibrarySettings *ls = qmake_library_settings(); + return ls ? ls->settings.data() : nullptr; +} + +void QMakeLibraryInfo::reload() +{ + if (qmake_library_settings.exists()) + qmake_library_settings->load(); +} + +bool QMakeLibraryInfo::haveGroup(PathGroup group) +{ + QMakeLibrarySettings *ls = qmake_library_settings(); + return ls + && (group == EffectiveSourcePaths ? ls->haveEffectiveSourcePaths + : group == EffectivePaths ? ls->haveEffectivePaths + : group == DevicePaths ? ls->haveDevicePaths + : ls->havePaths); +} + +void QMakeLibrarySettings::load() +{ + settings.reset(QMakeLibraryInfo::findConfiguration()); + if (settings) { + QStringList children = settings->childGroups(); + haveDevicePaths = children.contains(QLatin1String("DevicePaths")); + haveEffectiveSourcePaths = children.contains(QLatin1String("EffectiveSourcePaths")); + haveEffectivePaths = + haveEffectiveSourcePaths || children.contains(QLatin1String("EffectivePaths")); + // Backwards compat: an existing but empty file is claimed to contain the Paths section. + havePaths = (!haveDevicePaths && !haveEffectivePaths + && !children.contains(QLatin1String(platformsSection))) + || children.contains(QLatin1String("Paths")); + } else { + haveDevicePaths = false; + haveEffectiveSourcePaths = false; + haveEffectivePaths = false; + havePaths = false; + } +} + +void QMakeLibraryInfo::sysrootify(QString &path) +{ + // Acceptable values for SysrootifyPrefixPath are "true" and "false" + if (!QVariant::fromValue(rawLocation(SysrootifyPrefixPath, FinalPaths)).toBool()) + return; + + const QString sysroot = rawLocation(SysrootPath, FinalPaths); + if (sysroot.isEmpty()) + return; + + if (path.length() > 2 && path.at(1) == QLatin1Char(':') + && (path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\'))) { + path.replace(0, 2, sysroot); // Strip out the drive on Windows targets + } else { + path.prepend(sysroot); + } +} + +static QString getPrefixFromHostBinDir(const char *hostBinDirToPrefixPath) +{ + const QString canonicalQMakePath = QFileInfo(qmake_abslocation()).canonicalPath(); + return QDir::cleanPath(canonicalQMakePath + QLatin1Char('/') + + QLatin1String(hostBinDirToPrefixPath)); +} + +static QString getExtPrefixFromHostBinDir() +{ + return getPrefixFromHostBinDir(QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH); +} + +static QString getHostPrefixFromHostBinDir() +{ + return getPrefixFromHostBinDir(QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH); +} + +static QString getPrefix(QMakeLibraryInfo::PathGroup group) +{ +#if QT_CONFIGURE_CROSSBUILD + if (group == QMakeLibraryInfo::DevicePaths) + return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH); +#else + Q_UNUSED(group); +#endif + return getExtPrefixFromHostBinDir(); +} + +QString QMakeLibraryInfo::path(int loc) +{ + QString ret = rawLocation(loc, QMakeLibraryInfo::FinalPaths); + + // Automatically prepend the sysroot to target paths + if (loc < QMakeLibraryInfo::SysrootPath || loc > QMakeLibraryInfo::LastHostPath) + sysrootify(ret); + + return ret; +} + +QString QMakeLibraryInfo::rawLocation(int loc, QMakeLibraryInfo::PathGroup group) +{ + QString ret; + bool fromConf = false; + // Logic for choosing the right data source: if EffectivePaths are requested + // and qt.conf with that section is present, use it, otherwise fall back to + // FinalPaths. For FinalPaths, use qt.conf if present and contains not only + // [EffectivePaths], otherwise fall back to builtins. + // EffectiveSourcePaths falls back to EffectivePaths. + // DevicePaths falls back to FinalPaths. + PathGroup orig_group = group; + if (QMakeLibraryInfo::haveGroup(group) + || (group == EffectiveSourcePaths + && (group = EffectivePaths, QMakeLibraryInfo::haveGroup(group))) + || ((group == EffectivePaths || group == DevicePaths) + && (group = FinalPaths, QMakeLibraryInfo::haveGroup(group))) + || (group = orig_group, false)) { + fromConf = true; + + QString key; + QString defaultValue; + if (unsigned(loc) < sizeof(qtConfEntries) / sizeof(qtConfEntries[0])) { + key = QLatin1String(qtConfEntries[loc].key); + defaultValue = QLatin1String(qtConfEntries[loc].value); + } +#ifndef Q_OS_WIN // On Windows we use the registry + else if (loc == QLibraryInfo::SettingsPath) { + key = QLatin1String("Settings"); + defaultValue = QLatin1String("."); + } +#endif + if (!key.isNull()) { + QSettings *config = QMakeLibraryInfo::configuration(); + config->beginGroup(QLatin1String(group == DevicePaths ? "DevicePaths" + : group == EffectiveSourcePaths + ? "EffectiveSourcePaths" + : group == EffectivePaths ? "EffectivePaths" + : "Paths")); + + ret = config->value(key, defaultValue).toString(); + + if (ret.isEmpty()) { + if (loc == HostPrefixPath) + ret = config->value(QLatin1String(qtConfEntries[QLibraryInfo::PrefixPath].key), + QLatin1String( + qtConfEntries[QLibraryInfo::PrefixPath].value)) + .toString(); + else if (loc == TargetSpecPath || loc == HostSpecPath + || loc == SysrootifyPrefixPath) + fromConf = false; + // The last case here is SysrootPath, which can be legitimately empty. + // All other keys have non-empty fallbacks to start with. + } + + // TODO: Might be replaced by common for qmake and qtcore function + int startIndex = 0; + forever { + startIndex = ret.indexOf(QLatin1Char('$'), startIndex); + if (startIndex < 0) + break; + if (ret.length() < startIndex + 3) + break; + if (ret.at(startIndex + 1) != QLatin1Char('(')) { + startIndex++; + continue; + } + int endIndex = ret.indexOf(QLatin1Char(')'), startIndex + 2); + if (endIndex < 0) + break; + auto envVarName = + QStringView { ret }.mid(startIndex + 2, endIndex - startIndex - 2); + QString value = + QString::fromLocal8Bit(qgetenv(envVarName.toLocal8Bit().constData())); + ret.replace(startIndex, endIndex - startIndex + 1, value); + startIndex += value.length(); + } + config->endGroup(); + + ret = QDir::fromNativeSeparators(ret); + } + } + + if (!fromConf) { + // "volatile" here is a hack to prevent compilers from doing a + // compile-time strlen() on "path". The issue is that Qt installers + // will binary-patch the Qt installation paths -- in such scenarios, Qt + // will be built with a dummy path, thus the compile-time result of + // strlen is meaningless. + const char *volatile path = nullptr; + if (loc == QLibraryInfo::PrefixPath) { + ret = getPrefix(group); + } else if (unsigned(loc) + <= sizeof(qt_configure_str_offsets) / sizeof(qt_configure_str_offsets[0])) { + path = qt_configure_strs + qt_configure_str_offsets[loc - 1]; +#ifndef Q_OS_WIN // On Windows we use the registry + } else if (loc == QLibraryInfo::SettingsPath) { + path = QT_CONFIGURE_SETTINGS_PATH; +#endif + } else if (loc == HostPrefixPath) { + static const QByteArray hostPrefixPath = getHostPrefixFromHostBinDir().toLatin1(); + path = hostPrefixPath.constData(); + } + + if (path) + ret = QString::fromLocal8Bit(path); + } + + // These values aren't actually paths and thus need to be returned verbatim. + if (loc == TargetSpecPath || loc == HostSpecPath || loc == SysrootifyPrefixPath) + return ret; + + if (!ret.isEmpty() && QDir::isRelativePath(ret)) { + QString baseDir; + if (loc == HostPrefixPath || loc == QLibraryInfo::PrefixPath || loc == SysrootPath) { + // We make the prefix/sysroot path absolute to the executable's directory. + // loc == PrefixPath while a sysroot is set would make no sense here. + // loc == SysrootPath only makes sense if qmake lives inside the sysroot itself. + baseDir = QFileInfo(qmake_libraryInfoFile()).absolutePath(); + } else if (loc > SysrootPath && loc <= LastHostPath) { + // We make any other host path absolute to the host prefix directory. + baseDir = rawLocation(HostPrefixPath, group); + } else { + // we make any other path absolute to the prefix directory + baseDir = rawLocation(QLibraryInfo::PrefixPath, group); + if (group == EffectivePaths) + sysrootify(baseDir); + } + ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret); + } + return ret; +} + +QT_END_NAMESPACE diff --git a/qmake/qmakelibraryinfo.h b/qmake/qmakelibraryinfo.h new file mode 100644 index 0000000000..69b62e9876 --- /dev/null +++ b/qmake/qmakelibraryinfo.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMAKELIBRARYINFO_H +#define QMAKELIBRARYINFO_H + +#include <qlibraryinfo.h> +#include <qstring.h> +#include <qstringlist.h> + +QT_BEGIN_NAMESPACE + +class QSettings; + +struct QMakeLibraryInfo +{ + static QSettings *findConfiguration(); + static QSettings *configuration(); + static QString path(int loc); + static QStringList platformPluginArguments(const QString &platformName); + + /* This enum has to start after the last value in QLibraryInfo::LibraryPath(NOT SettingsPath!). + * See qconfig.cpp.in and QLibraryInfo for details. + */ + enum LibraryPathQMakeExtras { + SysrootPath = QLibraryInfo::TestsPath + 1, + SysrootifyPrefixPath, + HostBinariesPath, + HostLibraryExecutablesPath, + HostLibrariesPath, + HostDataPath, + TargetSpecPath, + HostSpecPath, + HostPrefixPath, + LastHostPath = HostPrefixPath, + }; + enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths, DevicePaths }; + static QString rawLocation(int loc, PathGroup group); + static void reload(); + static bool haveGroup(PathGroup group); + static void sysrootify(QString &path); +}; + +QT_END_NAMESPACE + +#endif // QMAKELIBRARYINFO_H diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index ebbe5851bb..09ef97f47f 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -276,7 +276,7 @@ else() target_compile_definitions(Core PUBLIC "QT_NAMESPACE=${QT_NAMESPACE}") endif() -qt_generate_qconfig_cpp() +qt_generate_qconfig_cpp(global/qconfig.cpp.in global/qconfig.cpp) set_target_properties(Core PROPERTIES INTERFACE_QT_COORD_TYPE "${QT_COORD_TYPE}") set_property(TARGET Core APPEND PROPERTY COMPATIBLE_INTERFACE_STRING QT_COORD_TYPE) diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index b57511cb0a..4649395c5f 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -66,9 +66,7 @@ #define QT_NO_USING_NAMESPACE #define QT_NO_DEPRECATED -#ifndef QT_BUILD_QMAKE #define QT_NO_REGEXP -#endif // Keep feature-test macros in alphabetic order by feature name: #define QT_FEATURE_alloca 1 @@ -139,15 +137,7 @@ #define QT_FEATURE_zstd -1 #endif -#ifdef QT_BUILD_QMAKE -#define QT_FEATURE_commandlineparser -1 -#define QT_NO_COMPRESS -#define QT_JSON_READONLY -#define QT_FEATURE_settings 1 -#define QT_NO_STANDARDPATHS -#else #define QT_FEATURE_commandlineparser 1 #define QT_FEATURE_settings -1 -#endif #endif // QT_BOOTSTRAPPED diff --git a/src/corelib/global/qconfig.cpp.in b/src/corelib/global/qconfig.cpp.in index 664924abec..d61b94c806 100644 --- a/src/corelib/global/qconfig.cpp.in +++ b/src/corelib/global/qconfig.cpp.in @@ -1,3 +1,19 @@ +/* This file is used to generate the Qt configuration info for the Core library + * and the qmake executable. The 'qt_generate_qconfig_cpp' cmake routine + * contains variables that replace '@' entires in this file. It's important to + * align these values with the following: + * + * - QLibraryInfo::LibraryPath enum in qtbase/src/corelib/global/qlibraryinfo.h + * - qtConfEntries in this file + * - QMakeLibraryInfo::LibraryPathQMakeExtras enum in + * qtbase/qmake/library/qmakelibraryinfo.h + * + * The reason for this is pointer mathematics in the QMakeLibraryInfo and + * QLibraryInfo implementation when iterating qt_configure_strs. Also + * qtConfEntries are strongly bound to QLibraryInfo::LibraryPath and + * QMakeLibraryInfo::LibraryPathQMakeExtras enums. + */ + /* Installation date */ static const char qt_configure_installation [12+11] = "qt_instdate=2012-12-20"; /* Installation Info */ @@ -31,3 +47,58 @@ static const char qt_configure_strs[] = # define QT_CONFIGURE_EXT_PREFIX_PATH qt_configure_ext_prefix_path_str + 12 # define QT_CONFIGURE_HOST_PREFIX_PATH qt_configure_host_prefix_path_str + 12 #endif + + +/* Entries below are shared between qmake and the Core library. Please pay + * attention and read the adding rules here and inside QLibraryInfo header. + * + * To add a new entry in QLibraryInfo::LibraryPath, add it to the enum + * in qtbase/src/corelib/global/qlibraryinfo.h and: + * - add its relative path in the qtConfEntries[] array below + * (the key is what appears in a qt.conf file) + * - add a property name in qmake/property.cpp propList[] array + * (it's used with qmake -query) + * - add to qt_config.prf, qt_module.prf, qt_module_fwdpri.prf + */ + +#ifdef QT_BUILD_QMAKE +constexpr size_t qtConfEntriesKeySize = 23; +#else +constexpr size_t qtConfEntriesKeySize = 19; +#endif + +static const struct { + char key[qtConfEntriesKeySize], value[13]; +} qtConfEntries[] = { + { "Prefix", "." }, + { "Documentation", "doc" }, // should be ${Data}/doc + { "Headers", "include" }, + { "Libraries", "lib" }, +#ifdef Q_OS_WIN + { "LibraryExecutables", "bin" }, +#else + { "LibraryExecutables", "libexec" }, // should be ${ArchData}/libexec +#endif + { "Binaries", "bin" }, + { "Plugins", "plugins" }, // should be ${ArchData}/plugins + { "Qml2Imports", "qml" }, // should be ${ArchData}/qml + { "ArchData", "." }, + { "Data", "." }, + { "Translations", "translations" }, // should be ${Data}/translations + { "Examples", "examples" }, + { "Tests", "tests" }, +// Put new entries above this line ONLY! +#ifdef QT_BUILD_QMAKE + { "Sysroot", "" }, + { "SysrootifyPrefix", "" }, + { "HostBinaries", "bin" }, + { "HostLibraryExecutables", "libexec" }, + { "HostLibraries", "lib" }, + { "HostData", "." }, + { "TargetSpec", "" }, + { "HostSpec", "" }, + { "HostPrefix", "" }, +#endif +}; + +static const char platformsSection[] = "Platforms"; diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index c046b8078d..342fecb300 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1903,12 +1903,6 @@ bool qSharedBuild() noexcept \sa QT_DISABLE_DEPRECATED_BEFORE */ -#if defined(QT_BUILD_QMAKE) -// needed to bootstrap qmake -static const unsigned int qt_one = 1; -const int QSysInfo::ByteOrder = ((*((unsigned char *) &qt_one) == 0) ? BigEndian : LittleEndian); -#endif - #if defined(Q_OS_MAC) QT_BEGIN_INCLUDE_NAMESPACE @@ -1982,13 +1976,8 @@ Q_GLOBAL_STATIC(QWindowsSockInit, winsockInit) static QString readVersionRegistryString(const wchar_t *subKey) { -#if !defined(QT_BUILD_QMAKE) - return QWinRegistryKey(HKEY_LOCAL_MACHINE, LR"(SOFTWARE\Microsoft\Windows NT\CurrentVersion)") + return QWinRegistryKey(HKEY_LOCAL_MACHINE, LR"(SOFTWARE\Microsoft\Windows NT\CurrentVersion)") .stringValue(subKey); -#else - Q_UNUSED(subKey); - return QString(); -#endif } static inline QString windows10ReleaseId() diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index d3f0f95ad8..b48b1b5d95 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -47,13 +47,7 @@ #include "qlibraryinfo.h" #include "qscopedpointer.h" -#ifdef QT_BUILD_QMAKE -QT_BEGIN_NAMESPACE -extern QString qmake_libraryInfoFile(); -QT_END_NAMESPACE -#else -# include "qcoreapplication.h" -#endif +#include "qcoreapplication.h" #include "private/qglobal_p.h" #include "qconfig.cpp" @@ -64,12 +58,12 @@ QT_END_NAMESPACE #include "archdetect.cpp" -#if !defined(QT_BUILD_QMAKE) && QT_CONFIG(relocatable) && QT_CONFIG(dlopen) && !QT_CONFIG(framework) -# include <dlfcn.h> +#if QT_CONFIG(relocatable) && QT_CONFIG(dlopen) && !QT_CONFIG(framework) +# include <dlfcn.h> #endif -#if !defined(QT_BUILD_QMAKE) && QT_CONFIG(relocatable) && defined(Q_OS_WIN) -# include <qt_windows.h> +#if QT_CONFIG(relocatable) && defined(Q_OS_WIN) +# include <qt_windows.h> #endif QT_BEGIN_NAMESPACE @@ -84,14 +78,7 @@ struct QLibrarySettings void load(); QScopedPointer<QSettings> settings; -#ifdef QT_BUILD_QMAKE - bool haveDevicePaths; - bool haveEffectiveSourcePaths; - bool haveEffectivePaths; - bool havePaths; -#else bool reloadOnQAppAvailable; -#endif }; Q_GLOBAL_STATIC(QLibrarySettings, qt_library_settings) @@ -99,32 +86,12 @@ class QLibraryInfoPrivate { public: static QSettings *findConfiguration(); -#ifdef QT_BUILD_QMAKE - static void reload() - { - if (qt_library_settings.exists()) - qt_library_settings->load(); - } - static bool haveGroup(QLibraryInfo::PathGroup group) - { - QLibrarySettings *ls = qt_library_settings(); - return ls ? (group == QLibraryInfo::EffectiveSourcePaths - ? ls->haveEffectiveSourcePaths - : group == QLibraryInfo::EffectivePaths - ? ls->haveEffectivePaths - : group == QLibraryInfo::DevicePaths - ? ls->haveDevicePaths - : ls->havePaths) : false; - } -#endif static QSettings *configuration() { QLibrarySettings *ls = qt_library_settings(); if (ls) { -#ifndef QT_BUILD_QMAKE if (ls->reloadOnQAppAvailable && QCoreApplication::instance() != nullptr) ls->load(); -#endif return ls->settings.data(); } else { return nullptr; @@ -132,8 +99,6 @@ public: } }; -static const char platformsSection[] = "Platforms"; - QLibrarySettings::QLibrarySettings() { load(); @@ -143,48 +108,29 @@ void QLibrarySettings::load() { // If we get any settings here, those won't change when the application shows up. settings.reset(QLibraryInfoPrivate::findConfiguration()); -#ifndef QT_BUILD_QMAKE reloadOnQAppAvailable = (settings.data() == nullptr && QCoreApplication::instance() == nullptr); bool haveDevicePaths; bool haveEffectivePaths; bool havePaths; -#endif if (settings) { // This code needs to be in the regular library, as otherwise a qt.conf that // works for qmake would break things for dynamically built Qt tools. QStringList children = settings->childGroups(); haveDevicePaths = children.contains(QLatin1String("DevicePaths")); -#ifdef QT_BUILD_QMAKE - haveEffectiveSourcePaths = children.contains(QLatin1String("EffectiveSourcePaths")); -#else // EffectiveSourcePaths is for the Qt build only, so needs no backwards compat trickery. bool haveEffectiveSourcePaths = false; -#endif haveEffectivePaths = haveEffectiveSourcePaths || children.contains(QLatin1String("EffectivePaths")); // Backwards compat: an existing but empty file is claimed to contain the Paths section. havePaths = (!haveDevicePaths && !haveEffectivePaths && !children.contains(QLatin1String(platformsSection))) || children.contains(QLatin1String("Paths")); -#ifndef QT_BUILD_QMAKE if (!havePaths) settings.reset(nullptr); -#else - } else { - haveDevicePaths = false; - haveEffectiveSourcePaths = false; - haveEffectivePaths = false; - havePaths = false; -#endif } } QSettings *QLibraryInfoPrivate::findConfiguration() { -#ifdef QT_BUILD_QMAKE - QString qtconfig = qmake_libraryInfoFile(); - if (!qtconfig.isEmpty()) - return new QSettings(qtconfig, QSettings::IniFormat); -#else QString qtconfig = QStringLiteral(":/qt/etc/qt.conf"); if (QFile::exists(qtconfig)) return new QSettings(qtconfig, QSettings::IniFormat); @@ -212,7 +158,6 @@ QSettings *QLibraryInfoPrivate::findConfiguration() if (QFile::exists(qtconfig)) return new QSettings(qtconfig, QSettings::IniFormat); } -#endif return nullptr; //no luck } @@ -236,8 +181,6 @@ QSettings *QLibraryInfoPrivate::findConfiguration() \sa QSysInfo, {Using qt.conf} */ -#ifndef QT_BUILD_QMAKE - /*! \internal @@ -354,81 +297,6 @@ QVersionNumber QLibraryInfo::version() noexcept } #endif // QT_BOOTSTRAPPED -#endif // QT_BUILD_QMAKE - -/* - * To add a new entry in QLibrary::LibraryPath, add it to the enum above the bootstrapped values and: - * - add its relative path in the qtConfEntries[] array below - * (the key is what appears in a qt.conf file) - * - add a property name in qmake/property.cpp propList[] array - * (it's used with qmake -query) - * - add to qt_config.prf, qt_module.prf, qt_module_fwdpri.prf - */ - -#ifdef QT_BUILD_QMAKE -constexpr size_t qtConfEntriesKeySize = 23; -#else -constexpr size_t qtConfEntriesKeySize = 19; -#endif - -static const struct { - char key[qtConfEntriesKeySize], value[13]; -} qtConfEntries[] = { - { "Prefix", "." }, - { "Documentation", "doc" }, // should be ${Data}/doc - { "Headers", "include" }, - { "Libraries", "lib" }, -#ifdef Q_OS_WIN - { "LibraryExecutables", "bin" }, -#else - { "LibraryExecutables", "libexec" }, // should be ${ArchData}/libexec -#endif - { "Binaries", "bin" }, - { "Plugins", "plugins" }, // should be ${ArchData}/plugins - { "Qml2Imports", "qml" }, // should be ${ArchData}/qml - { "ArchData", "." }, - { "Data", "." }, - { "Translations", "translations" }, // should be ${Data}/translations - { "Examples", "examples" }, - { "Tests", "tests" }, -#ifdef QT_BUILD_QMAKE - { "Sysroot", "" }, - { "SysrootifyPrefix", "" }, - { "HostBinaries", "bin" }, - { "HostLibraryExecutables", "libexec" }, - { "HostLibraries", "lib" }, - { "HostData", "." }, - { "TargetSpec", "" }, - { "HostSpec", "" }, - { "HostPrefix", "" }, -#endif -}; - -#ifdef QT_BUILD_QMAKE -void QLibraryInfo::reload() -{ - QLibraryInfoPrivate::reload(); -} - -void QLibraryInfo::sysrootify(QString *path) -{ - if (!QVariant::fromValue(rawLocation(SysrootifyPrefixPath, FinalPaths)).toBool()) - return; - - const QString sysroot = rawLocation(SysrootPath, FinalPaths); - if (sysroot.isEmpty()) - return; - - if (path->length() > 2 && path->at(1) == QLatin1Char(':') - && (path->at(2) == QLatin1Char('/') || path->at(2) == QLatin1Char('\\'))) { - path->replace(0, 2, sysroot); // Strip out the drive on Windows targets - } else { - path->prepend(sysroot); - } -} -#endif // QT_BUILD_QMAKE - -#ifndef QT_BUILD_QMAKE static QString prefixFromAppDirHelper() { QString appDir; @@ -458,9 +326,8 @@ static QString prefixFromAppDirHelper() return appDir; } -#endif -#if !defined(QT_BUILD_QMAKE) && QT_CONFIG(relocatable) +#if QT_CONFIG(relocatable) #if !defined(QT_STATIC) && !(defined(Q_OS_DARWIN) && QT_CONFIG(framework)) \ && (QT_CONFIG(dlopen) || defined(Q_OS_WIN)) static QString prefixFromQtCoreLibraryHelper(const QString &qtCoreLibraryPath) @@ -600,42 +467,9 @@ static QString getRelocatablePrefix() } #endif -#if defined(QT_BUILD_QMAKE) -QString qmake_abslocation(); - -static QString getPrefixFromHostBinDir(const char *hostBinDirToPrefixPath) +static QString getPrefix() { - const QString canonicalQMakePath = QFileInfo(qmake_abslocation()).canonicalPath(); - return QDir::cleanPath(canonicalQMakePath + QLatin1Char('/') - + QLatin1String(hostBinDirToPrefixPath)); -} - -static QString getExtPrefixFromHostBinDir() -{ - return getPrefixFromHostBinDir(QT_CONFIGURE_HOSTBINDIR_TO_EXTPREFIX_PATH); -} - -static QString getHostPrefixFromHostBinDir() -{ - return getPrefixFromHostBinDir(QT_CONFIGURE_HOSTBINDIR_TO_HOSTPREFIX_PATH); -} -#endif - -static QString getPrefix( -#ifdef QT_BUILD_QMAKE - QLibraryInfo::PathGroup group -#endif - ) -{ -#if defined(QT_BUILD_QMAKE) -# if QT_CONFIGURE_CROSSBUILD - if (group == QLibraryInfo::DevicePaths) - return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH); -# else - Q_UNUSED(group); -# endif - return getExtPrefixFromHostBinDir(); -#elif QT_CONFIG(relocatable) +#if QT_CONFIG(relocatable) return getRelocatablePrefix(); #else return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH); @@ -656,40 +490,10 @@ static QString getPrefix( QString QLibraryInfo::path(LibraryPath p) { const LibraryPath loc = p; -#ifdef QT_BUILD_QMAKE // ends inside rawLocation ! - QString ret = rawLocation(loc, FinalPaths); - - // Automatically prepend the sysroot to target paths - if (loc < SysrootPath || loc > LastHostPath) - sysrootify(&ret); - - return ret; -} - -QString -QLibraryInfo::rawLocation(LibraryPath loc, PathGroup group) -{ -#endif // QT_BUILD_QMAKE, started inside path! QString ret; bool fromConf = false; #if QT_CONFIG(settings) -#ifdef QT_BUILD_QMAKE - // Logic for choosing the right data source: if EffectivePaths are requested - // and qt.conf with that section is present, use it, otherwise fall back to - // FinalPaths. For FinalPaths, use qt.conf if present and contains not only - // [EffectivePaths], otherwise fall back to builtins. - // EffectiveSourcePaths falls back to EffectivePaths. - // DevicePaths falls back to FinalPaths. - PathGroup orig_group = group; - if (QLibraryInfoPrivate::haveGroup(group) - || (group == EffectiveSourcePaths - && (group = EffectivePaths, QLibraryInfoPrivate::haveGroup(group))) - || ((group == EffectivePaths || group == DevicePaths) - && (group = FinalPaths, QLibraryInfoPrivate::haveGroup(group))) - || (group = orig_group, false)) -#else if (QLibraryInfoPrivate::configuration()) -#endif { fromConf = true; @@ -708,28 +512,9 @@ QLibraryInfo::rawLocation(LibraryPath loc, PathGroup group) if (!key.isNull()) { QSettings *config = QLibraryInfoPrivate::configuration(); - config->beginGroup(QLatin1String( -#ifdef QT_BUILD_QMAKE - group == DevicePaths ? "DevicePaths" : - group == EffectiveSourcePaths ? "EffectiveSourcePaths" : - group == EffectivePaths ? "EffectivePaths" : -#endif - "Paths")); + config->beginGroup(QLatin1String("Paths")); ret = config->value(key, defaultValue).toString(); - -#ifdef QT_BUILD_QMAKE - if (ret.isEmpty()) { - if (loc == HostPrefixPath) - ret = config->value(QLatin1String(qtConfEntries[PrefixPath].key), - QLatin1String(qtConfEntries[PrefixPath].value)).toString(); - else if (loc == TargetSpecPath || loc == HostSpecPath || loc == SysrootifyPrefixPath) - fromConf = false; - // The last case here is SysrootPath, which can be legitimately empty. - // All other keys have non-empty fallbacks to start with. - } -#endif - int startIndex = 0; forever { startIndex = ret.indexOf(QLatin1Char('$'), startIndex); @@ -765,59 +550,27 @@ QLibraryInfo::rawLocation(LibraryPath loc, PathGroup group) // strlen is meaningless. const char * volatile path = nullptr; if (loc == PrefixPath) { - ret = getPrefix( -#ifdef QT_BUILD_QMAKE - group -#endif - ); + ret = getPrefix(); } else if (unsigned(loc) <= sizeof(qt_configure_str_offsets)/sizeof(qt_configure_str_offsets[0])) { path = qt_configure_strs + qt_configure_str_offsets[loc - 1]; #ifndef Q_OS_WIN // On Windows we use the registry } else if (loc == SettingsPath) { path = QT_CONFIGURE_SETTINGS_PATH; #endif -# ifdef QT_BUILD_QMAKE - } else if (loc == HostPrefixPath) { - static const QByteArray hostPrefixPath = getHostPrefixFromHostBinDir().toLatin1(); - path = hostPrefixPath.constData(); -# endif } if (path) ret = QString::fromLocal8Bit(path); } -#ifdef QT_BUILD_QMAKE - // These values aren't actually paths and thus need to be returned verbatim. - if (loc == TargetSpecPath || loc == HostSpecPath || loc == SysrootifyPrefixPath) - return ret; -#endif - if (!ret.isEmpty() && QDir::isRelativePath(ret)) { QString baseDir; -#ifdef QT_BUILD_QMAKE - if (loc == HostPrefixPath || loc == PrefixPath || loc == SysrootPath) { - // We make the prefix/sysroot path absolute to the executable's directory. - // loc == PrefixPath while a sysroot is set would make no sense here. - // loc == SysrootPath only makes sense if qmake lives inside the sysroot itself. - baseDir = QFileInfo(qmake_libraryInfoFile()).absolutePath(); - } else if (loc > SysrootPath && loc <= LastHostPath) { - // We make any other host path absolute to the host prefix directory. - baseDir = rawLocation(HostPrefixPath, group); - } else { - // we make any other path absolute to the prefix directory - baseDir = rawLocation(PrefixPath, group); - if (group == EffectivePaths) - sysrootify(&baseDir); - } -#else if (loc == PrefixPath) { baseDir = prefixFromAppDirHelper(); } else { // we make any other path absolute to the prefix directory baseDir = path(PrefixPath); } -#endif // QT_BUILD_QMAKE ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret); } return ret; @@ -838,7 +591,7 @@ QLibraryInfo::rawLocation(LibraryPath loc, PathGroup group) QStringList QLibraryInfo::platformPluginArguments(const QString &platformName) { -#if !defined(QT_BUILD_QMAKE) && QT_CONFIG(settings) +#if QT_CONFIG(settings) QScopedPointer<const QSettings> settings(QLibraryInfoPrivate::findConfiguration()); if (!settings.isNull()) { const QString key = QLatin1String(platformsSection) @@ -849,7 +602,7 @@ QStringList QLibraryInfo::platformPluginArguments(const QString &platformName) } #else Q_UNUSED(platformName); -#endif // !QT_BUILD_QMAKE && settings +#endif // settings return QStringList(); } diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h index 618dfaab70..a7d44768c8 100644 --- a/src/corelib/global/qlibraryinfo.h +++ b/src/corelib/global/qlibraryinfo.h @@ -73,20 +73,7 @@ public: ExamplesPath, TestsPath, // Insert new values above this line - // Please read the comments in qlibraryinfo.cpp before adding -#ifdef QT_BUILD_QMAKE - // These are not subject to binary compatibility constraints - SysrootPath, - SysrootifyPrefixPath, - HostBinariesPath, - HostLibraryExecutablesPath, - HostLibrariesPath, - HostDataPath, - TargetSpecPath, - HostSpecPath, - HostPrefixPath, - LastHostPath = HostPrefixPath, -#endif + // Please read the comments in qconfig.cpp.in before adding SettingsPath = 100 }; static QString path(LibraryPath p); @@ -96,13 +83,6 @@ public: static QString location(LibraryLocation location) { return path(location); } #endif -#ifdef QT_BUILD_QMAKE - enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths, DevicePaths }; - static QString rawLocation(LibraryPath, PathGroup); - static void reload(); - static void sysrootify(QString *path); -#endif - static QStringList platformPluginArguments(const QString &platformName); private: diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h index 89e761c662..04379ecd7e 100644 --- a/src/corelib/global/qsysinfo.h +++ b/src/corelib/global/qsysinfo.h @@ -57,18 +57,9 @@ public: WordSize = (sizeof(void *)<<3) }; -#if defined(QT_BUILD_QMAKE) enum Endian { BigEndian, LittleEndian - }; - /* needed to bootstrap qmake */ - static const int ByteOrder; -#elif defined(Q_BYTE_ORDER) - enum Endian { - BigEndian, - LittleEndian - # ifdef Q_QDOC , ByteOrder = BigEndian or LittleEndian # elif Q_BYTE_ORDER == Q_BIG_ENDIAN @@ -79,7 +70,6 @@ public: # error "Undefined byte order" # endif }; -#endif static QString buildCpuArchitecture(); static QString currentCpuArchitecture(); diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index f27040b07c..6fa6ec2dc2 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -644,7 +644,7 @@ static inline QByteArray fileId(HANDLE handle) // File ID for Windows starting from version 8. QByteArray fileIdWin8(HANDLE handle) { -#if !defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE) +#if !defined(QT_BOOTSTRAPPED) QByteArray result; FILE_ID_INFO infoEx; if (GetFileInformationByHandleEx(handle, @@ -658,7 +658,7 @@ QByteArray fileIdWin8(HANDLE handle) result = fileId(handle); // GetFileInformationByHandleEx() is observed to fail for FAT32, QTBUG-74759 } return result; -#else // !QT_BOOTSTRAPPED && !QT_BUILD_QMAKE +#else // !QT_BOOTSTRAPPED return fileId(handle); #endif } diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 7f16a82199..97e3bf884b 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -60,9 +60,7 @@ #include "qrect.h" #endif // !QT_NO_GEOM_VARIANT -#ifndef QT_BUILD_QMAKE -# include "qcoreapplication.h" -#endif +#include "qcoreapplication.h" #ifndef QT_BOOTSTRAPPED #include "qsavefile.h" @@ -2661,7 +2659,6 @@ QSettings::QSettings(const QString &fileName, Format format) d_ptr->q_ptr = this; } -# ifndef QT_BUILD_QMAKE QSettings::QSettings(Scope scope) : d_ptr(QSettingsPrivate::create(globalDefaultFormat, scope, # ifdef Q_OS_DARWIN @@ -2678,7 +2675,6 @@ QSettings::QSettings(Scope scope) { d_ptr->q_ptr = this; } -# endif #endif /*! diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h index 8fde893c23..05b30b562b 100644 --- a/src/corelib/io/qsettings.h +++ b/src/corelib/io/qsettings.h @@ -138,9 +138,7 @@ public: QSettings(Format format, Scope scope, const QString &organization, const QString &application = QString()); QSettings(const QString &fileName, Format format); -# ifndef QT_BUILD_QMAKE explicit QSettings(Scope scope = UserScope); -# endif #endif ~QSettings(); diff --git a/src/corelib/serialization/qjsoncbor.cpp b/src/corelib/serialization/qjsoncbor.cpp index 6256028c3a..53ee73d905 100644 --- a/src/corelib/serialization/qjsoncbor.cpp +++ b/src/corelib/serialization/qjsoncbor.cpp @@ -201,7 +201,6 @@ QJsonValue qt_convertToJson(QCborContainerPrivate *d, qsizetype idx, static QJsonValue convertExtendedTypeToJson(QCborContainerPrivate *d) { -#ifndef QT_BUILD_QMAKE qint64 tag = d->elements.at(0).value; switch (tag) { @@ -222,7 +221,6 @@ static QJsonValue convertExtendedTypeToJson(QCborContainerPrivate *d) return s; } } -#endif // for all other tags, ignore it and return the converted tagged item return qt_convertToJson(d, 1); diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp index a815037a73..bead997ab8 100644 --- a/src/corelib/text/qbytearray.cpp +++ b/src/corelib/text/qbytearray.cpp @@ -2999,7 +2999,7 @@ void QByteArray::clear() d.clear(); } -#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) /*! \relates QByteArray diff --git a/src/corelib/text/qbytearray.h b/src/corelib/text/qbytearray.h index e16d888d62..0aad272f94 100644 --- a/src/corelib/text/qbytearray.h +++ b/src/corelib/text/qbytearray.h @@ -675,7 +675,7 @@ inline std::string QByteArray::toStdString() const inline QByteArray QByteArray::fromStdString(const std::string &s) { return QByteArray(s.data(), qsizetype(s.size())); } -#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &); #endif diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp index bc7c6e1fb6..664e82a5aa 100644 --- a/src/corelib/text/qlocale_win.cpp +++ b/src/corelib/text/qlocale_win.cpp @@ -595,7 +595,7 @@ QVariant QSystemLocalePrivate::uiLanguages() { unsigned long cnt = 0; QVarLengthArray<wchar_t, 64> buf(64); -# if !defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE) // Not present in MinGW 4.9/bootstrap builds. +# if !defined(QT_BOOTSTRAPPED) // Not present in MinGW 4.9/bootstrap builds. unsigned long size = buf.size(); if (!GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &cnt, buf.data(), &size)) { size = 0; @@ -606,7 +606,7 @@ QVariant QSystemLocalePrivate::uiLanguages() return QStringList(); } } -# endif // !QT_BOOTSTRAPPED && !QT_BUILD_QMAKE +# endif // !QT_BOOTSTRAPPED QStringList result; result.reserve(cnt); const wchar_t *str = buf.constData(); diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index da212ac291..a6f3cd2b5d 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -9735,7 +9735,7 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size) equal to string \a s2; otherwise returns \c false. */ -#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) /*! \fn QDataStream &operator<<(QDataStream &stream, const QString &string) \relates QString diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 8926f6f3af..abf8957be9 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -1454,7 +1454,7 @@ inline std::u32string QString::toStdU32String() const return u32str; } -#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QString &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &); #endif |