Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts: src/corelib/io/qprocess_win.cpp Change-Id: Ib61b74a69922ec1e9eecbba5f75352b4ec167fa9
This commit is contained in:
commit
739585b2f5
@ -1,47 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the config.tests 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 <D3D11.h>
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
D3D11_QUERY_DATA_TIMESTAMP_DISJOINT qdtd;
|
||||
(void)qdtd;
|
||||
return 0;
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
SOURCES = angle_d3d11_qdtd.cpp
|
||||
CONFIG -= qt
|
||||
CONFIG += console
|
@ -121,6 +121,9 @@ Build options:
|
||||
-gcov ................ Instrument with the GCov code coverage tool [no]
|
||||
-sanitize {address|thread|memory|undefined}
|
||||
Instrument with the specified compiler sanitizer.
|
||||
Note that some sanitizers cannot be combined;
|
||||
for example, -sanitize address cannot be combined with
|
||||
-sanitize thread.
|
||||
|
||||
-c++std <edition> .... Select C++ standard <edition> [c++1z/c++14/c++11]
|
||||
(Not supported with MSVC)
|
||||
|
6
dist/changes-5.9.4
vendored
6
dist/changes-5.9.4
vendored
@ -65,6 +65,12 @@ QtCore
|
||||
QtNetwork
|
||||
---------
|
||||
|
||||
- Bearer Management:
|
||||
* [QTBUG-40332] The nativewifi (Windows) bearer plugin was determined
|
||||
to be causing network interference in the form of system-wide higher
|
||||
latency and has been disabled. The CoreWlan (macOS) plugin has also
|
||||
been disabled.
|
||||
|
||||
- QUdpSocket:
|
||||
* [QTBUG-64718] Fixed a regression from Qt 5.9.3 caused by an apparent
|
||||
Win32 API quirk we triggered when using readDatagram(), resulting in
|
||||
|
@ -18,6 +18,7 @@ macro.QA = "\\e{Qt Assistant}"
|
||||
macro.QD = "\\e{Qt Designer}"
|
||||
macro.QL = "\\e{Qt Linguist}"
|
||||
macro.QQV = "\\e{Qt QML Viewer}"
|
||||
macro.QtVersion = "$QT_VERSION"
|
||||
macro.param = "\\e"
|
||||
macro.raisedaster.HTML = "<sup>*</sup>"
|
||||
macro.rarrow.HTML = "→"
|
||||
|
@ -15,7 +15,7 @@
|
||||
MAKEFILE_GENERATOR = MSVC.NET
|
||||
QMAKE_PLATFORM = win32
|
||||
QMAKE_COMPILER = msvc
|
||||
CONFIG += incremental flat debug_and_release debug_and_release_target precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe
|
||||
CONFIG += flat debug_and_release debug_and_release_target precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe
|
||||
DEFINES += UNICODE _UNICODE WIN32
|
||||
QMAKE_COMPILER_DEFINES += _WIN32
|
||||
contains(QMAKE_TARGET.arch, x86_64) {
|
||||
@ -23,6 +23,7 @@ contains(QMAKE_TARGET.arch, x86_64) {
|
||||
QMAKE_COMPILER_DEFINES += _WIN64
|
||||
}
|
||||
|
||||
QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Od
|
||||
QMAKE_CFLAGS_OPTIMIZE = -O2
|
||||
QMAKE_CFLAGS_OPTIMIZE_SIZE = -O1
|
||||
|
||||
@ -94,7 +95,8 @@ QMAKE_EXTENSION_SHLIB = dll
|
||||
QMAKE_PREFIX_STATICLIB =
|
||||
QMAKE_EXTENSION_STATICLIB = lib
|
||||
|
||||
QMAKE_LIBS_GUI = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
|
||||
QMAKE_LIBS =
|
||||
QMAKE_LIBS_GUI = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib uuid.lib user32.lib advapi32.lib
|
||||
QMAKE_LIBS_NETWORK = ws2_32.lib
|
||||
QMAKE_LIBS_OPENGL = glu32.lib opengl32.lib gdi32.lib user32.lib
|
||||
QMAKE_LIBS_OPENGL_ES2 = gdi32.lib user32.lib
|
||||
|
@ -86,6 +86,11 @@ greaterThan(QMAKE_MSC_VER, 1909) {
|
||||
# API is used in direct2d, but also in multimedia, positioning and sensors.
|
||||
# We can try again with a later version of Visual Studio.
|
||||
# QMAKE_CXXFLAGS_STRICTCXX = -permissive-
|
||||
# MSVC partially supports the following, but '__cplusplus' definition is set
|
||||
# as for C++98 until MSVC fully conforms with C++14, see
|
||||
# https://developercommunity.visualstudio.com/content/problem/139261/msvc-incorrectly-defines-cplusplus.html
|
||||
# QMAKE_CXXFLAGS_CXX14 = -std:c++14
|
||||
# QMAKE_CXXFLAGS_CXX1Z = -std:c++latest
|
||||
}
|
||||
|
||||
greaterThan(QMAKE_MSC_VER, 1910) {
|
||||
|
@ -44,19 +44,25 @@ contains(TEMPLATE, .*app): \
|
||||
for(ex, EXAMPLE_FILES): \
|
||||
sourcefiles += $$files($$absolute_path($$ex, $$_PRO_FILE_PWD_))
|
||||
for(res, RESOURCES) {
|
||||
rfile = $$cat($$absolute_path($$res, $$_PRO_FILE_PWD_), lines)
|
||||
for(rline, rfile) {
|
||||
!contains(res, \\.qrc$): \
|
||||
next()
|
||||
rfile = $$absolute_path($$res, $$_PRO_FILE_PWD_)
|
||||
rpath = $$dirname(rfile)
|
||||
rcont = $$cat($$rfile, lines)
|
||||
for (rline, rcont) {
|
||||
resrc = $$replace(rline, ^[ \\t]*<file[^>]*>([^<]+)</file>[ \\t]*$, \\1)
|
||||
!equals(resrc, $$rline): \
|
||||
sourcefiles += $$resrc
|
||||
sourcefiles += $$absolute_path($$resrc, $$rpath)
|
||||
}
|
||||
}
|
||||
for(res, RC_FILE) {
|
||||
rfile = $$cat($$absolute_path($$res, $$_PRO_FILE_PWD_), lines)
|
||||
for(rline, rfile) {
|
||||
rfile = $$absolute_path($$res, $$_PRO_FILE_PWD_)
|
||||
rpath = $$dirname(rfile)
|
||||
rcont = $$cat($$rfile, lines)
|
||||
for (rline, rcont) {
|
||||
resrc = $$replace(rline, "^\\d+\\s+ICON\\s+[^\"]*\"([^\"]+)\"\$", \\1)
|
||||
!equals(resrc, $$rline): \
|
||||
sourcefiles += $$resrc
|
||||
sourcefiles += $$absolute_path($$resrc, $$rpath)
|
||||
}
|
||||
}
|
||||
sourcefiles += \
|
||||
|
@ -44,7 +44,7 @@ unix {
|
||||
$${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET)
|
||||
} else {
|
||||
# Windows
|
||||
!isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = $${TEST_TARGET_DIR}$${QMAKE_DIR_SEP}
|
||||
!isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = $$shell_path($$TEST_TARGET_DIR)$${QMAKE_DIR_SEP}
|
||||
$${type}.commands += $${TEST_TARGET_DIR}$(TARGET)
|
||||
}
|
||||
|
||||
|
@ -16,8 +16,11 @@ include(../common/g++-base.conf)
|
||||
MAKEFILE_GENERATOR = MINGW
|
||||
QMAKE_PLATFORM = win32 mingw
|
||||
CONFIG += debug_and_release debug_and_release_target precompile_header
|
||||
DEFINES += UNICODE _UNICODE
|
||||
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
|
||||
DEFINES += UNICODE _UNICODE WIN32
|
||||
QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32
|
||||
# can't add 'DEFINES += WIN64' and 'QMAKE_COMPILER_DEFINES += _WIN64' defines for
|
||||
# x86_64 platform similar to 'msvc-desktop.conf' toolchain, because, unlike for MSVC,
|
||||
# 'QMAKE_TARGET.arch' is inherently unavailable.
|
||||
|
||||
QMAKE_CC = $${CROSS_COMPILE}gcc
|
||||
QMAKE_LEX = flex
|
||||
@ -32,6 +35,8 @@ QMAKE_CFLAGS_AESNI = -maes
|
||||
QMAKE_CFLAGS_SHANI = -msha
|
||||
|
||||
QMAKE_CXX = $${CROSS_COMPILE}g++
|
||||
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
|
||||
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
||||
QMAKE_CXXFLAGS_RTTI_ON = -frtti
|
||||
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
|
||||
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
|
||||
|
@ -4,7 +4,7 @@
|
||||
# Written for Intel C++ Compiler on Windows / icl 16.0 or higher
|
||||
#
|
||||
|
||||
# Use the Microsoft (R) C/C++ Optimizing Compiler configuration,
|
||||
# Use the Microsoft C/C++ Optimizing Compiler configuration,
|
||||
# since ICC on Windows pretends to be MSVC
|
||||
|
||||
include(../common/msvc-desktop.conf)
|
||||
@ -13,11 +13,14 @@ include(../common/msvc-desktop.conf)
|
||||
|
||||
QMAKE_COMPILER += intel_icl
|
||||
|
||||
QMAKE_CFLAGS_OPTIMIZE_FULL = -O3
|
||||
|
||||
QMAKE_CC = icl
|
||||
QMAKE_CFLAGS = -nologo -Zm200 /Qprec /Qwd1744,1738,809,3373
|
||||
QMAKE_CFLAGS_WARN_ON = -W3 /Qwd673
|
||||
QMAKE_CFLAGS_WARN_OFF = -W0 /Qwd673
|
||||
QMAKE_CFLAGS_DEBUG = -Od -Zi -MDd
|
||||
QMAKE_CFLAGS = -nologo -Zc:wchar_t -Qprec -Zm200 -Qdiag-disable:1744,1738,809,3373
|
||||
QMAKE_CFLAGS_WARN_ON = -W3 -Qdiag-disable:673
|
||||
QMAKE_CFLAGS_WARN_OFF = -W0 -Qdiag-disable:673
|
||||
QMAKE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_OPTIMIZE_DEBUG -Zi -MDd
|
||||
QMAKE_CFLAGS_UTF8_SOURCE = -Qoption,cpp,--unicode_source_kind,UTF-8
|
||||
QMAKE_CFLAGS_LTCG = -Qipo
|
||||
QMAKE_CFLAGS_DISABLE_LTCG = -Qno-ipo
|
||||
|
||||
@ -46,7 +49,7 @@ QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
||||
QMAKE_CXXFLAGS_CXX11 = -Qstd=c++11
|
||||
# ICC supports the following but Qt won't compile
|
||||
#QMAKE_CXXFLAGS_CXX14 = -Qstd=c++14
|
||||
#QMAKE_CXXFLAGS_CXX1Z = -Qstd=c++1z
|
||||
#QMAKE_CXXFLAGS_CXX1Z = -Qstd=c++17
|
||||
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
|
||||
QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG
|
||||
|
||||
|
@ -66,21 +66,22 @@ IoUtils::FileType IoUtils::fileType(const QString &fileName)
|
||||
|
||||
bool IoUtils::isRelativePath(const QString &path)
|
||||
{
|
||||
if (path.startsWith(QLatin1Char('/')))
|
||||
return false;
|
||||
#ifdef QMAKE_BUILTIN_PRFS
|
||||
if (path.startsWith(QLatin1String(":/")))
|
||||
return false;
|
||||
#endif
|
||||
#ifdef Q_OS_WIN
|
||||
if (path.startsWith(QLatin1Char('\\')))
|
||||
return false;
|
||||
// Unlike QFileInfo, this won't accept a relative path with a drive letter.
|
||||
// Such paths result in a royal mess anyway ...
|
||||
// Unlike QFileInfo, this considers only paths with both a drive prefix and
|
||||
// a subsequent (back-)slash absolute:
|
||||
if (path.length() >= 3 && path.at(1) == QLatin1Char(':') && path.at(0).isLetter()
|
||||
&& (path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\')))
|
||||
&& (path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\'))) {
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
// (... unless, of course, they're UNC, which qmake fails on anyway)
|
||||
#else
|
||||
if (path.startsWith(QLatin1Char('/')))
|
||||
return false;
|
||||
#endif // Q_OS_WIN
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -100,6 +101,12 @@ QString IoUtils::resolvePath(const QString &baseDir, const QString &fileName)
|
||||
return QString();
|
||||
if (isAbsolutePath(fileName))
|
||||
return QDir::cleanPath(fileName);
|
||||
#ifdef Q_OS_WIN // Add drive to otherwise-absolute path:
|
||||
if (fileName.at(0).unicode() == '/' || fileName.at(0).unicode() == '\\') {
|
||||
Q_ASSERT(isAbsolutePath(baseDir));
|
||||
return QDir::cleanPath(baseDir.left(2) + fileName);
|
||||
}
|
||||
#endif // Q_OS_WIN
|
||||
return QDir::cleanPath(baseDir + QLatin1Char('/') + fileName);
|
||||
}
|
||||
|
||||
|
@ -1177,9 +1177,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
|
||||
if (args.count() > 2) {
|
||||
evalError(fL1S("absolute_path(path[, base]) requires one or two arguments."));
|
||||
} else {
|
||||
QString rstr = QDir::cleanPath(
|
||||
QDir(args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory())
|
||||
.absoluteFilePath(args.at(0).toQString(m_tmp1)));
|
||||
QString arg = args.at(0).toQString(m_tmp1);
|
||||
QString baseDir = args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory();
|
||||
QString rstr = arg.isEmpty() ? baseDir : IoUtils::resolvePath(baseDir, arg);
|
||||
ret << (rstr.isSharedWith(m_tmp1)
|
||||
? args.at(0)
|
||||
: args.count() > 1 && rstr.isSharedWith(m_tmp2)
|
||||
@ -1191,9 +1191,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(
|
||||
if (args.count() > 2) {
|
||||
evalError(fL1S("relative_path(path[, base]) requires one or two arguments."));
|
||||
} else {
|
||||
QDir baseDir(args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory());
|
||||
QString rstr = baseDir.relativeFilePath(baseDir.absoluteFilePath(
|
||||
args.at(0).toQString(m_tmp1)));
|
||||
QString arg = args.at(0).toQString(m_tmp1);
|
||||
QString baseDir = args.count() > 1 ? args.at(1).toQString(m_tmp2) : currentDirectory();
|
||||
QString absArg = arg.isEmpty() ? baseDir : IoUtils::resolvePath(baseDir, arg);
|
||||
QString rstr = QDir(baseDir).relativeFilePath(absArg);
|
||||
ret << (rstr.isSharedWith(m_tmp1) ? args.at(0) : ProString(rstr).setSource(args.at(0)));
|
||||
}
|
||||
break;
|
||||
|
@ -68,6 +68,7 @@
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
using namespace QMakeInternal; // for IoUtils
|
||||
|
||||
#define fL1S(s) QString::fromLatin1(s)
|
||||
|
||||
@ -96,9 +97,9 @@ QString QMakeGlobals::cleanSpec(QMakeCmdLineParserState &state, const QString &s
|
||||
{
|
||||
QString ret = QDir::cleanPath(spec);
|
||||
if (ret.contains(QLatin1Char('/'))) {
|
||||
QString absRet = QDir(state.pwd).absoluteFilePath(ret);
|
||||
QString absRet = IoUtils::resolvePath(state.pwd, ret);
|
||||
if (QFile::exists(absRet))
|
||||
ret = QDir::cleanPath(absRet);
|
||||
ret = absRet;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -126,10 +127,10 @@ QMakeGlobals::ArgumentReturn QMakeGlobals::addCommandLineArguments(
|
||||
user_template_prefix = arg;
|
||||
break;
|
||||
case ArgCache:
|
||||
cachefile = args[*pos] = QDir::cleanPath(QDir(state.pwd).absoluteFilePath(arg));
|
||||
cachefile = args[*pos] = IoUtils::resolvePath(state.pwd, arg);
|
||||
break;
|
||||
case ArgQtConf:
|
||||
qtconf = args[*pos] = QDir::cleanPath(QDir(state.pwd).absoluteFilePath(arg));
|
||||
qtconf = args[*pos] = IoUtils::resolvePath(state.pwd, arg);
|
||||
break;
|
||||
default:
|
||||
if (arg.startsWith(QLatin1Char('-'))) {
|
||||
@ -259,11 +260,11 @@ QStringList QMakeGlobals::splitPathList(const QString &val) const
|
||||
{
|
||||
QStringList ret;
|
||||
if (!val.isEmpty()) {
|
||||
QDir bdir;
|
||||
QString cwd(QDir::currentPath());
|
||||
const QStringList vals = val.split(dirlist_sep);
|
||||
ret.reserve(vals.length());
|
||||
for (const QString &it : vals)
|
||||
ret << QDir::cleanPath(bdir.absoluteFilePath(it));
|
||||
ret << IoUtils::resolvePath(cwd, it);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -318,7 +319,7 @@ bool QMakeGlobals::initProperties()
|
||||
return false;
|
||||
data = proc.readAll();
|
||||
#else
|
||||
if (FILE *proc = QT_POPEN(QString(QMakeInternal::IoUtils::shellQuote(qmake_abslocation)
|
||||
if (FILE *proc = QT_POPEN(QString(IoUtils::shellQuote(qmake_abslocation)
|
||||
+ QLatin1String(" -query")).toLocal8Bit(), QT_POPEN_READ)) {
|
||||
char buff[1024];
|
||||
while (!feof(proc))
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "option.h"
|
||||
#include "cachekeys.h"
|
||||
#include <ioutils.h>
|
||||
#include <qdir.h>
|
||||
#include <qregexp.h>
|
||||
#include <qhash.h>
|
||||
@ -38,6 +39,8 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
using namespace QMakeInternal;
|
||||
|
||||
EvalHandler Option::evalHandler;
|
||||
QMakeGlobals *Option::globals;
|
||||
ProFileCache *Option::proFileCache;
|
||||
@ -325,7 +328,7 @@ Option::init(int argc, char **argv)
|
||||
#endif
|
||||
if(Option::qmake_mode == Option::QMAKE_GENERATE_NOTHING)
|
||||
Option::qmake_mode = default_mode(argv0);
|
||||
if(!argv0.isEmpty() && !QFileInfo(argv0).isRelative()) {
|
||||
if (!argv0.isEmpty() && IoUtils::isAbsolutePath(argv0)) {
|
||||
globals->qmake_abslocation = argv0;
|
||||
} else if (argv0.contains(QLatin1Char('/'))
|
||||
#ifdef Q_OS_WIN
|
||||
|
@ -55,7 +55,7 @@ class HelloWorldTask : public QRunnable
|
||||
{
|
||||
qDebug() << "Hello world from thread" << QThread::currentThread();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
HelloWorldTask *hello = new HelloWorldTask();
|
||||
// QThreadPool takes ownership and deletes 'hello' automatically
|
||||
|
@ -104,17 +104,18 @@
|
||||
\section1 Licenses and Attributions
|
||||
|
||||
Qt Core is available under commercial licenses from \l{The Qt Company}.
|
||||
In addition, it is available under the
|
||||
In addition, it is available under free software licenses. Since Qt 5.4,
|
||||
these free software licenses are
|
||||
\l{GNU Lesser General Public License, version 3}, or
|
||||
the \l{GNU General Public License, version 2}.
|
||||
See \l{Qt Licensing} for further details.
|
||||
|
||||
Executables on Windows potentially link
|
||||
against \l{The qtmain Library}. This library is available
|
||||
under commercial licenses, and in addition under the
|
||||
under commercial licenses and also under the
|
||||
\l{BSD 3-clause "New" or "Revised" License}.
|
||||
|
||||
Furthermore Qt Core potentially contains third party
|
||||
Furthermore, Qt Core in Qt \QtVersion may contain third party
|
||||
modules under following permissive licenses:
|
||||
|
||||
\generatelist{groupsbymodule attributions-qtcore}
|
||||
|
@ -101,7 +101,8 @@ static void qt_create_pipe(Q_PIPE *pipe, bool isInputPipe)
|
||||
unsigned int attempts = 1000;
|
||||
forever {
|
||||
_snwprintf(pipeName, sizeof(pipeName) / sizeof(pipeName[0]),
|
||||
L"\\\\.\\pipe\\qt-%X", QRandomGenerator::global()->generate());
|
||||
L"\\\\.\\pipe\\qt-%lX-%X", long(QCoreApplication::applicationPid()),
|
||||
QRandomGenerator::global()->generate());
|
||||
|
||||
DWORD dwOpenMode = FILE_FLAG_OVERLAPPED;
|
||||
DWORD dwOutputBufferSize = 0;
|
||||
|
@ -2366,6 +2366,11 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile,
|
||||
limitations is to store the settings using the IniFormat
|
||||
instead of the NativeFormat.
|
||||
|
||||
\li On Windows, when the Windows system registry is used, QSettings
|
||||
does not preserve the original type of the value. Therefore,
|
||||
the type of the value might change when a new value is set. For
|
||||
example, a value with type \c REG_EXPAND_SZ will change to \c REG_SZ.
|
||||
|
||||
\li On \macos and iOS, allKeys() will return some extra keys for global
|
||||
settings that apply to all applications. These keys can be
|
||||
read using value() but cannot be changed, only shadowed.
|
||||
|
@ -166,25 +166,20 @@
|
||||
"label": "Fontconfig",
|
||||
"test": {
|
||||
"head": [
|
||||
"#include <ft2build.h>",
|
||||
"#include FT_FREETYPE_H",
|
||||
"#include <fontconfig/fontconfig.h>",
|
||||
"#ifndef FC_RGBA_UNKNOWN",
|
||||
"# error This version of fontconfig is tool old, it is missing the FC_RGBA_UNKNOWN define",
|
||||
"#endif",
|
||||
"#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20110)",
|
||||
"# error This version of freetype is too old.",
|
||||
"#endif"
|
||||
],
|
||||
"main": [
|
||||
"FT_Face face = 0;",
|
||||
"FcPattern *pattern = 0;"
|
||||
]
|
||||
},
|
||||
"sources": [
|
||||
{ "type": "pkgConfig", "args": "fontconfig freetype2" },
|
||||
{ "type": "freetype", "libs": "-lfontconfig -lfreetype" }
|
||||
]
|
||||
{ "type": "pkgConfig", "args": "fontconfig" },
|
||||
{ "type": "freetype", "libs": "-lfontconfig" }
|
||||
],
|
||||
"use": "freetype"
|
||||
},
|
||||
"gbm": {
|
||||
"label": "GBM",
|
||||
@ -612,7 +607,13 @@
|
||||
"angle_d3d11_qdtd": {
|
||||
"label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
|
||||
"type": "compile",
|
||||
"test": "win/angle_d3d11_qdtd"
|
||||
"test": {
|
||||
"include": "d3d11.h",
|
||||
"main": [
|
||||
"D3D11_QUERY_DATA_TIMESTAMP_DISJOINT qdtd;",
|
||||
"(void) qdtd;"
|
||||
]
|
||||
}
|
||||
},
|
||||
"directwrite2": {
|
||||
"label": "DirectWrite 2",
|
||||
|
@ -215,12 +215,13 @@
|
||||
\section1 Licenses and Attributions
|
||||
|
||||
Qt GUI is available under commercial licenses from \l{The Qt Company}.
|
||||
In addition, it is available under the
|
||||
In addition, it is available under free software licenses. Since Qt 5.4,
|
||||
these free software licenses are
|
||||
\l{GNU Lesser General Public License, version 3}, or
|
||||
the \l{GNU General Public License, version 2}.
|
||||
See \l{Qt Licensing} for further details.
|
||||
|
||||
Furthermore Qt GUI potentially contains third party
|
||||
Furthermore, Qt GUI in Qt \QtVersion may contain third-party
|
||||
modules under following permissive licenses:
|
||||
|
||||
\generatelist{groupsbymodule attributions-qtgui}
|
||||
|
@ -153,7 +153,7 @@ bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const
|
||||
case ColorDialog:
|
||||
return true;
|
||||
case FileDialog:
|
||||
return true;
|
||||
return useNativeFileDialog();
|
||||
case FontDialog:
|
||||
return true;
|
||||
default:
|
||||
@ -167,6 +167,8 @@ QPlatformDialogHelper *QGtk3Theme::createPlatformDialogHelper(DialogType type) c
|
||||
case ColorDialog:
|
||||
return new QGtk3ColorDialogHelper;
|
||||
case FileDialog:
|
||||
if (!useNativeFileDialog())
|
||||
return nullptr;
|
||||
return new QGtk3FileDialogHelper;
|
||||
case FontDialog:
|
||||
return new QGtk3FontDialogHelper;
|
||||
@ -185,4 +187,17 @@ QPlatformMenuItem* QGtk3Theme::createPlatformMenuItem() const
|
||||
return new QGtk3MenuItem;
|
||||
}
|
||||
|
||||
bool QGtk3Theme::useNativeFileDialog()
|
||||
{
|
||||
/* Require GTK3 >= 3.15.5 to avoid running into this bug:
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=725164
|
||||
*
|
||||
* While this bug only occurs when using widget-based file dialogs
|
||||
* (native GTK3 dialogs are fine) we have to disable platform file
|
||||
* dialogs entirely since we can't avoid creation of a platform
|
||||
* dialog helper.
|
||||
*/
|
||||
return gtk_check_version(3, 15, 5) == 0;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -59,6 +59,8 @@ public:
|
||||
QPlatformMenuItem* createPlatformMenuItem() const Q_DECL_OVERRIDE;
|
||||
|
||||
static const char *name;
|
||||
private:
|
||||
static bool useNativeFileDialog();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -3206,13 +3206,12 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
|
||||
}
|
||||
break;
|
||||
case PE_IndicatorMenuCheckMark: {
|
||||
if (!(opt->state & State_On))
|
||||
break;
|
||||
QColor pc;
|
||||
if (opt->state & State_Selected)
|
||||
if (opt->state & State_On)
|
||||
pc = opt->palette.highlightedText().color();
|
||||
else
|
||||
pc = opt->palette.text().color();
|
||||
|
||||
QCFType<CGColorRef> checkmarkColor = CGColorCreateGenericRGB(static_cast<CGFloat>(pc.redF()),
|
||||
static_cast<CGFloat>(pc.greenF()),
|
||||
static_cast<CGFloat>(pc.blueF()),
|
||||
@ -4208,8 +4207,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
||||
const int xp = mi->rect.x() + macItemFrame;
|
||||
checkmarkOpt.rect = QRect(xp, mi->rect.y() - checkmarkOpt.fontMetrics.descent(), mw, mh);
|
||||
|
||||
checkmarkOpt.state |= State_On; // Always on. Never rendered when off.
|
||||
checkmarkOpt.state.setFlag(State_Selected, active);
|
||||
checkmarkOpt.state.setFlag(State_On, active);
|
||||
checkmarkOpt.state.setFlag(State_Enabled, enabled);
|
||||
if (widgetSize == QStyleHelper::SizeMini)
|
||||
checkmarkOpt.state |= State_Mini;
|
||||
|
@ -54,12 +54,13 @@
|
||||
\section1 Licenses and Attributions
|
||||
|
||||
Qt SQL is available under commercial licenses from \l{The Qt Company}.
|
||||
In addition, it is available under the
|
||||
In addition, it is available under free software licenses. Since Qt 5.4,
|
||||
these free software licenses are
|
||||
\l{GNU Lesser General Public License, version 3}, or
|
||||
the \l{GNU General Public License, version 2}.
|
||||
See \l{Qt Licensing} for further details.
|
||||
|
||||
Furthermore Qt SQL potentially contains third party
|
||||
Furthermore, Qt SQL in Qt \QtVersion may contain third party
|
||||
modules under following permissive licenses:
|
||||
|
||||
\generatelist{groupsbymodule attributions-qtsql}
|
||||
|
@ -53,12 +53,13 @@
|
||||
\section1 Licenses and Attributions
|
||||
|
||||
Qt Test is available under commercial licenses from \l{The Qt Company}.
|
||||
In addition, it is available under the
|
||||
In addition, it is available under free software licenses. Since Qt 5.4,
|
||||
these free software licenses are
|
||||
\l{GNU Lesser General Public License, version 3}, or
|
||||
the \l{GNU General Public License, version 2}.
|
||||
See \l{Qt Licensing} for further details.
|
||||
|
||||
Furthermore Qt Test potentially contains third party
|
||||
Furthermore, Qt Test in Qt \QtVersion may contain third party
|
||||
modules under following permissive licenses:
|
||||
|
||||
\generatelist{groupsbymodule attributions-qttestlib}
|
||||
|
@ -1482,7 +1482,8 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
|
||||
if (q->windowType() != Qt::Desktop || q->testAttribute(Qt::WA_NativeWindow)) {
|
||||
win->create();
|
||||
// Enable nonclient-area events for QDockWidget and other NonClientArea-mouse event processing.
|
||||
win->handle()->setFrameStrutEventsEnabled(true);
|
||||
if (QPlatformWindow *platformWindow = win->handle())
|
||||
platformWindow->setFrameStrutEventsEnabled(true);
|
||||
}
|
||||
|
||||
data.window_flags = win->flags();
|
||||
|
@ -34,6 +34,12 @@
|
||||
#include <qmakeglobals.h>
|
||||
#include <qmakeevaluator.h>
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
# define EVAL_DRIVE "R:"
|
||||
#else
|
||||
# define EVAL_DRIVE
|
||||
#endif
|
||||
|
||||
void tst_qmakelib::addAssignments()
|
||||
{
|
||||
QTest::newRow("assignment")
|
||||
@ -1599,20 +1605,28 @@ void tst_qmakelib::addReplaceFunctions(const QString &qindir)
|
||||
<< true;
|
||||
|
||||
QTest::newRow("$$absolute_path(): file & path")
|
||||
<< "VAR = $$absolute_path(dir/file.ext, /root/sub)"
|
||||
<< "VAR = /root/sub/dir/file.ext"
|
||||
<< "VAR = $$absolute_path(dir/file.ext, " EVAL_DRIVE "/root/sub)"
|
||||
<< "VAR = " EVAL_DRIVE "/root/sub/dir/file.ext"
|
||||
<< ""
|
||||
<< true;
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
QTest::newRow("$$absolute_path(): driveless file & absolute path")
|
||||
<< "VAR = $$absolute_path(/root/sub/dir/file.ext, " EVAL_DRIVE "/other)"
|
||||
<< "VAR = " EVAL_DRIVE "/root/sub/dir/file.ext"
|
||||
<< ""
|
||||
<< true;
|
||||
#endif
|
||||
|
||||
QTest::newRow("$$absolute_path(): absolute file & path")
|
||||
<< "VAR = $$absolute_path(/root/sub/dir/file.ext, /other)"
|
||||
<< "VAR = /root/sub/dir/file.ext"
|
||||
<< "VAR = $$absolute_path(" EVAL_DRIVE "/root/sub/dir/file.ext, " EVAL_DRIVE "/other)"
|
||||
<< "VAR = " EVAL_DRIVE "/root/sub/dir/file.ext"
|
||||
<< ""
|
||||
<< true;
|
||||
|
||||
QTest::newRow("$$absolute_path(): empty file & path")
|
||||
<< "VAR = $$absolute_path('', /root/sub)"
|
||||
<< "VAR = /root/sub"
|
||||
<< "VAR = $$absolute_path('', " EVAL_DRIVE "/root/sub)"
|
||||
<< "VAR = " EVAL_DRIVE "/root/sub"
|
||||
<< ""
|
||||
<< true;
|
||||
|
||||
@ -1634,14 +1648,22 @@ void tst_qmakelib::addReplaceFunctions(const QString &qindir)
|
||||
<< ""
|
||||
<< true;
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
QTest::newRow("$$relative_path(): driveless file & absolute path")
|
||||
<< "VAR = $$relative_path(/root/sub/dir/file.ext, " EVAL_DRIVE "/root/sub)"
|
||||
<< "VAR = dir/file.ext"
|
||||
<< ""
|
||||
<< true;
|
||||
#endif
|
||||
|
||||
QTest::newRow("$$relative_path(): absolute file & path")
|
||||
<< "VAR = $$relative_path(/root/sub/dir/file.ext, /root/sub)"
|
||||
<< "VAR = $$relative_path(" EVAL_DRIVE "/root/sub/dir/file.ext, " EVAL_DRIVE "/root/sub)"
|
||||
<< "VAR = dir/file.ext"
|
||||
<< ""
|
||||
<< true;
|
||||
|
||||
QTest::newRow("$$relative_path(): empty file & path")
|
||||
<< "VAR = $$relative_path('', /root/sub)"
|
||||
<< "VAR = $$relative_path('', " EVAL_DRIVE "/root/sub)"
|
||||
<< "VAR = ."
|
||||
<< ""
|
||||
<< true;
|
||||
@ -2593,20 +2615,20 @@ void tst_qmakelib::addTestFunctions(const QString &qindir)
|
||||
<< true;
|
||||
|
||||
QTest::newRow("touch(): missing target")
|
||||
<< "touch(/does/not/exist, files/other.txt): OK = 1"
|
||||
<< "touch(" EVAL_DRIVE "/does/not/exist, files/other.txt): OK = 1"
|
||||
<< "OK = UNDEF"
|
||||
#ifdef Q_OS_WIN
|
||||
<< "##:1: Cannot open /does/not/exist: The system cannot find the path specified."
|
||||
<< "##:1: Cannot open " EVAL_DRIVE "/does/not/exist: The system cannot find the path specified."
|
||||
#else
|
||||
<< "##:1: Cannot touch /does/not/exist: No such file or directory."
|
||||
#endif
|
||||
<< true;
|
||||
|
||||
QTest::newRow("touch(): missing reference")
|
||||
<< "touch(" + wpath + ", /does/not/exist): OK = 1"
|
||||
<< "touch(" + wpath + ", " EVAL_DRIVE "/does/not/exist): OK = 1"
|
||||
<< "OK = UNDEF"
|
||||
#ifdef Q_OS_WIN
|
||||
<< "##:1: Cannot open reference file /does/not/exist: The system cannot find the path specified."
|
||||
<< "##:1: Cannot open reference file " EVAL_DRIVE "/does/not/exist: The system cannot find the path specified."
|
||||
#else
|
||||
<< "##:1: Cannot stat() reference file /does/not/exist: No such file or directory."
|
||||
#endif
|
||||
|
@ -42,6 +42,7 @@ void tst_qmakelib::initTestCase()
|
||||
#endif
|
||||
m_prop.insert(ProKey("P1"), ProString("prop val"));
|
||||
m_prop.insert(ProKey("QT_HOST_DATA/get"), ProString(m_indir));
|
||||
m_prop.insert(ProKey("QT_HOST_DATA/src"), ProString(m_indir));
|
||||
|
||||
QVERIFY(!m_indir.isEmpty());
|
||||
QVERIFY(QDir(m_outdir).removeRecursively());
|
||||
@ -224,21 +225,99 @@ void tst_qmakelib::pathUtils()
|
||||
QVERIFY(IoUtils::isRelativePath(fn0));
|
||||
|
||||
QString fn1 = "/a/unix/file/path";
|
||||
QVERIFY(IoUtils::isAbsolutePath(fn1));
|
||||
QCOMPARE(IoUtils::pathName(fn1).toString(), QStringLiteral("/a/unix/file/"));
|
||||
QCOMPARE(IoUtils::fileName(fn1).toString(), QStringLiteral("path"));
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
QString fn0a = "c:file/path";
|
||||
QVERIFY(IoUtils::isRelativePath(fn0a));
|
||||
void tst_qmakelib::ioUtilRelativity_data()
|
||||
{
|
||||
QTest::addColumn<QString>("path");
|
||||
QTest::addColumn<bool>("relative");
|
||||
|
||||
QString fn1a = "c:\\file\\path";
|
||||
QVERIFY(IoUtils::isAbsolutePath(fn1a));
|
||||
static const struct {
|
||||
const char *name;
|
||||
const char *path;
|
||||
bool relative;
|
||||
} rows[] = {
|
||||
{ "resource", ":/resource",
|
||||
#ifdef QMAKE_BUILTIN_PRFS
|
||||
false
|
||||
#else
|
||||
true
|
||||
#endif
|
||||
},
|
||||
#ifdef Q_OS_WIN // all the complications:
|
||||
// (except UNC: unsupported)
|
||||
{ "drive-abs", "c:/path/to/file", false },
|
||||
{ "drive-abs-bs", "c:\\path\\to\\file", false },
|
||||
{ "drive-path", "c:path/to/file.txt", true },
|
||||
{ "drive-path-bs", "c:path\\to\\file.txt", true },
|
||||
{ "rooted", "/Users/qt/bin/true", true },
|
||||
{ "rooted-bs", "\\Users\\qt\\bin\\true", true },
|
||||
{ "drive-rel", "c:file.txt", true },
|
||||
{ "subdir-bs", "path\\to\\file", true },
|
||||
#else
|
||||
{ "rooted", "/usr/bin/false", false },
|
||||
#endif // Q_OS_WIN
|
||||
{ "subdir", "path/to/file", true },
|
||||
{ "simple", "file.name", true },
|
||||
{ "empty", "", true }
|
||||
};
|
||||
|
||||
QString fnbase = "/another/dir";
|
||||
QCOMPARE(IoUtils::resolvePath(fnbase, fn0), QStringLiteral("/another/dir/file/path"));
|
||||
QCOMPARE(IoUtils::resolvePath(fnbase, fn1), QStringLiteral("/a/unix/file/path"));
|
||||
for (unsigned int i = sizeof(rows) / sizeof(rows[0]); i-- > 0; )
|
||||
QTest::newRow(rows[i].name) << QString::fromLatin1(rows[i].path)
|
||||
<< rows[i].relative;
|
||||
}
|
||||
|
||||
void tst_qmakelib::ioUtilRelativity()
|
||||
{
|
||||
QFETCH(QString, path);
|
||||
QFETCH(bool, relative);
|
||||
|
||||
QCOMPARE(IoUtils::isRelativePath(path), relative);
|
||||
}
|
||||
|
||||
void tst_qmakelib::ioUtilResolve_data()
|
||||
{
|
||||
QTest::addColumn<QString>("base");
|
||||
QTest::addColumn<QString>("path");
|
||||
QTest::addColumn<QString>("expect");
|
||||
|
||||
static const struct {
|
||||
const char *name;
|
||||
const char *base;
|
||||
const char *path;
|
||||
const char *expect;
|
||||
} data[] = {
|
||||
#ifdef Q_OS_WIN // all the complications:
|
||||
{ "drive-drive", "a:/ms/dir", "z:/root/file", "z:/root/file" },
|
||||
{ "drive-drive-bs", "a:\\ms\\dir", "z:\\root\\file", "z:/root/file" },
|
||||
{ "drive-root", "a:/ms/dir", "/root/file", "a:/root/file" },
|
||||
{ "drive-root-bs", "a:\\ms\\dir", "\\root\\file", "a:/root/file" },
|
||||
{ "drive-sub", "a:/ms/dir", "sub/file", "a:/ms/dir/sub/file" },
|
||||
{ "drive-sub-bs", "a:\\ms\\dir", "sub\\file", "a:/ms/dir/sub/file" },
|
||||
{ "drive-rel", "a:/ms/dir", "file.txt", "a:/ms/dir/file.txt" },
|
||||
{ "drive-rel-bs", "a:\\ms\\dir", "file.txt", "a:/ms/dir/file.txt" },
|
||||
#else
|
||||
{ "abs-abs", "/a/unix/dir", "/root/file", "/root/file" },
|
||||
{ "abs-sub", "/a/unix/dir", "sub/file", "/a/unix/dir/sub/file" },
|
||||
{ "abs-rel", "/a/unix/dir", "file.txt", "/a/unix/dir/file.txt" },
|
||||
#endif // Q_OS_WIN
|
||||
};
|
||||
|
||||
for (unsigned i = sizeof(data) / sizeof(data[0]); i-- > 0; )
|
||||
QTest::newRow(data[i].name) << QString::fromLatin1(data[i].base)
|
||||
<< QString::fromLatin1(data[i].path)
|
||||
<< QString::fromLatin1(data[i].expect);
|
||||
}
|
||||
|
||||
void tst_qmakelib::ioUtilResolve()
|
||||
{
|
||||
QFETCH(QString, base);
|
||||
QFETCH(QString, path);
|
||||
QFETCH(QString, expect);
|
||||
|
||||
QCOMPARE(IoUtils::resolvePath(base, path), expect);
|
||||
}
|
||||
|
||||
void QMakeTestHandler::print(const QString &fileName, int lineNo, int type, const QString &msg)
|
||||
|
@ -48,7 +48,12 @@ private slots:
|
||||
void quoteArgUnix();
|
||||
void quoteArgWin_data();
|
||||
void quoteArgWin();
|
||||
|
||||
void pathUtils();
|
||||
void ioUtilRelativity_data();
|
||||
void ioUtilRelativity();
|
||||
void ioUtilResolve_data();
|
||||
void ioUtilResolve();
|
||||
|
||||
void proString();
|
||||
void proStringList();
|
||||
|
Loading…
x
Reference in New Issue
Block a user