summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/fixqt4headers.pl179
-rw-r--r--cmake/QtAutoDetect.cmake37
-rw-r--r--cmake/QtLoadFilePrintVars.cmake15
-rw-r--r--cmake/QtSyncQtHelpers.cmake6
-rwxr-xr-xlibexec/syncqt.pl (renamed from bin/syncqt.pl)0
-rw-r--r--mkspecs/features/qt_module_headers.prf2
-rw-r--r--qmake/CMakeLists.txt19
-rw-r--r--qmake/configure.cmake12
-rw-r--r--qt_cmdline.cmake1
-rw-r--r--src/concurrent/qtconcurrentrun.cpp9
-rw-r--r--src/corelib/.prev_configure.cmake4
-rw-r--r--src/corelib/configure.cmake4
-rw-r--r--src/corelib/configure.json64
-rw-r--r--tests/auto/widgets/widgets/qmenu/BLACKLIST1
14 files changed, 78 insertions, 275 deletions
diff --git a/bin/fixqt4headers.pl b/bin/fixqt4headers.pl
deleted file mode 100755
index b572f469dc..0000000000
--- a/bin/fixqt4headers.pl
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env perl
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the porting tools 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$
-##
-#############################################################################
-
-
-use Cwd;
-use File::Find;
-use File::Spec;
-use IO::File;
-use Getopt::Long;
-use strict;
-use warnings;
-
-my $dry_run = 0;
-my $help = 0;
-my $stripModule = 0;
-my $fixedFileCount = 0;
-my $fileCount = 0;
-my $verbose = 0;
-my $qtdir;
-my $qtIncludeDir;
-
-my $USAGE=<<EOF;
-This script replaces all Qt 4 style includes with Qt 5 includes.
-
-Usage: $0 [options]
-
-Options:
- --dry-run : Do not replace anything, just print what would be replaced
- --strip-modules : Strip the module headers for writing portable code
- --verbose : Verbose
- --qtdir <directory> : Point to Qt 5's qtbase directory
-EOF
-
-if (!GetOptions('dry-run' => \$dry_run, 'help' => \$help,
- 'strip-modules' => \$stripModule, 'verbose' => \$verbose, 'qtdir:s' => \$qtdir)
- || $help) {
- print $USAGE;
- exit (1);
-}
-
-my %headerSubst = ();
-my $cwd = getcwd();
-
-sub fixHeaders
-{
- my $fileName = $File::Find::name;
- my $relFileName = File::Spec->abs2rel($fileName, $cwd);
-
- # only check sources, also ignore symbolic links and directories
- return unless -f $fileName && $fileName =~ /(\.h|\.cpp|\/C|\.cc|\.CC)$/;
-
- my $inFile = new IO::File('<' . $fileName) or die ('Unable to open ' . $fileName . ': ' . $!);
- $fileCount++;
- my @affectedClasses;
- my @outLines;
-
- while (my $line = <$inFile>) {
- if ($line =~ /^#(\s*)include(\s*)<.*?\/(.*?)>(.*)/) {
- my $newHeader = $headerSubst{$3};
- if ($newHeader) {
- $line = '#' . $1 . 'include' . $2 . '<' . $newHeader . '>' . $4 . "\n";
- push(@affectedClasses, $3);
- }
- } elsif ($line =~ /^#(\s*)include(\s*)<QtGui>(.*)/) {
- $line = '#' . $1 . 'include' . $2 . '<QtWidgets>' . $3 . "\n";
- push(@affectedClasses, 'QtGui');
- }
- push(@outLines, $line);
- }
- $inFile->close();
-
- if (scalar(@affectedClasses)) {
- $fixedFileCount++;
- print $relFileName, ': ', join(', ', @affectedClasses), "\n" if ($verbose || $dry_run);
- if (!$dry_run) {
- my $outFile = new IO::File('>' . $fileName) or die ('Unable to open ' . $fileName . ': ' . $!);
- map { print $outFile $_; } @outLines;
- $outFile->close();
- }
- } else {
- print $relFileName, ": no modification.\n" if ($verbose || $dry_run);
- }
-}
-
-sub findQtHeaders
-{
- my ($dirName,$includeDir) = @_;
-
- local (*DIR);
-
- my $moduleIncludeDir = $includeDir . '/' . $dirName;
- opendir(DIR, $moduleIncludeDir) || die ('Unable to open ' . $moduleIncludeDir . ': ' . $!);
- my @headers = readdir(DIR);
- closedir(DIR);
-
- foreach my $header (@headers) {
- next if (-d ($moduleIncludeDir . '/' . $header) || $header =~ /\.pri$/);
- $headerSubst{$header} = $stripModule ? $header : ($dirName . '/' . $header);
- }
-}
-
-# -------- MAIN
-
-if ($qtdir) {
- $qtIncludeDir = $qtdir . '/include';
-} else {
- $qtIncludeDir = `qmake -query QT_INSTALL_HEADERS`;
- chop($qtIncludeDir);
-}
-
-die "The location of the Qt 5 include files could not be determined.\n"
- ."Please ensure qmake can be found in PATH or pass the command line option --qtdir.\n"
- unless -d $qtIncludeDir;
-
-findQtHeaders('QtCore', $qtIncludeDir);
-findQtHeaders('QtConcurrent', $qtIncludeDir);
-findQtHeaders('QtWidgets', $qtIncludeDir);
-findQtHeaders('QtPrintSupport', $qtIncludeDir);
-
-if (-d $qtIncludeDir . '/include/QtMultimedia') {
- findQtHeaders('QtMultimedia', $qtIncludeDir);
- findQtHeaders('QtMultimediaWidgets', $qtIncludeDir);
-} elsif (-d $qtIncludeDir . '/../qtmultimedia' ) {
- # This is the case if QTDIR points to a source tree instead of an installed Qt
- findQtHeaders('QtMultimedia', $qtIncludeDir . '/../qtmultimedia');
- findQtHeaders('QtMultimediaWidgets', $qtIncludeDir . '/../qtmultimedia');
-}
-
-# Support porting from "Qt 4.99" QtDeclarative to QtQuick (QQuickItem et al)
-if (-d $qtIncludeDir . '/include/QtQuick') {
- findQtHeaders('QtQuick', $qtIncludeDir);
-} elsif (-d $qtIncludeDir . '/../qtdeclarative' ) {
- # This is the case if QTDIR points to a source tree instead of an installed Qt
- findQtHeaders('QtQuick', $qtIncludeDir . '/../qtdeclarative');
-}
-
-# special case
-$headerSubst{'QtGui'} = 'QtWidgets/QtWidgets';
-
-find({ wanted => \&fixHeaders, no_chdir => 1}, $cwd);
-
-print 'Done. ', ($dry_run ? 'Checked' : 'Modified'), ' ', $fixedFileCount, ' of ', $fileCount, " file(s).\n";
diff --git a/cmake/QtAutoDetect.cmake b/cmake/QtAutoDetect.cmake
index 36761dba35..85b1abac02 100644
--- a/cmake/QtAutoDetect.cmake
+++ b/cmake/QtAutoDetect.cmake
@@ -14,6 +14,37 @@ function(qt_auto_detect_cmake_generator)
endif()
endfunction()
+# Peek into CMAKE_TOOLCHAIN_FILE before it is actually loaded.
+#
+# Usage:
+# qt_autodetect_read_toolchain_file(tcf VARIABLES CMAKE_SYSTEM_NAME)
+# if(tcf_CMAKE_SYSTEM_NAME STREQUAL "Android")
+# ...we have detected Android
+# endif()
+#
+function(qt_auto_detect_read_toolchain_file prefix)
+ cmake_parse_arguments(arg "" "" "VARIABLES" ${ARGN})
+ set(script_path "${CMAKE_CURRENT_LIST_DIR}/QtLoadFilePrintVars.cmake")
+ execute_process(
+ COMMAND "${CMAKE_COMMAND}" "-DIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
+ "-DVARIABLES=${arg_VARIABLES}" -P "${script_path}"
+ RESULT_VARIABLE exit_code
+ OUTPUT_VARIABLE output
+ ERROR_VARIABLE ignore)
+ if(NOT exit_code EQUAL 0)
+ message(FATAL_ERROR "Executing CMake script ${script_path} failed with code ${exit_code}.")
+ endif()
+ string(REGEX REPLACE "^.*---QtLoadFilePrintVars---\n" "" output "${output}")
+ string(REPLACE ";" "\;" output "${output}")
+ string(REPLACE "\n" ";" output "${output}")
+ foreach(line IN LISTS output)
+ string(REGEX MATCH "-- ([^ ]+) (.*)" m "${line}")
+ if(CMAKE_MATCH_1 IN_LIST arg_VARIABLES)
+ set(${prefix}_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" PARENT_SCOPE)
+ endif()
+ endforeach()
+endfunction()
+
function(qt_auto_detect_android)
# Auto-detect NDK root
if(NOT DEFINED CMAKE_ANDROID_NDK_ROOT AND DEFINED ANDROID_SDK_ROOT)
@@ -37,10 +68,8 @@ function(qt_auto_detect_android)
endif()
if(DEFINED CMAKE_TOOLCHAIN_FILE AND NOT DEFINED QT_AUTODETECT_ANDROID)
-
- file(READ ${CMAKE_TOOLCHAIN_FILE} toolchain_file_content OFFSET 0 LIMIT 80)
- string(FIND "${toolchain_file_content}" "The Android Open Source Project" find_result REVERSE)
- if (NOT ${find_result} EQUAL -1)
+ qt_auto_detect_read_toolchain_file(tcf VARIABLES CMAKE_SYSTEM_NAME)
+ if(tcf_CMAKE_SYSTEM_NAME STREQUAL "Android")
set(android_detected TRUE)
else()
set(android_detected FALSE)
diff --git a/cmake/QtLoadFilePrintVars.cmake b/cmake/QtLoadFilePrintVars.cmake
new file mode 100644
index 0000000000..fe0f3ee8d2
--- /dev/null
+++ b/cmake/QtLoadFilePrintVars.cmake
@@ -0,0 +1,15 @@
+# Load a file and print variables and their values
+#
+# IN_FILE: path to a file to be included
+# VARIABLES: list of variables to be printed
+
+cmake_minimum_required(VERSION 3.16)
+include("${IN_FILE}")
+
+# Print a magic comment that the caller must look for
+message(STATUS "---QtLoadFilePrintVars---")
+
+# Print the variables
+foreach(v IN LISTS VARIABLES)
+ message(STATUS "${v} ${${v}}")
+endforeach()
diff --git a/cmake/QtSyncQtHelpers.cmake b/cmake/QtSyncQtHelpers.cmake
index 91ed7f2832..2014405017 100644
--- a/cmake/QtSyncQtHelpers.cmake
+++ b/cmake/QtSyncQtHelpers.cmake
@@ -15,7 +15,7 @@ function(qt_ensure_sync_qt)
endif()
# When building qtbase, use the source syncqt, otherwise use the installed one.
- set(SYNCQT_FROM_SOURCE "${QtBase_SOURCE_DIR}/bin/syncqt.pl")
+ set(SYNCQT_FROM_SOURCE "${QtBase_SOURCE_DIR}/libexec/syncqt.pl")
if(NOT ("${QtBase_SOURCE_DIR}" STREQUAL "") AND EXISTS "${SYNCQT_FROM_SOURCE}")
set(QT_SYNCQT "${SYNCQT_FROM_SOURCE}" CACHE FILEPATH "syncqt script")
message(STATUS "Using source syncqt found at: ${QT_SYNCQT}")
@@ -23,10 +23,6 @@ function(qt_ensure_sync_qt)
qt_path_join(syncqt_install_dir ${QT_INSTALL_DIR} ${INSTALL_LIBEXECDIR})
qt_copy_or_install(PROGRAMS "${SYNCQT_FROM_SOURCE}"
DESTINATION "${syncqt_install_dir}")
-
- qt_path_join(syncqt_install_dir ${QT_INSTALL_DIR} ${INSTALL_BINDIR})
- qt_copy_or_install(PROGRAMS "${SYNCQT_FROM_SOURCE}"
- DESTINATION "${syncqt_install_dir}")
elseif(NOT "${QT_HOST_PATH}" STREQUAL "")
get_filename_component(syncqt_absolute_path
"${QT_HOST_PATH}/${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_LIBEXECDIR}/syncqt.pl"
diff --git a/bin/syncqt.pl b/libexec/syncqt.pl
index c22cbfa8d0..c22cbfa8d0 100755
--- a/bin/syncqt.pl
+++ b/libexec/syncqt.pl
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index f7db61a8b2..9541a560eb 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -12,7 +12,7 @@
load(qt_build_paths)
!build_pass:git_build {
- qtPrepareTool(QMAKE_SYNCQT, syncqt, , system)
+ qtPrepareLibExecTool(QMAKE_SYNCQT, syncqt, , system)
minimal_syncqt {
QMAKE_SYNCQT += -minimal $$QMAKE_SYNCQT_OPTIONS
} else {
diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt
index 9cf6a3a4b5..2a46a6f3c8 100644
--- a/qmake/CMakeLists.txt
+++ b/qmake/CMakeLists.txt
@@ -4,20 +4,11 @@
## 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}
-")
+# qmake is out of any module, so we manually evaluate the required features.
+include("${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake")
+qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/configure.cmake")
+
+if(NOT QT_FEATURE_qmake)
return()
endif()
diff --git a/qmake/configure.cmake b/qmake/configure.cmake
new file mode 100644
index 0000000000..f1b839dcef
--- /dev/null
+++ b/qmake/configure.cmake
@@ -0,0 +1,12 @@
+qt_feature("qmake" PRIVATE
+ SECTION "Core tools"
+ LABEL "qmake tool"
+ PURPOSE "The qmake tool helps simplify the build process for development projects across different platforms"
+ CONDITION 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
+)
+
+qt_configure_add_summary_section(NAME "Core tools")
+qt_configure_add_summary_entry(ARGS "qmake")
+qt_configure_end_summary_section()
diff --git a/qt_cmdline.cmake b/qt_cmdline.cmake
index 10cc67d7ec..a476d05c35 100644
--- a/qt_cmdline.cmake
+++ b/qt_cmdline.cmake
@@ -7,6 +7,7 @@ qt_commandline_subconfig(src/widgets)
qt_commandline_subconfig(src/printsupport)
qt_commandline_subconfig(src/plugins/sqldrivers)
qt_commandline_subconfig(src/testlib)
+qt_commandline_subconfig(qmake) # special case
qt_commandline_custom(qmakeArgs)
qt_commandline_option(prefix TYPE string)
qt_commandline_option(hostprefix TYPE optionalString)
diff --git a/src/concurrent/qtconcurrentrun.cpp b/src/concurrent/qtconcurrentrun.cpp
index 8347440b66..18bcf332ac 100644
--- a/src/concurrent/qtconcurrentrun.cpp
+++ b/src/concurrent/qtconcurrentrun.cpp
@@ -194,6 +194,11 @@
\snippet code/src_concurrent_qtconcurrentrun.cpp 11
+ \note There's no need to call QPromise::start() and QPromise::finish() to
+ indicate the beginning and the end of computation (like you would normally do when
+ using QPromise). QtConcurrent::run() will always call them before starting and
+ after finishing the execution.
+
\section2 Suspending and canceling the execution
The QPromise API also enables suspending and canceling the computation, if requested:
@@ -215,6 +220,10 @@
call to \c promise.isCanceled() will return \c true and
\c aFunction will return immediately without any further result reporting.
+ \note There's no need to call QPromise::finish() to stop the computation
+ after the cancellation (like you would normally do when using QPromise).
+ QtConcurrent::run() will always call it after finishing the execution.
+
\section2 Progress reporting
It's also possible to report the progress of a task
diff --git a/src/corelib/.prev_configure.cmake b/src/corelib/.prev_configure.cmake
index 9b69329c9b..11d0596c13 100644
--- a/src/corelib/.prev_configure.cmake
+++ b/src/corelib/.prev_configure.cmake
@@ -892,10 +892,6 @@ qt_feature("forkfd_pidfd" PRIVATE
LABEL "CLONE_PIDFD support in forkfd"
CONDITION LINUX
)
-qt_feature("win32_system_libs"
- LABEL "Windows System Libraries"
- CONDITION WIN32 AND libs.advapi32 AND libs.gdi32 AND libs.kernel32 AND libs.netapi32 AND libs.ole32 AND libs.shell32 AND libs.uuid AND libs.user32 AND libs.winmm AND libs.ws2_32 OR FIXME
-)
qt_feature("cborstreamreader" PUBLIC
SECTION "Utilities"
LABEL "CBOR stream reading"
diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake
index 6dab11b5a5..51714e9290 100644
--- a/src/corelib/configure.cmake
+++ b/src/corelib/configure.cmake
@@ -898,10 +898,6 @@ qt_feature("forkfd_pidfd" PRIVATE
LABEL "CLONE_PIDFD support in forkfd"
CONDITION LINUX
)
-qt_feature("win32_system_libs"
- LABEL "Windows System Libraries"
- CONDITION WIN32 AND libs.advapi32 AND libs.gdi32 AND libs.kernel32 AND libs.netapi32 AND libs.ole32 AND libs.shell32 AND libs.uuid AND libs.user32 AND libs.winmm AND libs.ws2_32 OR FIXME
-)
qt_feature("cborstreamreader" PUBLIC
SECTION "Utilities"
LABEL "CBOR stream reading"
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 9c8615cf74..0cefa63ae5 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -185,66 +185,6 @@
"sources": [
"-lslog2"
]
- },
- "advapi32": {
- "label": "advapi32",
- "sources": [
- "-ladvapi32"
- ]
- },
- "gdi32": {
- "label": "gdi32",
- "sources": [
- "-lgdi32"
- ]
- },
- "kernel32": {
- "label": "kernel32",
- "sources": [
- "-lkernel32"
- ]
- },
- "netapi32": {
- "label": "netapi32",
- "sources": [
- "-lnetapi32"
- ]
- },
- "ole32": {
- "label": "ole32",
- "sources": [
- "-lole32"
- ]
- },
- "shell32": {
- "label": "shell32",
- "sources": [
- "-lshell32"
- ]
- },
- "uuid": {
- "label": "uuid",
- "sources": [
- "-luuid"
- ]
- },
- "user32": {
- "label": "user32",
- "sources": [
- "-luser32"
- ]
- },
- "winmm": {
- "label": "winmm",
- "sources": [
- "-lwinmm"
- ]
- },
- "ws2_32": {
- "label": "ws2_32",
- "sources": [
- "-lws2_32"
- ]
}
},
@@ -1019,10 +959,6 @@
"condition": "config.linux",
"output": [ "privateFeature" ]
},
- "win32_system_libs": {
- "label": "Windows System Libraries",
- "condition": "config.win32 && libs.advapi32 && libs.gdi32 && libs.kernel32 && libs.netapi32 && libs.ole32 && libs.shell32 && libs.uuid && libs.user32 && libs.winmm && libs.ws2_32"
- },
"cborstreamreader": {
"label": "CBOR stream reading",
"purpose": "Provides support for reading the CBOR binary format.
diff --git a/tests/auto/widgets/widgets/qmenu/BLACKLIST b/tests/auto/widgets/widgets/qmenu/BLACKLIST
index 837c785141..230512769c 100644
--- a/tests/auto/widgets/widgets/qmenu/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenu/BLACKLIST
@@ -28,3 +28,4 @@ android
android
[QTBUG_89082_actionTipsHide]
macos ci # Can't move cursor (QTBUG-76312)
+windows-10 ci