Merge "Merge remote-tracking branch 'origin/dev' into wip/qt6"

This commit is contained in:
Simon Hausmann 2019-06-26 11:32:55 +02:00
commit 2e338f6ede
795 changed files with 76564 additions and 10461 deletions

2
.gitignore vendored
View File

@ -56,8 +56,6 @@ qt*-config.pri
/src/angle/src/QtANGLE/libANGLE/
/src/angle/src/libGLESv2/libANGLE/
/src/corelib/global/qfloat16tables.cpp
/examples/*/*/*
!/examples/*/*/*[.]*
!/examples/*/*/README

View File

@ -82,7 +82,7 @@
"force-pkg-config": { "type": "void", "name": "pkg-config" },
"framework": "boolean",
"gc-binaries": { "type": "boolean", "name": "gc_binaries" },
"gdb-index": { "type": "boolean", "name": "gdb_index" },
"gdb-index": { "type": "boolean", "name": "enable_gdb_index" },
"gcc-sysroot": "boolean",
"gcov": "boolean",
"gnumake": { "type": "boolean", "name": "GNUmake" },
@ -705,6 +705,7 @@
},
"optimize_debug": {
"label": "Optimize debug build",
"autoDetect": "!features.developer-build",
"condition": "!config.msvc && !config.clang && (features.debug || features.debug_and_release) && tests.optimize_debug",
"output": [ "privateConfig" ]
},

83
dist/changes-5.12.4 vendored Normal file
View File

@ -0,0 +1,83 @@
Qt 5.12.4 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.12.0 through 5.12.3.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
https://doc.qt.io/qt-5/index.html
The Qt version 5.12 series is binary compatible with the 5.11.x series.
Applications compiled for 5.11 will continue to run with 5.12.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Platform Specific Changes *
****************************************************************************
- X11 / XCB:
* [QTBUG-45375] QTabletEvent coordinates now come from AbsX/AbsY
valuators in the X11 event, in more precise 32.32 fixed-point format,
scaled to fit the virtual desktop. It's possible to revert to using
the legacy 16.16-format event_x/event_y coordinates as in previous
releases by setting the QT_XCB_TABLET_LEGACY_COORDINATES environment
variable.
****************************************************************************
* QtCore *
****************************************************************************
- Global:
* [QTBUG-72073] Added the QT_NO_FLOAT16_OPERATORS macro in order to work
around a Microsoft <= VS2017 compiler bug that is exposed when using
std::bitset along with any Qt header that includes <qfloat16.h>.
- QDeadlineTimer:
* [QTBUG-69750] Fixed integer overflows leading to immediate timeouts.
- QFile:
* Made QFile::copy() issue a filesystem-synchronization system call,
which would make it less likely to result in incomplete or corrupt
files if the system reboots or uncleanly shuts down soon after the
function returns. New code is advised to use QSaveFile instead, which
also allows to display a progress report while copying.
- QFileInfo:
* [QTBUG-63970][QTBUG-30401][QTBUG-20791] Fixed resolving of symbolic
links to UNC shares on NTFS file systems.
- QMetaObject:
* Non-copyable lambdas can now be used with invokeMethod(). For
consistency reasons, the functor object is now always moved.
****************************************************************************
* QtGui *
****************************************************************************
- [QTBUG-73231] QWindow::mapToGlobal()/mapFromGlobal() now handle windows
spanning screens correctly.
- [QTBUG-75522] QBezier: Fix possible endless loop when stroking curves
****************************************************************************
* QtWidgets *
****************************************************************************
- QMenu:
* Shortcuts are again shown by default in context menus, except on
macOS. They can be forced off by setting
AA_DontShowShortcutsInContextMenus to true.
****************************************************************************
* Third-Party Code *
****************************************************************************
- libpng was updated to version 1.6.37
- Updated QLocale to CLDR v35.1
- Updated bundled SQLite to version 3.28.0

301
dist/changes-5.13.0 vendored
View File

@ -1,3 +1,20 @@
Qt 5.13 introduces many new features and improvements as well as bugfixes
over the 5.12.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:
https://doc.qt.io/qt-5/index.html
The Qt version 5.13 series is binary compatible with the 5.12.x series.
Applications compiled for 5.12 will continue to run with 5.13.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Important Source Incompatible Changes *
****************************************************************************
@ -5,3 +22,287 @@
- Moc generated files include the standard <memory> header file now.
A side effect of this is that code including the Moc output from within
a namespace will fail to compile.
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- The Qt resource system now supports compressing content using the
Zstandard (https://zstd.net) algorithm. Compared to zlib, it compresses
better for the same CPU time, so this algorithm is the default.
QResource::isCompressed() returns true for either compression algorithm.
Use QResource::compressionAlgorithm() to find out which algorithm to
decompress. QFile will automatically decompress using the correct
algorithm.
- QDataStream version bumped up to 19 to account for changes in the
serialization of QFont.
- [QTBUG-73048] Qt now enables by default warnings when using APIs
marked as deprecated. It is possible to disable such warnings by
defining the QT_NO_DEPRECATED_WARNINGS macro. The old
QT_DEPRECATED_WARNINGS macro which was used to enable this warning
now has no effect (warnings are automatically enabled).
****************************************************************************
* Third-Party Code *
****************************************************************************
- Updated bundled SQLite to version 3.28.0.
- [QTBUG-72623] Updated DNS public suffix list
- [QTBUG-73883] libjpeg-turbo was updated to version 2.0.2
- Bundled libpng was updated to version 1.6.37
****************************************************************************
* Platform-Specific Changes *
****************************************************************************
- X11 / XCB:
* [QTBUG-45375] QTabletEvent coordinates now come from AbsX/AbsY
valuators in the X11 event, in more precise 32.32 fixed-point format,
scaled to fit the virtual desktop. It's possible to revert to using
the legacy 16.16-format event_x/event_y coordinates as in previous
releases by setting the QT_XCB_TABLET_LEGACY_COORDINATES environment
variable.
* [plugins] platforminputcontexts now use libxkbcommon-compose APIs for
compose key input, instead of Qt's own implementation.
- Android
* Increased the minimum supported Android version to Android 5.0
(API level 21).
- Windows
* [QTBUG-47247][QTBUG-71855] Add a default setting for
hasBorderInFullScreen in QtPlatformHeaders, QWindowsWindowFunctions
* [QTBUG-57180] Removed confusing DirectWrite warning when loading
bitmap fonts.
- macOS
* Accessibility: VoiceOver now reads all lines in multiline text
components when navigating by lines.
****************************************************************************
* Tools *
****************************************************************************
- configure & build system:
* Added --linker=[bfg,lld,gold] configure flag.
* The default OpenGL configuration changed from ANGLE to dynamic OpenGL.
* Added -schannel option to enable Schannel support on Desktop Windows.
* Added -coverage option for recording coverage data during execution
- CMake
* Added support for automatic linking of transitive dependencies in
static builds
- qmake
* [QTBUG-53654] Introduced the variables WINDOWS_TARGET_PLATFORM_VERSION
and WINDOWS_TARGET_PLATFORM_MIN_VERSION for overriding the default
values of WindowsTargetPlatformVersion and
WindowsTargetPlatformMinVersion in Visual Studio project files.
- RCC now supports compressing content using the Zstandard
(https://zstd.net) algorithm. Compared to zlib, it compresses better for
the same CPU time, so this algorithm is the default. To go back to the
previous algorithm, pass command-line option --compress-algo=zlib.
Compression levels range from 1 (fastest, least compression) to 19
(slowest, best compression). Level 0 tells the library to choose an
implementation-defined default. The default compression level is
"heuristic" (level -1): under this mode, RCC will attempt a very fast
compression (level 1) and check if the file was sufficiently compressed.
If it was, then RCC will compress again using an implementation-defined
level.
****************************************************************************
* QtCore *
****************************************************************************
- New class QConcatenateTablesProxyModel, to concatenate the rows from
multiple source models.
- New class QTransposeProxyModel to swap rows and columns of the source
model.
- Added macros Q_DISABLE_MOVE and Q_DISABLE_COPY_MOVE complementing
Q_DISABLE_COPY.
- Qt Containers and meta type system now use C++11 type traits
(std::is_trivial, std::is_trivially_copyable and
std::is_trivially_destructible) to detect the class of a type not
explicitly set by Q_DECLARE_TYPEINFO. (Q_DECLARE_TYPEINFO is still
needed for QList.)
- QCommandLineParser:
* [QTBUG-58490] The application name (if set in QCoreApplication) is now
shown in error messages.
- QDateTime:
* [QTBUG-71030] Fixed race conditions in getting the local time zone. Qt now
has a mutex lock around all calls to tzset() and mktime(). Application
code should avoid calling those functions directly.
- QFile:
* Made QFile::copy() issue a filesystem-synchronization system call,
which would make it less likely to result in incomplete or corrupt
files if the system reboots or uncleanly shuts down soon after the
function returns. New code is advised to use QSaveFile instead, which
also allows display of a progress report while copying.
- QFileInfo:
* [QTBUG-63970][QTBUG-30401][QTBUG-20791] Fixed resolving of symbolic
links to UNC shares on NTFS file systems.
- QJsonArray:
* [QTBUG-32793] Added cbegin() and cend() methods for compatibility with
the Standard Library container concepts.
- QJsonDocument:
* [QTBUG-71445] Added the ability to stream QJsonDocument into and from
QDataStream if it is contained in a QVariant.
- QLocale:
* Added support for Western Balochi, Ido, Lojban, Sicilian and
Southern Kurdish.
* [QTBUG-71445] Added a const overload for formattedDataSize().
* [QTBUG-782] Added toLong() and toULong().
- QMetaObject:
* Non-copyable lambdas can now be used with invokeMethod(). For
consistency reasons, the functor object is now always moved.
- QMimeDatabase:
* Added configure option -no-mimetype-database that tells Qt not to
bundle its own copy of the XDG MIME database. If this option is
passed, QMimeDatabase will only work if there's a system copy in
$XDG_DATA_DIRS/mime. This option is useful for Linux distributions
that ensure the data is always present.
- QSettings:
* Added QSettings(Scope...) constructor to avoid using #ifdef in Qt
applications.
- QStringListModel:
* [QTBUG-69807] Implemented moveRows
- QUrlQuery:
* QUrlQuery now provides an initializer list constructor. It can be
created using a list of key/value pairs.
- QVector:
* QVector no longer requires a default constructor for its template
argument.
****************************************************************************
* QtDBus *
****************************************************************************
- Matching namespace prefixes using QDBusServiceWatcher (instead of full
service names) is now possible. For example, "com.example.backend1*"
will match "com.example.backend1", "com.example.backend1.foo" and
"com.example.backend1.foo.bar", but not "com.example.backend12".
****************************************************************************
* QtGui *
****************************************************************************
- CSS:
* Added support for HSL/HSLA colors.
* Fix the range of the hue parameter when parsing a color given in HSL
or HSV.
- QFont:
* Add setFamilies()/families() to support use of font families with
commas and quotes in their name.
- QImage:
* [QTBUG-41176] Added support for 16-bit grayscale format.
* A new method convertTo has been added to change the format of a QImage
in place.
- QPainterPath:
* Added clear(), reserve(), capacity(). clear() removes allocated
QPainterPath elements but preserves allocated memory, which can be
useful for application with complex paths that are often recreated.
reserve() and capacity() follow QVector semantics.
- QWindow:
* [QTBUG-67903][QTBUG-52944] QWindow::transientParent is now a property.
- Text:
* [QTBUG-60813] Deprecated QFont::lastResortFamily() and
QFont::lastResortFont() which are not in use in Qt 5 and did not
provide any useful information.
* [QTBUG-22813] Added support for setting the font's style name in
QTextCharFormat.
****************************************************************************
* QtNetwork *
****************************************************************************
- TLS (SSL):
* Support for SSLv2 and SSLv3 sockets has been dropped, as per RFC 6176
(2011) and RFC 7568 (2015).
* The Schannel backend now supports ALPN and thus HTTP/2.
* [QTBUG-62637] Added support for Schannel on Desktop Windows. To build
Qt with Schannel support use '-schannel' during configure.
* Added class QOcspResponse as a part of OCSP stapling support.
* [QTBUG-12812][QTBUG-17158] Added OCSP-stapling support for OpenSSL
backend
* [QTBUG-71828][QTBUG-73289] Fixed SSL verification when connecting to IP
address (no host name) if that IP address is listed in the certificate.
****************************************************************************
* QtTestLib *
****************************************************************************
- Added QTest::toString(const QModelIndex &idx)
- Removed support for GPU_BLACKLIST files. Reimplementations or
equivalents of QTEST_MAIN() should remove their uses of
QTEST_ADD_GPU_BLACKLIST_SUPPORT and its _DEFS; they are still vacuously
defined, but serve no remaining purpose and shall be undefined in due
course.
****************************************************************************
* QtWidgets *
****************************************************************************
- QAbstractScrollArea:
* [QTBUG-69120] QTableView/QTreeView, when reporting their
viewportSizeHint(), now correctly take into account their scroll
bars' visibility and visibilityPolicy.
- QHeaderView:
* dataChanged now respects the given roles to avoid useless
recomputations.
- QLabel:
* Minor performance improvement when painting a label with an image.
- QListWidget:
* [QTBUG-69807] Implemented moveRows in model
* [QTBUG-68977] Sped up handling of hidden items when working with large
data sets.
- QPlainTextEdit:
* Added QRegularExpression find() method overload.
- QTextEdit:
* Added QRegularExpression find() method overload.
- QTreeView:
* Added expandRecursively() to expand all items below a given index.
- QWidgetTextControlPrivate:
* [QTBUG-69735] Moved cursor selection to start.
****************************************************************************
* QtSql *
****************************************************************************
- SQLite:
* [QTBUG-63498] The json1-extension for the SQLite3 plugin is now enabled
by default.
- PostgreSQL:
* QSqlDatabase is now stricter about table names when used with record()
and primaryIndex(). If the tablename was not quoted when it was
created, then the table name passed to record() and primaryIndex()
needs to be in lower case so that PostgreSQL is able to find it.

View File

@ -132,7 +132,7 @@ void DownloadManager::startNextDownload()
// prepare the output
printf("Downloading %s...\n", url.toEncoded().constData());
downloadTime.start();
downloadTimer.start();
}
void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
@ -140,7 +140,7 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
progressBar.setStatus(bytesReceived, bytesTotal);
// calculate the download speed
double speed = bytesReceived * 1000.0 / downloadTime.elapsed();
double speed = bytesReceived * 1000.0 / downloadTimer.elapsed();
QString unit;
if (speed < 1024) {
unit = "bytes/sec";

View File

@ -83,7 +83,7 @@ private:
QQueue<QUrl> downloadQueue;
QNetworkReply *currentDownload = nullptr;
QFile output;
QTime downloadTime;
QElapsedTimer downloadTimer;
TextProgressBar progressBar;
int downloadedCount = 0;

View File

@ -62,7 +62,7 @@ QString peer_info(const QHostAddress &address, quint16 port)
return info.arg(address.toString()).arg(port);
}
QString connection_info(QSharedPointer<QDtls> connection)
QString connection_info(QDtls *connection)
{
QString info(DtlsServer::tr("Session cipher: "));
info += connection->sessionCipher().name();
@ -157,7 +157,7 @@ void DtlsServer::readyRead()
}
const auto client = std::find_if(knownClients.begin(), knownClients.end(),
[&](const DtlsConnection &connection){
[&](const std::unique_ptr<QDtls> &connection){
return connection->peerAddress() == peerAddress
&& connection->peerPort() == peerPort;
});
@ -170,7 +170,7 @@ void DtlsServer::readyRead()
//! [6]
if ((*client)->isConnectionEncrypted()) {
decryptDatagram(*client, dgram);
decryptDatagram(client->get(), dgram);
if ((*client)->dtlsError() == QDtlsError::RemoteClosedConnectionError)
knownClients.erase(client);
return;
@ -178,7 +178,7 @@ void DtlsServer::readyRead()
//! [6]
//! [7]
doHandshake(*client, dgram);
doHandshake(client->get(), dgram);
//! [7]
}
@ -205,13 +205,13 @@ void DtlsServer::handleNewConnection(const QHostAddress &peerAddress,
emit infoMessage(peerInfo + tr(": verified, starting a handshake"));
//! [8]
//! [9]
DtlsConnection newConnection(new QDtls(QSslSocket::SslServerMode));
std::unique_ptr<QDtls> newConnection{new QDtls{QSslSocket::SslServerMode}};
newConnection->setDtlsConfiguration(serverConfiguration);
newConnection->setPeer(peerAddress, peerPort);
newConnection->connect(newConnection.data(), &QDtls::pskRequired,
newConnection->connect(newConnection.get(), &QDtls::pskRequired,
this, &DtlsServer::pskRequired);
knownClients.push_back(newConnection);
doHandshake(newConnection, clientHello);
knownClients.push_back(std::move(newConnection));
doHandshake(knownClients.back().get(), clientHello);
//! [9]
} else if (cookieSender.dtlsError() != QDtlsError::NoError) {
emit errorMessage(tr("DTLS error: ") + cookieSender.dtlsErrorString());
@ -221,7 +221,7 @@ void DtlsServer::handleNewConnection(const QHostAddress &peerAddress,
}
//! [11]
void DtlsServer::doHandshake(DtlsConnection newConnection, const QByteArray &clientHello)
void DtlsServer::doHandshake(QDtls *newConnection, const QByteArray &clientHello)
{
const bool result = newConnection->doHandshake(&serverSocket, clientHello);
if (!result) {
@ -246,7 +246,7 @@ void DtlsServer::doHandshake(DtlsConnection newConnection, const QByteArray &cli
//! [11]
//! [12]
void DtlsServer::decryptDatagram(DtlsConnection connection, const QByteArray &clientMessage)
void DtlsServer::decryptDatagram(QDtls *connection, const QByteArray &clientMessage)
{
Q_ASSERT(connection->isConnectionEncrypted());
@ -266,10 +266,9 @@ void DtlsServer::decryptDatagram(DtlsConnection connection, const QByteArray &cl
//! [14]
void DtlsServer::shutdown()
{
for (DtlsConnection &connection : knownClients)
for (const auto &connection : qExchange(knownClients, {}))
connection->shutdown(&serverSocket);
knownClients.clear();
serverSocket.close();
}
//! [14]

View File

@ -54,6 +54,7 @@
#include <QtNetwork>
#include <vector>
#include <memory>
QT_BEGIN_NAMESPACE
@ -86,9 +87,8 @@ private:
void handleNewConnection(const QHostAddress &peerAddress, quint16 peerPort,
const QByteArray &clientHello);
using DtlsConnection = QSharedPointer<QDtls>;
void doHandshake(DtlsConnection newConnection, const QByteArray &clientHello);
void decryptDatagram(DtlsConnection connection, const QByteArray &clientMessage);
void doHandshake(QDtls *newConnection, const QByteArray &clientHello);
void decryptDatagram(QDtls *connection, const QByteArray &clientMessage);
void shutdown();
bool listening = false;
@ -96,7 +96,7 @@ private:
QSslConfiguration serverConfiguration;
QDtlsClientVerifier cookieSender;
QVector<DtlsConnection> knownClients;
std::vector<std::unique_ptr<QDtls>> knownClients;
Q_DISABLE_COPY(DtlsServer)
};

View File

@ -96,8 +96,8 @@ void RateController::transfer()
if (sockets.isEmpty())
return;
int msecs = 1000;
if (!stopWatch.isNull())
qint64 msecs = 1000;
if (stopWatch.isValid())
msecs = qMin(msecs, stopWatch.elapsed());
qint64 bytesToWrite = (upLimit * msecs) / 1000;

View File

@ -53,7 +53,7 @@
#include <QObject>
#include <QSet>
#include <QTime>
#include <QElapsedTimer>
class PeerWireClient;
@ -79,7 +79,7 @@ public slots:
void scheduleTransfer();
private:
QTime stopWatch;
QElapsedTimer stopWatch;
QSet<PeerWireClient *> sockets;
int upLimit;
int downLimit;

View File

@ -56,7 +56,7 @@
#include <QOpenGLBuffer>
#include <QVector3D>
#include <QMatrix4x4>
#include <QTime>
#include <QElapsedTimer>
#include <QVector>
#include <QPushButton>
@ -106,7 +106,7 @@ private:
bool m_qtLogo;
QList<Bubble *> m_bubbles;
int m_frames;
QTime m_time;
QElapsedTimer m_time;
QOpenGLShader *m_vshader1;
QOpenGLShader *m_fshader1;
QOpenGLShader *m_vshader2;

View File

@ -54,7 +54,7 @@
#include <QString>
#include <QStringList>
#include <QDir>
#include <QTime>
#include <QElapsedTimer>
#include <QApplication>
#include <QDebug>
@ -146,19 +146,19 @@ int main(int argc, char** argv)
int singleThreadTime = 0;
{
QTime time;
time.start();
QElapsedTimer timer;
timer.start();
WordCount total = singleThreadedWordCount(files);
singleThreadTime = time.elapsed();
singleThreadTime = timer.elapsed();
qDebug() << "single thread" << singleThreadTime;
}
int mapReduceTime = 0;
{
QTime time;
time.start();
QElapsedTimer timer;
timer.start();
WordCount total = mappedReduced(files, countWords, reduce);
mapReduceTime = time.elapsed();
mapReduceTime = timer.elapsed();
qDebug() << "MapReduce" << mapReduceTime;
}
qDebug() << "MapReduce speedup x" << ((double)singleThreadTime - (double)mapReduceTime) / (double)mapReduceTime + 1;

View File

@ -327,9 +327,12 @@
\snippet mainwindows/application/mainwindow.cpp 44
\snippet mainwindows/application/mainwindow.cpp 45
Saving a file is very similar to loading one. Here, the
QFile::Text flag ensures that on Windows, "\\n" is converted into
"\\r\\n" to conform to the Windows convension.
Saving a file is similar to loading one. We use QSaveFile to ensure
all data are safely written and existing files are not damaged
should writing fail.
We use the QFile::Text flag to make sure that on Windows, "\\n"
is converted into "\\r\\n" to conform to the Windows convention.
\snippet mainwindows/application/mainwindow.cpp 46
\snippet mainwindows/application/mainwindow.cpp 47

View File

@ -30,7 +30,7 @@
\title Class Wizard Example
\ingroup examples-dialogs
\brief The License Wizard example shows how to implement linear
\brief The Class Wizard example shows how to implement linear
wizards using QWizard.
\image classwizard.png Screenshot of the Class Wizard example

View File

@ -533,8 +533,6 @@ Scene::Scene(int width, int height, int maxTextureSize)
m_timer->setInterval(20);
connect(m_timer, &QTimer::timeout, this, [this](){ update(); });
m_timer->start();
m_time.start();
}
Scene::~Scene()

View File

@ -220,7 +220,7 @@ private:
void initGL();
QPointF pixelPosToViewPos(const QPointF& p);
QTime m_time;
QTime m_time; // ### Qt 6: remove (unused)
int m_lastTime;
int m_mouseEventTime;
int m_distExp;

View File

@ -353,24 +353,28 @@ void MainWindow::loadFile(const QString &fileName)
bool MainWindow::saveFile(const QString &fileName)
//! [44] //! [45]
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName),
file.errorString()));
QString errorMessage;
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
QSaveFile file(fileName);
if (file.open(QFile::WriteOnly | QFile::Text)) {
QTextStream out(&file);
out << textEdit->toPlainText();
if (!file.commit()) {
errorMessage = tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
} else {
errorMessage = tr("Cannot open file %1 for writing:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
QGuiApplication::restoreOverrideCursor();
if (!errorMessage.isEmpty()) {
QMessageBox::warning(this, tr("Application"), errorMessage);
return false;
}
QTextStream out(&file);
#ifndef QT_NO_CURSOR
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
#endif
out << textEdit->toPlainText();
#ifndef QT_NO_CURSOR
QGuiApplication::restoreOverrideCursor();
#endif
setCurrentFile(fileName);
statusBar()->showMessage(tr("File saved"), 2000);
return true;

View File

@ -115,19 +115,28 @@ bool MdiChild::saveAs()
bool MdiChild::saveFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("MDI"),
tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
QString errorMessage;
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
QSaveFile file(fileName);
if (file.open(QFile::WriteOnly | QFile::Text)) {
QTextStream out(&file);
out << toPlainText();
if (!file.commit()) {
errorMessage = tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
} else {
errorMessage = tr("Cannot open file %1 for writing:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
QGuiApplication::restoreOverrideCursor();
if (!errorMessage.isEmpty()) {
QMessageBox::warning(this, tr("MDI"), errorMessage);
return false;
}
QTextStream out(&file);
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
out << toPlainText();
QGuiApplication::restoreOverrideCursor();
setCurrentFile(fileName);
return true;
}

View File

@ -425,19 +425,28 @@ void MainWindow::openRecentFile()
bool MainWindow::saveFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("SDI"),
tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
QString errorMessage;
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
QSaveFile file(fileName);
if (file.open(QFile::WriteOnly | QFile::Text)) {
QTextStream out(&file);
out << textEdit->toPlainText();
if (!file.commit()) {
errorMessage = tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
} else {
errorMessage = tr("Cannot open file %1 for writing:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString());
}
QGuiApplication::restoreOverrideCursor();
if (!errorMessage.isEmpty()) {
QMessageBox::warning(this, tr("SDI"), errorMessage);
return false;
}
QTextStream out(&file);
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
out << textEdit->toPlainText();
QGuiApplication::restoreOverrideCursor();
setCurrentFile(fileName);
statusBar()->showMessage(tr("File saved"), 2000);
return true;

View File

@ -54,7 +54,7 @@
#include "arthurwidgets.h"
#include <QBasicTimer>
#include <QDateTime>
#include <QElapsedTimer>
#include <QPainterPath>
class PathDeformRenderer : public ArthurFrame
@ -103,7 +103,7 @@ private:
QBasicTimer m_repaintTimer;
// QBasicTimer m_fpsTimer;
// int m_fpsCounter;
QTime m_repaintTracker;
QElapsedTimer m_repaintTracker;
QVector<QPainterPath> m_paths;
QVector<QPointF> m_advances;

View File

@ -27,7 +27,7 @@ else: equals(ANDROID_TARGET_ARCH, x86_64): \
QMAKE_CFLAGS += -gcc-toolchain $$NDK_TOOLCHAIN_PATH -fno-limit-debug-info
QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a
QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++
equals(ANDROID_TARGET_ARCH, armeabi-v7a): QMAKE_LINK += -Wl,--exclude-libs,libunwind.a
QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \

View File

@ -20,7 +20,7 @@
# output check that "EGLFS GBM .......... yes" is present, otherwise
# eglfs will not be functional.
#
# ./configure -release -opengl es2 -device linux-rpi3-vc4-g++ \
# ./configure -release -opengl es2 -device linux-rasp-pi3-vc4-g++ \
# -device-option CROSS_COMPILE=~/raspbian/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- \
# -sysroot ~/raspbian/sysroot \
# -prefix /usr/local/qt5pi -extprefix ~/raspbian/qt5pi -hostprefix ~/raspbian/qt5 \

View File

@ -1,3 +1,21 @@
APK_PATH = $$shell_path($$OUT_PWD/android-build/$${TARGET}.apk)
!contains(TEMPLATE, subdirs): {
apk_install_target.target = apk_install_target
apk_install_target.depends = first
apk_install_target.commands = $(MAKE) -f $(MAKEFILE) INSTALL_ROOT=$$OUT_PWD/android-build install
apk.target = apk
apk.depends = apk_install_target
qtPrepareTool(ANDROIDDEPLOYQT, androiddeployqt)
isEmpty(ANDROID_DEPLOYMENT_SETTINGS_FILE): ANDROID_DEPLOYMENT_SETTINGS_FILE = $$OUT_PWD/android-$$TARGET-deployment-settings.json
contains(QMAKE_HOST.os, Windows): extension = .exe
apk.commands = $$ANDROIDDEPLOYQT --input $$ANDROID_DEPLOYMENT_SETTINGS_FILE --output $$OUT_PWD/android-build --apk $$APK_PATH
} else {
prepareRecursiveTarget(apk)
prepareRecursiveTarget(apk_install_target)
}
QMAKE_EXTRA_TARGETS *= apk apk_install_target
contains(TEMPLATE, ".*app") {
!android_app {
!contains(TARGET, ".so"): TARGET = lib$${TARGET}.so

View File

@ -59,6 +59,7 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura
file(STRINGS \"${prl_file_location}\" _prl_strings REGEX \"QMAKE_PRL_LIBS[ \\t]*=\")
string(REGEX REPLACE \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends ${_prl_strings})
string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends})
string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries ${CMAKE_CXX_STANDARD_LIBRARIES})
set(_search_paths)
string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\")
foreach(_flag ${_static_depends})
@ -66,7 +67,15 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura
if(_flag MATCHES \"^-l(.*)$\")
# Handle normal libraries passed as -lfoo
set(_lib \"${CMAKE_MATCH_1}\")
if(_lib MATCHES \"^pthread$\")
foreach(_standard_library ${_standard_libraries})
if(_standard_library MATCHES \"^${_lib}(\\.lib)?$\")
set(_lib_is_default_linked TRUE)
break()
endif()
endforeach()
if (_lib_is_default_linked)
unset(_lib_is_default_linked)
elseif(_lib MATCHES \"^pthread$\")
find_package(Threads REQUIRED)
list(APPEND _lib_deps Threads::Threads)
else()

View File

@ -38,5 +38,5 @@ defineTest(addExclusiveBuilds) {
}
# Default directories to process
QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_DIR
QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_DIR
QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_DIR LEX_DIR YACC_DIR
QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR DESTDIR $$QMAKE_DIR_REPLACE_SANE

View File

@ -2,6 +2,38 @@
# Lex extra-compiler for handling files specified in the LEXSOURCES variable
#
isEmpty(LEX_DIR): LEX_DIR = .
defineReplace(lexCommands) {
input = $$relative_path($$absolute_path($$1, $$OUT_PWD), $$OUT_PWD/$$LEX_DIR)
output = $$basename(2)
input_base = $$basename(1)
input_base ~= s/\.[^.]*$//
isEmpty(QMAKE_LEXFLAGS_MANGLE): QMAKE_LEXFLAGS_MANGLE = -P$${input_base}
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS
!yacc_no_name_mangle: QMAKE_LEXEXTRAFLAGS += $$QMAKE_LEXFLAGS_MANGLE
contains(QMAKE_LEX, .*flex) {
# GNU flex, we can use -o outfile
commands = $$QMAKE_LEX $$QMAKE_LEXEXTRAFLAGS --nounistd -o $$output $$input
} else {
# stupid POSIX lex, it only generates a file called lex.yy.c
# or lex.prefix.c if the -P<prefix> option is active
intermediate_file = lex.yy.c
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS $$QMAKE_LEXFLAGS_MANGLE
commands = \
-$(DEL_FILE) $${output}$$escape_expand(\\n\\t) \
$$QMAKE_LEX $$QMAKE_LEXEXTRAFLAGS $${input}$$escape_expand(\\n\\t) \
$(MOVE) $$intermediate_file $$output $$escape_expand(\\n\\t)
}
!equals(LEX_DIR, .): \
commands = cd $$LEX_DIR && $$commands
silent: commands = @echo Lex $$1 && $$commands
return($$commands)
}
{
lex.name = Lex ${QMAKE_FILE_IN}
lex.input = LEXSOURCES
@ -12,27 +44,7 @@
lex.variable_out = GENERATED_SOURCES
}
isEmpty(QMAKE_LEXFLAGS_MANGLE):QMAKE_LEXFLAGS_MANGLE = -P${QMAKE_FILE_BASE}
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS
!yacc_no_name_mangle:QMAKE_LEXEXTRAFLAGS += $$QMAKE_LEXFLAGS_MANGLE
contains(QMAKE_LEX, .*flex) {
# GNU flex, we can use -o outfile
lex.commands = $$QMAKE_LEX $$QMAKE_LEXEXTRAFLAGS --nounistd -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
} else {
# stupid POSIX lex, it only generates a file called lex.yy.c
# or lex.prefix.c if the -P<prefix> option is active
intermediate_file = lex.yy.c
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS $$QMAKE_LEXFLAGS_MANGLE
lex.commands = \
-$(DEL_FILE) ${QMAKE_FILE_OUT}$$escape_expand(\\n\\t) \
$$QMAKE_LEX $$QMAKE_LEXEXTRAFLAGS ${QMAKE_FILE_IN}$$escape_expand(\\n\\t) \
$(MOVE) $$intermediate_file ${QMAKE_FILE_OUT} $$escape_expand(\\n\\t)
unset(intermediate_file)
}
lex.output = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_LEX}$${first(QMAKE_EXT_CPP)}
silent:lex.commands = @echo Lex ${QMAKE_FILE_IN} && $$lex.commands
lex.commands = ${QMAKE_FUNC_lexCommands}
lex.output = $$LEX_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_LEX}$${first(QMAKE_EXT_CPP)}
QMAKE_EXTRA_COMPILERS += lex
}

View File

@ -28,7 +28,10 @@ CONFIG(release, debug|release) {
}
load(link_ltcg)
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
QMAKE_CFLAGS += $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS -= $$QMAKE_CXXFLAGS_LTCG
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_LTCG
QMAKE_LFLAGS -= $$QMAKE_LFLAGS_LTCG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_LTCG
}

View File

@ -1,8 +1,14 @@
!isEmpty(SOURCES) {
QT += qml qmltest
load(testcase)
contains(TEMPLATE, vc.*): DEFINES += QUICK_TEST_SOURCE_DIR=\"$$_PRO_FILE_PWD_\"
else: DEFINES += QUICK_TEST_SOURCE_DIR=$$shell_quote(\"$$_PRO_FILE_PWD_\")
!android {
contains(TEMPLATE, vc.*): DEFINES += QUICK_TEST_SOURCE_DIR=\"$$_PRO_FILE_PWD_\"
else: DEFINES += QUICK_TEST_SOURCE_DIR=$$shell_quote(\"$$_PRO_FILE_PWD_\")
} else {
!isEmpty(RESOURCES): warning("The RESOURCES qmake variable is empty, the test will probably fail to run")
DEFINES += QUICK_TEST_SOURCE_DIR=\":/\"
}
} else {
# Allow a project to run tests without a CPP stub
TEMPLATE = aux

View File

@ -37,8 +37,10 @@ intel_icl {
QMAKE_DIR_REPLACE_SANE = PRECOMPILED_DIR OBJECTS_DIR MOC_DIR RCC_DIR UI_DIR
load(qt_prefix_build_check)
# force_independent can be set externally. prefix_build not.
!exists($$[QT_HOST_DATA]/.qmake.cache): \
qtIsPrefixBuild($$[QT_HOST_DATA]): \
CONFIG += prefix_build force_independent
!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):force_independent {

View File

@ -51,6 +51,12 @@ contains(TEMPLATE, .*lib) {
}
lib_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += lib_replace
!equals(qt_libdir, $$rplbase/lib) {
qtlibdir_replace.match = $$qt_libdir
qtlibdir_replace.replace = $$qqt_libdir
qtlibdir_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += qtlibdir_replace
}
}
# The remainder of this file must not apply to host tools/libraries,
@ -146,8 +152,8 @@ warnings_are_errors:warning_clean {
android: QMAKE_CXXFLAGS_WARN_ON += -Wno-error=literal-suffix
}
} else:msvc:!intel_icl {
# enable for MSVC 2012, MSVC 2013, MSVC 2015
contains(MSVC_VER, "1[124].0"): QMAKE_CXXFLAGS_WARN_ON += -WX
# enable for MSVC 2015, MSVC 2017
contains(MSVC_VER, "1[45].0"): QMAKE_CXXFLAGS_WARN_ON += -WX
}
unset(ver)
}

View File

@ -2517,17 +2517,19 @@ logn("Configure summary:")
logn()
qtConfPrintReport()
load(qt_prefix_build_check)
# final notes for the user
logn()
logn("Qt is now configured for building. Just run '$$QMAKE_MAKE_NAME'.")
pfx = $$[QT_INSTALL_PREFIX]
exists($$pfx/.qmake.cache) {
qtIsPrefixBuild($$pfx) {
logn("Once everything is built, you must run '$$QMAKE_MAKE_NAME install'.")
logn("Qt will be installed into '$$system_path($$pfx)'.")
} else {
logn("Once everything is built, Qt is installed.")
logn("You should NOT run '$$QMAKE_MAKE_NAME install'.")
logn("Note that this build cannot be deployed to other machines or devices.")
} else {
logn("Once everything is built, you must run '$$QMAKE_MAKE_NAME install'.")
logn("Qt will be installed into '$$system_path($$pfx)'.")
}
logn()
logn("Prior to reconfiguration, make sure you remove any leftovers from")

View File

@ -82,6 +82,11 @@ header_module {
CONFIG += force_qt # Needed for the headers_clean tests.
!lib_bundle: \
CONFIG += qt_no_install_library
# Allow creation of .prl, .la and .pc files.
target.path = $$[QT_INSTALL_LIBS]
target.CONFIG += dummy_install
INSTALLS += target
} else {
TEMPLATE = lib
}

View File

@ -272,7 +272,7 @@ headersclean:!internal_module {
hcleanFLAGS += -std=c++98
}
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
} else: msvc:!intel_icl {
# 4180: qualifier applied to function type has no meaning; ignored
# 4458: declaration of 'identifier' hides class member
@ -284,7 +284,7 @@ headersclean:!internal_module {
# 4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
greaterThan(QMAKE_MSC_VER, 18): hcleanFLAGS += -wd4577
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \
hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \
$$[QT_INSTALL_DATA/src]/mkspecs/features/data/dummy.cpp
}

View File

@ -0,0 +1,21 @@
#
# W A R N I N G
# -------------
#
# This file is not part of the Qt API. It exists purely as an
# implementation detail. It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#
defineTest(qtIsPrefixBuild) {
prefixdir = $$1
# qtbase non-prefix build?
exists($$prefixdir/.qmake.cache): \
return(false)
# top-level non-prefix build?
contains(prefixdir, .*/qtbase):exists($$dirname(prefixdir)/.qmake.super): \
return(false)
return(true)
}

View File

@ -1,10 +1,33 @@
# Sanitizer flags
sanitize_address {
QMAKE_CFLAGS += $$QMAKE_SANITIZE_ADDRESS_CFLAGS
QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_ADDRESS_CXXFLAGS
QMAKE_LFLAGS += $$QMAKE_SANITIZE_ADDRESS_LFLAGS
android {
# ARM 32 (armeabi-v7a & arm5) are not supported because Qt must be rebuilt with -marm
equals(ANDROID_TARGET_ARCH, arm64-v8a): ANDROID_LIBCLANG_RT_FILE = "libclang_rt.asan-aarch64-android.so"
else: equals(ANDROID_TARGET_ARCH, x86): ANDROID_LIBCLANG_RT_FILE = "libclang_rt.asan-i686-android.so"
else: equals(ANDROID_TARGET_ARCH, x86_64): ANDROID_LIBCLANG_RT_FILE = "libclang_rt.asan-x86_64-android.so"
else: error("ASAN: Unsupported platform $${ANDROID_TARGET_ARCH}")
ANDROID_LIBCLANG_RT_PATH = $${NDK_LLVM_PATH}/lib64/clang
ANDROID_CLANG_RT_VERSIONS = $$files($$ANDROID_LIBCLANG_RT_PATH/*)
for (VERSION, ANDROID_CLANG_RT_VERSIONS) {
greaterThan(VERSION, $$ANDROID_LIBCLANG_RT_PATH): ANDROID_LIBCLANG_RT_PATH = $$VERSION
}
ANDROID_LIBCLANG_RT_PATH = "$${ANDROID_LIBCLANG_RT_PATH}/lib/linux/"
ANDROID_WRAP_SH_CONTENT = "$$LITERAL_HASH!/system/bin/sh"
ANDROID_WRAP_SH_CONTENT += "HERE=\"$(cd \"$(dirname \"$0\")\" && pwd)\""
isEmpty(ANDROID_ASAN_OPTIONS): ANDROID_ASAN_OPTIONS = "log_to_syslog=false,allow_user_segv_handler=1"
ANDROID_WRAP_SH_CONTENT += "export ASAN_OPTIONS=$${ANDROID_ASAN_OPTIONS}"
ANDROID_WRAP_SH_CONTENT += "export LD_PRELOAD=$HERE/$${ANDROID_LIBCLANG_RT_FILE}"
ANDROID_WRAP_SH_CONTENT += "exec \"$@\""
write_file($$OUT_PWD/android-build/resources/lib/$${ANDROID_TARGET_ARCH}/wrap.sh, ANDROID_WRAP_SH_CONTENT) | error()
libclang_rt.path = /libs/$$ANDROID_TARGET_ARCH/
libclang_rt.files = "$${ANDROID_LIBCLANG_RT_PATH}/$${ANDROID_LIBCLANG_RT_FILE}"
INSTALLS += libclang_rt
}
}
sanitize_memory {

View File

@ -52,14 +52,26 @@ debug_and_release:debug_and_release_target {
}
# Allow for a custom test runner script
$${type}.commands += $(TESTRUNNER)
android: isEmpty($(TESTRUNNER)) {
APK_PATH = $$shell_path($$OUT_PWD/android-build/$${TARGET}.apk)
qtPrepareTool(ANDROIDTESTRUNNER, androidtestrunner)
qtPrepareTool(ANDROIDDEPLOYQT, androiddeployqt)
isEmpty(ANDROID_DEPLOYMENT_SETTINGS_FILE): ANDROID_DEPLOYMENT_SETTINGS_FILE = $$OUT_PWD/android-$$TARGET-deployment-settings.json
contains(QMAKE_HOST.os, Windows): extension = .exe
$${type}.commands = $$ANDROIDTESTRUNNER --androiddeployqt \"$$ANDROIDDEPLOYQT --input $$ANDROID_DEPLOYMENT_SETTINGS_FILE\"
$${type}.commands += --path \"$$OUT_PWD/android-build\"
$${type}.commands += --adb \"$$shell_path($${ANDROID_SDK_ROOT}$${QMAKE_DIR_SEP}platform-tools$${QMAKE_DIR_SEP}adb$${extension})\"
$${type}.commands += --make \"$(MAKE) -f $(MAKEFILE)\"
$${type}.commands += --apk $$APK_PATH
} else: $${type}.commands += $(TESTRUNNER)
unix {
isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = .
app_bundle: \
$${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET)
else: \
else: !android: \
$${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET)
} else {
# Windows

View File

@ -2,32 +2,49 @@
# Yacc extra-compiler for handling files specified in the YACCSOURCES variable
#
isEmpty(YACC_DIR): YACC_DIR = .
defineReplace(yaccCommands) {
input = $$relative_path($$absolute_path($$1, $$OUT_PWD), $$OUT_PWD/$$YACC_DIR)
input_base = $$basename(1)
input_base ~= s/\.[^.]*$//
hpp_output = $$2
cpp_output = $$hpp_output
cpp_output ~= s/$$re_escape($$first(QMAKE_EXT_H))$/$$first(QMAKE_EXT_CPP)/
isEmpty(QMAKE_YACCFLAGS_MANGLE) {
QMAKE_YACCFLAGS_MANGLE = -p $${input_base} -b $${input_base}
QMAKE_YACC_HEADER = $${input_base}.tab.h
QMAKE_YACC_SOURCE = $${input_base}.tab.c
} else {
QMAKE_YACCFLAGS_MANGLE ~= s/\\$base/$${input_base}/g #backwards compat
QMAKE_YACC_HEADER ~= s/\\$base/$${input_base}/g
QMAKE_YACC_SOURCE ~= s/\\$base/$${input_base}/g
}
QMAKE_YACCDECLFLAGS = $$QMAKE_YACCFLAGS
!yacc_no_name_mangle: QMAKE_YACCDECLFLAGS += $$QMAKE_YACCFLAGS_MANGLE
!equals(YACC_DIR, .): yacc_call = cd $$YACC_DIR &&
yacc_call += $$QMAKE_YACC $$QMAKE_YACCDECLFLAGS $${input}
commands = \
-$(DEL_FILE) $${hpp_output} $${cpp_output}$$escape_expand(\\n\\t) \
$${yacc_call}$$escape_expand(\\n\\t) \
$(MOVE) $${YACC_DIR}/$${QMAKE_YACC_HEADER} $${hpp_output}$$escape_expand(\\n\\t) \
$(MOVE) $${YACC_DIR}/$${QMAKE_YACC_SOURCE} $${cpp_output}$$escape_expand(\\n\\t)
silent: commands = @echo Yacc $$1 && $$commands
return($$commands)
}
yacc_output_base = $${YACC_DIR}/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}
{
yacc_decl.name = Yacc header
yacc_decl.input = YACCSOURCES
yacc_decl.variable_out = GENERATED_FILES
isEmpty(QMAKE_YACCFLAGS_MANGLE) {
QMAKE_YACCFLAGS_MANGLE = -p ${QMAKE_FILE_BASE} -b ${QMAKE_FILE_BASE}
QMAKE_YACC_HEADER = ${QMAKE_FILE_BASE}.tab.h
QMAKE_YACC_SOURCE = ${QMAKE_FILE_BASE}.tab.c
} else {
QMAKE_YACCFLAGS_MANGLE ~= s/\\$base/${QMAKE_FILE_BASE}/g #backwards compat
QMAKE_YACC_HEADER ~= s/\\$base/${QMAKE_FILE_BASE}/g
QMAKE_YACC_SOURCE ~= s/\\$base/${QMAKE_FILE_BASE}/g
}
QMAKE_YACCDECLFLAGS = $$QMAKE_YACCFLAGS
!yacc_no_name_mangle:QMAKE_YACCDECLFLAGS += $$QMAKE_YACCFLAGS_MANGLE
yacc_decl.commands = \
-$(DEL_FILE) $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)}$$escape_expand(\\n\\t) \
$$QMAKE_YACC $$QMAKE_YACCDECLFLAGS ${QMAKE_FILE_IN}$$escape_expand(\\n\\t) \
$(MOVE) $${QMAKE_YACC_HEADER} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)}$$escape_expand(\\n\\t) \
$(MOVE) $${QMAKE_YACC_SOURCE} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)}$$escape_expand(\\n\\t)
yacc_decl.output = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)}
silent:yacc_decl.commands = @echo Yacc ${QMAKE_FILE_IN} && $$yacc_decl.commands
yacc_decl.commands = ${QMAKE_FUNC_yaccCommands}
yacc_decl.output = $${yacc_output_base}$$first(QMAKE_EXT_H)
QMAKE_EXTRA_COMPILERS += yacc_decl
}
@ -37,7 +54,9 @@
yacc_impl.variable_out = GENERATED_SOURCES
yacc_impl.dependency_type = TYPE_C
yacc_impl.commands = $$escape_expand(\\n) # We don't want any commands where, but if command is empty no rules are created
yacc_impl.depends += $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)} # Make sure we depend on the step above
yacc_impl.output = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)} # Faked output from this step, output really created in step above
yacc_impl.depends += $${yacc_output_base}$$first(QMAKE_EXT_H) # Make sure we depend on the step above
yacc_impl.output = $${yacc_output_base}$$first(QMAKE_EXT_CPP) # Faked output from this step, output really created in step above
QMAKE_EXTRA_COMPILERS += yacc_impl
}
unset(yacc_output_base)

View File

@ -94,6 +94,12 @@ QMAKE_PREFIX_STATICLIB = lib
QMAKE_EXTENSION_STATICLIB = a # llvm bitcode
QMAKE_AR = emar cqs
equals(QMAKE_HOST.os, Windows) {
QMAKE_AR_CMD = \
"$(file >$(OBJECTS_DIR)/$(TARGET).rsp, $(subst \\,/,$(OBJECTS)))$$escape_expand(\\n\\t)" \
"$(AR) $(DESTDIR)$(TARGET) @$(OBJECTS_DIR)/$(TARGET).rsp"
}
QMAKE_DISTCLEAN += *.html *.js *.wasm
load(qt_config)

View File

@ -513,7 +513,6 @@ bool
ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
{
ProStringList tmp;
bool did_preprocess = false;
//HEADER
const int pbVersion = pbuilderVersion();
@ -731,7 +730,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
QFile mkf(mkfile);
if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) {
writingUnixMakefileGenerator = true;
did_preprocess = true;
debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData());
QTextStream mkt(&mkf);
writeHeader(mkt);

View File

@ -892,7 +892,7 @@ MakefileGenerator::processPrlFile(QString &file, bool baseOnly)
bool
MakefileGenerator::processPrlFileBase(QString &origFile, const QStringRef &origName,
const QStringRef &fixedBase, int slashOff)
const QStringRef &fixedBase, int /*slashOff*/)
{
return processPrlFileCore(origFile, origName, fixedBase + Option::prl_ext);
}
@ -1112,7 +1112,8 @@ MakefileGenerator::writePrlFile()
&& project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()
&& project->isActiveConfig("create_prl")
&& (project->first("TEMPLATE") == "lib"
|| project->first("TEMPLATE") == "vclib")
|| project->first("TEMPLATE") == "vclib"
|| project->first("TEMPLATE") == "aux")
&& (!project->isActiveConfig("plugin") || project->isActiveConfig("static"))) { //write prl file
QString local_prl = prlFileName();
QString prl = fileFixify(local_prl);
@ -2369,8 +2370,15 @@ MakefileGenerator::findSubDirsSubTargets() const
st->profile = file;
}
} else {
if(!file.isEmpty() && !project->isActiveConfig("subdir_first_pro"))
st->profile = file.section(Option::dir_sep, -1) + Option::pro_ext;
if (!file.isEmpty() && !project->isActiveConfig("subdir_first_pro")) {
const QString baseName = file.section(Option::dir_sep, -1);
if (baseName.isEmpty()) {
warn_msg(WarnLogic, "Ignoring invalid SUBDIRS entry %s",
subdirs[subdir].toLatin1().constData());
continue;
}
st->profile = baseName + Option::pro_ext;
}
st->in_directory = file;
}
while(st->in_directory.endsWith(Option::dir_sep))
@ -3355,42 +3363,44 @@ MakefileGenerator::writePkgConfigFile()
if (!version.isEmpty())
t << "Version: " << version << Qt::endl;
// libs
t << "Libs: ";
QString pkgConfiglibName;
if (target_mode == TARG_MAC_MODE && project->isActiveConfig("lib_bundle")) {
if (libDir != QLatin1String("/Library/Frameworks"))
t << "-F${libdir} ";
ProString bundle;
if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))
bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME");
else
bundle = project->first("TARGET");
int suffix = bundle.lastIndexOf(".framework");
if (suffix != -1)
bundle = bundle.left(suffix);
t << "-framework ";
pkgConfiglibName = bundle.toQString();
} else {
if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir))
t << "-L${libdir} ";
pkgConfiglibName = "-l" + project->first("QMAKE_ORIG_TARGET");
if (project->isActiveConfig("shared"))
pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString();
}
t << shellQuote(pkgConfiglibName) << " \n";
if (project->first("TEMPLATE") == "lib") {
// libs
t << "Libs: ";
QString pkgConfiglibName;
if (target_mode == TARG_MAC_MODE && project->isActiveConfig("lib_bundle")) {
if (libDir != QLatin1String("/Library/Frameworks"))
t << "-F${libdir} ";
ProString bundle;
if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))
bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME");
else
bundle = project->first("TARGET");
int suffix = bundle.lastIndexOf(".framework");
if (suffix != -1)
bundle = bundle.left(suffix);
t << "-framework ";
pkgConfiglibName = bundle.toQString();
} else {
if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir))
t << "-L${libdir} ";
pkgConfiglibName = "-l" + project->first("QMAKE_ORIG_TARGET");
if (project->isActiveConfig("shared"))
pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString();
}
t << shellQuote(pkgConfiglibName) << " \n";
if (project->isActiveConfig("staticlib")) {
ProStringList libs;
libs << "LIBS"; // FIXME: this should not be conditional on staticlib
libs << "LIBS_PRIVATE";
libs << "QMAKE_LIBS"; // FIXME: this should not be conditional on staticlib
libs << "QMAKE_LIBS_PRIVATE";
libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread?
t << "Libs.private:";
for (ProStringList::ConstIterator it = libs.cbegin(); it != libs.cend(); ++it)
t << ' ' << fixLibFlags((*it).toKey()).join(' ');
t << Qt::endl;
if (project->isActiveConfig("staticlib")) {
ProStringList libs;
libs << "LIBS"; // FIXME: this should not be conditional on staticlib
libs << "LIBS_PRIVATE";
libs << "QMAKE_LIBS"; // FIXME: this should not be conditional on staticlib
libs << "QMAKE_LIBS_PRIVATE";
libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread?
t << "Libs.private:";
for (ProStringList::ConstIterator it = libs.cbegin(); it != libs.cend(); ++it)
t << ' ' << fixLibFlags((*it).toKey()).join(' ');
t << Qt::endl;
}
}
// flags
@ -3433,19 +3443,23 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt
|| project->isActiveConfig("no_sed_meta_install")) {
ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + escapeFilePath(dst);
} else {
ret += "-$(SED)";
QString sedargs;
const ProStringList &replace_rules = project->values(replace_rule);
for (int r = 0; r < replace_rules.size(); ++r) {
const ProString match = project->first(ProKey(replace_rules.at(r) + ".match")),
replace = project->first(ProKey(replace_rules.at(r) + ".replace"));
if (!match.isEmpty() /*&& match != replace*/) {
ret += " -e " + shellQuote("s," + match + "," + replace + ",g");
sedargs += " -e " + shellQuote("s," + match + "," + replace + ",g");
if (isWindowsShell() && project->first(ProKey(replace_rules.at(r) + ".CONFIG")).contains("path"))
ret += " -e " + shellQuote("s," + windowsifyPath(match.toQString())
sedargs += " -e " + shellQuote("s," + windowsifyPath(match.toQString())
+ "," + windowsifyPath(replace.toQString()) + ",gi");
}
}
ret += ' ' + escapeFilePath(src) + " > " + escapeFilePath(dst);
if (sedargs.isEmpty()) {
ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + escapeFilePath(dst);
} else {
ret += "-$(SED) " + sedargs + ' ' + escapeFilePath(src) + " > " + escapeFilePath(dst);
}
}
return ret;
}

View File

@ -815,7 +815,7 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
break;
}
cpp_state = InCode;
// ... and fall through to handle buffer[x] as such.
Q_FALLTHROUGH(); // to handle buffer[x] as such.
case InCode:
// matching quotes (string literals and character literals)
if (buffer[x] == '\'' || buffer[x] == '"') {

View File

@ -43,7 +43,7 @@ protected:
void init() override;
bool writeMakefile(QTextStream &) override;
QString escapeFilePath(const QString &path) const override { Q_ASSERT(false); return QString(); }
QString escapeFilePath(const QString &) const override { Q_ASSERT(false); return QString(); }
public:
bool supportsMetaBuild() override { return false; }

View File

@ -725,7 +725,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
}
}
}
if(project->first("TEMPLATE") == "lib") {
if (isAux || project->first("TEMPLATE") == "lib") {
QStringList types;
types << "prl" << "libtool" << "pkgconfig";
for(int i = 0; i < types.size(); ++i) {

View File

@ -43,12 +43,15 @@ void
UnixMakefileGenerator::writePrlFile(QTextStream &t)
{
MakefileGenerator::writePrlFile(t);
const ProString tmplt = project->first("TEMPLATE");
if (tmplt != "lib" && tmplt != "aux")
return;
// libtool support
if(project->isActiveConfig("create_libtool") && project->first("TEMPLATE") == "lib") { //write .la
if (project->isActiveConfig("create_libtool")) {
writeLibtoolFile();
}
// pkg-config support
if(project->isActiveConfig("create_pc") && project->first("TEMPLATE") == "lib")
if (project->isActiveConfig("create_pc"))
writePkgConfigFile();
}
@ -164,6 +167,16 @@ static QString rfc1034Identifier(const QString &str)
return s;
}
static QString escapeDir(const QString &dir)
{
// When building on non-MSys MinGW, the path ends with a backslash, which
// GNU make will interpret that as a line continuation. Doubling the backslash
// avoids the problem, at the cost of the variable containing *both* backslashes.
if (dir.endsWith('\\'))
return dir + '\\';
return dir;
}
void
UnixMakefileGenerator::writeMakeParts(QTextStream &t)
{
@ -226,7 +239,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "####### Output directory\n\n";
// This is used in commands by some .prf files.
if (! project->values("OBJECTS_DIR").isEmpty())
t << "OBJECTS_DIR = " << fileVar("OBJECTS_DIR") << Qt::endl;
t << "OBJECTS_DIR = " << escapeDir(fileVar("OBJECTS_DIR")) << Qt::endl;
else
t << "OBJECTS_DIR = ./\n";
t << Qt::endl;
@ -272,13 +285,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " "
<< fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << Qt::endl;
t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << Qt::endl;
QString destd = fileVar("DESTDIR");
// When building on non-MSys MinGW, the path ends with a backslash, which
// GNU make will interpret that as a line continuation. Doubling the backslash
// avoids the problem, at the cost of the variable containing *both* backslashes.
if (destd.endsWith('\\'))
destd += '\\';
t << "DESTDIR = " << destd << Qt::endl;
t << "DESTDIR = " << escapeDir(fileVar("DESTDIR")) << Qt::endl;
t << "TARGET = " << fileVar("TARGET") << Qt::endl;
if(project->isActiveConfig("plugin")) {
t << "TARGETD = " << fileVar("TARGET") << Qt::endl;
@ -1194,7 +1201,8 @@ void UnixMakefileGenerator::init2()
project->values("QMAKE_FRAMEWORK_VERSION").append(project->first("VER_MAJ"));
if (project->first("TEMPLATE") == "aux") {
// nothing
project->values("PRL_TARGET") =
project->values("TARGET").first().prepend(project->first("QMAKE_PREFIX_STATICLIB"));
} else if (!project->values("QMAKE_APP_FLAG").isEmpty()) {
if(!project->isEmpty("QMAKE_BUNDLE")) {
ProString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION");

View File

@ -1991,6 +1991,7 @@ bool VCMIDLTool::parseOption(const char* option)
break;
case 0x5eb7af2: // /header filename
offset = 5;
Q_FALLTHROUGH();
case 0x0000358: // /h filename
HeaderFileName = option + offset + 3;
break;

View File

@ -1521,6 +1521,18 @@ void VcprojGenerator::initDistributionFiles()
vcProject.DistributionFiles.Config = &(vcProject.Configuration);
}
QString VcprojGenerator::extraCompilerName(const ProString &extraCompiler,
const QStringList &inputs,
const QStringList &outputs)
{
QString name = project->values(ProKey(extraCompiler + ".name")).join(' ');
if (name.isEmpty())
name = extraCompiler.toQString();
else
name = replaceExtraCompilerVariables(name, inputs, outputs, NoShell);
return name;
}
void VcprojGenerator::initExtraCompilerOutputs()
{
ProStringList otherFilters;
@ -1538,13 +1550,16 @@ void VcprojGenerator::initExtraCompilerOutputs()
<< "YACCSOURCES";
const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");
for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) {
ProString extracompilerName = project->first(ProKey(*it + ".name"));
if (extracompilerName.isEmpty())
extracompilerName = (*it);
const ProStringList &inputVars = project->values(ProKey(*it + ".input"));
ProStringList inputFiles;
for (auto var : inputVars)
inputFiles.append(project->values(var.toKey()));
const ProStringList &outputs = project->values(ProKey(*it + ".output"));
// Create an extra compiler filter and add the files
VCFilter extraCompile;
extraCompile.Name = extracompilerName.toQString();
extraCompile.Name = extraCompilerName(it->toQString(), inputFiles.toQStringList(),
outputs.toQStringList());
extraCompile.ParseFiles = _False;
extraCompile.Filter = "";
extraCompile.Guid = QString(_GUIDExtraCompilerFiles) + "-" + (*it);
@ -1557,14 +1572,14 @@ void VcprojGenerator::initExtraCompilerOutputs()
if (!outputVar.isEmpty() && otherFilters.contains(outputVar))
continue;
QString tmp_out = project->first(ProKey(*it + ".output")).toQString();
QString tmp_out = project->first(outputs.first().toKey()).toQString();
if (project->values(ProKey(*it + ".CONFIG")).indexOf("combine") != -1) {
// Combined output, only one file result
extraCompile.addFile(Option::fixPathToTargetOS(
replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell), false));
} else {
// One output file per input
const ProStringList &tmp_in = project->values(project->first(ProKey(*it + ".input")).toKey());
const ProStringList &tmp_in = project->values(inputVars.first().toKey());
for (int i = 0; i < tmp_in.count(); ++i) {
const QString &filename = tmp_in.at(i).toQString();
if (extraCompilerSources.contains(filename) && !otherFiltersContain(filename))
@ -1577,7 +1592,6 @@ void VcprojGenerator::initExtraCompilerOutputs()
// build steps there. So, we turn it around and add it to the input files instead,
// provided that the input file variable is not handled already (those in otherFilters
// are handled, so we avoid them).
const ProStringList &inputVars = project->values(ProKey(*it + ".input"));
for (const ProString &inputVar : inputVars) {
if (!otherFilters.contains(inputVar)) {
const ProStringList &tmp_in = project->values(inputVar.toKey());

View File

@ -74,6 +74,8 @@ protected:
bool doDepends() const override { return false; } // Never necessary
using Win32MakefileGenerator::replaceExtraCompilerVariables;
QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor) override;
QString extraCompilerName(const ProString &extraCompiler, const QStringList &inputs,
const QStringList &outputs);
bool supportsMetaBuild() override { return true; }
bool supportsMergedBuilds() override { return true; }
bool mergeBuildProject(MakefileGenerator *other) override;

View File

@ -645,7 +645,7 @@ void Win32MakefileGenerator::writeObjectsPart(QTextStream &t)
t << "OBJECTS = " << valList(escapeDependencyPaths(project->values("OBJECTS"))) << Qt::endl;
}
void Win32MakefileGenerator::writeImplicitRulesPart(QTextStream &t)
void Win32MakefileGenerator::writeImplicitRulesPart(QTextStream &)
{
}

View File

@ -1130,35 +1130,48 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
}
superdir = qdfi.path();
}
QString sdir = inDir;
QString dir = m_outputDir;
forever {
conffile = sdir + QLatin1String("/.qmake.conf");
if (!m_vfs->exists(conffile, flags))
conffile.clear();
cachefile = dir + QLatin1String("/.qmake.cache");
if (!m_vfs->exists(cachefile, flags))
cachefile.clear();
if (!conffile.isEmpty() || !cachefile.isEmpty()) {
if (dir != sdir)
m_sourceRoot = sdir;
if (!cachefile.isEmpty()) {
m_buildRoot = dir;
break;
}
if (dir == superdir)
goto no_cache;
QFileInfo qsdfi(sdir);
QFileInfo qdfi(dir);
if (qsdfi.isRoot() || qdfi.isRoot())
goto no_cache;
sdir = qsdfi.path();
if (qdfi.isRoot()) {
cachefile.clear();
break;
}
dir = qdfi.path();
}
QString sdir = inDir;
forever {
conffile = sdir + QLatin1String("/.qmake.conf");
if (!m_vfs->exists(conffile, flags))
conffile.clear();
if (!conffile.isEmpty()) {
if (sdir != m_buildRoot)
m_sourceRoot = sdir;
break;
}
QFileInfo qsdfi(sdir);
if (qsdfi.isRoot()) {
conffile.clear();
break;
}
sdir = qsdfi.path();
}
} else {
m_buildRoot = QFileInfo(cachefile).path();
}
m_conffile = QDir::cleanPath(conffile);
m_cachefile = QDir::cleanPath(cachefile);
if (!conffile.isEmpty())
m_conffile = QDir::cleanPath(conffile);
if (!cachefile.isEmpty())
m_cachefile = QDir::cleanPath(cachefile);
}
no_cache:
@ -1711,7 +1724,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFunction(
if (m_valuemapStack.size() >= 100) {
evalError(fL1S("Ran into infinite recursion (depth > 100)."));
vr = ReturnFalse;
vr = ReturnError;
} else {
m_valuemapStack.push(ProValueMap());
m_locationStack.push(m_current);

View File

@ -0,0 +1 @@
INCLUDEPATH += $$PWD/VulkanMemoryAllocator

View File

@ -0,0 +1,19 @@
Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,402 @@
diff --git a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
index a2f7a1b..fbe6f9e 100644
--- a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
+++ b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
@@ -3661,7 +3661,7 @@ static void VmaWriteMagicValue(void* pData, VkDeviceSize offset)
{
uint32_t* pDst = (uint32_t*)((char*)pData + offset);
const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t);
- for(size_t i = 0; i < numberCount; ++i, ++pDst)
+ for(size_t i = 0; i != numberCount; ++i, ++pDst)
{
*pDst = VMA_CORRUPTION_DETECTION_MAGIC_VALUE;
}
@@ -3671,7 +3671,7 @@ static bool VmaValidateMagicValue(const void* pData, VkDeviceSize offset)
{
const uint32_t* pSrc = (const uint32_t*)((const char*)pData + offset);
const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t);
- for(size_t i = 0; i < numberCount; ++i, ++pSrc)
+ for(size_t i = 0; i != numberCount; ++i, ++pSrc)
{
if(*pSrc != VMA_CORRUPTION_DETECTION_MAGIC_VALUE)
{
@@ -3866,7 +3866,7 @@ public:
template<typename U> VmaStlAllocator(const VmaStlAllocator<U>& src) : m_pCallbacks(src.m_pCallbacks) { }
T* allocate(size_t n) { return VmaAllocateArray<T>(m_pCallbacks, n); }
- void deallocate(T* p, size_t n) { VmaFree(m_pCallbacks, p); }
+ void deallocate(T* p, size_t /*n*/) { VmaFree(m_pCallbacks, p); }
template<typename U>
bool operator==(const VmaStlAllocator<U>& rhs) const
@@ -5214,7 +5214,7 @@ public:
virtual void FreeAtOffset(VkDeviceSize offset) = 0;
// Tries to resize (grow or shrink) space for given allocation, in place.
- virtual bool ResizeAllocation(const VmaAllocation alloc, VkDeviceSize newSize) { return false; }
+ virtual bool ResizeAllocation(const VmaAllocation /*alloc*/, VkDeviceSize /*newSize*/) { return false; }
protected:
const VkAllocationCallbacks* GetAllocationCallbacks() const { return m_pAllocationCallbacks; }
@@ -5574,7 +5574,7 @@ public:
virtual uint32_t MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount);
- virtual VkResult CheckCorruption(const void* pBlockData) { return VK_ERROR_FEATURE_NOT_PRESENT; }
+ virtual VkResult CheckCorruption(const void* /*pBlockData*/) { return VK_ERROR_FEATURE_NOT_PRESENT; }
virtual void Alloc(
const VmaAllocationRequest& request,
@@ -6133,7 +6133,7 @@ public:
bool overlappingMoveSupported);
virtual ~VmaDefragmentationAlgorithm_Fast();
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged) { ++m_AllocationCount; }
+ virtual void AddAllocation(VmaAllocation /*hAlloc*/, VkBool32* /*pChanged*/) { ++m_AllocationCount; }
virtual void AddAll() { m_AllAllocations = true; }
virtual VkResult Defragment(
@@ -6318,7 +6318,7 @@ private:
// Redundant, for convenience not to fetch from m_hCustomPool->m_BlockVector or m_hAllocator->m_pBlockVectors.
VmaBlockVector* const m_pBlockVector;
const uint32_t m_CurrFrameIndex;
- const uint32_t m_AlgorithmFlags;
+ /*const uint32_t m_AlgorithmFlags;*/
// Owner of this object.
VmaDefragmentationAlgorithm* m_pAlgorithm;
@@ -7073,6 +7073,7 @@ void VmaJsonWriter::BeginValue(bool isString)
if(currItem.type == COLLECTION_TYPE_OBJECT &&
currItem.valueCount % 2 == 0)
{
+ (void) isString;
VMA_ASSERT(isString);
}
@@ -7660,7 +7661,9 @@ bool VmaBlockMetadata_Generic::Validate() const
}
// Margin required between allocations - every free space must be at least that large.
+#if VMA_DEBUG_MARGIN
VMA_VALIDATE(subAlloc.size >= VMA_DEBUG_MARGIN);
+#endif
}
else
{
@@ -7806,6 +7809,7 @@ bool VmaBlockMetadata_Generic::CreateAllocationRequest(
{
VMA_ASSERT(allocSize > 0);
VMA_ASSERT(!upperAddress);
+ (void) upperAddress;
VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);
VMA_ASSERT(pAllocationRequest != VMA_NULL);
VMA_HEAVY_ASSERT(Validate());
@@ -8033,6 +8037,7 @@ void VmaBlockMetadata_Generic::Alloc(
VmaAllocation hAllocation)
{
VMA_ASSERT(!upperAddress);
+ (void) upperAddress;
VMA_ASSERT(request.item != m_Suballocations.end());
VmaSuballocation& suballoc = *request.item;
// Given suballocation is a free block.
@@ -9609,7 +9614,7 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest(
bool upperAddress,
VmaSuballocationType allocType,
bool canMakeOtherLost,
- uint32_t strategy,
+ uint32_t /*strategy*/,
VmaAllocationRequest* pAllocationRequest)
{
VMA_ASSERT(allocSize > 0);
@@ -9651,10 +9656,12 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest(
// Apply VMA_DEBUG_MARGIN at the end.
if(VMA_DEBUG_MARGIN > 0)
{
+#if VMA_DEBUG_MARGIN
if(resultOffset < VMA_DEBUG_MARGIN)
{
return false;
}
+#endif
resultOffset -= VMA_DEBUG_MARGIN;
}
@@ -10542,18 +10549,19 @@ void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json) const
#endif // #if VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Buddy::CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
+ uint32_t /*currentFrameIndex*/,
+ uint32_t /*frameInUseCount*/,
VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
+ bool /*canMakeOtherLost*/,
+ uint32_t /*strategy*/,
VmaAllocationRequest* pAllocationRequest)
{
VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.");
+ (void) upperAddress;
// Simple way to respect bufferImageGranularity. May be optimized some day.
// Whenever it might be an OPTIMAL image...
@@ -10593,8 +10601,8 @@ bool VmaBlockMetadata_Buddy::CreateAllocationRequest(
}
bool VmaBlockMetadata_Buddy::MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
+ uint32_t /*currentFrameIndex*/,
+ uint32_t /*frameInUseCount*/,
VmaAllocationRequest* pAllocationRequest)
{
/*
@@ -10604,7 +10612,7 @@ bool VmaBlockMetadata_Buddy::MakeRequestedAllocationsLost(
return pAllocationRequest->itemsToMakeLostCount == 0;
}
-uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
+uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t /*currentFrameIndex*/, uint32_t /*frameInUseCount*/)
{
/*
Lost allocations are not supported in buddy allocator at the moment.
@@ -10615,9 +10623,9 @@ uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t currentFrameIndex,
void VmaBlockMetadata_Buddy::Alloc(
const VmaAllocationRequest& request,
- VmaSuballocationType type,
+ VmaSuballocationType /*type*/,
VkDeviceSize allocSize,
- bool upperAddress,
+ bool /*upperAddress*/,
VmaAllocation hAllocation)
{
const uint32_t targetLevel = AllocSizeToLevel(allocSize);
@@ -10941,7 +10949,7 @@ void VmaBlockMetadata_Buddy::PrintDetailedMapNode(class VmaJsonWriter& json, con
////////////////////////////////////////////////////////////////////////////////
// class VmaDeviceMemoryBlock
-VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(VmaAllocator hAllocator) :
+VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(VmaAllocator /*hAllocator*/) :
m_pMetadata(VMA_NULL),
m_MemoryTypeIndex(UINT32_MAX),
m_Id(0),
@@ -11691,6 +11699,7 @@ VkResult VmaBlockVector::AllocatePage(
if(IsCorruptionDetectionEnabled())
{
VkResult res = pBestRequestBlock->WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);
+ (void) res;
VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
}
return VK_SUCCESS;
@@ -11729,6 +11738,7 @@ void VmaBlockVector::Free(
if(IsCorruptionDetectionEnabled())
{
VkResult res = pBlock->ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation->GetOffset(), hAllocation->GetSize());
+ (void) res;
VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to validate magic value.");
}
@@ -11894,6 +11904,7 @@ VkResult VmaBlockVector::AllocateFromBlock(
if(IsCorruptionDetectionEnabled())
{
VkResult res = pBlock->WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);
+ (void) res;
VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
}
return VK_SUCCESS;
@@ -11903,7 +11914,8 @@ VkResult VmaBlockVector::AllocateFromBlock(
VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex)
{
- VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };
+ VkMemoryAllocateInfo allocInfo = {};
+ allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
allocInfo.memoryTypeIndex = m_MemoryTypeIndex;
allocInfo.allocationSize = blockSize;
VkDeviceMemory mem = VK_NULL_HANDLE;
@@ -11991,7 +12003,8 @@ void VmaBlockVector::ApplyDefragmentationMovesCpu(
if(pDefragCtx->res == VK_SUCCESS)
{
const VkDeviceSize nonCoherentAtomSize = m_hAllocator->m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
- VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
+ VkMappedMemoryRange memRange = {};
+ memRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
{
@@ -12076,7 +12089,8 @@ void VmaBlockVector::ApplyDefragmentationMovesGpu(
// Go over all blocks. Create and bind buffer for whole block if necessary.
{
- VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+ VkBufferCreateInfo bufCreateInfo = {};
+ bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
VK_BUFFER_USAGE_TRANSFER_DST_BIT;
@@ -12101,8 +12115,9 @@ void VmaBlockVector::ApplyDefragmentationMovesGpu(
// Go over all moves. Post data transfer commands to command buffer.
if(pDefragCtx->res == VK_SUCCESS)
{
- const VkDeviceSize nonCoherentAtomSize = m_hAllocator->m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
- VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
+ /*const VkDeviceSize nonCoherentAtomSize = m_hAllocator->m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
+ VkMappedMemoryRange memRange = {};
+ memRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;*/
for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
{
@@ -12435,10 +12450,10 @@ VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(
VmaAllocator hAllocator,
VmaBlockVector* pBlockVector,
uint32_t currentFrameIndex,
- bool overlappingMoveSupported) :
+ bool /*overlappingMoveSupported*/) :
VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),
- m_AllAllocations(false),
m_AllocationCount(0),
+ m_AllAllocations(false),
m_BytesMoved(0),
m_AllocationsMoved(0),
m_Blocks(VmaStlAllocator<BlockInfo*>(hAllocator->GetAllocationCallbacks()))
@@ -12813,7 +12828,7 @@ VkResult VmaDefragmentationAlgorithm_Fast::Defragment(
size_t freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;
VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector->GetBlock(freeSpaceOrigBlockIndex);
VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock->m_pMetadata;
- VkDeviceSize freeSpaceBlockSize = pFreeSpaceMetadata->GetSize();
+ /*VkDeviceSize freeSpaceBlockSize = pFreeSpaceMetadata->GetSize();*/
// Same block
if(freeSpaceInfoIndex == srcBlockInfoIndex)
@@ -13098,7 +13113,7 @@ VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(
VmaPool hCustomPool,
VmaBlockVector* pBlockVector,
uint32_t currFrameIndex,
- uint32_t algorithmFlags) :
+ uint32_t /*algorithmFlags*/) :
res(VK_SUCCESS),
mutexLocked(false),
blockContexts(VmaStlAllocator<VmaBlockDefragmentationContext>(hAllocator->GetAllocationCallbacks())),
@@ -13106,7 +13121,7 @@ VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(
m_hCustomPool(hCustomPool),
m_pBlockVector(pBlockVector),
m_CurrFrameIndex(currFrameIndex),
- m_AlgorithmFlags(algorithmFlags),
+ /*m_AlgorithmFlags(algorithmFlags),*/
m_pAlgorithm(VMA_NULL),
m_Allocations(VmaStlAllocator<AllocInfo>(hAllocator->GetAllocationCallbacks())),
m_AllAllocations(false)
@@ -14311,19 +14326,21 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
bool map,
bool isUserDataString,
void* pUserData,
- VkBuffer dedicatedBuffer,
- VkImage dedicatedImage,
+ VkBuffer /*dedicatedBuffer*/,
+ VkImage /*dedicatedImage*/,
size_t allocationCount,
VmaAllocation* pAllocations)
{
VMA_ASSERT(allocationCount > 0 && pAllocations);
- VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };
+ VkMemoryAllocateInfo allocInfo = {};
+ allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
allocInfo.memoryTypeIndex = memTypeIndex;
allocInfo.allocationSize = size;
#if VMA_DEDICATED_ALLOCATION
- VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };
+ VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = {};
+ dedicatedAllocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR;
if(m_UseKhrDedicatedAllocation)
{
if(dedicatedBuffer != VK_NULL_HANDLE)
@@ -14341,7 +14358,7 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
#endif // #if VMA_DEDICATED_ALLOCATION
size_t allocIndex;
- VkResult res;
+ VkResult res = VK_SUCCESS;
for(allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
{
res = AllocateDedicatedMemoryPage(
@@ -14460,12 +14477,15 @@ void VmaAllocator_T::GetBufferMemoryRequirements(
#if VMA_DEDICATED_ALLOCATION
if(m_UseKhrDedicatedAllocation)
{
- VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR };
+ VkBufferMemoryRequirementsInfo2KHR memReqInfo = {};
+ memReqInfo.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR;
memReqInfo.buffer = hBuffer;
- VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };
+ VkMemoryDedicatedRequirementsKHR memDedicatedReq = {};
+ memDedicatedReq.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR;
- VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };
+ VkMemoryRequirements2KHR memReq2 = {};
+ memReq2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR;
memReq2.pNext = &memDedicatedReq;
(*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2);
@@ -14492,12 +14512,15 @@ void VmaAllocator_T::GetImageMemoryRequirements(
#if VMA_DEDICATED_ALLOCATION
if(m_UseKhrDedicatedAllocation)
{
- VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR };
+ VkImageMemoryRequirementsInfo2KHR memReqInfo = {};
+ memReqInfo.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR;
memReqInfo.image = hImage;
- VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };
+ VkMemoryDedicatedRequirementsKHR memDedicatedReq = {};
+ memDedicatedReq.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR;
- VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };
+ VkMemoryRequirements2KHR memReq2 = {};
+ memReq2.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR;
memReq2.pNext = &memDedicatedReq;
(*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2);
@@ -14734,7 +14757,7 @@ VkResult VmaAllocator_T::ResizeAllocation(
}
else
{
- return VK_ERROR_OUT_OF_POOL_MEMORY;
+ return VkResult(-1000069000); // VK_ERROR_OUT_OF_POOL_MEMORY
}
default:
VMA_ASSERT(0);
@@ -15000,6 +15023,7 @@ void VmaAllocator_T::DestroyPool(VmaPool pool)
{
VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);
bool success = VmaVectorRemoveSorted<VmaPointerLess>(m_Pools, pool);
+ (void) success;
VMA_ASSERT(success && "Pool not found in Allocator.");
}
@@ -15248,7 +15272,8 @@ void VmaAllocator_T::FlushOrInvalidateAllocation(
const VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
- VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
+ VkMappedMemoryRange memRange = {};
+ memRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
memRange.memory = hAllocation->GetMemory();
switch(hAllocation->GetType())
@@ -15321,6 +15346,7 @@ void VmaAllocator_T::FreeDedicatedMemory(VmaAllocation allocation)
AllocationVectorType* const pDedicatedAllocations = m_pDedicatedAllocations[memTypeIndex];
VMA_ASSERT(pDedicatedAllocations);
bool success = VmaVectorRemoveSorted<VmaPointerLess>(*pDedicatedAllocations, allocation);
+ (void) success;
VMA_ASSERT(success);
}

View File

@ -0,0 +1,14 @@
diff --git a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
index fbe6f9e3e8..f043bdc289 100644
--- a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
+++ b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
@@ -12074,7 +12074,8 @@ void VmaBlockVector::ApplyDefragmentationMovesGpu(
const size_t blockCount = m_Blocks.size();
pDefragCtx->blockContexts.resize(blockCount);
- memset(pDefragCtx->blockContexts.data(), 0, blockCount * sizeof(VmaBlockDefragmentationContext));
+ for (size_t i = 0; i < blockCount; ++i)
+ pDefragCtx->blockContexts[i] = VmaBlockDefragmentationContext();
// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.
const size_t moveCount = moves.size();

View File

@ -0,0 +1,13 @@
diff --git a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
index f043bdc289..2355de091f 100644
--- a/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
+++ b/src/3rdparty/VulkanMemoryAllocator/vk_mem_alloc.h
@@ -3298,7 +3298,7 @@ void *aligned_alloc(size_t alignment, size_t size)
std::shared_mutex m_Mutex;
};
#define VMA_RW_MUTEX VmaRWMutex
- #elif defined(_WIN32)
+ #elif defined(_WIN32) && !defined(__MINGW32__)
// Use SRWLOCK from WinAPI.
class VmaRWMutex
{

View File

@ -0,0 +1,16 @@
[
{
"Id": "VulkanMemoryAllocator",
"Name": "Vulkan Memory Allocator",
"QDocModule": "qtrhi",
"Description": "Vulkan Memory Allocator",
"QtUsage": "Memory management for the Vulkan backend of QRhi.",
"Homepage": "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator",
"Version": "2.2.0",
"License": "MIT License",
"LicenseId": "MIT",
"LicenseFile": "LICENSE.txt",
"Copyright": "Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved."
}
]

File diff suppressed because it is too large Load Diff

View File

@ -1,77 +1,77 @@
LIBRARY libEGL
EXPORTS
eglBindAPI @14
eglBindTexImage @20
eglChooseConfig @7
eglCopyBuffers @33
eglCreateContext @23
eglCreatePbufferFromClientBuffer @18
eglCreatePbufferSurface @10
eglCreatePixmapSurface @11
eglCreateWindowSurface @9
eglDestroyContext @24
eglDestroySurface @12
eglGetConfigAttrib @8
eglGetConfigs @6
eglGetCurrentContext @26
eglGetCurrentDisplay @28
eglGetCurrentSurface @27
eglGetDisplay @2
eglGetError @1
eglGetProcAddress @34
eglInitialize @3
eglMakeCurrent @25
eglQueryAPI @15
eglQueryContext @29
eglQueryString @5
eglQuerySurface @13
eglReleaseTexImage @21
eglReleaseThread @17
eglSurfaceAttrib @19
eglSwapBuffers @32
eglSwapInterval @22
eglTerminate @4
eglWaitClient @16
eglWaitGL @30
eglWaitNative @31
eglBindAPI@4 @14
eglBindTexImage@12 @20
eglChooseConfig@20 @7
eglCopyBuffers@12 @33
eglCreateContext@16 @23
eglCreatePbufferFromClientBuffer@20 @18
eglCreatePbufferSurface@12 @10
eglCreatePixmapSurface@16 @11
eglCreateWindowSurface@16 @9
eglDestroyContext@8 @24
eglDestroySurface@8 @12
eglGetConfigAttrib@16 @8
eglGetConfigs@16 @6
eglGetCurrentContext@0 @26
eglGetCurrentDisplay@0 @28
eglGetCurrentSurface@4 @27
eglGetDisplay@4 @2
eglGetError@0 @1
eglGetProcAddress@4 @34
eglInitialize@12 @3
eglMakeCurrent@16 @25
eglQueryAPI@0 @15
eglQueryContext@16 @29
eglQueryString@8 @5
eglQuerySurface@16 @13
eglReleaseTexImage@12 @21
eglReleaseThread@0 @17
eglSurfaceAttrib@16 @19
eglSwapBuffers@8 @32
eglSwapInterval@8 @22
eglTerminate@4 @4
eglWaitClient@0 @16
eglWaitGL@0 @30
eglWaitNative@4 @31
; Extensions
eglGetPlatformDisplayEXT @35
eglQuerySurfacePointerANGLE @36
eglPostSubBufferNV @37
eglQueryDisplayAttribEXT @48
eglQueryDeviceAttribEXT @49
eglQueryDeviceStringEXT @50
eglCreateImageKHR @51
eglDestroyImageKHR @52
eglCreateDeviceANGLE @53
eglReleaseDeviceANGLE @54
eglCreateStreamKHR @55
eglDestroyStreamKHR @56
eglStreamAttribKHR @57
eglQueryStreamKHR @58
eglQueryStreamu64KHR @59
eglStreamConsumerGLTextureExternalKHR @60
eglStreamConsumerAcquireKHR @61
eglStreamConsumerReleaseKHR @62
eglStreamConsumerGLTextureExternalAttribsNV @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64
eglStreamPostD3DTextureNV12ANGLE @65
eglGetSyncValuesCHROMIUM @66
eglSwapBuffersWithDamageEXT @67
eglProgramCacheGetAttribANGLE @68
eglProgramCachePopulateANGLE @69
eglProgramCacheQueryANGLE @70
eglProgramCacheResizeANGLE @71
eglGetPlatformDisplayEXT@12 @35
eglQuerySurfacePointerANGLE@16 @36
eglPostSubBufferNV@24 @37
eglQueryDisplayAttribEXT@12 @48
eglQueryDeviceAttribEXT@12 @49
eglQueryDeviceStringEXT@8 @50
eglCreateImageKHR@20 @51
eglDestroyImageKHR@8 @52
eglCreateDeviceANGLE@12 @53
eglReleaseDeviceANGLE@4 @54
eglCreateStreamKHR@8 @55
eglDestroyStreamKHR@8 @56
eglStreamAttribKHR@16 @57
eglQueryStreamKHR@16 @58
eglQueryStreamu64KHR@16 @59
eglStreamConsumerGLTextureExternalKHR@8 @60
eglStreamConsumerAcquireKHR@8 @61
eglStreamConsumerReleaseKHR@8 @62
eglStreamConsumerGLTextureExternalAttribsNV@12 @63
eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
eglStreamPostD3DTextureNV12ANGLE@16 @65
eglGetSyncValuesCHROMIUM@20 @66
eglSwapBuffersWithDamageEXT@16 @67
eglProgramCacheGetAttribANGLE@8 @68
eglProgramCachePopulateANGLE@20 @69
eglProgramCacheQueryANGLE@24 @70
eglProgramCacheResizeANGLE@12 @71
; 1.5 entry points
eglCreateSync @38
eglDestroySync @39
eglClientWaitSync @40
eglGetSyncAttrib @41
eglCreateImage @42
eglDestroyImage @43
eglGetPlatformDisplay @44
eglCreatePlatformWindowSurface @45
eglCreatePlatformPixmapSurface @46
eglWaitSync @47
eglCreateSync@12 @38
eglDestroySync@8 @39
eglClientWaitSync@20 @40
eglGetSyncAttrib@16 @41
eglCreateImage@20 @42
eglDestroyImage@8 @43
eglGetPlatformDisplay@12 @44
eglCreatePlatformWindowSurface@16 @45
eglCreatePlatformPixmapSurface@16 @46
eglWaitSync@12 @47

View File

@ -1,77 +1,77 @@
LIBRARY libEGL
EXPORTS
eglBindAPI @14
eglBindTexImage @20
eglChooseConfig @7
eglCopyBuffers @33
eglCreateContext @23
eglCreatePbufferFromClientBuffer @18
eglCreatePbufferSurface @10
eglCreatePixmapSurface @11
eglCreateWindowSurface @9
eglDestroyContext @24
eglDestroySurface @12
eglGetConfigAttrib @8
eglGetConfigs @6
eglGetCurrentContext @26
eglGetCurrentDisplay @28
eglGetCurrentSurface @27
eglGetDisplay @2
eglGetError @1
eglGetProcAddress @34
eglInitialize @3
eglMakeCurrent @25
eglQueryAPI @15
eglQueryContext @29
eglQueryString @5
eglQuerySurface @13
eglReleaseTexImage @21
eglReleaseThread @17
eglSurfaceAttrib @19
eglSwapBuffers @32
eglSwapInterval @22
eglTerminate @4
eglWaitClient @16
eglWaitGL @30
eglWaitNative @31
eglBindAPI@4 @14
eglBindTexImage@12 @20
eglChooseConfig@20 @7
eglCopyBuffers@12 @33
eglCreateContext@16 @23
eglCreatePbufferFromClientBuffer@20 @18
eglCreatePbufferSurface@12 @10
eglCreatePixmapSurface@16 @11
eglCreateWindowSurface@16 @9
eglDestroyContext@8 @24
eglDestroySurface@8 @12
eglGetConfigAttrib@16 @8
eglGetConfigs@16 @6
eglGetCurrentContext@0 @26
eglGetCurrentDisplay@0 @28
eglGetCurrentSurface@4 @27
eglGetDisplay@4 @2
eglGetError@0 @1
eglGetProcAddress@4 @34
eglInitialize@12 @3
eglMakeCurrent@16 @25
eglQueryAPI@0 @15
eglQueryContext@16 @29
eglQueryString@8 @5
eglQuerySurface@16 @13
eglReleaseTexImage@12 @21
eglReleaseThread@0 @17
eglSurfaceAttrib@16 @19
eglSwapBuffers@8 @32
eglSwapInterval@8 @22
eglTerminate@4 @4
eglWaitClient@0 @16
eglWaitGL@0 @30
eglWaitNative@4 @31
; Extensions
eglGetPlatformDisplayEXT @35
eglQuerySurfacePointerANGLE @36
eglPostSubBufferNV @37
eglQueryDisplayAttribEXT @48
eglQueryDeviceAttribEXT @49
eglQueryDeviceStringEXT @50
eglCreateImageKHR @51
eglDestroyImageKHR @52
eglCreateDeviceANGLE @53
eglReleaseDeviceANGLE @54
eglCreateStreamKHR @55
eglDestroyStreamKHR @56
eglStreamAttribKHR @57
eglQueryStreamKHR @58
eglQueryStreamu64KHR @59
eglStreamConsumerGLTextureExternalKHR @60
eglStreamConsumerAcquireKHR @61
eglStreamConsumerReleaseKHR @62
eglStreamConsumerGLTextureExternalAttribsNV @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64
eglStreamPostD3DTextureNV12ANGLE @65
eglGetSyncValuesCHROMIUM @66
eglSwapBuffersWithDamageEXT @67
eglProgramCacheGetAttribANGLE @68
eglProgramCachePopulateANGLE @69
eglProgramCacheQueryANGLE @70
eglProgramCacheResizeANGLE @71
eglGetPlatformDisplayEXT@12 @35
eglQuerySurfacePointerANGLE@16 @36
eglPostSubBufferNV@24 @37
eglQueryDisplayAttribEXT@12 @48
eglQueryDeviceAttribEXT@12 @49
eglQueryDeviceStringEXT@8 @50
eglCreateImageKHR@20 @51
eglDestroyImageKHR@8 @52
eglCreateDeviceANGLE@12 @53
eglReleaseDeviceANGLE@4 @54
eglCreateStreamKHR@8 @55
eglDestroyStreamKHR@8 @56
eglStreamAttribKHR@16 @57
eglQueryStreamKHR@16 @58
eglQueryStreamu64KHR@16 @59
eglStreamConsumerGLTextureExternalKHR@8 @60
eglStreamConsumerAcquireKHR@8 @61
eglStreamConsumerReleaseKHR@8 @62
eglStreamConsumerGLTextureExternalAttribsNV@12 @63
eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
eglStreamPostD3DTextureNV12ANGLE@16 @65
eglGetSyncValuesCHROMIUM@20 @66
eglSwapBuffersWithDamageEXT@16 @67
eglProgramCacheGetAttribANGLE@8 @68
eglProgramCachePopulateANGLE@20 @69
eglProgramCacheQueryANGLE@24 @70
eglProgramCacheResizeANGLE@12 @71
; 1.5 entry points
eglCreateSync @38
eglDestroySync @39
eglClientWaitSync @40
eglGetSyncAttrib @41
eglCreateImage @42
eglDestroyImage @43
eglGetPlatformDisplay @44
eglCreatePlatformWindowSurface @45
eglCreatePlatformPixmapSurface @46
eglWaitSync @47
eglCreateSync@12 @38
eglDestroySync@8 @39
eglClientWaitSync@20 @40
eglGetSyncAttrib@16 @41
eglCreateImage@20 @42
eglDestroyImage@8 @43
eglGetPlatformDisplay@12 @44
eglCreatePlatformWindowSurface@16 @45
eglCreatePlatformPixmapSurface@16 @46
eglWaitSync@12 @47

View File

@ -1,412 +1,411 @@
LIBRARY libGLESv2
EXPORTS
glActiveTexture @1
glAttachShader @2
glBindAttribLocation @3
glBindBuffer @4
glBindFramebuffer @5
glBindRenderbuffer @6
glBindTexture @7
glBlendColor @8
glBlendEquation @9
glBlendEquationSeparate @10
glBlendFunc @11
glBlendFuncSeparate @12
glBufferData @13
glBufferSubData @14
glCheckFramebufferStatus @15
glClear @16
glClearColor @17
glClearDepthf @18
glClearStencil @19
glColorMask @20
glCompileShader @21
glCompressedTexImage2D @22
glCompressedTexSubImage2D @23
glCopyTexImage2D @24
glCopyTexSubImage2D @25
glCreateProgram @26
glCreateShader @27
glCullFace @28
glDeleteBuffers @29
glDeleteFramebuffers @30
glDeleteProgram @32
glDeleteRenderbuffers @33
glDeleteShader @34
glDeleteTextures @31
glDepthFunc @36
glDepthMask @37
glDepthRangef @38
glDetachShader @35
glDisable @39
glDisableVertexAttribArray @40
glDrawArrays @41
glDrawElements @42
glEnable @43
glEnableVertexAttribArray @44
glFinish @45
glFlush @46
glFramebufferRenderbuffer @47
glFramebufferTexture2D @48
glFrontFace @49
glGenBuffers @50
glGenFramebuffers @52
glGenRenderbuffers @53
glGenTextures @54
glGenerateMipmap @51
glGetActiveAttrib @55
glGetActiveUniform @56
glGetAttachedShaders @57
glGetAttribLocation @58
glGetBooleanv @59
glGetBufferParameteriv @60
glGetError @61
glGetFloatv @62
glGetFramebufferAttachmentParameteriv @63
glGetIntegerv @64
glGetProgramInfoLog @66
glGetProgramiv @65
glGetRenderbufferParameteriv @67
glGetShaderInfoLog @69
glGetShaderPrecisionFormat @70
glGetShaderSource @71
glGetShaderiv @68
glGetString @72
glGetTexParameterfv @73
glGetTexParameteriv @74
glGetUniformLocation @77
glGetUniformfv @75
glGetUniformiv @76
glGetVertexAttribPointerv @80
glGetVertexAttribfv @78
glGetVertexAttribiv @79
glHint @81
glIsBuffer @82
glIsEnabled @83
glIsFramebuffer @84
glIsProgram @85
glIsRenderbuffer @86
glIsShader @87
glIsTexture @88
glLineWidth @89
glLinkProgram @90
glPixelStorei @91
glPolygonOffset @92
glReadPixels @93
glReleaseShaderCompiler @94
glRenderbufferStorage @95
glSampleCoverage @96
glScissor @97
glShaderBinary @98
glShaderSource @99
glStencilFunc @100
glStencilFuncSeparate @101
glStencilMask @102
glStencilMaskSeparate @103
glStencilOp @104
glStencilOpSeparate @105
glTexImage2D @106
glTexParameterf @107
glTexParameterfv @108
glTexParameteri @109
glTexParameteriv @110
glTexSubImage2D @111
glUniform1f @112
glUniform1fv @113
glUniform1i @114
glUniform1iv @115
glUniform2f @116
glUniform2fv @117
glUniform2i @118
glUniform2iv @119
glUniform3f @120
glUniform3fv @121
glUniform3i @122
glUniform3iv @123
glUniform4f @124
glUniform4fv @125
glUniform4i @126
glUniform4iv @127
glUniformMatrix2fv @128
glUniformMatrix3fv @129
glUniformMatrix4fv @130
glUseProgram @131
glValidateProgram @132
glVertexAttrib1f @133
glVertexAttrib1fv @134
glVertexAttrib2f @135
glVertexAttrib2fv @136
glVertexAttrib3f @137
glVertexAttrib3fv @138
glVertexAttrib4f @139
glVertexAttrib4fv @140
glVertexAttribPointer @141
glViewport @142
glActiveTexture@4 @1
glAttachShader@8 @2
glBindAttribLocation@12 @3
glBindBuffer@8 @4
glBindFramebuffer@8 @5
glBindRenderbuffer@8 @6
glBindTexture@8 @7
glBlendColor@16 @8
glBlendEquation@4 @9
glBlendEquationSeparate@8 @10
glBlendFunc@8 @11
glBlendFuncSeparate@16 @12
glBufferData@16 @13
glBufferSubData@16 @14
glCheckFramebufferStatus@4 @15
glClear@4 @16
glClearColor@16 @17
glClearDepthf@4 @18
glClearStencil@4 @19
glColorMask@16 @20
glCompileShader@4 @21
glCompressedTexImage2D@32 @22
glCompressedTexSubImage2D@36 @23
glCopyTexImage2D@32 @24
glCopyTexSubImage2D@32 @25
glCreateProgram@0 @26
glCreateShader@4 @27
glCullFace@4 @28
glDeleteBuffers@8 @29
glDeleteFramebuffers@8 @30
glDeleteProgram@4 @32
glDeleteRenderbuffers@8 @33
glDeleteShader@4 @34
glDeleteTextures@8 @31
glDepthFunc@4 @36
glDepthMask@4 @37
glDepthRangef@8 @38
glDetachShader@8 @35
glDisable@4 @39
glDisableVertexAttribArray@4 @40
glDrawArrays@12 @41
glDrawElements@16 @42
glEnable@4 @43
glEnableVertexAttribArray@4 @44
glFinish@0 @45
glFlush@0 @46
glFramebufferRenderbuffer@16 @47
glFramebufferTexture2D@20 @48
glFrontFace@4 @49
glGenBuffers@8 @50
glGenFramebuffers@8 @52
glGenRenderbuffers@8 @53
glGenTextures@8 @54
glGenerateMipmap@4 @51
glGetActiveAttrib@28 @55
glGetActiveUniform@28 @56
glGetAttachedShaders@16 @57
glGetAttribLocation@8 @58
glGetBooleanv@8 @59
glGetBufferParameteriv@12 @60
glGetError@0 @61
glGetFloatv@8 @62
glGetFramebufferAttachmentParameteriv@16 @63
glGetIntegerv@8 @64
glGetProgramInfoLog@16 @66
glGetProgramiv@12 @65
glGetRenderbufferParameteriv@12 @67
glGetShaderInfoLog@16 @69
glGetShaderPrecisionFormat@16 @70
glGetShaderSource@16 @71
glGetShaderiv@12 @68
glGetString@4 @72
glGetTexParameterfv@12 @73
glGetTexParameteriv@12 @74
glGetUniformLocation@8 @77
glGetUniformfv@12 @75
glGetUniformiv@12 @76
glGetVertexAttribPointerv@12 @80
glGetVertexAttribfv@12 @78
glGetVertexAttribiv@12 @79
glHint@8 @81
glIsBuffer@4 @82
glIsEnabled@4 @83
glIsFramebuffer@4 @84
glIsProgram@4 @85
glIsRenderbuffer@4 @86
glIsShader@4 @87
glIsTexture@4 @88
glLineWidth@4 @89
glLinkProgram@4 @90
glPixelStorei@8 @91
glPolygonOffset@8 @92
glReadPixels@28 @93
glReleaseShaderCompiler@0 @94
glRenderbufferStorage@16 @95
glSampleCoverage@8 @96
glScissor@16 @97
glShaderBinary@20 @98
glShaderSource@16 @99
glStencilFunc@12 @100
glStencilFuncSeparate@16 @101
glStencilMask@4 @102
glStencilMaskSeparate@8 @103
glStencilOp@12 @104
glStencilOpSeparate@16 @105
glTexImage2D@36 @106
glTexParameterf@12 @107
glTexParameterfv@12 @108
glTexParameteri@12 @109
glTexParameteriv@12 @110
glTexSubImage2D@36 @111
glUniform1f@8 @112
glUniform1fv@12 @113
glUniform1i@8 @114
glUniform1iv@12 @115
glUniform2f@12 @116
glUniform2fv@12 @117
glUniform2i@12 @118
glUniform2iv@12 @119
glUniform3f@16 @120
glUniform3fv@12 @121
glUniform3i@16 @122
glUniform3iv@12 @123
glUniform4f@20 @124
glUniform4fv@12 @125
glUniform4i@20 @126
glUniform4iv@12 @127
glUniformMatrix2fv@16 @128
glUniformMatrix3fv@16 @129
glUniformMatrix4fv@16 @130
glUseProgram@4 @131
glValidateProgram@4 @132
glVertexAttrib1f@8 @133
glVertexAttrib1fv@8 @134
glVertexAttrib2f@12 @135
glVertexAttrib2fv@8 @136
glVertexAttrib3f@16 @137
glVertexAttrib3fv@8 @138
glVertexAttrib4f@20 @139
glVertexAttrib4fv@8 @140
glVertexAttribPointer@24 @141
glViewport@16 @142
; Extensions
glBlitFramebufferANGLE @149
glRenderbufferStorageMultisampleANGLE @150
glDeleteFencesNV @151
glFinishFenceNV @152
glGenFencesNV @153
glGetFenceivNV @154
glIsFenceNV @155
glSetFenceNV @156
glTestFenceNV @157
glGetTranslatedShaderSourceANGLE @159
glTexStorage2DEXT @160
glGetGraphicsResetStatusEXT @161
glReadnPixelsEXT @162
glGetnUniformfvEXT @163
glGetnUniformivEXT @164
glGenQueriesEXT @165
glDeleteQueriesEXT @166
glIsQueryEXT @167
glBeginQueryEXT @168
glEndQueryEXT @169
glGetQueryivEXT @170
glGetQueryObjectuivEXT @171
glVertexAttribDivisorANGLE @172
glDrawArraysInstancedANGLE @173
glDrawElementsInstancedANGLE @174
glProgramBinaryOES @175
glGetProgramBinaryOES @176
glDrawBuffersEXT @179
glMapBufferOES @285
glUnmapBufferOES @286
glGetBufferPointervOES @287
glMapBufferRangeEXT @288
glFlushMappedBufferRangeEXT @289
glDiscardFramebufferEXT @293
glInsertEventMarkerEXT @294
glPushGroupMarkerEXT @295
glPopGroupMarkerEXT @296
glEGLImageTargetTexture2DOES @297
glEGLImageTargetRenderbufferStorageOES @298
glBindVertexArrayOES @299
glDeleteVertexArraysOES @300
glGenVertexArraysOES @301
glIsVertexArrayOES @302
glDebugMessageControlKHR @303
glDebugMessageInsertKHR @304
glDebugMessageCallbackKHR @305
glGetDebugMessageLogKHR @306
glPushDebugGroupKHR @307
glPopDebugGroupKHR @308
glObjectLabelKHR @309
glGetObjectLabelKHR @310
glObjectPtrLabelKHR @311
glGetObjectPtrLabelKHR @312
glGetPointervKHR @313
glQueryCounterEXT @314
glGetQueryObjectivEXT @315
glGetQueryObjecti64vEXT @316
glGetQueryObjectui64vEXT @317
glBindUniformLocationCHROMIUM @318
glCoverageModulationCHROMIUM @319
glBlitFramebufferANGLE@40 @149
glRenderbufferStorageMultisampleANGLE@20 @150
glDeleteFencesNV@8 @151
glFinishFenceNV@4 @152
glGenFencesNV@8 @153
glGetFenceivNV@12 @154
glIsFenceNV@4 @155
glSetFenceNV@8 @156
glTestFenceNV@4 @157
glGetTranslatedShaderSourceANGLE@16 @159
glTexStorage2DEXT@20 @160
glGetGraphicsResetStatusEXT@0 @161
glReadnPixelsEXT@32 @162
glGetnUniformfvEXT@16 @163
glGetnUniformivEXT@16 @164
glGenQueriesEXT@8 @165
glDeleteQueriesEXT@8 @166
glIsQueryEXT@4 @167
glBeginQueryEXT@8 @168
glEndQueryEXT@4 @169
glGetQueryivEXT@12 @170
glGetQueryObjectuivEXT@12 @171
glVertexAttribDivisorANGLE@8 @172
glDrawArraysInstancedANGLE@16 @173
glDrawElementsInstancedANGLE@20 @174
glProgramBinaryOES@16 @175
glGetProgramBinaryOES@20 @176
glDrawBuffersEXT@8 @179
glMapBufferOES@8 @285
glUnmapBufferOES@4 @286
glGetBufferPointervOES@12 @287
glMapBufferRangeEXT@16 @288
glFlushMappedBufferRangeEXT@12 @289
glDiscardFramebufferEXT@12 @293
glInsertEventMarkerEXT@8 @294
glPushGroupMarkerEXT@8 @295
glPopGroupMarkerEXT@0 @296
glEGLImageTargetTexture2DOES@8 @297
glEGLImageTargetRenderbufferStorageOES@8 @298
glBindVertexArrayOES@4 @299
glDeleteVertexArraysOES@8 @300
glGenVertexArraysOES@8 @301
glIsVertexArrayOES@4 @302
glDebugMessageControlKHR@24 @303
glDebugMessageInsertKHR@24 @304
glDebugMessageCallbackKHR@8 @305
glGetDebugMessageLogKHR@32 @306
glPushDebugGroupKHR@16 @307
glPopDebugGroupKHR@0 @308
glObjectLabelKHR@16 @309
glGetObjectLabelKHR@20 @310
glObjectPtrLabelKHR@12 @311
glGetObjectPtrLabelKHR@16 @312
glGetPointervKHR@8 @313
glQueryCounterEXT@8 @314
glGetQueryObjectivEXT@12 @315
glGetQueryObjecti64vEXT@12 @316
glGetQueryObjectui64vEXT@12 @317
glBindUniformLocationCHROMIUM@12 @318
glCoverageModulationCHROMIUM@4 @319
glMatrixLoadfCHROMIUM@8 @320
glMatrixLoadIdentityCHROMIUM@4 @321
glGenPathsCHROMIUM@4 @322
glDeletePathsCHROMIUM@8 @323
glIsPathCHROMIUM@4 @324
glPathCommandsCHROMIUM@24 @325
glPathParameterfCHROMIUM@12 @326
glPathParameteriCHROMIUM@12 @327
glGetPathParameterfvCHROMIUM@12 @328
glGetPathParameterivCHROMIUM@12 @329
glPathStencilFuncCHROMIUM@12 @330
glStencilFillPathCHROMIUM@12 @331
glStencilStrokePathCHROMIUM@12 @332
glCoverFillPathCHROMIUM@8 @333
glCoverStrokePathCHROMIUM@8 @334
glStencilThenCoverFillPathCHROMIUM@16 @335
glStencilThenCoverStrokePathCHROMIUM@16 @336
glCoverFillPathInstancedCHROMIUM@28 @337
glCoverStrokePathInstancedCHROMIUM@28 @338
glStencilStrokePathInstancedCHROMIUM@32 @339
glStencilFillPathInstancedCHROMIUM@32 @340
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
glBindFragmentInputLocationCHROMIUM@12 @343
glProgramPathFragmentInputGenCHROMIUM@20 @344
glMatrixLoadfCHROMIUM @320
glMatrixLoadIdentityCHROMIUM @321
glGenPathsCHROMIUM @322
glDeletePathsCHROMIUM @323
glIsPathCHROMIUM @324
glPathCommandsCHROMIUM @325
glPathParameterfCHROMIUM @326
glPathParameteriCHROMIUM @327
glGetPathParameterfvCHROMIUM @328
glGetPathParameterivCHROMIUM @329
glPathStencilFuncCHROMIUM @330
glStencilFillPathCHROMIUM @331
glStencilStrokePathCHROMIUM @332
glCoverFillPathCHROMIUM @333
glCoverStrokePathCHROMIUM @334
glStencilThenCoverFillPathCHROMIUM @335
glStencilThenCoverStrokePathCHROMIUM @336
glCoverFillPathInstancedCHROMIUM @337
glCoverStrokePathInstancedCHROMIUM @338
glStencilStrokePathInstancedCHROMIUM @339
glStencilFillPathInstancedCHROMIUM @340
glStencilThenCoverFillPathInstancedCHROMIUM @341
glStencilThenCoverStrokePathInstancedCHROMIUM @342
glBindFragmentInputLocationCHROMIUM @343
glProgramPathFragmentInputGenCHROMIUM @344
glFramebufferTextureMultiviewLayeredANGLE @413
glFramebufferTextureMultiviewSideBySideANGLE @414
glRequestExtensionANGLE @415
glFramebufferTextureMultiviewLayeredANGLE@24 @413
glFramebufferTextureMultiviewSideBySideANGLE@24 @414
glRequestExtensionANGLE@4 @415
; GLES 3.0 Functions
glReadBuffer @180
glDrawRangeElements @181
glTexImage3D @182
glTexSubImage3D @183
glCopyTexSubImage3D @184
glCompressedTexImage3D @185
glCompressedTexSubImage3D @186
glGenQueries @187
glDeleteQueries @188
glIsQuery @189
glBeginQuery @190
glEndQuery @191
glGetQueryiv @192
glGetQueryObjectuiv @193
glUnmapBuffer @194
glGetBufferPointerv @195
glDrawBuffers @196
glUniformMatrix2x3fv @197
glUniformMatrix3x2fv @198
glUniformMatrix2x4fv @199
glUniformMatrix4x2fv @200
glUniformMatrix3x4fv @201
glUniformMatrix4x3fv @202
glBlitFramebuffer @203
glRenderbufferStorageMultisample @204
glFramebufferTextureLayer @205
glMapBufferRange @206
glFlushMappedBufferRange @207
glBindVertexArray @208
glDeleteVertexArrays @209
glGenVertexArrays @210
glIsVertexArray @211
glGetIntegeri_v @212
glBeginTransformFeedback @213
glEndTransformFeedback @214
glBindBufferRange @215
glBindBufferBase @216
glTransformFeedbackVaryings @217
glGetTransformFeedbackVarying @218
glVertexAttribIPointer @219
glGetVertexAttribIiv @220
glGetVertexAttribIuiv @221
glVertexAttribI4i @222
glVertexAttribI4ui @223
glVertexAttribI4iv @224
glVertexAttribI4uiv @225
glGetUniformuiv @226
glGetFragDataLocation @227
glUniform1ui @228
glUniform2ui @229
glUniform3ui @230
glUniform4ui @231
glUniform1uiv @232
glUniform2uiv @233
glUniform3uiv @234
glUniform4uiv @235
glClearBufferiv @236
glClearBufferuiv @237
glClearBufferfv @238
glClearBufferfi @239
glGetStringi @240
glCopyBufferSubData @241
glGetUniformIndices @242
glGetActiveUniformsiv @243
glGetUniformBlockIndex @244
glGetActiveUniformBlockiv @245
glGetActiveUniformBlockName @246
glUniformBlockBinding @247
glDrawArraysInstanced @248
glDrawElementsInstanced @249
glFenceSync @250
glIsSync @251
glDeleteSync @252
glClientWaitSync @253
glWaitSync @254
glGetInteger64v @255
glGetSynciv @256
glGetInteger64i_v @257
glGetBufferParameteri64v @258
glGenSamplers @259
glDeleteSamplers @260
glIsSampler @261
glBindSampler @262
glSamplerParameteri @263
glSamplerParameteriv @264
glSamplerParameterf @265
glSamplerParameterfv @266
glGetSamplerParameteriv @267
glGetSamplerParameterfv @268
glVertexAttribDivisor @269
glBindTransformFeedback @270
glDeleteTransformFeedbacks @271
glGenTransformFeedbacks @272
glIsTransformFeedback @273
glPauseTransformFeedback @274
glResumeTransformFeedback @275
glGetProgramBinary @276
glProgramBinary @277
glProgramParameteri @278
glInvalidateFramebuffer @279
glInvalidateSubFramebuffer @280
glTexStorage2D @281
glTexStorage3D @282
glGetInternalformativ @283
glReadBuffer@4 @180
glDrawRangeElements@24 @181
glTexImage3D@40 @182
glTexSubImage3D@44 @183
glCopyTexSubImage3D@36 @184
glCompressedTexImage3D@36 @185
glCompressedTexSubImage3D@44 @186
glGenQueries@8 @187
glDeleteQueries@8 @188
glIsQuery@4 @189
glBeginQuery@8 @190
glEndQuery@4 @191
glGetQueryiv@12 @192
glGetQueryObjectuiv@12 @193
glUnmapBuffer@4 @194
glGetBufferPointerv@12 @195
glDrawBuffers@8 @196
glUniformMatrix2x3fv@16 @197
glUniformMatrix3x2fv@16 @198
glUniformMatrix2x4fv@16 @199
glUniformMatrix4x2fv@16 @200
glUniformMatrix3x4fv@16 @201
glUniformMatrix4x3fv@16 @202
glBlitFramebuffer@40 @203
glRenderbufferStorageMultisample@20 @204
glFramebufferTextureLayer@20 @205
glMapBufferRange@16 @206
glFlushMappedBufferRange@12 @207
glBindVertexArray@4 @208
glDeleteVertexArrays@8 @209
glGenVertexArrays@8 @210
glIsVertexArray@4 @211
glGetIntegeri_v@12 @212
glBeginTransformFeedback@4 @213
glEndTransformFeedback@0 @214
glBindBufferRange@20 @215
glBindBufferBase@12 @216
glTransformFeedbackVaryings@16 @217
glGetTransformFeedbackVarying@28 @218
glVertexAttribIPointer@20 @219
glGetVertexAttribIiv@12 @220
glGetVertexAttribIuiv@12 @221
glVertexAttribI4i@20 @222
glVertexAttribI4ui@20 @223
glVertexAttribI4iv@8 @224
glVertexAttribI4uiv@8 @225
glGetUniformuiv@12 @226
glGetFragDataLocation@8 @227
glUniform1ui@8 @228
glUniform2ui@12 @229
glUniform3ui@16 @230
glUniform4ui@20 @231
glUniform1uiv@12 @232
glUniform2uiv@12 @233
glUniform3uiv@12 @234
glUniform4uiv@12 @235
glClearBufferiv@12 @236
glClearBufferuiv@12 @237
glClearBufferfv@12 @238
glClearBufferfi@16 @239
glGetStringi@8 @240
glCopyBufferSubData@20 @241
glGetUniformIndices@16 @242
glGetActiveUniformsiv@20 @243
glGetUniformBlockIndex@8 @244
glGetActiveUniformBlockiv@16 @245
glGetActiveUniformBlockName@20 @246
glUniformBlockBinding@12 @247
glDrawArraysInstanced@16 @248
glDrawElementsInstanced@20 @249
glFenceSync@8 @250
glIsSync@4 @251
glDeleteSync@4 @252
glClientWaitSync@16 @253
glWaitSync@16 @254
glGetInteger64v@8 @255
glGetSynciv@20 @256
glGetInteger64i_v@12 @257
glGetBufferParameteri64v@12 @258
glGenSamplers@8 @259
glDeleteSamplers@8 @260
glIsSampler@4 @261
glBindSampler@8 @262
glSamplerParameteri@12 @263
glSamplerParameteriv@12 @264
glSamplerParameterf@12 @265
glSamplerParameterfv@12 @266
glGetSamplerParameteriv@12 @267
glGetSamplerParameterfv@12 @268
glVertexAttribDivisor@8 @269
glBindTransformFeedback@8 @270
glDeleteTransformFeedbacks@8 @271
glGenTransformFeedbacks@8 @272
glIsTransformFeedback@4 @273
glPauseTransformFeedback@0 @274
glResumeTransformFeedback@0 @275
glGetProgramBinary@20 @276
glProgramBinary@16 @277
glProgramParameteri@12 @278
glInvalidateFramebuffer@12 @279
glInvalidateSubFramebuffer@28 @280
glTexStorage2D@20 @281
glTexStorage3D@24 @282
glGetInternalformativ@20 @283
; GLES 3.1 Functions
glDispatchCompute @345
glDispatchComputeIndirect @346
glDrawArraysIndirect @347
glDrawElementsIndirect @348
glFramebufferParameteri @349
glGetFramebufferParameteriv @350
glGetProgramInterfaceiv @351
glGetProgramResourceIndex @352
glGetProgramResourceName @353
glGetProgramResourceiv @354
glGetProgramResourceLocation @355
glUseProgramStages @356
glActiveShaderProgram @357
glCreateShaderProgramv @358
glBindProgramPipeline @359
glDeleteProgramPipelines @360
glGenProgramPipelines @361
glIsProgramPipeline @362
glGetProgramPipelineiv @363
glProgramUniform1i @364
glProgramUniform2i @365
glProgramUniform3i @366
glProgramUniform4i @367
glProgramUniform1ui @368
glProgramUniform2ui @369
glProgramUniform3ui @370
glProgramUniform4ui @371
glProgramUniform1f @372
glProgramUniform2f @373
glProgramUniform3f @374
glProgramUniform4f @375
glProgramUniform1iv @376
glProgramUniform2iv @377
glProgramUniform3iv @378
glProgramUniform4iv @379
glProgramUniform1uiv @380
glProgramUniform2uiv @381
glProgramUniform3uiv @382
glProgramUniform4uiv @383
glProgramUniform1fv @384
glProgramUniform2fv @385
glProgramUniform3fv @386
glProgramUniform4fv @387
glProgramUniformMatrix2fv @388
glProgramUniformMatrix3fv @389
glProgramUniformMatrix4fv @390
glProgramUniformMatrix2x3fv @391
glProgramUniformMatrix3x2fv @392
glProgramUniformMatrix2x4fv @393
glProgramUniformMatrix4x2fv @394
glProgramUniformMatrix3x4fv @395
glProgramUniformMatrix4x3fv @396
glValidateProgramPipeline @397
glGetProgramPipelineInfoLog @398
glBindImageTexture @399
glGetBooleani_v @400
glMemoryBarrier @401
glMemoryBarrierByRegion @402
glTexStorage2DMultisample @403
glGetMultisamplefv @404
glSampleMaski @405
glGetTexLevelParameteriv @406
glGetTexLevelParameterfv @407
glBindVertexBuffer @408
glVertexAttribFormat @409
glVertexAttribIFormat @410
glVertexAttribBinding @411
glVertexBindingDivisor @412
glDispatchCompute@12 @345
glDispatchComputeIndirect@4 @346
glDrawArraysIndirect@8 @347
glDrawElementsIndirect@12 @348
glFramebufferParameteri@12 @349
glGetFramebufferParameteriv@12 @350
glGetProgramInterfaceiv@16 @351
glGetProgramResourceIndex@12 @352
glGetProgramResourceName@24 @353
glGetProgramResourceiv@32 @354
glGetProgramResourceLocation@12 @355
glUseProgramStages@12 @356
glActiveShaderProgram@8 @357
glCreateShaderProgramv@12 @358
glBindProgramPipeline@4 @359
glDeleteProgramPipelines@8 @360
glGenProgramPipelines@8 @361
glIsProgramPipeline@4 @362
glGetProgramPipelineiv@12 @363
glProgramUniform1i@12 @364
glProgramUniform2i@16 @365
glProgramUniform3i@20 @366
glProgramUniform4i@24 @367
glProgramUniform1ui@12 @368
glProgramUniform2ui@16 @369
glProgramUniform3ui@20 @370
glProgramUniform4ui@24 @371
glProgramUniform1f@12 @372
glProgramUniform2f@16 @373
glProgramUniform3f@20 @374
glProgramUniform4f@24 @375
glProgramUniform1iv@16 @376
glProgramUniform2iv@16 @377
glProgramUniform3iv@16 @378
glProgramUniform4iv@16 @379
glProgramUniform1uiv@16 @380
glProgramUniform2uiv@16 @381
glProgramUniform3uiv@16 @382
glProgramUniform4uiv@16 @383
glProgramUniform1fv@16 @384
glProgramUniform2fv@16 @385
glProgramUniform3fv@16 @386
glProgramUniform4fv@16 @387
glProgramUniformMatrix2fv@20 @388
glProgramUniformMatrix3fv@20 @389
glProgramUniformMatrix4fv@20 @390
glProgramUniformMatrix2x3fv@20 @391
glProgramUniformMatrix3x2fv@20 @392
glProgramUniformMatrix2x4fv@20 @393
glProgramUniformMatrix4x2fv@20 @394
glProgramUniformMatrix3x4fv@20 @395
glProgramUniformMatrix4x3fv@20 @396
glValidateProgramPipeline@4 @397
glGetProgramPipelineInfoLog@16 @398
glBindImageTexture@28 @399
glGetBooleani_v@12 @400
glMemoryBarrier@4 @401
glMemoryBarrierByRegion@4 @402
glTexStorage2DMultisample@24 @403
glGetMultisamplefv@12 @404
glSampleMaski@8 @405
glGetTexLevelParameteriv@16 @406
glGetTexLevelParameterfv@16 @407
glBindVertexBuffer@16 @408
glVertexAttribFormat@20 @409
glVertexAttribIFormat@16 @410
glVertexAttribBinding@8 @411
glVertexBindingDivisor@8 @412

View File

@ -1,412 +1,411 @@
LIBRARY libGLESv2
EXPORTS
glActiveTexture @1
glAttachShader @2
glBindAttribLocation @3
glBindBuffer @4
glBindFramebuffer @5
glBindRenderbuffer @6
glBindTexture @7
glBlendColor @8
glBlendEquation @9
glBlendEquationSeparate @10
glBlendFunc @11
glBlendFuncSeparate @12
glBufferData @13
glBufferSubData @14
glCheckFramebufferStatus @15
glClear @16
glClearColor @17
glClearDepthf @18
glClearStencil @19
glColorMask @20
glCompileShader @21
glCompressedTexImage2D @22
glCompressedTexSubImage2D @23
glCopyTexImage2D @24
glCopyTexSubImage2D @25
glCreateProgram @26
glCreateShader @27
glCullFace @28
glDeleteBuffers @29
glDeleteFramebuffers @30
glDeleteProgram @32
glDeleteRenderbuffers @33
glDeleteShader @34
glDeleteTextures @31
glDepthFunc @36
glDepthMask @37
glDepthRangef @38
glDetachShader @35
glDisable @39
glDisableVertexAttribArray @40
glDrawArrays @41
glDrawElements @42
glEnable @43
glEnableVertexAttribArray @44
glFinish @45
glFlush @46
glFramebufferRenderbuffer @47
glFramebufferTexture2D @48
glFrontFace @49
glGenBuffers @50
glGenFramebuffers @52
glGenRenderbuffers @53
glGenTextures @54
glGenerateMipmap @51
glGetActiveAttrib @55
glGetActiveUniform @56
glGetAttachedShaders @57
glGetAttribLocation @58
glGetBooleanv @59
glGetBufferParameteriv @60
glGetError @61
glGetFloatv @62
glGetFramebufferAttachmentParameteriv @63
glGetIntegerv @64
glGetProgramInfoLog @66
glGetProgramiv @65
glGetRenderbufferParameteriv @67
glGetShaderInfoLog @69
glGetShaderPrecisionFormat @70
glGetShaderSource @71
glGetShaderiv @68
glGetString @72
glGetTexParameterfv @73
glGetTexParameteriv @74
glGetUniformLocation @77
glGetUniformfv @75
glGetUniformiv @76
glGetVertexAttribPointerv @80
glGetVertexAttribfv @78
glGetVertexAttribiv @79
glHint @81
glIsBuffer @82
glIsEnabled @83
glIsFramebuffer @84
glIsProgram @85
glIsRenderbuffer @86
glIsShader @87
glIsTexture @88
glLineWidth @89
glLinkProgram @90
glPixelStorei @91
glPolygonOffset @92
glReadPixels @93
glReleaseShaderCompiler @94
glRenderbufferStorage @95
glSampleCoverage @96
glScissor @97
glShaderBinary @98
glShaderSource @99
glStencilFunc @100
glStencilFuncSeparate @101
glStencilMask @102
glStencilMaskSeparate @103
glStencilOp @104
glStencilOpSeparate @105
glTexImage2D @106
glTexParameterf @107
glTexParameterfv @108
glTexParameteri @109
glTexParameteriv @110
glTexSubImage2D @111
glUniform1f @112
glUniform1fv @113
glUniform1i @114
glUniform1iv @115
glUniform2f @116
glUniform2fv @117
glUniform2i @118
glUniform2iv @119
glUniform3f @120
glUniform3fv @121
glUniform3i @122
glUniform3iv @123
glUniform4f @124
glUniform4fv @125
glUniform4i @126
glUniform4iv @127
glUniformMatrix2fv @128
glUniformMatrix3fv @129
glUniformMatrix4fv @130
glUseProgram @131
glValidateProgram @132
glVertexAttrib1f @133
glVertexAttrib1fv @134
glVertexAttrib2f @135
glVertexAttrib2fv @136
glVertexAttrib3f @137
glVertexAttrib3fv @138
glVertexAttrib4f @139
glVertexAttrib4fv @140
glVertexAttribPointer @141
glViewport @142
glActiveTexture@4 @1
glAttachShader@8 @2
glBindAttribLocation@12 @3
glBindBuffer@8 @4
glBindFramebuffer@8 @5
glBindRenderbuffer@8 @6
glBindTexture@8 @7
glBlendColor@16 @8
glBlendEquation@4 @9
glBlendEquationSeparate@8 @10
glBlendFunc@8 @11
glBlendFuncSeparate@16 @12
glBufferData@16 @13
glBufferSubData@16 @14
glCheckFramebufferStatus@4 @15
glClear@4 @16
glClearColor@16 @17
glClearDepthf@4 @18
glClearStencil@4 @19
glColorMask@16 @20
glCompileShader@4 @21
glCompressedTexImage2D@32 @22
glCompressedTexSubImage2D@36 @23
glCopyTexImage2D@32 @24
glCopyTexSubImage2D@32 @25
glCreateProgram@0 @26
glCreateShader@4 @27
glCullFace@4 @28
glDeleteBuffers@8 @29
glDeleteFramebuffers@8 @30
glDeleteProgram@4 @32
glDeleteRenderbuffers@8 @33
glDeleteShader@4 @34
glDeleteTextures@8 @31
glDepthFunc@4 @36
glDepthMask@4 @37
glDepthRangef@8 @38
glDetachShader@8 @35
glDisable@4 @39
glDisableVertexAttribArray@4 @40
glDrawArrays@12 @41
glDrawElements@16 @42
glEnable@4 @43
glEnableVertexAttribArray@4 @44
glFinish@0 @45
glFlush@0 @46
glFramebufferRenderbuffer@16 @47
glFramebufferTexture2D@20 @48
glFrontFace@4 @49
glGenBuffers@8 @50
glGenFramebuffers@8 @52
glGenRenderbuffers@8 @53
glGenTextures@8 @54
glGenerateMipmap@4 @51
glGetActiveAttrib@28 @55
glGetActiveUniform@28 @56
glGetAttachedShaders@16 @57
glGetAttribLocation@8 @58
glGetBooleanv@8 @59
glGetBufferParameteriv@12 @60
glGetError@0 @61
glGetFloatv@8 @62
glGetFramebufferAttachmentParameteriv@16 @63
glGetIntegerv@8 @64
glGetProgramInfoLog@16 @66
glGetProgramiv@12 @65
glGetRenderbufferParameteriv@12 @67
glGetShaderInfoLog@16 @69
glGetShaderPrecisionFormat@16 @70
glGetShaderSource@16 @71
glGetShaderiv@12 @68
glGetString@4 @72
glGetTexParameterfv@12 @73
glGetTexParameteriv@12 @74
glGetUniformLocation@8 @77
glGetUniformfv@12 @75
glGetUniformiv@12 @76
glGetVertexAttribPointerv@12 @80
glGetVertexAttribfv@12 @78
glGetVertexAttribiv@12 @79
glHint@8 @81
glIsBuffer@4 @82
glIsEnabled@4 @83
glIsFramebuffer@4 @84
glIsProgram@4 @85
glIsRenderbuffer@4 @86
glIsShader@4 @87
glIsTexture@4 @88
glLineWidth@4 @89
glLinkProgram@4 @90
glPixelStorei@8 @91
glPolygonOffset@8 @92
glReadPixels@28 @93
glReleaseShaderCompiler@0 @94
glRenderbufferStorage@16 @95
glSampleCoverage@8 @96
glScissor@16 @97
glShaderBinary@20 @98
glShaderSource@16 @99
glStencilFunc@12 @100
glStencilFuncSeparate@16 @101
glStencilMask@4 @102
glStencilMaskSeparate@8 @103
glStencilOp@12 @104
glStencilOpSeparate@16 @105
glTexImage2D@36 @106
glTexParameterf@12 @107
glTexParameterfv@12 @108
glTexParameteri@12 @109
glTexParameteriv@12 @110
glTexSubImage2D@36 @111
glUniform1f@8 @112
glUniform1fv@12 @113
glUniform1i@8 @114
glUniform1iv@12 @115
glUniform2f@12 @116
glUniform2fv@12 @117
glUniform2i@12 @118
glUniform2iv@12 @119
glUniform3f@16 @120
glUniform3fv@12 @121
glUniform3i@16 @122
glUniform3iv@12 @123
glUniform4f@20 @124
glUniform4fv@12 @125
glUniform4i@20 @126
glUniform4iv@12 @127
glUniformMatrix2fv@16 @128
glUniformMatrix3fv@16 @129
glUniformMatrix4fv@16 @130
glUseProgram@4 @131
glValidateProgram@4 @132
glVertexAttrib1f@8 @133
glVertexAttrib1fv@8 @134
glVertexAttrib2f@12 @135
glVertexAttrib2fv@8 @136
glVertexAttrib3f@16 @137
glVertexAttrib3fv@8 @138
glVertexAttrib4f@20 @139
glVertexAttrib4fv@8 @140
glVertexAttribPointer@24 @141
glViewport@16 @142
; Extensions
glBlitFramebufferANGLE @149
glRenderbufferStorageMultisampleANGLE @150
glDeleteFencesNV @151
glFinishFenceNV @152
glGenFencesNV @153
glGetFenceivNV @154
glIsFenceNV @155
glSetFenceNV @156
glTestFenceNV @157
glGetTranslatedShaderSourceANGLE @159
glTexStorage2DEXT @160
glGetGraphicsResetStatusEXT @161
glReadnPixelsEXT @162
glGetnUniformfvEXT @163
glGetnUniformivEXT @164
glGenQueriesEXT @165
glDeleteQueriesEXT @166
glIsQueryEXT @167
glBeginQueryEXT @168
glEndQueryEXT @169
glGetQueryivEXT @170
glGetQueryObjectuivEXT @171
glVertexAttribDivisorANGLE @172
glDrawArraysInstancedANGLE @173
glDrawElementsInstancedANGLE @174
glProgramBinaryOES @175
glGetProgramBinaryOES @176
glDrawBuffersEXT @179
glMapBufferOES @285
glUnmapBufferOES @286
glGetBufferPointervOES @287
glMapBufferRangeEXT @288
glFlushMappedBufferRangeEXT @289
glDiscardFramebufferEXT @293
glInsertEventMarkerEXT @294
glPushGroupMarkerEXT @295
glPopGroupMarkerEXT @296
glEGLImageTargetTexture2DOES @297
glEGLImageTargetRenderbufferStorageOES @298
glBindVertexArrayOES @299
glDeleteVertexArraysOES @300
glGenVertexArraysOES @301
glIsVertexArrayOES @302
glDebugMessageControlKHR @303
glDebugMessageInsertKHR @304
glDebugMessageCallbackKHR @305
glGetDebugMessageLogKHR @306
glPushDebugGroupKHR @307
glPopDebugGroupKHR @308
glObjectLabelKHR @309
glGetObjectLabelKHR @310
glObjectPtrLabelKHR @311
glGetObjectPtrLabelKHR @312
glGetPointervKHR @313
glQueryCounterEXT @314
glGetQueryObjectivEXT @315
glGetQueryObjecti64vEXT @316
glGetQueryObjectui64vEXT @317
glBindUniformLocationCHROMIUM @318
glCoverageModulationCHROMIUM @319
glBlitFramebufferANGLE@40 @149
glRenderbufferStorageMultisampleANGLE@20 @150
glDeleteFencesNV@8 @151
glFinishFenceNV@4 @152
glGenFencesNV@8 @153
glGetFenceivNV@12 @154
glIsFenceNV@4 @155
glSetFenceNV@8 @156
glTestFenceNV@4 @157
glGetTranslatedShaderSourceANGLE@16 @159
glTexStorage2DEXT@20 @160
glGetGraphicsResetStatusEXT@0 @161
glReadnPixelsEXT@32 @162
glGetnUniformfvEXT@16 @163
glGetnUniformivEXT@16 @164
glGenQueriesEXT@8 @165
glDeleteQueriesEXT@8 @166
glIsQueryEXT@4 @167
glBeginQueryEXT@8 @168
glEndQueryEXT@4 @169
glGetQueryivEXT@12 @170
glGetQueryObjectuivEXT@12 @171
glVertexAttribDivisorANGLE@8 @172
glDrawArraysInstancedANGLE@16 @173
glDrawElementsInstancedANGLE@20 @174
glProgramBinaryOES@16 @175
glGetProgramBinaryOES@20 @176
glDrawBuffersEXT@8 @179
glMapBufferOES@8 @285
glUnmapBufferOES@4 @286
glGetBufferPointervOES@12 @287
glMapBufferRangeEXT@16 @288
glFlushMappedBufferRangeEXT@12 @289
glDiscardFramebufferEXT@12 @293
glInsertEventMarkerEXT@8 @294
glPushGroupMarkerEXT@8 @295
glPopGroupMarkerEXT@0 @296
glEGLImageTargetTexture2DOES@8 @297
glEGLImageTargetRenderbufferStorageOES@8 @298
glBindVertexArrayOES@4 @299
glDeleteVertexArraysOES@8 @300
glGenVertexArraysOES@8 @301
glIsVertexArrayOES@4 @302
glDebugMessageControlKHR@24 @303
glDebugMessageInsertKHR@24 @304
glDebugMessageCallbackKHR@8 @305
glGetDebugMessageLogKHR@32 @306
glPushDebugGroupKHR@16 @307
glPopDebugGroupKHR@0 @308
glObjectLabelKHR@16 @309
glGetObjectLabelKHR@20 @310
glObjectPtrLabelKHR@12 @311
glGetObjectPtrLabelKHR@16 @312
glGetPointervKHR@8 @313
glQueryCounterEXT@8 @314
glGetQueryObjectivEXT@12 @315
glGetQueryObjecti64vEXT@12 @316
glGetQueryObjectui64vEXT@12 @317
glBindUniformLocationCHROMIUM@12 @318
glCoverageModulationCHROMIUM@4 @319
glMatrixLoadfCHROMIUM@8 @320
glMatrixLoadIdentityCHROMIUM@4 @321
glGenPathsCHROMIUM@4 @322
glDeletePathsCHROMIUM@8 @323
glIsPathCHROMIUM@4 @324
glPathCommandsCHROMIUM@24 @325
glPathParameterfCHROMIUM@12 @326
glPathParameteriCHROMIUM@12 @327
glGetPathParameterfvCHROMIUM@12 @328
glGetPathParameterivCHROMIUM@12 @329
glPathStencilFuncCHROMIUM@12 @330
glStencilFillPathCHROMIUM@12 @331
glStencilStrokePathCHROMIUM@12 @332
glCoverFillPathCHROMIUM@8 @333
glCoverStrokePathCHROMIUM@8 @334
glStencilThenCoverFillPathCHROMIUM@16 @335
glStencilThenCoverStrokePathCHROMIUM@16 @336
glCoverFillPathInstancedCHROMIUM@28 @337
glCoverStrokePathInstancedCHROMIUM@28 @338
glStencilStrokePathInstancedCHROMIUM@32 @339
glStencilFillPathInstancedCHROMIUM@32 @340
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
glBindFragmentInputLocationCHROMIUM@12 @343
glProgramPathFragmentInputGenCHROMIUM@20 @344
glMatrixLoadfCHROMIUM @320
glMatrixLoadIdentityCHROMIUM @321
glGenPathsCHROMIUM @322
glDeletePathsCHROMIUM @323
glIsPathCHROMIUM @324
glPathCommandsCHROMIUM @325
glPathParameterfCHROMIUM @326
glPathParameteriCHROMIUM @327
glGetPathParameterfvCHROMIUM @328
glGetPathParameterivCHROMIUM @329
glPathStencilFuncCHROMIUM @330
glStencilFillPathCHROMIUM @331
glStencilStrokePathCHROMIUM @332
glCoverFillPathCHROMIUM @333
glCoverStrokePathCHROMIUM @334
glStencilThenCoverFillPathCHROMIUM @335
glStencilThenCoverStrokePathCHROMIUM @336
glCoverFillPathInstancedCHROMIUM @337
glCoverStrokePathInstancedCHROMIUM @338
glStencilStrokePathInstancedCHROMIUM @339
glStencilFillPathInstancedCHROMIUM @340
glStencilThenCoverFillPathInstancedCHROMIUM @341
glStencilThenCoverStrokePathInstancedCHROMIUM @342
glBindFragmentInputLocationCHROMIUM @343
glProgramPathFragmentInputGenCHROMIUM @344
glFramebufferTextureMultiviewLayeredANGLE @413
glFramebufferTextureMultiviewSideBySideANGLE @414
glRequestExtensionANGLE @415
glFramebufferTextureMultiviewLayeredANGLE@24 @413
glFramebufferTextureMultiviewSideBySideANGLE@24 @414
glRequestExtensionANGLE@4 @415
; GLES 3.0 Functions
glReadBuffer @180
glDrawRangeElements @181
glTexImage3D @182
glTexSubImage3D @183
glCopyTexSubImage3D @184
glCompressedTexImage3D @185
glCompressedTexSubImage3D @186
glGenQueries @187
glDeleteQueries @188
glIsQuery @189
glBeginQuery @190
glEndQuery @191
glGetQueryiv @192
glGetQueryObjectuiv @193
glUnmapBuffer @194
glGetBufferPointerv @195
glDrawBuffers @196
glUniformMatrix2x3fv @197
glUniformMatrix3x2fv @198
glUniformMatrix2x4fv @199
glUniformMatrix4x2fv @200
glUniformMatrix3x4fv @201
glUniformMatrix4x3fv @202
glBlitFramebuffer @203
glRenderbufferStorageMultisample @204
glFramebufferTextureLayer @205
glMapBufferRange @206
glFlushMappedBufferRange @207
glBindVertexArray @208
glDeleteVertexArrays @209
glGenVertexArrays @210
glIsVertexArray @211
glGetIntegeri_v @212
glBeginTransformFeedback @213
glEndTransformFeedback @214
glBindBufferRange @215
glBindBufferBase @216
glTransformFeedbackVaryings @217
glGetTransformFeedbackVarying @218
glVertexAttribIPointer @219
glGetVertexAttribIiv @220
glGetVertexAttribIuiv @221
glVertexAttribI4i @222
glVertexAttribI4ui @223
glVertexAttribI4iv @224
glVertexAttribI4uiv @225
glGetUniformuiv @226
glGetFragDataLocation @227
glUniform1ui @228
glUniform2ui @229
glUniform3ui @230
glUniform4ui @231
glUniform1uiv @232
glUniform2uiv @233
glUniform3uiv @234
glUniform4uiv @235
glClearBufferiv @236
glClearBufferuiv @237
glClearBufferfv @238
glClearBufferfi @239
glGetStringi @240
glCopyBufferSubData @241
glGetUniformIndices @242
glGetActiveUniformsiv @243
glGetUniformBlockIndex @244
glGetActiveUniformBlockiv @245
glGetActiveUniformBlockName @246
glUniformBlockBinding @247
glDrawArraysInstanced @248
glDrawElementsInstanced @249
glFenceSync @250
glIsSync @251
glDeleteSync @252
glClientWaitSync @253
glWaitSync @254
glGetInteger64v @255
glGetSynciv @256
glGetInteger64i_v @257
glGetBufferParameteri64v @258
glGenSamplers @259
glDeleteSamplers @260
glIsSampler @261
glBindSampler @262
glSamplerParameteri @263
glSamplerParameteriv @264
glSamplerParameterf @265
glSamplerParameterfv @266
glGetSamplerParameteriv @267
glGetSamplerParameterfv @268
glVertexAttribDivisor @269
glBindTransformFeedback @270
glDeleteTransformFeedbacks @271
glGenTransformFeedbacks @272
glIsTransformFeedback @273
glPauseTransformFeedback @274
glResumeTransformFeedback @275
glGetProgramBinary @276
glProgramBinary @277
glProgramParameteri @278
glInvalidateFramebuffer @279
glInvalidateSubFramebuffer @280
glTexStorage2D @281
glTexStorage3D @282
glGetInternalformativ @283
glReadBuffer@4 @180
glDrawRangeElements@24 @181
glTexImage3D@40 @182
glTexSubImage3D@44 @183
glCopyTexSubImage3D@36 @184
glCompressedTexImage3D@36 @185
glCompressedTexSubImage3D@44 @186
glGenQueries@8 @187
glDeleteQueries@8 @188
glIsQuery@4 @189
glBeginQuery@8 @190
glEndQuery@4 @191
glGetQueryiv@12 @192
glGetQueryObjectuiv@12 @193
glUnmapBuffer@4 @194
glGetBufferPointerv@12 @195
glDrawBuffers@8 @196
glUniformMatrix2x3fv@16 @197
glUniformMatrix3x2fv@16 @198
glUniformMatrix2x4fv@16 @199
glUniformMatrix4x2fv@16 @200
glUniformMatrix3x4fv@16 @201
glUniformMatrix4x3fv@16 @202
glBlitFramebuffer@40 @203
glRenderbufferStorageMultisample@20 @204
glFramebufferTextureLayer@20 @205
glMapBufferRange@16 @206
glFlushMappedBufferRange@12 @207
glBindVertexArray@4 @208
glDeleteVertexArrays@8 @209
glGenVertexArrays@8 @210
glIsVertexArray@4 @211
glGetIntegeri_v@12 @212
glBeginTransformFeedback@4 @213
glEndTransformFeedback@0 @214
glBindBufferRange@20 @215
glBindBufferBase@12 @216
glTransformFeedbackVaryings@16 @217
glGetTransformFeedbackVarying@28 @218
glVertexAttribIPointer@20 @219
glGetVertexAttribIiv@12 @220
glGetVertexAttribIuiv@12 @221
glVertexAttribI4i@20 @222
glVertexAttribI4ui@20 @223
glVertexAttribI4iv@8 @224
glVertexAttribI4uiv@8 @225
glGetUniformuiv@12 @226
glGetFragDataLocation@8 @227
glUniform1ui@8 @228
glUniform2ui@12 @229
glUniform3ui@16 @230
glUniform4ui@20 @231
glUniform1uiv@12 @232
glUniform2uiv@12 @233
glUniform3uiv@12 @234
glUniform4uiv@12 @235
glClearBufferiv@12 @236
glClearBufferuiv@12 @237
glClearBufferfv@12 @238
glClearBufferfi@16 @239
glGetStringi@8 @240
glCopyBufferSubData@20 @241
glGetUniformIndices@16 @242
glGetActiveUniformsiv@20 @243
glGetUniformBlockIndex@8 @244
glGetActiveUniformBlockiv@16 @245
glGetActiveUniformBlockName@20 @246
glUniformBlockBinding@12 @247
glDrawArraysInstanced@16 @248
glDrawElementsInstanced@20 @249
glFenceSync@8 @250
glIsSync@4 @251
glDeleteSync@4 @252
glClientWaitSync@16 @253
glWaitSync@16 @254
glGetInteger64v@8 @255
glGetSynciv@20 @256
glGetInteger64i_v@12 @257
glGetBufferParameteri64v@12 @258
glGenSamplers@8 @259
glDeleteSamplers@8 @260
glIsSampler@4 @261
glBindSampler@8 @262
glSamplerParameteri@12 @263
glSamplerParameteriv@12 @264
glSamplerParameterf@12 @265
glSamplerParameterfv@12 @266
glGetSamplerParameteriv@12 @267
glGetSamplerParameterfv@12 @268
glVertexAttribDivisor@8 @269
glBindTransformFeedback@8 @270
glDeleteTransformFeedbacks@8 @271
glGenTransformFeedbacks@8 @272
glIsTransformFeedback@4 @273
glPauseTransformFeedback@0 @274
glResumeTransformFeedback@0 @275
glGetProgramBinary@20 @276
glProgramBinary@16 @277
glProgramParameteri@12 @278
glInvalidateFramebuffer@12 @279
glInvalidateSubFramebuffer@28 @280
glTexStorage2D@20 @281
glTexStorage3D@24 @282
glGetInternalformativ@20 @283
; GLES 3.1 Functions
glDispatchCompute @345
glDispatchComputeIndirect @346
glDrawArraysIndirect @347
glDrawElementsIndirect @348
glFramebufferParameteri @349
glGetFramebufferParameteriv @350
glGetProgramInterfaceiv @351
glGetProgramResourceIndex @352
glGetProgramResourceName @353
glGetProgramResourceiv @354
glGetProgramResourceLocation @355
glUseProgramStages @356
glActiveShaderProgram @357
glCreateShaderProgramv @358
glBindProgramPipeline @359
glDeleteProgramPipelines @360
glGenProgramPipelines @361
glIsProgramPipeline @362
glGetProgramPipelineiv @363
glProgramUniform1i @364
glProgramUniform2i @365
glProgramUniform3i @366
glProgramUniform4i @367
glProgramUniform1ui @368
glProgramUniform2ui @369
glProgramUniform3ui @370
glProgramUniform4ui @371
glProgramUniform1f @372
glProgramUniform2f @373
glProgramUniform3f @374
glProgramUniform4f @375
glProgramUniform1iv @376
glProgramUniform2iv @377
glProgramUniform3iv @378
glProgramUniform4iv @379
glProgramUniform1uiv @380
glProgramUniform2uiv @381
glProgramUniform3uiv @382
glProgramUniform4uiv @383
glProgramUniform1fv @384
glProgramUniform2fv @385
glProgramUniform3fv @386
glProgramUniform4fv @387
glProgramUniformMatrix2fv @388
glProgramUniformMatrix3fv @389
glProgramUniformMatrix4fv @390
glProgramUniformMatrix2x3fv @391
glProgramUniformMatrix3x2fv @392
glProgramUniformMatrix2x4fv @393
glProgramUniformMatrix4x2fv @394
glProgramUniformMatrix3x4fv @395
glProgramUniformMatrix4x3fv @396
glValidateProgramPipeline @397
glGetProgramPipelineInfoLog @398
glBindImageTexture @399
glGetBooleani_v @400
glMemoryBarrier @401
glMemoryBarrierByRegion @402
glTexStorage2DMultisample @403
glGetMultisamplefv @404
glSampleMaski @405
glGetTexLevelParameteriv @406
glGetTexLevelParameterfv @407
glBindVertexBuffer @408
glVertexAttribFormat @409
glVertexAttribIFormat @410
glVertexAttribBinding @411
glVertexBindingDivisor @412
glDispatchCompute@12 @345
glDispatchComputeIndirect@4 @346
glDrawArraysIndirect@8 @347
glDrawElementsIndirect@12 @348
glFramebufferParameteri@12 @349
glGetFramebufferParameteriv@12 @350
glGetProgramInterfaceiv@16 @351
glGetProgramResourceIndex@12 @352
glGetProgramResourceName@24 @353
glGetProgramResourceiv@32 @354
glGetProgramResourceLocation@12 @355
glUseProgramStages@12 @356
glActiveShaderProgram@8 @357
glCreateShaderProgramv@12 @358
glBindProgramPipeline@4 @359
glDeleteProgramPipelines@8 @360
glGenProgramPipelines@8 @361
glIsProgramPipeline@4 @362
glGetProgramPipelineiv@12 @363
glProgramUniform1i@12 @364
glProgramUniform2i@16 @365
glProgramUniform3i@20 @366
glProgramUniform4i@24 @367
glProgramUniform1ui@12 @368
glProgramUniform2ui@16 @369
glProgramUniform3ui@20 @370
glProgramUniform4ui@24 @371
glProgramUniform1f@12 @372
glProgramUniform2f@16 @373
glProgramUniform3f@20 @374
glProgramUniform4f@24 @375
glProgramUniform1iv@16 @376
glProgramUniform2iv@16 @377
glProgramUniform3iv@16 @378
glProgramUniform4iv@16 @379
glProgramUniform1uiv@16 @380
glProgramUniform2uiv@16 @381
glProgramUniform3uiv@16 @382
glProgramUniform4uiv@16 @383
glProgramUniform1fv@16 @384
glProgramUniform2fv@16 @385
glProgramUniform3fv@16 @386
glProgramUniform4fv@16 @387
glProgramUniformMatrix2fv@20 @388
glProgramUniformMatrix3fv@20 @389
glProgramUniformMatrix4fv@20 @390
glProgramUniformMatrix2x3fv@20 @391
glProgramUniformMatrix3x2fv@20 @392
glProgramUniformMatrix2x4fv@20 @393
glProgramUniformMatrix4x2fv@20 @394
glProgramUniformMatrix3x4fv@20 @395
glProgramUniformMatrix4x3fv@20 @396
glValidateProgramPipeline@4 @397
glGetProgramPipelineInfoLog@16 @398
glBindImageTexture@28 @399
glGetBooleani_v@12 @400
glMemoryBarrier@4 @401
glMemoryBarrierByRegion@4 @402
glTexStorage2DMultisample@24 @403
glGetMultisamplefv@12 @404
glSampleMaski@8 @405
glGetTexLevelParameteriv@16 @406
glGetTexLevelParameterfv@16 @407
glBindVertexBuffer@16 @408
glVertexAttribFormat@20 @409
glVertexAttribIFormat@16 @410
glVertexAttribBinding@8 @411
glVertexBindingDivisor@8 @412

View File

@ -6,8 +6,8 @@
"Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "https://www.sqlite.org/",
"Version": "3.27.1",
"DownloadLocation": "https://www.sqlite.org/2018/sqlite-amalgamation-3270100.zip",
"Version": "3.28.0",
"DownloadLocation": "https://www.sqlite.org/2019/sqlite-amalgamation-3280000.zip",
"License": "Public Domain",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed."
}

File diff suppressed because it is too large Load Diff

View File

@ -123,9 +123,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.27.1"
#define SQLITE_VERSION_NUMBER 3027001
#define SQLITE_SOURCE_ID "2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd"
#define SQLITE_VERSION "3.28.0"
#define SQLITE_VERSION_NUMBER 3028000
#define SQLITE_SOURCE_ID "2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50"
/*
** CAPI3REF: Run-Time Library Version Numbers
@ -189,6 +189,9 @@ SQLITE_API int sqlite3_libversion_number(void);
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
SQLITE_API const char *sqlite3_compileoption_get(int N);
#else
# define sqlite3_compileoption_used(X) 0
# define sqlite3_compileoption_get(X) ((void*)0)
#endif
/*
@ -2086,8 +2089,8 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
** <dd> ^This option is used to enable or disable the two-argument
** version of the [fts3_tokenizer()] function which is part of the
** <dd> ^This option is used to enable or disable the
** [fts3_tokenizer()] function which is part of the
** [FTS3] full-text search engine extension.
** There should be two additional arguments.
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
@ -2199,6 +2202,17 @@ struct sqlite3_mem_methods {
** <li> Direct writes to [shadow tables].
** </ul>
** </dd>
**
** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
** "writable_schema" flag. This has the same effect and is logically equivalent
** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF].
** The first argument to this setting is an integer which is 0 to disable
** the writable_schema, positive to enable writable_schema, or negative to
** leave the setting unchanged. The second parameter is a pointer to an
** integer into which is written 0 or 1 to indicate whether the writable_schema
** is enabled or disabled following this call.
** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@ -2212,7 +2226,8 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
#define SQLITE_DBCONFIG_MAX 1010 /* Largest DBCONFIG */
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
#define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@ -2369,7 +2384,7 @@ SQLITE_API int sqlite3_changes(sqlite3*);
** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
** are not counted.
**
** This the [sqlite3_total_changes(D)] interface only reports the number
** The [sqlite3_total_changes(D)] interface only reports the number
** of rows that changed due to SQL statement run against database
** connection D. Any changes by other database connections are ignored.
** To detect changes against a database file from other database
@ -3894,6 +3909,18 @@ SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
*/
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
/*
** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
** METHOD: sqlite3_stmt
**
** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the
** prepared statement S is an EXPLAIN statement, or 2 if the
** statement S is an EXPLAIN QUERY PLAN.
** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is
** an ordinary statement or a NULL pointer.
*/
SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
/*
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
** METHOD: sqlite3_stmt
@ -4033,7 +4060,9 @@ typedef struct sqlite3_context sqlite3_context;
** ^The fifth argument to the BLOB and string binding interfaces
** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called
** to dispose of the BLOB or string even if the call to bind API fails.
** to dispose of the BLOB or string even if the call to the bind API fails,
** except the destructor is not called if the third parameter is a NULL
** pointer or the fourth parameter is negative.
** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed.
@ -4950,6 +4979,8 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
** against a virtual table.
** <tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>True if value originated from a [bound parameter]
** </table></blockquote>
**
** <b>Details:</b>
@ -5011,6 +5042,11 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** than within an [xUpdate] method call for an UPDATE statement, then
** the return value is arbitrary and meaningless.
**
** ^The sqlite3_value_frombind(X) interface returns non-zero if the
** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()]
** interfaces. ^If X comes from an SQL literal value, or a table column,
** and expression, then sqlite3_value_frombind(X) returns zero.
**
** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
@ -5056,6 +5092,7 @@ SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
/*
** CAPI3REF: Finding The Subtype Of SQL Values
@ -5791,7 +5828,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
** associated with database N of connection D. ^The main database file
** has the name "main". If there is no attached database N on the database
** connection D, or if database N is a temporary or in-memory database, then
** a NULL pointer is returned.
** this function will return either a NULL pointer or an empty string.
**
** ^The filename returned by this function is the output of the
** xFullPathname method of the [VFS]. ^In other words, the filename
@ -10892,7 +10929,7 @@ SQLITE_API int sqlite3rebaser_configure(
** in size. This function allocates and populates a buffer with a copy
** of the changeset rebased rebased according to the configuration of the
** rebaser object passed as the first argument. If successful, (*ppOut)
** is set to point to the new buffer containing the rebased changset and
** is set to point to the new buffer containing the rebased changeset and
** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
** responsibility of the caller to eventually free the new buffer using
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
@ -11301,7 +11338,7 @@ struct Fts5PhraseIter {
** Save the pointer passed as the second argument as the extension functions
** "auxiliary data". The pointer may then be retrieved by the current or any
** future invocation of the same fts5 extension function made as part of
** of the same MATCH query using the xGetAuxdata() API.
** the same MATCH query using the xGetAuxdata() API.
**
** Each extension function is allocated a single auxiliary data slot for
** each FTS query (MATCH expression). If the extension function is invoked
@ -11316,7 +11353,7 @@ struct Fts5PhraseIter {
** The xDelete callback, if one is specified, is also invoked on the
** auxiliary data pointer after the FTS5 query has finished.
**
** If an error (e.g. an OOM condition) occurs within this function, an
** If an error (e.g. an OOM condition) occurs within this function,
** the auxiliary data is set to NULL and an error code returned. If the
** xDelete parameter was not NULL, it is invoked on the auxiliary data
** pointer before returning.

View File

@ -44,7 +44,7 @@ android {
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
res.srcDirs = [qt5AndroidDir + '/res', 'res']
resources.srcDirs = ['src']
resources.srcDirs = ['resources']
renderscript.srcDirs = ['src']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']

View File

@ -206,9 +206,9 @@ public:
bool shouldStartThread() override
{
if (forIteration)
return (currentIndex.load() < iterationCount) && !this->shouldThrottleThread();
return (currentIndex.loadRelaxed() < iterationCount) && !this->shouldThrottleThread();
else // whileIteration
return (iteratorThreads.load() == 0);
return (iteratorThreads.loadRelaxed() == 0);
}
ThreadFunctionResult threadFunction() override
@ -230,7 +230,7 @@ public:
const int currentBlockSize = blockSizeManager.blockSize();
if (currentIndex.load() >= iterationCount)
if (currentIndex.loadRelaxed() >= iterationCount)
break;
// Atomically reserve a block of iterationCount for this thread.
@ -261,7 +261,7 @@ public:
// Report progress if progress reporting enabled.
if (progressReportingEnabled) {
completed.fetchAndAddAcquire(finalBlockSize);
this->setProgressValue(this->completed.load());
this->setProgressValue(this->completed.loadRelaxed());
}
if (this->shouldThrottleThread())

View File

@ -138,10 +138,10 @@
T is the same type as the return value of \a function. Non-void return
values can be accessed via the QFuture::result() function.
Note that the QFuture returned by QtConcurrent::run() does not support
canceling, pausing, or progress reporting. The QFuture returned can only
be used to query for the running/finished status and the return value of
the function.
\note The QFuture returned can only be used to query for the
running/finished status and the return value of the function. In particular,
canceling or pausing can be issued only if the computations behind the future
has not been started.
\sa {Concurrent Run}
*/
@ -157,10 +157,10 @@
T is the same type as the return value of \a function. Non-void return
values can be accessed via the QFuture::result() function.
Note that the QFuture returned by QtConcurrent::run() does not support
canceling, pausing, or progress reporting. The QFuture returned can only
be used to query for the running/finished status and the return value of
the function.
\note The QFuture returned can only be used to query for the
running/finished status and the return value of the function. In particular,
canceling or pausing can be issued only if the computations behind the future
has not been started.
\sa {Concurrent Run}
*/

View File

@ -91,7 +91,7 @@ ThreadEngineBarrier::ThreadEngineBarrier()
void ThreadEngineBarrier::acquire()
{
forever {
int localCount = count.load();
int localCount = count.loadRelaxed();
if (localCount < 0) {
if (count.testAndSetOrdered(localCount, localCount -1))
return;
@ -105,7 +105,7 @@ void ThreadEngineBarrier::acquire()
int ThreadEngineBarrier::release()
{
forever {
int localCount = count.load();
int localCount = count.loadRelaxed();
if (localCount == -1) {
if (count.testAndSetOrdered(-1, 0)) {
semaphore.release();
@ -125,7 +125,7 @@ int ThreadEngineBarrier::release()
void ThreadEngineBarrier::wait()
{
forever {
int localCount = count.load();
int localCount = count.loadRelaxed();
if (localCount == 0)
return;
@ -139,7 +139,7 @@ void ThreadEngineBarrier::wait()
int ThreadEngineBarrier::currentCount()
{
return count.load();
return count.loadRelaxed();
}
// releases a thread, unless this is the last thread.
@ -147,7 +147,7 @@ int ThreadEngineBarrier::currentCount()
bool ThreadEngineBarrier::releaseUnlessLast()
{
forever {
int localCount = count.load();
int localCount = count.loadRelaxed();
if (qAbs(localCount) == 1) {
return false;
} else if (localCount < 0) {

View File

@ -296,6 +296,9 @@ endfunction()
# qt5_add_big_resources(outfiles inputfile ... )
function(QT5_ADD_BIG_RESOURCES outfiles )
if (CMAKE_VERSION VERSION_LESS 3.9)
message(FATAL_ERROR, "qt5_add_big_resources requires CMake 3.9 or newer")
endif()
set(options)
set(oneValueArgs)
@ -326,6 +329,8 @@ function(QT5_ADD_BIG_RESOURCES outfiles )
set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOMOC OFF)
set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOUIC OFF)
add_dependencies(rcc_object_${outfilename} big_resources_${outfilename})
# The modification of TARGET_OBJECTS needs the following change in cmake
# https://gitlab.kitware.com/cmake/cmake/commit/93c89bc75ceee599ba7c08b8fe1ac5104942054f
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Core_RCC_EXECUTABLE}
ARGS ${rcc_options} --name ${outfilename} --pass 2 --temp $<TARGET_OBJECTS:rcc_object_${outfilename}> --output ${outfile} ${infile}

View File

@ -1063,10 +1063,12 @@ QAbstractAnimation::~QAbstractAnimation()
if (d->state != Stopped) {
QAbstractAnimation::State oldState = d->state;
d->state = Stopped;
emit stateChanged(oldState, d->state);
emit stateChanged(d->state, oldState);
if (oldState == QAbstractAnimation::Running)
QAnimationTimer::unregisterAnimation(this);
}
if (d->group)
d->group->removeAnimation(this);
}
/*!

View File

@ -113,6 +113,11 @@ QAnimationGroup::QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent)
*/
QAnimationGroup::~QAnimationGroup()
{
Q_D(QAnimationGroup);
// We need to clear the animations now while we are still a valid QAnimationGroup.
// If we wait until ~QObject() the QAbstractAnimation's pointer back to us would
// point to a QObject, not a valid QAnimationGroup.
d->clear(true);
}
/*!
@ -256,7 +261,7 @@ QAbstractAnimation *QAnimationGroup::takeAnimation(int index)
void QAnimationGroup::clear()
{
Q_D(QAnimationGroup);
qDeleteAll(d->animations);
d->clear(false);
}
/*!
@ -284,6 +289,24 @@ bool QAnimationGroup::event(QEvent *event)
return QAbstractAnimation::event(event);
}
void QAnimationGroupPrivate::clear(bool onDestruction)
{
const QList<QAbstractAnimation *> animationsCopy = animations; // taking a copy
animations.clear();
// Clearing backwards so the indices doesn't change while we remove animations.
for (int i = animationsCopy.count() - 1; i >= 0; --i) {
QAbstractAnimation *animation = animationsCopy.at(i);
animation->setParent(nullptr);
QAbstractAnimationPrivate::get(animation)->group = nullptr;
// If we are in ~QAnimationGroup() it is not safe to called the virtual
// animationRemoved method, which can still be a method in a
// QAnimationGroupPrivate derived class that assumes q_ptr is still
// a valid derived class of QAnimationGroup.
if (!onDestruction)
animationRemoved(i, animation);
delete animation;
}
}
void QAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *)
{

View File

@ -73,6 +73,8 @@ public:
virtual void animationInsertedAt(int) { }
virtual void animationRemoved(int, QAbstractAnimation *);
void clear(bool onDestruction);
void disconnectUncontrolledAnimation(QAbstractAnimation *anim)
{
//0 for the signal here because we might be called from the animation destructor

View File

@ -532,7 +532,8 @@ void QSequentialAnimationGroupPrivate::animationRemoved(int index, QAbstractAnim
Q_Q(QSequentialAnimationGroup);
QAnimationGroupPrivate::animationRemoved(index, anim);
Q_ASSERT(currentAnimation); // currentAnimation should always be set
if (!currentAnimation)
return;
if (actualDuration.size() > index)
actualDuration.removeAt(index);

View File

@ -283,11 +283,11 @@ void QVariantAnimationPrivate::setCurrentValueForProgress(const qreal progress)
qSwap(currentValue, ret);
q->updateCurrentValue(currentValue);
static QBasicAtomicInt changedSignalIndex = Q_BASIC_ATOMIC_INITIALIZER(0);
if (!changedSignalIndex.load()) {
if (!changedSignalIndex.loadRelaxed()) {
//we keep the mask so that we emit valueChanged only when needed (for performance reasons)
changedSignalIndex.testAndSetRelaxed(0, signalIndex("valueChanged(QVariant)"));
}
if (isSignalConnected(changedSignalIndex.load()) && currentValue != ret) {
if (isSignalConnected(changedSignalIndex.loadRelaxed()) && currentValue != ret) {
//the value has changed
emit q->valueChanged(currentValue);
}

View File

@ -48,7 +48,7 @@ QLatin1Codec::~QLatin1Codec()
QString QLatin1Codec::convertToUnicode(const char *chars, int len, ConverterState *) const
{
if (chars == 0)
if (chars == nullptr)
return QString();
return QString::fromLatin1(chars, len);
@ -104,7 +104,7 @@ QLatin15Codec::~QLatin15Codec()
QString QLatin15Codec::convertToUnicode(const char* chars, int len, ConverterState *) const
{
if (chars == 0)
if (chars == nullptr)
return QString();
QString str = QString::fromLatin1(chars, len);

View File

@ -610,7 +610,7 @@ QSimpleTextCodec::QSimpleTextCodec(int i) : forwardIndex(i), reverseMap(0)
QSimpleTextCodec::~QSimpleTextCodec()
{
delete reverseMap.load();
delete reverseMap.loadAcquire();
}
static QByteArray *buildReverseMap(int forwardIndex)
@ -662,12 +662,12 @@ QByteArray QSimpleTextCodec::convertFromUnicode(const QChar *in, int length, Con
const char replacement = (state && state->flags & ConvertInvalidToNull) ? 0 : '?';
int invalid = 0;
QByteArray *rmap = reverseMap.load();
QByteArray *rmap = reverseMap.loadAcquire();
if (!rmap){
rmap = buildReverseMap(this->forwardIndex);
if (!reverseMap.testAndSetRelease(0, rmap)) {
delete rmap;
rmap = reverseMap.load();
rmap = reverseMap.loadAcquire();
}
}

View File

@ -159,7 +159,7 @@ static QTextCodec *setupLocaleMapper()
{
QCoreGlobalData *globalData = QCoreGlobalData::instance();
QTextCodec *locale = 0;
QTextCodec *locale = nullptr;
{
QMutexLocker locker(textCodecsMutex());
@ -208,7 +208,7 @@ static QTextCodec *setupLocaleMapper()
// First part is getting that locale name. First try setlocale() which
// definitely knows it, but since we cannot fully trust it, get ready
// to fall back to environment variables.
const QByteArray ctype = setlocale(LC_CTYPE, 0);
const QByteArray ctype = setlocale(LC_CTYPE, nullptr);
// Get the first nonempty value from $LC_ALL, $LC_CTYPE, and $LANG
// environment variables.
@ -532,13 +532,13 @@ QTextCodec::~QTextCodec()
QTextCodec *QTextCodec::codecForName(const QByteArray &name)
{
if (name.isEmpty())
return 0;
return nullptr;
QMutexLocker locker(textCodecsMutex());
QCoreGlobalData *globalData = QCoreGlobalData::instance();
if (!globalData)
return 0;
return nullptr;
setup();
#if !QT_CONFIG(icu)
@ -567,7 +567,7 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
}
}
return 0;
return nullptr;
#else
return QIcuCodec::codecForNameUnlocked(name);
#endif
@ -585,7 +585,7 @@ QTextCodec* QTextCodec::codecForMib(int mib)
QCoreGlobalData *globalData = QCoreGlobalData::instance();
if (!globalData)
return 0;
return nullptr;
if (globalData->allCodecs.isEmpty())
setup();
@ -611,7 +611,7 @@ QTextCodec* QTextCodec::codecForMib(int mib)
#if QT_CONFIG(icu)
return QIcuCodec::codecForMibUnlocked(mib);
#else
return 0;
return nullptr;
#endif
}
@ -704,7 +704,7 @@ QTextCodec* QTextCodec::codecForLocale()
{
QCoreGlobalData *globalData = QCoreGlobalData::instance();
if (!globalData)
return 0;
return nullptr;
QTextCodec *codec = globalData->codecForLocale.loadAcquire();
if (!codec) {
@ -830,7 +830,7 @@ QTextEncoder* QTextCodec::makeEncoder(QTextCodec::ConversionFlags flags) const
*/
QByteArray QTextCodec::fromUnicode(const QString& str) const
{
return convertFromUnicode(str.constData(), str.length(), 0);
return convertFromUnicode(str.constData(), str.length(), nullptr);
}
#endif
@ -863,7 +863,7 @@ QByteArray QTextCodec::fromUnicode(QStringView str) const
*/
QString QTextCodec::toUnicode(const QByteArray& a) const
{
return convertToUnicode(a.constData(), a.length(), 0);
return convertToUnicode(a.constData(), a.length(), nullptr);
}
/*!
@ -915,7 +915,7 @@ bool QTextCodec::canEncode(QStringView s) const
QString QTextCodec::toUnicode(const char *chars) const
{
int len = qstrlen(chars);
return convertToUnicode(chars, len, 0);
return convertToUnicode(chars, len, nullptr);
}
@ -1110,7 +1110,7 @@ QString QTextDecoder::toUnicode(const QByteArray &ba)
QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
{
// determine charset
QTextCodec *c = QTextCodec::codecForUtfText(ba, 0);
QTextCodec *c = QTextCodec::codecForUtfText(ba, nullptr);
if (!c) {
static Q_RELAXED_CONSTEXPR auto matcher = qMakeStaticByteArrayMatcher("meta ");
QByteArray header = ba.left(1024).toLower();

View File

@ -286,15 +286,11 @@ if (!invalidRe.isValid()) {
{
//! [24]
QRegularExpression re("^this pattern must match exactly$");
//! [24]
}
{
//! [25]
QString p("a .*|pattern");
QRegularExpression re("\\A(?:" + p + ")\\z"); // re matches exactly the pattern string p
//! [25]
// re matches exactly the pattern string p
QRegularExpression re(QRegularExpression::anchoredPattern(p));
//! [24]
}
{

View File

@ -131,6 +131,8 @@ files (\c .o, \c .obj) files instead of C++ source code. This allows to
embed bigger resources, where compiling to C++ sources and then to
binaries would be too time consuming or memory intensive.
Note that this macro is only available if using \c{CMake} 3.9 or later.
\section1 Arguments
You can set additional \c{OPTIONS} that should be added to the \c{rcc} calls.

View File

@ -0,0 +1,41 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** 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 Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\dontdocument (QMacAutoReleasePool QIncompatibleFlag QGenericAtomicOps QAtomicTraits
QAtomicOps QBasicAtomicInteger QBasicAtomicPointer QBasicMutex QInternal
QArgument QReturnArgument QArrayData QTypedArrayData QStaticByteArrayData
QByteRef QStaticStringData QListSpecialMethods QListData QScopedPointerDeleter
QScopedPointerArrayDeleter QScopedPointerPodDeleter QScopedPointerObjectDeleteLater
QMetaTypeId2 QObjectData QObjectUserData QMapNodeBase QMapNode QMapDataBase
QMapData QHashData QHashNode QArrayDataPointer QTextStreamManipulator
QContiguousCacheData QContiguousCacheTypedData QNoDebug QUrlTwoFlags
QCborValueRef qfloat16 QDeferredDeleteEvent QSpecialInteger QLittleEndianStorageType
QBigEndianStorageType QFactoryInterface QFutureWatcherBase QJsonValuePtr
QJsonValueRefPtr QLinkedListNode QAbstractConcatenable QStringBuilderCommon
QTextCodec::ConverterState QThreadStorageData)
*/

View File

@ -40,6 +40,10 @@ SOURCES += \
global/qrandom.cpp \
global/qhooks.cpp
# To get listed in IDEs
false: SOURCES += \
global/qfloat16tables.cpp
# Only add global/qfloat16_f16c.c if qfloat16.cpp can't #include it.
# Any compiler: if it is already generating F16C code, let qfloat16.cpp do it
# Clang: ICE if not generating F16C code, so use qfloat16_f16c.c
@ -124,14 +128,3 @@ gcc:ltcg {
} else {
SOURCES += $$VERSIONTAGGING_SOURCES
}
QMAKE_QFLOAT16_TABLES_GENERATE = global/qfloat16.h
qtPrepareTool(QMAKE_QFLOAT16_TABLES, qfloat16-tables)
qfloat16_tables.commands = $$QMAKE_QFLOAT16_TABLES ${QMAKE_FILE_OUT}
qfloat16_tables.output = global/qfloat16tables.cpp
qfloat16_tables.depends = $$QMAKE_QFLOAT16_TABLES_EXE
qfloat16_tables.input = QMAKE_QFLOAT16_TABLES_GENERATE
qfloat16_tables.variable_out = SOURCES
QMAKE_EXTRA_COMPILERS += qfloat16_tables

View File

@ -239,6 +239,7 @@ Q_CORE_EXPORT void qFloatFromFloat16(float *out, const qfloat16 *in, qsizetype l
QT_END_NAMESPACE
#include "qfloat16tables.cpp"
#ifdef QFLOAT16_INCLUDE_FAST
# include "qfloat16_f16c.c"
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1552,6 +1552,13 @@ bool qSharedBuild() noexcept
Defined on Any UNIX BSD/SYSV system.
*/
/*!
\macro Q_OS_WASM
\relates <QtGlobal>
Defined on Web Assembly.
*/
/*!
\macro Q_CC_SYM
\relates <QtGlobal>
@ -2945,6 +2952,7 @@ QString QSysInfo::machineHostName()
struct utsname u;
if (uname(&u) == 0)
return QString::fromLocal8Bit(u.nodename);
return QString();
#else
# ifdef Q_OS_WIN
// Important: QtNetwork depends on machineHostName() initializing ws2_32.dll
@ -2957,7 +2965,6 @@ QString QSysInfo::machineHostName()
hostName[sizeof(hostName) - 1] = '\0';
return QString::fromLocal8Bit(hostName);
#endif
return QString();
}
#endif // QT_BOOTSTRAPPED
@ -3612,7 +3619,7 @@ bool qEnvironmentVariableIsSet(const char *varName) noexcept
(void)getenv_s(&requiredSize, 0, 0, varName);
return requiredSize != 0;
#else
return ::getenv(varName) != 0;
return ::getenv(varName) != nullptr;
#endif
}

View File

@ -1097,7 +1097,7 @@ for (auto _container_ = QtPrivate::qMakeForeachContainer(container); \
#endif
template <typename T> inline T *qGetPtrHelper(T *ptr) { return ptr; }
template <typename Ptr> inline auto qGetPtrHelper(const Ptr &ptr) -> decltype(ptr.operator->()) { return ptr.operator->(); }
template <typename Ptr> inline auto qGetPtrHelper(Ptr &ptr) -> decltype(ptr.operator->()) { return ptr.operator->(); }
// The body must be a statement:
#define Q_CAST_IGNORE_ALIGN(body) QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wcast-align") body QT_WARNING_POP

View File

@ -80,15 +80,15 @@ enum GuardValues {
{ \
struct HolderBase { \
~HolderBase() noexcept \
{ if (guard.load() == QtGlobalStatic::Initialized) \
guard.store(QtGlobalStatic::Destroyed); } \
{ if (guard.loadRelaxed() == QtGlobalStatic::Initialized) \
guard.storeRelaxed(QtGlobalStatic::Destroyed); } \
}; \
static struct Holder : public HolderBase { \
Type value; \
Holder() \
noexcept(noexcept(Type ARGS)) \
: value ARGS \
{ guard.store(QtGlobalStatic::Initialized); } \
{ guard.storeRelaxed(QtGlobalStatic::Initialized); } \
} holder; \
return &holder.value; \
}
@ -108,12 +108,12 @@ QT_BEGIN_NAMESPACE
int x = guard.loadAcquire(); \
if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) { \
QMutexLocker locker(&mutex); \
if (guard.load() == QtGlobalStatic::Uninitialized) { \
if (guard.loadRelaxed() == QtGlobalStatic::Uninitialized) { \
d = new Type ARGS; \
static struct Cleanup { \
~Cleanup() { \
delete d; \
guard.store(QtGlobalStatic::Destroyed); \
guard.storeRelaxed(QtGlobalStatic::Destroyed); \
} \
} cleanup; \
guard.storeRelease(QtGlobalStatic::Initialized); \
@ -129,8 +129,8 @@ struct QGlobalStatic
{
typedef T Type;
bool isDestroyed() const { return guard.load() <= QtGlobalStatic::Destroyed; }
bool exists() const { return guard.load() == QtGlobalStatic::Initialized; }
bool isDestroyed() const { return guard.loadRelaxed() <= QtGlobalStatic::Destroyed; }
bool exists() const { return guard.loadRelaxed() == QtGlobalStatic::Initialized; }
operator Type *() { if (isDestroyed()) return nullptr; return innerFunction(); }
Type *operator()() { if (isDestroyed()) return nullptr; return innerFunction(); }
Type *operator->()

View File

@ -432,7 +432,24 @@ void QLibraryInfo::reload()
{
QLibraryInfoPrivate::reload();
}
#endif
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
/*!
Returns the location specified by \a loc.
@ -444,18 +461,8 @@ QLibraryInfo::location(LibraryLocation loc)
QString ret = rawLocation(loc, FinalPaths);
// Automatically prepend the sysroot to target paths
if (loc < SysrootPath || loc > LastHostPath) {
QString sysroot = rawLocation(SysrootPath, FinalPaths);
if (!sysroot.isEmpty()
&& QVariant::fromValue(rawLocation(SysrootifyPrefixPath, FinalPaths)).toBool()) {
if (ret.length() > 2 && ret.at(1) == QLatin1Char(':')
&& (ret.at(2) == QLatin1Char('/') || ret.at(2) == QLatin1Char('\\'))) {
ret.replace(0, 2, sysroot); // Strip out the drive on Windows targets
} else {
ret.prepend(sysroot);
}
}
}
if (loc < SysrootPath || loc > LastHostPath)
sysrootify(&ret);
return ret;
}
@ -598,6 +605,8 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup 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) {

View File

@ -107,6 +107,7 @@ public:
enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths, DevicePaths };
static QString rawLocation(LibraryLocation, PathGroup);
static void reload();
static void sysrootify(QString *path);
#endif
static QStringList platformPluginArguments(const QString &platformName);

View File

@ -44,6 +44,7 @@
#include "qlogging_p.h"
#include "qlist.h"
#include "qbytearray.h"
#include "qscopeguard.h"
#include "qstring.h"
#include "qvarlengtharray.h"
#include "qdebug.h"
@ -158,6 +159,9 @@ static QT_PREPEND_NAMESPACE(qint64) qt_gettid()
#endif // !QT_BOOTSTRAPPED
#include <cstdlib>
#include <algorithm>
#include <memory>
#include <vector>
#include <stdio.h>
@ -194,7 +198,7 @@ static bool isFatal(QtMsgType msgType)
// it's fatal if the current value is exactly 1,
// otherwise decrement if it's non-zero
return fatalCriticals.load() && fatalCriticals.fetchAndAddRelaxed(-1) == 1;
return fatalCriticals.loadRelaxed() && fatalCriticals.fetchAndAddRelaxed(-1) == 1;
}
if (msgType == QtWarningMsg || msgType == QtCriticalMsg) {
@ -202,7 +206,7 @@ static bool isFatal(QtMsgType msgType)
// it's fatal if the current value is exactly 1,
// otherwise decrement if it's non-zero
return fatalWarnings.load() && fatalWarnings.fetchAndAddRelaxed(-1) == 1;
return fatalWarnings.loadRelaxed() && fatalWarnings.fetchAndAddRelaxed(-1) == 1;
}
return false;
@ -1076,8 +1080,8 @@ struct QMessagePattern {
void setPattern(const QString &pattern);
// 0 terminated arrays of literal tokens / literal or placeholder tokens
const char **literals;
const char **tokens;
std::unique_ptr<std::unique_ptr<const char[]>[]> literals;
std::unique_ptr<const char*[]> tokens;
QList<QString> timeArgs; // timeFormats in sequence of %{time
#ifndef QT_BOOTSTRAPPED
QElapsedTimer timer;
@ -1100,9 +1104,6 @@ Q_DECLARE_TYPEINFO(QMessagePattern::BacktraceParams, Q_MOVABLE_TYPE);
QBasicMutex QMessagePattern::mutex;
QMessagePattern::QMessagePattern()
: literals(0)
, tokens(0)
, fromEnvironment(false)
{
#ifndef QT_BOOTSTRAPPED
timer.start();
@ -1110,6 +1111,7 @@ QMessagePattern::QMessagePattern()
const QString envPattern = QString::fromLocal8Bit(qgetenv("QT_MESSAGE_PATTERN"));
if (envPattern.isEmpty()) {
setPattern(QLatin1String(defaultPattern));
fromEnvironment = false;
} else {
setPattern(envPattern);
fromEnvironment = true;
@ -1117,23 +1119,10 @@ QMessagePattern::QMessagePattern()
}
QMessagePattern::~QMessagePattern()
{
for (int i = 0; literals[i]; ++i)
delete [] literals[i];
delete [] literals;
literals = 0;
delete [] tokens;
tokens = 0;
}
= default;
void QMessagePattern::setPattern(const QString &pattern)
{
if (literals) {
for (int i = 0; literals[i]; ++i)
delete [] literals[i];
delete [] literals;
}
delete [] tokens;
timeArgs.clear();
#ifdef QLOGGING_HAVE_BACKTRACE
backtraceArgs.clear();
@ -1171,9 +1160,9 @@ void QMessagePattern::setPattern(const QString &pattern)
lexemes.append(lexeme);
// tokenizer
QVarLengthArray<const char*> literalsVar;
tokens = new const char*[lexemes.size() + 1];
tokens[lexemes.size()] = 0;
std::vector<std::unique_ptr<const char[]>> literalsVar;
tokens.reset(new const char*[lexemes.size() + 1]);
tokens[lexemes.size()] = nullptr;
bool nestedIfError = false;
bool inIf = false;
@ -1267,7 +1256,7 @@ void QMessagePattern::setPattern(const QString &pattern)
char *literal = new char[lexeme.size() + 1];
strncpy(literal, lexeme.toLatin1().constData(), lexeme.size());
literal[lexeme.size()] = '\0';
literalsVar.append(literal);
literalsVar.emplace_back(literal);
tokens[i] = literal;
}
}
@ -1279,9 +1268,8 @@ void QMessagePattern::setPattern(const QString &pattern)
if (!error.isEmpty())
qt_message_print(error);
literals = new const char*[literalsVar.size() + 1];
literals[literalsVar.size()] = 0;
memcpy(literals, literalsVar.constData(), literalsVar.size() * sizeof(const char*));
literals.reset(new std::unique_ptr<const char[]>[literalsVar.size() + 1]);
std::move(literalsVar.begin(), literalsVar.end(), &literals[0]);
}
#if defined(QLOGGING_HAVE_BACKTRACE) && !defined(QT_BOOTSTRAPPED)
@ -1406,7 +1394,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
#endif
// we do not convert file, function, line literals to local encoding due to overhead
for (int i = 0; pattern->tokens[i] != 0; ++i) {
for (int i = 0; pattern->tokens[i]; ++i) {
const char *token = pattern->tokens[i];
if (token == endifTokenC) {
skip = false;
@ -1512,9 +1500,9 @@ static void qDefaultMsgHandler(QtMsgType type, const char *buf);
static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &buf);
// pointer to QtMsgHandler debug handler (without context)
static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMsgHandler);
static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_ATOMIC_INITIALIZER(nullptr);
// pointer to QtMessageHandler debug handler (with context)
static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMessageHandler);
static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(nullptr);
// ------------------------ Alternate logging sinks -------------------------
@ -1826,14 +1814,15 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
// prevent recursion in case the message handler generates messages
// itself, e.g. by using Qt API
if (grabMessageHandler()) {
const auto ungrab = qScopeGuard([]{ ungrabMessageHandler(); });
auto oldStyle = msgHandler.loadAcquire();
auto newStye = messageHandler.loadAcquire();
// prefer new message handler over the old one
if (msgHandler.load() == qDefaultMsgHandler
|| messageHandler.load() != qDefaultMessageHandler) {
(*messageHandler.load())(msgType, context, message);
if (newStye || !oldStyle) {
(newStye ? newStye : qDefaultMessageHandler)(msgType, context, message);
} else {
(*msgHandler.load())(msgType, message.toLocal8Bit().constData());
(oldStyle ? oldStyle : qDefaultMsgHandler)(msgType, message.toLocal8Bit().constData());
}
ungrabMessageHandler();
} else {
fprintf(stderr, "%s\n", message.toLocal8Bit().constData());
}
@ -2084,18 +2073,20 @@ void qErrnoWarning(int code, const char *msg, ...)
QtMessageHandler qInstallMessageHandler(QtMessageHandler h)
{
if (!h)
h = qDefaultMessageHandler;
//set 'h' and return old message handler
return messageHandler.fetchAndStoreRelaxed(h);
const auto old = messageHandler.fetchAndStoreOrdered(h);
if (old)
return old;
else
return qDefaultMessageHandler;
}
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
{
if (!h)
h = qDefaultMsgHandler;
//set 'h' and return old message handler
return msgHandler.fetchAndStoreRelaxed(h);
const auto old = msgHandler.fetchAndStoreOrdered(h);
if (old)
return old;
else
return qDefaultMsgHandler;
}
void qSetMessagePattern(const QString &pattern)

View File

@ -74,18 +74,18 @@ void *qRealloc(void *ptr, size_t size)
void *qMallocAligned(size_t size, size_t alignment)
{
return qReallocAligned(0, size, 0, alignment);
return qReallocAligned(nullptr, size, 0, alignment);
}
void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t alignment)
{
// fake an aligned allocation
void *actualptr = oldptr ? static_cast<void **>(oldptr)[-1] : 0;
void *actualptr = oldptr ? static_cast<void **>(oldptr)[-1] : nullptr;
if (alignment <= sizeof(void*)) {
// special, fast case
void **newptr = static_cast<void **>(realloc(actualptr, newsize + sizeof(void*)));
if (!newptr)
return 0;
return nullptr;
if (newptr == actualptr) {
// realloc succeeded without reallocating
return oldptr;
@ -105,7 +105,7 @@ void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t align
void *real = realloc(actualptr, newsize + alignment);
if (!real)
return 0;
return nullptr;
quintptr faked = reinterpret_cast<quintptr>(real) + alignment;
faked &= ~(alignment - 1);

View File

@ -186,7 +186,7 @@ struct QRandomGenerator::SystemGenerator
#endif
static void closeDevice()
{
int fd = self().fdp1.load() - 1;
int fd = self().fdp1.loadRelaxed() - 1;
if (fd >= 0)
qt_safe_close(fd);
}
@ -310,7 +310,7 @@ static void fallback_fill(quint32 *ptr, qsizetype left) noexcept
*end++ = quint32(nsecs); // 5
#endif
if (quint32 v = seed.load())
if (quint32 v = seed.loadRelaxed())
*end++ = v; // 6
#if QT_CONFIG(getauxval)

View File

@ -159,7 +159,7 @@ QAbstractFileEngineHandler::~QAbstractFileEngineHandler()
*/
QAbstractFileEngine *qt_custom_file_engine_handler_create(const QString &path)
{
QAbstractFileEngine *engine = 0;
QAbstractFileEngine *engine = nullptr;
if (qt_file_engine_handlers_in_use) {
QReadLocker locker(fileEngineHandlerMutex());
@ -658,7 +658,7 @@ QStringList QAbstractFileEngine::entryList(QDir::Filters filters, const QStringL
QAbstractFileEngine::FileFlags QAbstractFileEngine::fileFlags(FileFlags type) const
{
Q_UNUSED(type);
return 0;
return nullptr;
}
/*!
@ -838,7 +838,7 @@ uchar *QAbstractFileEngine::map(qint64 offset, qint64 size, QFile::MemoryMapFlag
option.flags = flags;
MapExtensionReturn r;
if (!extension(MapExtension, &option, &r))
return 0;
return nullptr;
return r.address;
}
@ -1118,7 +1118,7 @@ QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters
{
Q_UNUSED(filters);
Q_UNUSED(filterNames);
return 0;
return nullptr;
}
/*!
@ -1126,7 +1126,7 @@ QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters
*/
QAbstractFileEngine::Iterator *QAbstractFileEngine::endEntryList()
{
return 0;
return nullptr;
}
/*!

View File

@ -50,7 +50,7 @@ class QBufferPrivate : public QIODevicePrivate
public:
QBufferPrivate()
: buf(0)
: buf(nullptr)
#ifndef QT_NO_QOBJECT
, writtenSinceLastEmit(0), signalConnectionCount(0), signalsEmitted(false)
#endif

View File

@ -147,7 +147,7 @@ using QtMiscUtils::fromHex;
// Has been defined in the header / inlined before Qt 5.4
QDebug::~QDebug()
{
if (!--stream->ref) {
if (stream && !--stream->ref) {
if (stream->space && stream->buffer.endsWith(QLatin1Char(' ')))
stream->buffer.chop(1);
if (stream->message_output) {
@ -843,36 +843,34 @@ QDebug &QDebug::resetFormat()
class QDebugStateSaverPrivate
{
public:
QDebugStateSaverPrivate(QDebug &dbg)
: m_dbg(dbg),
m_spaces(dbg.autoInsertSpaces()),
m_flags(0),
m_streamParams(dbg.stream->ts.d_ptr->params)
QDebugStateSaverPrivate(QDebug::Stream *stream)
: m_stream(stream),
m_spaces(stream->space),
m_flags(stream->context.version > 1 ? stream->flags : 0),
m_streamParams(stream->ts.d_ptr->params)
{
if (m_dbg.stream->context.version > 1)
m_flags = m_dbg.stream->flags;
}
void restoreState()
{
const bool currentSpaces = m_dbg.autoInsertSpaces();
const bool currentSpaces = m_stream->space;
if (currentSpaces && !m_spaces)
if (m_dbg.stream->buffer.endsWith(QLatin1Char(' ')))
m_dbg.stream->buffer.chop(1);
if (m_stream->buffer.endsWith(QLatin1Char(' ')))
m_stream->buffer.chop(1);
m_dbg.setAutoInsertSpaces(m_spaces);
m_dbg.stream->ts.d_ptr->params = m_streamParams;
if (m_dbg.stream->context.version > 1)
m_dbg.stream->flags = m_flags;
m_stream->space = m_spaces;
m_stream->ts.d_ptr->params = m_streamParams;
if (m_stream->context.version > 1)
m_stream->flags = m_flags;
if (!currentSpaces && m_spaces)
m_dbg.stream->ts << ' ';
m_stream->ts << ' ';
}
QDebug &m_dbg;
QDebug::Stream *m_stream;
// QDebug state
const bool m_spaces;
int m_flags;
const int m_flags;
// QTextStream state
const QTextStreamPrivate::Params m_streamParams;
@ -886,7 +884,7 @@ public:
\sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces()
*/
QDebugStateSaver::QDebugStateSaver(QDebug &dbg)
: d(new QDebugStateSaverPrivate(dbg))
: d(new QDebugStateSaverPrivate(dbg.stream))
{
}

View File

@ -65,6 +65,7 @@ QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QDebug
{
friend class QMessageLogger;
friend class QDebugStateSaver;
friend class QDebugStateSaverPrivate;
struct Stream {
enum { VerbosityShift = 29, VerbosityMask = 0x7 };
@ -114,7 +115,10 @@ public:
inline QDebug(QString *string) : stream(new Stream(string)) {}
inline QDebug(QtMsgType t) : stream(new Stream(t)) {}
inline QDebug(const QDebug &o):stream(o.stream) { ++stream->ref; }
QDebug(QDebug &&other) noexcept : stream{qExchange(other.stream, nullptr)} {}
inline QDebug &operator=(const QDebug &other);
QDebug &operator=(QDebug &&other) noexcept
{ QDebug{std::move(other)}.swap(*this); return *this; }
~QDebug();
inline void swap(QDebug &other) noexcept { qSwap(stream, other.stream); }
@ -203,10 +207,7 @@ public:
inline QDebug &QDebug::operator=(const QDebug &other)
{
if (this != &other) {
QDebug copy(other);
qSwap(stream, copy.stream);
}
QDebug{other}.swap(*this);
return *this;
}

View File

@ -1431,7 +1431,7 @@ QStringList QDir::entryList(const QStringList &nameFilters, Filters filters,
l.append(it.fileInfo());
}
QStringList ret;
d->sortFileList(sort, l, &ret, 0);
d->sortFileList(sort, l, &ret, nullptr);
return ret;
}
@ -1473,7 +1473,7 @@ QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, Filters filter
l.append(it.fileInfo());
}
QFileInfoList ret;
d->sortFileList(sort, l, 0, &ret);
d->sortFileList(sort, l, nullptr, &ret);
return ret;
}

View File

@ -86,7 +86,7 @@ QFilePrivate::openExternalFile(int flags, int fd, QFile::FileHandleFlags handleF
return false;
#else
delete fileEngine;
fileEngine = 0;
fileEngine = nullptr;
QFSFileEngine *fe = new QFSFileEngine;
fileEngine = fe;
return fe->open(QIODevice::OpenMode(flags), fd, handleFlags);
@ -102,7 +102,7 @@ QFilePrivate::openExternalFile(int flags, FILE *fh, QFile::FileHandleFlags handl
return false;
#else
delete fileEngine;
fileEngine = 0;
fileEngine = nullptr;
QFSFileEngine *fe = new QFSFileEngine;
fileEngine = fe;
return fe->open(QIODevice::OpenMode(flags), fh, handleFlags);
@ -336,7 +336,7 @@ QFile::setFileName(const QString &name)
}
if(d->fileEngine) { //get a new file engine later
delete d->fileEngine;
d->fileEngine = 0;
d->fileEngine = nullptr;
}
d->fileName = name;
}
@ -810,7 +810,7 @@ QFile::copy(const QString &newName)
error = true;
d->setError(QFile::CopyError, tr("Cannot open %1 for input").arg(d->fileName));
} else {
QString fileTemplate = QLatin1String("%1/qt_temp.XXXXXX");
const auto fileTemplate = QLatin1String("%1/qt_temp.XXXXXX");
#ifdef QT_NO_TEMPORARYFILE
QFile out(fileTemplate.arg(QFileInfo(newName).path()));
if (!out.open(QIODevice::ReadWrite))

View File

@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
#endif
QFileDevicePrivate::QFileDevicePrivate()
: fileEngine(0),
: fileEngine(nullptr),
cachedSize(0),
error(QFile::NoError), lastWasWrite(false)
{
@ -63,7 +63,7 @@ QFileDevicePrivate::QFileDevicePrivate()
QFileDevicePrivate::~QFileDevicePrivate()
{
delete fileEngine;
fileEngine = 0;
fileEngine = nullptr;
}
QAbstractFileEngine * QFileDevicePrivate::engine() const

View File

@ -52,7 +52,7 @@ QString QFileInfoPrivate::getFileName(QAbstractFileEngine::FileName name) const
return fileNames[(int)name];
QString ret;
if (fileEngine == 0) { // local file; use the QFileSystemEngine directly
if (fileEngine == nullptr) { // local file; use the QFileSystemEngine directly
switch (name) {
case QAbstractFileEngine::CanonicalName:
case QAbstractFileEngine::CanonicalPathName: {
@ -103,7 +103,7 @@ QString QFileInfoPrivate::getFileOwner(QAbstractFileEngine::FileOwner own) const
if (cache_enabled && !fileOwners[(int)own].isNull())
return fileOwners[(int)own];
QString ret;
if (fileEngine == 0) {
if (fileEngine == nullptr) {
switch (own) {
case QAbstractFileEngine::OwnerUser:
ret = QFileSystemEngine::resolveUserName(fileEntry, metaData);
@ -134,7 +134,7 @@ uint QFileInfoPrivate::getFileFlags(QAbstractFileEngine::FileFlags request) cons
// extra syscall. Bundle detecton on Mac can be slow, expecially on network
// paths, so we separate out that as well.
QAbstractFileEngine::FileFlags req = 0;
QAbstractFileEngine::FileFlags req = nullptr;
uint cachedFlags = 0;
if (request & (QAbstractFileEngine::FlagsMask | QAbstractFileEngine::TypesMask)) {
@ -434,7 +434,7 @@ bool QFileInfo::operator==(const QFileInfo &fileinfo) const
return true;
Qt::CaseSensitivity sensitive;
if (d->fileEngine == 0 || fileinfo.d_ptr->fileEngine == 0) {
if (d->fileEngine == nullptr || fileinfo.d_ptr->fileEngine == nullptr) {
if (d->fileEngine != fileinfo.d_ptr->fileEngine) // one is native, the other is a custom file-engine
return false;
@ -649,7 +649,7 @@ bool QFileInfo::isRelative() const
Q_D(const QFileInfo);
if (d->isDefaultConstructed)
return true;
if (d->fileEngine == 0)
if (d->fileEngine == nullptr)
return d->fileEntry.isRelative();
return d->fileEngine->isRelativePath();
}
@ -682,7 +682,7 @@ bool QFileInfo::exists() const
Q_D(const QFileInfo);
if (d->isDefaultConstructed)
return false;
if (d->fileEngine == 0) {
if (d->fileEngine == nullptr) {
if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::ExistsAttribute);
return d->metaData.exists();
@ -982,7 +982,7 @@ bool QFileInfo::isNativePath() const
Q_D(const QFileInfo);
if (d->isDefaultConstructed)
return false;
if (d->fileEngine == 0)
if (d->fileEngine == nullptr)
return true;
return d->getFileFlags(QAbstractFileEngine::LocalDiskFlag);
}
@ -1075,7 +1075,7 @@ bool QFileInfo::isRoot() const
Q_D(const QFileInfo);
if (d->isDefaultConstructed)
return false;
if (d->fileEngine == 0) {
if (d->fileEngine == nullptr) {
if (d->fileEntry.isRoot()) {
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
//the path is a drive root, but the drive may not exist

View File

@ -228,7 +228,18 @@ QUrl QFileSelector::select(const QUrl &filePath) const
QString selectedPath = d->select(equivalentPath);
ret.setPath(selectedPath.remove(0, scheme.size()));
} else {
// we need to store the original query and fragment, since toLocalFile() will strip it off
QString frag;
if (ret.hasFragment())
frag = ret.fragment();
QString query;
if (ret.hasQuery())
query= ret.query();
ret = QUrl::fromLocalFile(d->select(ret.toLocalFile()));
if (!frag.isNull())
ret.setFragment(frag);
if (!query.isNull())
ret.setQuery(query);
}
return ret;
}

View File

@ -124,7 +124,7 @@ static inline bool _q_checkEntry(QAbstractFileEngine *&engine, bool resolvingEnt
if (resolvingEntry) {
if (!(engine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::ExistsFlag)) {
delete engine;
engine = 0;
engine = nullptr;
return false;
}
}
@ -191,7 +191,7 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent
QAbstractFileEngine *QFileSystemEngine::resolveEntryAndCreateLegacyEngine(
QFileSystemEntry &entry, QFileSystemMetaData &data) {
QFileSystemEntry copy = entry;
QAbstractFileEngine *engine = 0;
QAbstractFileEngine *engine = nullptr;
if (_q_resolveEntryAndCreateLegacyEngine_recursive(copy, data, engine))
// Reset entry to resolved copy.

Some files were not shown because too many files have changed in this diff Show More