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/QtANGLE/libANGLE/
/src/angle/src/libGLESv2/libANGLE/ /src/angle/src/libGLESv2/libANGLE/
/src/corelib/global/qfloat16tables.cpp
/examples/*/*/* /examples/*/*/*
!/examples/*/*/*[.]* !/examples/*/*/*[.]*
!/examples/*/*/README !/examples/*/*/README

View File

@ -82,7 +82,7 @@
"force-pkg-config": { "type": "void", "name": "pkg-config" }, "force-pkg-config": { "type": "void", "name": "pkg-config" },
"framework": "boolean", "framework": "boolean",
"gc-binaries": { "type": "boolean", "name": "gc_binaries" }, "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", "gcc-sysroot": "boolean",
"gcov": "boolean", "gcov": "boolean",
"gnumake": { "type": "boolean", "name": "GNUmake" }, "gnumake": { "type": "boolean", "name": "GNUmake" },
@ -705,6 +705,7 @@
}, },
"optimize_debug": { "optimize_debug": {
"label": "Optimize debug build", "label": "Optimize debug build",
"autoDetect": "!features.developer-build",
"condition": "!config.msvc && !config.clang && (features.debug || features.debug_and_release) && tests.optimize_debug", "condition": "!config.msvc && !config.clang && (features.debug || features.debug_and_release) && tests.optimize_debug",
"output": [ "privateConfig" ] "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 * * Important Source Incompatible Changes *
**************************************************************************** ****************************************************************************
@ -5,3 +22,287 @@
- Moc generated files include the standard <memory> header file now. - 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 side effect of this is that code including the Moc output from within
a namespace will fail to compile. 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 // prepare the output
printf("Downloading %s...\n", url.toEncoded().constData()); printf("Downloading %s...\n", url.toEncoded().constData());
downloadTime.start(); downloadTimer.start();
} }
void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
@ -140,7 +140,7 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
progressBar.setStatus(bytesReceived, bytesTotal); progressBar.setStatus(bytesReceived, bytesTotal);
// calculate the download speed // calculate the download speed
double speed = bytesReceived * 1000.0 / downloadTime.elapsed(); double speed = bytesReceived * 1000.0 / downloadTimer.elapsed();
QString unit; QString unit;
if (speed < 1024) { if (speed < 1024) {
unit = "bytes/sec"; unit = "bytes/sec";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -54,7 +54,7 @@
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QDir> #include <QDir>
#include <QTime> #include <QElapsedTimer>
#include <QApplication> #include <QApplication>
#include <QDebug> #include <QDebug>
@ -146,19 +146,19 @@ int main(int argc, char** argv)
int singleThreadTime = 0; int singleThreadTime = 0;
{ {
QTime time; QElapsedTimer timer;
time.start(); timer.start();
WordCount total = singleThreadedWordCount(files); WordCount total = singleThreadedWordCount(files);
singleThreadTime = time.elapsed(); singleThreadTime = timer.elapsed();
qDebug() << "single thread" << singleThreadTime; qDebug() << "single thread" << singleThreadTime;
} }
int mapReduceTime = 0; int mapReduceTime = 0;
{ {
QTime time; QElapsedTimer timer;
time.start(); timer.start();
WordCount total = mappedReduced(files, countWords, reduce); WordCount total = mappedReduced(files, countWords, reduce);
mapReduceTime = time.elapsed(); mapReduceTime = timer.elapsed();
qDebug() << "MapReduce" << mapReduceTime; qDebug() << "MapReduce" << mapReduceTime;
} }
qDebug() << "MapReduce speedup x" << ((double)singleThreadTime - (double)mapReduceTime) / (double)mapReduceTime + 1; 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 44
\snippet mainwindows/application/mainwindow.cpp 45 \snippet mainwindows/application/mainwindow.cpp 45
Saving a file is very similar to loading one. Here, the Saving a file is similar to loading one. We use QSaveFile to ensure
QFile::Text flag ensures that on Windows, "\\n" is converted into all data are safely written and existing files are not damaged
"\\r\\n" to conform to the Windows convension. 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 46
\snippet mainwindows/application/mainwindow.cpp 47 \snippet mainwindows/application/mainwindow.cpp 47

View File

@ -30,7 +30,7 @@
\title Class Wizard Example \title Class Wizard Example
\ingroup examples-dialogs \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. wizards using QWizard.
\image classwizard.png Screenshot of the Class Wizard example \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); m_timer->setInterval(20);
connect(m_timer, &QTimer::timeout, this, [this](){ update(); }); connect(m_timer, &QTimer::timeout, this, [this](){ update(); });
m_timer->start(); m_timer->start();
m_time.start();
} }
Scene::~Scene() Scene::~Scene()

View File

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

View File

@ -353,24 +353,28 @@ void MainWindow::loadFile(const QString &fileName)
bool MainWindow::saveFile(const QString &fileName) bool MainWindow::saveFile(const QString &fileName)
//! [44] //! [45] //! [44] //! [45]
{ {
QFile file(fileName); QString errorMessage;
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"), QGuiApplication::setOverrideCursor(Qt::WaitCursor);
tr("Cannot write file %1:\n%2.") QSaveFile file(fileName);
.arg(QDir::toNativeSeparators(fileName), if (file.open(QFile::WriteOnly | QFile::Text)) {
file.errorString())); 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; 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); setCurrentFile(fileName);
statusBar()->showMessage(tr("File saved"), 2000); statusBar()->showMessage(tr("File saved"), 2000);
return true; return true;

View File

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

View File

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

View File

@ -54,7 +54,7 @@
#include "arthurwidgets.h" #include "arthurwidgets.h"
#include <QBasicTimer> #include <QBasicTimer>
#include <QDateTime> #include <QElapsedTimer>
#include <QPainterPath> #include <QPainterPath>
class PathDeformRenderer : public ArthurFrame class PathDeformRenderer : public ArthurFrame
@ -103,7 +103,7 @@ private:
QBasicTimer m_repaintTimer; QBasicTimer m_repaintTimer;
// QBasicTimer m_fpsTimer; // QBasicTimer m_fpsTimer;
// int m_fpsCounter; // int m_fpsCounter;
QTime m_repaintTracker; QElapsedTimer m_repaintTracker;
QVector<QPainterPath> m_paths; QVector<QPainterPath> m_paths;
QVector<QPointF> m_advances; 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_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 equals(ANDROID_TARGET_ARCH, armeabi-v7a): QMAKE_LINK += -Wl,--exclude-libs,libunwind.a
QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \ QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \

View File

@ -20,7 +20,7 @@
# output check that "EGLFS GBM .......... yes" is present, otherwise # output check that "EGLFS GBM .......... yes" is present, otherwise
# eglfs will not be functional. # 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- \ # -device-option CROSS_COMPILE=~/raspbian/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- \
# -sysroot ~/raspbian/sysroot \ # -sysroot ~/raspbian/sysroot \
# -prefix /usr/local/qt5pi -extprefix ~/raspbian/qt5pi -hostprefix ~/raspbian/qt5 \ # -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") { contains(TEMPLATE, ".*app") {
!android_app { !android_app {
!contains(TARGET, ".so"): TARGET = lib$${TARGET}.so !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]*=\") 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 \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends ${_prl_strings})
string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends}) string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends})
string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries ${CMAKE_CXX_STANDARD_LIBRARIES})
set(_search_paths) set(_search_paths)
string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\") string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\")
foreach(_flag ${_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(.*)$\") if(_flag MATCHES \"^-l(.*)$\")
# Handle normal libraries passed as -lfoo # Handle normal libraries passed as -lfoo
set(_lib \"${CMAKE_MATCH_1}\") 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) find_package(Threads REQUIRED)
list(APPEND _lib_deps Threads::Threads) list(APPEND _lib_deps Threads::Threads)
else() else()

View File

@ -38,5 +38,5 @@ defineTest(addExclusiveBuilds) {
} }
# Default directories to process # 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 LEX_DIR YACC_DIR
QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_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 # 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.name = Lex ${QMAKE_FILE_IN}
lex.input = LEXSOURCES lex.input = LEXSOURCES
@ -12,27 +44,7 @@
lex.variable_out = GENERATED_SOURCES lex.variable_out = GENERATED_SOURCES
} }
isEmpty(QMAKE_LEXFLAGS_MANGLE):QMAKE_LEXFLAGS_MANGLE = -P${QMAKE_FILE_BASE} lex.commands = ${QMAKE_FUNC_lexCommands}
QMAKE_LEXEXTRAFLAGS = $$QMAKE_LEXFLAGS lex.output = $$LEX_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_LEX}$${first(QMAKE_EXT_CPP)}
!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
QMAKE_EXTRA_COMPILERS += lex QMAKE_EXTRA_COMPILERS += lex
} }

View File

@ -28,7 +28,10 @@ CONFIG(release, debug|release) {
} }
load(link_ltcg) load(link_ltcg)
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG QMAKE_CFLAGS += $$QMAKE_CFLAGS_LTCG
QMAKE_LFLAGS *= $$QMAKE_LFLAGS_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) { !isEmpty(SOURCES) {
QT += qml qmltest QT += qml qmltest
load(testcase) load(testcase)
contains(TEMPLATE, vc.*): DEFINES += QUICK_TEST_SOURCE_DIR=\"$$_PRO_FILE_PWD_\" !android {
else: DEFINES += QUICK_TEST_SOURCE_DIR=$$shell_quote(\"$$_PRO_FILE_PWD_\") 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 { } else {
# Allow a project to run tests without a CPP stub # Allow a project to run tests without a CPP stub
TEMPLATE = aux TEMPLATE = aux

View File

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

View File

@ -51,6 +51,12 @@ contains(TEMPLATE, .*lib) {
} }
lib_replace.CONFIG = path lib_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += lib_replace 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, # 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 android: QMAKE_CXXFLAGS_WARN_ON += -Wno-error=literal-suffix
} }
} else:msvc:!intel_icl { } else:msvc:!intel_icl {
# enable for MSVC 2012, MSVC 2013, MSVC 2015 # enable for MSVC 2015, MSVC 2017
contains(MSVC_VER, "1[124].0"): QMAKE_CXXFLAGS_WARN_ON += -WX contains(MSVC_VER, "1[45].0"): QMAKE_CXXFLAGS_WARN_ON += -WX
} }
unset(ver) unset(ver)
} }

View File

@ -2517,17 +2517,19 @@ logn("Configure summary:")
logn() logn()
qtConfPrintReport() qtConfPrintReport()
load(qt_prefix_build_check)
# final notes for the user # final notes for the user
logn() logn()
logn("Qt is now configured for building. Just run '$$QMAKE_MAKE_NAME'.") logn("Qt is now configured for building. Just run '$$QMAKE_MAKE_NAME'.")
pfx = $$[QT_INSTALL_PREFIX] 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("Once everything is built, Qt is installed.")
logn("You should NOT run '$$QMAKE_MAKE_NAME install'.") logn("You should NOT run '$$QMAKE_MAKE_NAME install'.")
logn("Note that this build cannot be deployed to other machines or devices.") 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()
logn("Prior to reconfiguration, make sure you remove any leftovers from") 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. CONFIG += force_qt # Needed for the headers_clean tests.
!lib_bundle: \ !lib_bundle: \
CONFIG += qt_no_install_library 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 { } else {
TEMPLATE = lib TEMPLATE = lib
} }

View File

@ -272,7 +272,7 @@ headersclean:!internal_module {
hcleanFLAGS += -std=c++98 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 { } else: msvc:!intel_icl {
# 4180: qualifier applied to function type has no meaning; ignored # 4180: qualifier applied to function type has no meaning; ignored
# 4458: declaration of 'identifier' hides class member # 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 # 4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
greaterThan(QMAKE_MSC_VER, 18): hcleanFLAGS += -wd4577 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 $$[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 # Sanitizer flags
sanitize_address { sanitize_address {
QMAKE_CFLAGS += $$QMAKE_SANITIZE_ADDRESS_CFLAGS QMAKE_CFLAGS += $$QMAKE_SANITIZE_ADDRESS_CFLAGS
QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_ADDRESS_CXXFLAGS QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_ADDRESS_CXXFLAGS
QMAKE_LFLAGS += $$QMAKE_SANITIZE_ADDRESS_LFLAGS 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 { sanitize_memory {

View File

@ -52,14 +52,26 @@ debug_and_release:debug_and_release_target {
} }
# Allow for a custom test runner script # 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 { unix {
isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = . isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = .
app_bundle: \ app_bundle: \
$${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) $${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET)
else: \ else: !android: \
$${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET) $${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET)
} else { } else {
# Windows # Windows

View File

@ -2,32 +2,49 @@
# Yacc extra-compiler for handling files specified in the YACCSOURCES variable # 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.name = Yacc header
yacc_decl.input = YACCSOURCES yacc_decl.input = YACCSOURCES
yacc_decl.variable_out = GENERATED_FILES yacc_decl.variable_out = GENERATED_FILES
yacc_decl.commands = ${QMAKE_FUNC_yaccCommands}
yacc_decl.output = $${yacc_output_base}$$first(QMAKE_EXT_H)
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
QMAKE_EXTRA_COMPILERS += yacc_decl QMAKE_EXTRA_COMPILERS += yacc_decl
} }
@ -37,7 +54,9 @@
yacc_impl.variable_out = GENERATED_SOURCES yacc_impl.variable_out = GENERATED_SOURCES
yacc_impl.dependency_type = TYPE_C 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.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.depends += $${yacc_output_base}$$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.output = $${yacc_output_base}$$first(QMAKE_EXT_CPP) # Faked output from this step, output really created in step above
QMAKE_EXTRA_COMPILERS += yacc_impl 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_EXTENSION_STATICLIB = a # llvm bitcode
QMAKE_AR = emar cqs 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 QMAKE_DISTCLEAN += *.html *.js *.wasm
load(qt_config) load(qt_config)

View File

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

View File

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

View File

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

View File

@ -43,7 +43,7 @@ protected:
void init() override; void init() override;
bool writeMakefile(QTextStream &) 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: public:
bool supportsMetaBuild() override { return false; } 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; QStringList types;
types << "prl" << "libtool" << "pkgconfig"; types << "prl" << "libtool" << "pkgconfig";
for(int i = 0; i < types.size(); ++i) { for(int i = 0; i < types.size(); ++i) {

View File

@ -43,12 +43,15 @@ void
UnixMakefileGenerator::writePrlFile(QTextStream &t) UnixMakefileGenerator::writePrlFile(QTextStream &t)
{ {
MakefileGenerator::writePrlFile(t); MakefileGenerator::writePrlFile(t);
const ProString tmplt = project->first("TEMPLATE");
if (tmplt != "lib" && tmplt != "aux")
return;
// libtool support // libtool support
if(project->isActiveConfig("create_libtool") && project->first("TEMPLATE") == "lib") { //write .la if (project->isActiveConfig("create_libtool")) {
writeLibtoolFile(); writeLibtoolFile();
} }
// pkg-config support // pkg-config support
if(project->isActiveConfig("create_pc") && project->first("TEMPLATE") == "lib") if (project->isActiveConfig("create_pc"))
writePkgConfigFile(); writePkgConfigFile();
} }
@ -164,6 +167,16 @@ static QString rfc1034Identifier(const QString &str)
return s; 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 void
UnixMakefileGenerator::writeMakeParts(QTextStream &t) UnixMakefileGenerator::writeMakeParts(QTextStream &t)
{ {
@ -226,7 +239,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "####### Output directory\n\n"; t << "####### Output directory\n\n";
// This is used in commands by some .prf files. // This is used in commands by some .prf files.
if (! project->values("OBJECTS_DIR").isEmpty()) if (! project->values("OBJECTS_DIR").isEmpty())
t << "OBJECTS_DIR = " << fileVar("OBJECTS_DIR") << Qt::endl; t << "OBJECTS_DIR = " << escapeDir(fileVar("OBJECTS_DIR")) << Qt::endl;
else else
t << "OBJECTS_DIR = ./\n"; t << "OBJECTS_DIR = ./\n";
t << Qt::endl; t << Qt::endl;
@ -272,13 +285,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " " t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " "
<< fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << Qt::endl; << fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << Qt::endl;
t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << Qt::endl; t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << Qt::endl;
QString destd = fileVar("DESTDIR"); t << "DESTDIR = " << escapeDir(fileVar("DESTDIR")) << Qt::endl;
// 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 << "TARGET = " << fileVar("TARGET") << Qt::endl; t << "TARGET = " << fileVar("TARGET") << Qt::endl;
if(project->isActiveConfig("plugin")) { if(project->isActiveConfig("plugin")) {
t << "TARGETD = " << fileVar("TARGET") << Qt::endl; t << "TARGETD = " << fileVar("TARGET") << Qt::endl;
@ -1194,7 +1201,8 @@ void UnixMakefileGenerator::init2()
project->values("QMAKE_FRAMEWORK_VERSION").append(project->first("VER_MAJ")); project->values("QMAKE_FRAMEWORK_VERSION").append(project->first("VER_MAJ"));
if (project->first("TEMPLATE") == "aux") { 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()) { } else if (!project->values("QMAKE_APP_FLAG").isEmpty()) {
if(!project->isEmpty("QMAKE_BUNDLE")) { if(!project->isEmpty("QMAKE_BUNDLE")) {
ProString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION"); ProString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION");

View File

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

View File

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

View File

@ -74,6 +74,8 @@ protected:
bool doDepends() const override { return false; } // Never necessary bool doDepends() const override { return false; } // Never necessary
using Win32MakefileGenerator::replaceExtraCompilerVariables; using Win32MakefileGenerator::replaceExtraCompilerVariables;
QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor) override; 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 supportsMetaBuild() override { return true; }
bool supportsMergedBuilds() override { return true; } bool supportsMergedBuilds() override { return true; }
bool mergeBuildProject(MakefileGenerator *other) override; 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; 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(); superdir = qdfi.path();
} }
QString sdir = inDir;
QString dir = m_outputDir; QString dir = m_outputDir;
forever { forever {
conffile = sdir + QLatin1String("/.qmake.conf");
if (!m_vfs->exists(conffile, flags))
conffile.clear();
cachefile = dir + QLatin1String("/.qmake.cache"); cachefile = dir + QLatin1String("/.qmake.cache");
if (!m_vfs->exists(cachefile, flags)) if (!m_vfs->exists(cachefile, flags))
cachefile.clear(); cachefile.clear();
if (!conffile.isEmpty() || !cachefile.isEmpty()) { if (!cachefile.isEmpty()) {
if (dir != sdir)
m_sourceRoot = sdir;
m_buildRoot = dir; m_buildRoot = dir;
break; break;
} }
if (dir == superdir) if (dir == superdir)
goto no_cache; goto no_cache;
QFileInfo qsdfi(sdir);
QFileInfo qdfi(dir); QFileInfo qdfi(dir);
if (qsdfi.isRoot() || qdfi.isRoot()) if (qdfi.isRoot()) {
goto no_cache; cachefile.clear();
sdir = qsdfi.path(); break;
}
dir = qdfi.path(); 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 { } else {
m_buildRoot = QFileInfo(cachefile).path(); m_buildRoot = QFileInfo(cachefile).path();
} }
m_conffile = QDir::cleanPath(conffile); if (!conffile.isEmpty())
m_cachefile = QDir::cleanPath(cachefile); m_conffile = QDir::cleanPath(conffile);
if (!cachefile.isEmpty())
m_cachefile = QDir::cleanPath(cachefile);
} }
no_cache: no_cache:
@ -1711,7 +1724,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFunction(
if (m_valuemapStack.size() >= 100) { if (m_valuemapStack.size() >= 100) {
evalError(fL1S("Ran into infinite recursion (depth > 100).")); evalError(fL1S("Ran into infinite recursion (depth > 100)."));
vr = ReturnFalse; vr = ReturnError;
} else { } else {
m_valuemapStack.push(ProValueMap()); m_valuemapStack.push(ProValueMap());
m_locationStack.push(m_current); 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 LIBRARY libEGL
EXPORTS EXPORTS
eglBindAPI @14 eglBindAPI@4 @14
eglBindTexImage @20 eglBindTexImage@12 @20
eglChooseConfig @7 eglChooseConfig@20 @7
eglCopyBuffers @33 eglCopyBuffers@12 @33
eglCreateContext @23 eglCreateContext@16 @23
eglCreatePbufferFromClientBuffer @18 eglCreatePbufferFromClientBuffer@20 @18
eglCreatePbufferSurface @10 eglCreatePbufferSurface@12 @10
eglCreatePixmapSurface @11 eglCreatePixmapSurface@16 @11
eglCreateWindowSurface @9 eglCreateWindowSurface@16 @9
eglDestroyContext @24 eglDestroyContext@8 @24
eglDestroySurface @12 eglDestroySurface@8 @12
eglGetConfigAttrib @8 eglGetConfigAttrib@16 @8
eglGetConfigs @6 eglGetConfigs@16 @6
eglGetCurrentContext @26 eglGetCurrentContext@0 @26
eglGetCurrentDisplay @28 eglGetCurrentDisplay@0 @28
eglGetCurrentSurface @27 eglGetCurrentSurface@4 @27
eglGetDisplay @2 eglGetDisplay@4 @2
eglGetError @1 eglGetError@0 @1
eglGetProcAddress @34 eglGetProcAddress@4 @34
eglInitialize @3 eglInitialize@12 @3
eglMakeCurrent @25 eglMakeCurrent@16 @25
eglQueryAPI @15 eglQueryAPI@0 @15
eglQueryContext @29 eglQueryContext@16 @29
eglQueryString @5 eglQueryString@8 @5
eglQuerySurface @13 eglQuerySurface@16 @13
eglReleaseTexImage @21 eglReleaseTexImage@12 @21
eglReleaseThread @17 eglReleaseThread@0 @17
eglSurfaceAttrib @19 eglSurfaceAttrib@16 @19
eglSwapBuffers @32 eglSwapBuffers@8 @32
eglSwapInterval @22 eglSwapInterval@8 @22
eglTerminate @4 eglTerminate@4 @4
eglWaitClient @16 eglWaitClient@0 @16
eglWaitGL @30 eglWaitGL@0 @30
eglWaitNative @31 eglWaitNative@4 @31
; Extensions ; Extensions
eglGetPlatformDisplayEXT @35 eglGetPlatformDisplayEXT@12 @35
eglQuerySurfacePointerANGLE @36 eglQuerySurfacePointerANGLE@16 @36
eglPostSubBufferNV @37 eglPostSubBufferNV@24 @37
eglQueryDisplayAttribEXT @48 eglQueryDisplayAttribEXT@12 @48
eglQueryDeviceAttribEXT @49 eglQueryDeviceAttribEXT@12 @49
eglQueryDeviceStringEXT @50 eglQueryDeviceStringEXT@8 @50
eglCreateImageKHR @51 eglCreateImageKHR@20 @51
eglDestroyImageKHR @52 eglDestroyImageKHR@8 @52
eglCreateDeviceANGLE @53 eglCreateDeviceANGLE@12 @53
eglReleaseDeviceANGLE @54 eglReleaseDeviceANGLE@4 @54
eglCreateStreamKHR @55 eglCreateStreamKHR@8 @55
eglDestroyStreamKHR @56 eglDestroyStreamKHR@8 @56
eglStreamAttribKHR @57 eglStreamAttribKHR@16 @57
eglQueryStreamKHR @58 eglQueryStreamKHR@16 @58
eglQueryStreamu64KHR @59 eglQueryStreamu64KHR@16 @59
eglStreamConsumerGLTextureExternalKHR @60 eglStreamConsumerGLTextureExternalKHR@8 @60
eglStreamConsumerAcquireKHR @61 eglStreamConsumerAcquireKHR@8 @61
eglStreamConsumerReleaseKHR @62 eglStreamConsumerReleaseKHR@8 @62
eglStreamConsumerGLTextureExternalAttribsNV @63 eglStreamConsumerGLTextureExternalAttribsNV@12 @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64 eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
eglStreamPostD3DTextureNV12ANGLE @65 eglStreamPostD3DTextureNV12ANGLE@16 @65
eglGetSyncValuesCHROMIUM @66 eglGetSyncValuesCHROMIUM@20 @66
eglSwapBuffersWithDamageEXT @67 eglSwapBuffersWithDamageEXT@16 @67
eglProgramCacheGetAttribANGLE @68 eglProgramCacheGetAttribANGLE@8 @68
eglProgramCachePopulateANGLE @69 eglProgramCachePopulateANGLE@20 @69
eglProgramCacheQueryANGLE @70 eglProgramCacheQueryANGLE@24 @70
eglProgramCacheResizeANGLE @71 eglProgramCacheResizeANGLE@12 @71
; 1.5 entry points ; 1.5 entry points
eglCreateSync @38 eglCreateSync@12 @38
eglDestroySync @39 eglDestroySync@8 @39
eglClientWaitSync @40 eglClientWaitSync@20 @40
eglGetSyncAttrib @41 eglGetSyncAttrib@16 @41
eglCreateImage @42 eglCreateImage@20 @42
eglDestroyImage @43 eglDestroyImage@8 @43
eglGetPlatformDisplay @44 eglGetPlatformDisplay@12 @44
eglCreatePlatformWindowSurface @45 eglCreatePlatformWindowSurface@16 @45
eglCreatePlatformPixmapSurface @46 eglCreatePlatformPixmapSurface@16 @46
eglWaitSync @47 eglWaitSync@12 @47

View File

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

View File

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

View File

@ -1,412 +1,411 @@
LIBRARY libGLESv2 LIBRARY libGLESv2
EXPORTS EXPORTS
glActiveTexture @1 glActiveTexture@4 @1
glAttachShader @2 glAttachShader@8 @2
glBindAttribLocation @3 glBindAttribLocation@12 @3
glBindBuffer @4 glBindBuffer@8 @4
glBindFramebuffer @5 glBindFramebuffer@8 @5
glBindRenderbuffer @6 glBindRenderbuffer@8 @6
glBindTexture @7 glBindTexture@8 @7
glBlendColor @8 glBlendColor@16 @8
glBlendEquation @9 glBlendEquation@4 @9
glBlendEquationSeparate @10 glBlendEquationSeparate@8 @10
glBlendFunc @11 glBlendFunc@8 @11
glBlendFuncSeparate @12 glBlendFuncSeparate@16 @12
glBufferData @13 glBufferData@16 @13
glBufferSubData @14 glBufferSubData@16 @14
glCheckFramebufferStatus @15 glCheckFramebufferStatus@4 @15
glClear @16 glClear@4 @16
glClearColor @17 glClearColor@16 @17
glClearDepthf @18 glClearDepthf@4 @18
glClearStencil @19 glClearStencil@4 @19
glColorMask @20 glColorMask@16 @20
glCompileShader @21 glCompileShader@4 @21
glCompressedTexImage2D @22 glCompressedTexImage2D@32 @22
glCompressedTexSubImage2D @23 glCompressedTexSubImage2D@36 @23
glCopyTexImage2D @24 glCopyTexImage2D@32 @24
glCopyTexSubImage2D @25 glCopyTexSubImage2D@32 @25
glCreateProgram @26 glCreateProgram@0 @26
glCreateShader @27 glCreateShader@4 @27
glCullFace @28 glCullFace@4 @28
glDeleteBuffers @29 glDeleteBuffers@8 @29
glDeleteFramebuffers @30 glDeleteFramebuffers@8 @30
glDeleteProgram @32 glDeleteProgram@4 @32
glDeleteRenderbuffers @33 glDeleteRenderbuffers@8 @33
glDeleteShader @34 glDeleteShader@4 @34
glDeleteTextures @31 glDeleteTextures@8 @31
glDepthFunc @36 glDepthFunc@4 @36
glDepthMask @37 glDepthMask@4 @37
glDepthRangef @38 glDepthRangef@8 @38
glDetachShader @35 glDetachShader@8 @35
glDisable @39 glDisable@4 @39
glDisableVertexAttribArray @40 glDisableVertexAttribArray@4 @40
glDrawArrays @41 glDrawArrays@12 @41
glDrawElements @42 glDrawElements@16 @42
glEnable @43 glEnable@4 @43
glEnableVertexAttribArray @44 glEnableVertexAttribArray@4 @44
glFinish @45 glFinish@0 @45
glFlush @46 glFlush@0 @46
glFramebufferRenderbuffer @47 glFramebufferRenderbuffer@16 @47
glFramebufferTexture2D @48 glFramebufferTexture2D@20 @48
glFrontFace @49 glFrontFace@4 @49
glGenBuffers @50 glGenBuffers@8 @50
glGenFramebuffers @52 glGenFramebuffers@8 @52
glGenRenderbuffers @53 glGenRenderbuffers@8 @53
glGenTextures @54 glGenTextures@8 @54
glGenerateMipmap @51 glGenerateMipmap@4 @51
glGetActiveAttrib @55 glGetActiveAttrib@28 @55
glGetActiveUniform @56 glGetActiveUniform@28 @56
glGetAttachedShaders @57 glGetAttachedShaders@16 @57
glGetAttribLocation @58 glGetAttribLocation@8 @58
glGetBooleanv @59 glGetBooleanv@8 @59
glGetBufferParameteriv @60 glGetBufferParameteriv@12 @60
glGetError @61 glGetError@0 @61
glGetFloatv @62 glGetFloatv@8 @62
glGetFramebufferAttachmentParameteriv @63 glGetFramebufferAttachmentParameteriv@16 @63
glGetIntegerv @64 glGetIntegerv@8 @64
glGetProgramInfoLog @66 glGetProgramInfoLog@16 @66
glGetProgramiv @65 glGetProgramiv@12 @65
glGetRenderbufferParameteriv @67 glGetRenderbufferParameteriv@12 @67
glGetShaderInfoLog @69 glGetShaderInfoLog@16 @69
glGetShaderPrecisionFormat @70 glGetShaderPrecisionFormat@16 @70
glGetShaderSource @71 glGetShaderSource@16 @71
glGetShaderiv @68 glGetShaderiv@12 @68
glGetString @72 glGetString@4 @72
glGetTexParameterfv @73 glGetTexParameterfv@12 @73
glGetTexParameteriv @74 glGetTexParameteriv@12 @74
glGetUniformLocation @77 glGetUniformLocation@8 @77
glGetUniformfv @75 glGetUniformfv@12 @75
glGetUniformiv @76 glGetUniformiv@12 @76
glGetVertexAttribPointerv @80 glGetVertexAttribPointerv@12 @80
glGetVertexAttribfv @78 glGetVertexAttribfv@12 @78
glGetVertexAttribiv @79 glGetVertexAttribiv@12 @79
glHint @81 glHint@8 @81
glIsBuffer @82 glIsBuffer@4 @82
glIsEnabled @83 glIsEnabled@4 @83
glIsFramebuffer @84 glIsFramebuffer@4 @84
glIsProgram @85 glIsProgram@4 @85
glIsRenderbuffer @86 glIsRenderbuffer@4 @86
glIsShader @87 glIsShader@4 @87
glIsTexture @88 glIsTexture@4 @88
glLineWidth @89 glLineWidth@4 @89
glLinkProgram @90 glLinkProgram@4 @90
glPixelStorei @91 glPixelStorei@8 @91
glPolygonOffset @92 glPolygonOffset@8 @92
glReadPixels @93 glReadPixels@28 @93
glReleaseShaderCompiler @94 glReleaseShaderCompiler@0 @94
glRenderbufferStorage @95 glRenderbufferStorage@16 @95
glSampleCoverage @96 glSampleCoverage@8 @96
glScissor @97 glScissor@16 @97
glShaderBinary @98 glShaderBinary@20 @98
glShaderSource @99 glShaderSource@16 @99
glStencilFunc @100 glStencilFunc@12 @100
glStencilFuncSeparate @101 glStencilFuncSeparate@16 @101
glStencilMask @102 glStencilMask@4 @102
glStencilMaskSeparate @103 glStencilMaskSeparate@8 @103
glStencilOp @104 glStencilOp@12 @104
glStencilOpSeparate @105 glStencilOpSeparate@16 @105
glTexImage2D @106 glTexImage2D@36 @106
glTexParameterf @107 glTexParameterf@12 @107
glTexParameterfv @108 glTexParameterfv@12 @108
glTexParameteri @109 glTexParameteri@12 @109
glTexParameteriv @110 glTexParameteriv@12 @110
glTexSubImage2D @111 glTexSubImage2D@36 @111
glUniform1f @112 glUniform1f@8 @112
glUniform1fv @113 glUniform1fv@12 @113
glUniform1i @114 glUniform1i@8 @114
glUniform1iv @115 glUniform1iv@12 @115
glUniform2f @116 glUniform2f@12 @116
glUniform2fv @117 glUniform2fv@12 @117
glUniform2i @118 glUniform2i@12 @118
glUniform2iv @119 glUniform2iv@12 @119
glUniform3f @120 glUniform3f@16 @120
glUniform3fv @121 glUniform3fv@12 @121
glUniform3i @122 glUniform3i@16 @122
glUniform3iv @123 glUniform3iv@12 @123
glUniform4f @124 glUniform4f@20 @124
glUniform4fv @125 glUniform4fv@12 @125
glUniform4i @126 glUniform4i@20 @126
glUniform4iv @127 glUniform4iv@12 @127
glUniformMatrix2fv @128 glUniformMatrix2fv@16 @128
glUniformMatrix3fv @129 glUniformMatrix3fv@16 @129
glUniformMatrix4fv @130 glUniformMatrix4fv@16 @130
glUseProgram @131 glUseProgram@4 @131
glValidateProgram @132 glValidateProgram@4 @132
glVertexAttrib1f @133 glVertexAttrib1f@8 @133
glVertexAttrib1fv @134 glVertexAttrib1fv@8 @134
glVertexAttrib2f @135 glVertexAttrib2f@12 @135
glVertexAttrib2fv @136 glVertexAttrib2fv@8 @136
glVertexAttrib3f @137 glVertexAttrib3f@16 @137
glVertexAttrib3fv @138 glVertexAttrib3fv@8 @138
glVertexAttrib4f @139 glVertexAttrib4f@20 @139
glVertexAttrib4fv @140 glVertexAttrib4fv@8 @140
glVertexAttribPointer @141 glVertexAttribPointer@24 @141
glViewport @142 glViewport@16 @142
; Extensions ; Extensions
glBlitFramebufferANGLE @149 glBlitFramebufferANGLE@40 @149
glRenderbufferStorageMultisampleANGLE @150 glRenderbufferStorageMultisampleANGLE@20 @150
glDeleteFencesNV @151 glDeleteFencesNV@8 @151
glFinishFenceNV @152 glFinishFenceNV@4 @152
glGenFencesNV @153 glGenFencesNV@8 @153
glGetFenceivNV @154 glGetFenceivNV@12 @154
glIsFenceNV @155 glIsFenceNV@4 @155
glSetFenceNV @156 glSetFenceNV@8 @156
glTestFenceNV @157 glTestFenceNV@4 @157
glGetTranslatedShaderSourceANGLE @159 glGetTranslatedShaderSourceANGLE@16 @159
glTexStorage2DEXT @160 glTexStorage2DEXT@20 @160
glGetGraphicsResetStatusEXT @161 glGetGraphicsResetStatusEXT@0 @161
glReadnPixelsEXT @162 glReadnPixelsEXT@32 @162
glGetnUniformfvEXT @163 glGetnUniformfvEXT@16 @163
glGetnUniformivEXT @164 glGetnUniformivEXT@16 @164
glGenQueriesEXT @165 glGenQueriesEXT@8 @165
glDeleteQueriesEXT @166 glDeleteQueriesEXT@8 @166
glIsQueryEXT @167 glIsQueryEXT@4 @167
glBeginQueryEXT @168 glBeginQueryEXT@8 @168
glEndQueryEXT @169 glEndQueryEXT@4 @169
glGetQueryivEXT @170 glGetQueryivEXT@12 @170
glGetQueryObjectuivEXT @171 glGetQueryObjectuivEXT@12 @171
glVertexAttribDivisorANGLE @172 glVertexAttribDivisorANGLE@8 @172
glDrawArraysInstancedANGLE @173 glDrawArraysInstancedANGLE@16 @173
glDrawElementsInstancedANGLE @174 glDrawElementsInstancedANGLE@20 @174
glProgramBinaryOES @175 glProgramBinaryOES@16 @175
glGetProgramBinaryOES @176 glGetProgramBinaryOES@20 @176
glDrawBuffersEXT @179 glDrawBuffersEXT@8 @179
glMapBufferOES @285 glMapBufferOES@8 @285
glUnmapBufferOES @286 glUnmapBufferOES@4 @286
glGetBufferPointervOES @287 glGetBufferPointervOES@12 @287
glMapBufferRangeEXT @288 glMapBufferRangeEXT@16 @288
glFlushMappedBufferRangeEXT @289 glFlushMappedBufferRangeEXT@12 @289
glDiscardFramebufferEXT @293 glDiscardFramebufferEXT@12 @293
glInsertEventMarkerEXT @294 glInsertEventMarkerEXT@8 @294
glPushGroupMarkerEXT @295 glPushGroupMarkerEXT@8 @295
glPopGroupMarkerEXT @296 glPopGroupMarkerEXT@0 @296
glEGLImageTargetTexture2DOES @297 glEGLImageTargetTexture2DOES@8 @297
glEGLImageTargetRenderbufferStorageOES @298 glEGLImageTargetRenderbufferStorageOES@8 @298
glBindVertexArrayOES @299 glBindVertexArrayOES@4 @299
glDeleteVertexArraysOES @300 glDeleteVertexArraysOES@8 @300
glGenVertexArraysOES @301 glGenVertexArraysOES@8 @301
glIsVertexArrayOES @302 glIsVertexArrayOES@4 @302
glDebugMessageControlKHR @303 glDebugMessageControlKHR@24 @303
glDebugMessageInsertKHR @304 glDebugMessageInsertKHR@24 @304
glDebugMessageCallbackKHR @305 glDebugMessageCallbackKHR@8 @305
glGetDebugMessageLogKHR @306 glGetDebugMessageLogKHR@32 @306
glPushDebugGroupKHR @307 glPushDebugGroupKHR@16 @307
glPopDebugGroupKHR @308 glPopDebugGroupKHR@0 @308
glObjectLabelKHR @309 glObjectLabelKHR@16 @309
glGetObjectLabelKHR @310 glGetObjectLabelKHR@20 @310
glObjectPtrLabelKHR @311 glObjectPtrLabelKHR@12 @311
glGetObjectPtrLabelKHR @312 glGetObjectPtrLabelKHR@16 @312
glGetPointervKHR @313 glGetPointervKHR@8 @313
glQueryCounterEXT @314 glQueryCounterEXT@8 @314
glGetQueryObjectivEXT @315 glGetQueryObjectivEXT@12 @315
glGetQueryObjecti64vEXT @316 glGetQueryObjecti64vEXT@12 @316
glGetQueryObjectui64vEXT @317 glGetQueryObjectui64vEXT@12 @317
glBindUniformLocationCHROMIUM @318 glBindUniformLocationCHROMIUM@12 @318
glCoverageModulationCHROMIUM @319 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 glFramebufferTextureMultiviewLayeredANGLE@24 @413
glMatrixLoadIdentityCHROMIUM @321 glFramebufferTextureMultiviewSideBySideANGLE@24 @414
glGenPathsCHROMIUM @322 glRequestExtensionANGLE@4 @415
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
; GLES 3.0 Functions ; GLES 3.0 Functions
glReadBuffer @180 glReadBuffer@4 @180
glDrawRangeElements @181 glDrawRangeElements@24 @181
glTexImage3D @182 glTexImage3D@40 @182
glTexSubImage3D @183 glTexSubImage3D@44 @183
glCopyTexSubImage3D @184 glCopyTexSubImage3D@36 @184
glCompressedTexImage3D @185 glCompressedTexImage3D@36 @185
glCompressedTexSubImage3D @186 glCompressedTexSubImage3D@44 @186
glGenQueries @187 glGenQueries@8 @187
glDeleteQueries @188 glDeleteQueries@8 @188
glIsQuery @189 glIsQuery@4 @189
glBeginQuery @190 glBeginQuery@8 @190
glEndQuery @191 glEndQuery@4 @191
glGetQueryiv @192 glGetQueryiv@12 @192
glGetQueryObjectuiv @193 glGetQueryObjectuiv@12 @193
glUnmapBuffer @194 glUnmapBuffer@4 @194
glGetBufferPointerv @195 glGetBufferPointerv@12 @195
glDrawBuffers @196 glDrawBuffers@8 @196
glUniformMatrix2x3fv @197 glUniformMatrix2x3fv@16 @197
glUniformMatrix3x2fv @198 glUniformMatrix3x2fv@16 @198
glUniformMatrix2x4fv @199 glUniformMatrix2x4fv@16 @199
glUniformMatrix4x2fv @200 glUniformMatrix4x2fv@16 @200
glUniformMatrix3x4fv @201 glUniformMatrix3x4fv@16 @201
glUniformMatrix4x3fv @202 glUniformMatrix4x3fv@16 @202
glBlitFramebuffer @203 glBlitFramebuffer@40 @203
glRenderbufferStorageMultisample @204 glRenderbufferStorageMultisample@20 @204
glFramebufferTextureLayer @205 glFramebufferTextureLayer@20 @205
glMapBufferRange @206 glMapBufferRange@16 @206
glFlushMappedBufferRange @207 glFlushMappedBufferRange@12 @207
glBindVertexArray @208 glBindVertexArray@4 @208
glDeleteVertexArrays @209 glDeleteVertexArrays@8 @209
glGenVertexArrays @210 glGenVertexArrays@8 @210
glIsVertexArray @211 glIsVertexArray@4 @211
glGetIntegeri_v @212 glGetIntegeri_v@12 @212
glBeginTransformFeedback @213 glBeginTransformFeedback@4 @213
glEndTransformFeedback @214 glEndTransformFeedback@0 @214
glBindBufferRange @215 glBindBufferRange@20 @215
glBindBufferBase @216 glBindBufferBase@12 @216
glTransformFeedbackVaryings @217 glTransformFeedbackVaryings@16 @217
glGetTransformFeedbackVarying @218 glGetTransformFeedbackVarying@28 @218
glVertexAttribIPointer @219 glVertexAttribIPointer@20 @219
glGetVertexAttribIiv @220 glGetVertexAttribIiv@12 @220
glGetVertexAttribIuiv @221 glGetVertexAttribIuiv@12 @221
glVertexAttribI4i @222 glVertexAttribI4i@20 @222
glVertexAttribI4ui @223 glVertexAttribI4ui@20 @223
glVertexAttribI4iv @224 glVertexAttribI4iv@8 @224
glVertexAttribI4uiv @225 glVertexAttribI4uiv@8 @225
glGetUniformuiv @226 glGetUniformuiv@12 @226
glGetFragDataLocation @227 glGetFragDataLocation@8 @227
glUniform1ui @228 glUniform1ui@8 @228
glUniform2ui @229 glUniform2ui@12 @229
glUniform3ui @230 glUniform3ui@16 @230
glUniform4ui @231 glUniform4ui@20 @231
glUniform1uiv @232 glUniform1uiv@12 @232
glUniform2uiv @233 glUniform2uiv@12 @233
glUniform3uiv @234 glUniform3uiv@12 @234
glUniform4uiv @235 glUniform4uiv@12 @235
glClearBufferiv @236 glClearBufferiv@12 @236
glClearBufferuiv @237 glClearBufferuiv@12 @237
glClearBufferfv @238 glClearBufferfv@12 @238
glClearBufferfi @239 glClearBufferfi@16 @239
glGetStringi @240 glGetStringi@8 @240
glCopyBufferSubData @241 glCopyBufferSubData@20 @241
glGetUniformIndices @242 glGetUniformIndices@16 @242
glGetActiveUniformsiv @243 glGetActiveUniformsiv@20 @243
glGetUniformBlockIndex @244 glGetUniformBlockIndex@8 @244
glGetActiveUniformBlockiv @245 glGetActiveUniformBlockiv@16 @245
glGetActiveUniformBlockName @246 glGetActiveUniformBlockName@20 @246
glUniformBlockBinding @247 glUniformBlockBinding@12 @247
glDrawArraysInstanced @248 glDrawArraysInstanced@16 @248
glDrawElementsInstanced @249 glDrawElementsInstanced@20 @249
glFenceSync @250 glFenceSync@8 @250
glIsSync @251 glIsSync@4 @251
glDeleteSync @252 glDeleteSync@4 @252
glClientWaitSync @253 glClientWaitSync@16 @253
glWaitSync @254 glWaitSync@16 @254
glGetInteger64v @255 glGetInteger64v@8 @255
glGetSynciv @256 glGetSynciv@20 @256
glGetInteger64i_v @257 glGetInteger64i_v@12 @257
glGetBufferParameteri64v @258 glGetBufferParameteri64v@12 @258
glGenSamplers @259 glGenSamplers@8 @259
glDeleteSamplers @260 glDeleteSamplers@8 @260
glIsSampler @261 glIsSampler@4 @261
glBindSampler @262 glBindSampler@8 @262
glSamplerParameteri @263 glSamplerParameteri@12 @263
glSamplerParameteriv @264 glSamplerParameteriv@12 @264
glSamplerParameterf @265 glSamplerParameterf@12 @265
glSamplerParameterfv @266 glSamplerParameterfv@12 @266
glGetSamplerParameteriv @267 glGetSamplerParameteriv@12 @267
glGetSamplerParameterfv @268 glGetSamplerParameterfv@12 @268
glVertexAttribDivisor @269 glVertexAttribDivisor@8 @269
glBindTransformFeedback @270 glBindTransformFeedback@8 @270
glDeleteTransformFeedbacks @271 glDeleteTransformFeedbacks@8 @271
glGenTransformFeedbacks @272 glGenTransformFeedbacks@8 @272
glIsTransformFeedback @273 glIsTransformFeedback@4 @273
glPauseTransformFeedback @274 glPauseTransformFeedback@0 @274
glResumeTransformFeedback @275 glResumeTransformFeedback@0 @275
glGetProgramBinary @276 glGetProgramBinary@20 @276
glProgramBinary @277 glProgramBinary@16 @277
glProgramParameteri @278 glProgramParameteri@12 @278
glInvalidateFramebuffer @279 glInvalidateFramebuffer@12 @279
glInvalidateSubFramebuffer @280 glInvalidateSubFramebuffer@28 @280
glTexStorage2D @281 glTexStorage2D@20 @281
glTexStorage3D @282 glTexStorage3D@24 @282
glGetInternalformativ @283 glGetInternalformativ@20 @283
; GLES 3.1 Functions ; GLES 3.1 Functions
glDispatchCompute @345 glDispatchCompute@12 @345
glDispatchComputeIndirect @346 glDispatchComputeIndirect@4 @346
glDrawArraysIndirect @347 glDrawArraysIndirect@8 @347
glDrawElementsIndirect @348 glDrawElementsIndirect@12 @348
glFramebufferParameteri @349 glFramebufferParameteri@12 @349
glGetFramebufferParameteriv @350 glGetFramebufferParameteriv@12 @350
glGetProgramInterfaceiv @351 glGetProgramInterfaceiv@16 @351
glGetProgramResourceIndex @352 glGetProgramResourceIndex@12 @352
glGetProgramResourceName @353 glGetProgramResourceName@24 @353
glGetProgramResourceiv @354 glGetProgramResourceiv@32 @354
glGetProgramResourceLocation @355 glGetProgramResourceLocation@12 @355
glUseProgramStages @356 glUseProgramStages@12 @356
glActiveShaderProgram @357 glActiveShaderProgram@8 @357
glCreateShaderProgramv @358 glCreateShaderProgramv@12 @358
glBindProgramPipeline @359 glBindProgramPipeline@4 @359
glDeleteProgramPipelines @360 glDeleteProgramPipelines@8 @360
glGenProgramPipelines @361 glGenProgramPipelines@8 @361
glIsProgramPipeline @362 glIsProgramPipeline@4 @362
glGetProgramPipelineiv @363 glGetProgramPipelineiv@12 @363
glProgramUniform1i @364 glProgramUniform1i@12 @364
glProgramUniform2i @365 glProgramUniform2i@16 @365
glProgramUniform3i @366 glProgramUniform3i@20 @366
glProgramUniform4i @367 glProgramUniform4i@24 @367
glProgramUniform1ui @368 glProgramUniform1ui@12 @368
glProgramUniform2ui @369 glProgramUniform2ui@16 @369
glProgramUniform3ui @370 glProgramUniform3ui@20 @370
glProgramUniform4ui @371 glProgramUniform4ui@24 @371
glProgramUniform1f @372 glProgramUniform1f@12 @372
glProgramUniform2f @373 glProgramUniform2f@16 @373
glProgramUniform3f @374 glProgramUniform3f@20 @374
glProgramUniform4f @375 glProgramUniform4f@24 @375
glProgramUniform1iv @376 glProgramUniform1iv@16 @376
glProgramUniform2iv @377 glProgramUniform2iv@16 @377
glProgramUniform3iv @378 glProgramUniform3iv@16 @378
glProgramUniform4iv @379 glProgramUniform4iv@16 @379
glProgramUniform1uiv @380 glProgramUniform1uiv@16 @380
glProgramUniform2uiv @381 glProgramUniform2uiv@16 @381
glProgramUniform3uiv @382 glProgramUniform3uiv@16 @382
glProgramUniform4uiv @383 glProgramUniform4uiv@16 @383
glProgramUniform1fv @384 glProgramUniform1fv@16 @384
glProgramUniform2fv @385 glProgramUniform2fv@16 @385
glProgramUniform3fv @386 glProgramUniform3fv@16 @386
glProgramUniform4fv @387 glProgramUniform4fv@16 @387
glProgramUniformMatrix2fv @388 glProgramUniformMatrix2fv@20 @388
glProgramUniformMatrix3fv @389 glProgramUniformMatrix3fv@20 @389
glProgramUniformMatrix4fv @390 glProgramUniformMatrix4fv@20 @390
glProgramUniformMatrix2x3fv @391 glProgramUniformMatrix2x3fv@20 @391
glProgramUniformMatrix3x2fv @392 glProgramUniformMatrix3x2fv@20 @392
glProgramUniformMatrix2x4fv @393 glProgramUniformMatrix2x4fv@20 @393
glProgramUniformMatrix4x2fv @394 glProgramUniformMatrix4x2fv@20 @394
glProgramUniformMatrix3x4fv @395 glProgramUniformMatrix3x4fv@20 @395
glProgramUniformMatrix4x3fv @396 glProgramUniformMatrix4x3fv@20 @396
glValidateProgramPipeline @397 glValidateProgramPipeline@4 @397
glGetProgramPipelineInfoLog @398 glGetProgramPipelineInfoLog@16 @398
glBindImageTexture @399 glBindImageTexture@28 @399
glGetBooleani_v @400 glGetBooleani_v@12 @400
glMemoryBarrier @401 glMemoryBarrier@4 @401
glMemoryBarrierByRegion @402 glMemoryBarrierByRegion@4 @402
glTexStorage2DMultisample @403 glTexStorage2DMultisample@24 @403
glGetMultisamplefv @404 glGetMultisamplefv@12 @404
glSampleMaski @405 glSampleMaski@8 @405
glGetTexLevelParameteriv @406 glGetTexLevelParameteriv@16 @406
glGetTexLevelParameterfv @407 glGetTexLevelParameterfv@16 @407
glBindVertexBuffer @408 glBindVertexBuffer@16 @408
glVertexAttribFormat @409 glVertexAttribFormat@20 @409
glVertexAttribIFormat @410 glVertexAttribIFormat@16 @410
glVertexAttribBinding @411 glVertexAttribBinding@8 @411
glVertexBindingDivisor @412 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.", "Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "https://www.sqlite.org/", "Homepage": "https://www.sqlite.org/",
"Version": "3.27.1", "Version": "3.28.0",
"DownloadLocation": "https://www.sqlite.org/2018/sqlite-amalgamation-3270100.zip", "DownloadLocation": "https://www.sqlite.org/2019/sqlite-amalgamation-3280000.zip",
"License": "Public Domain", "License": "Public Domain",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed." "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()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()]. ** [sqlite_version()] and [sqlite_source_id()].
*/ */
#define SQLITE_VERSION "3.27.1" #define SQLITE_VERSION "3.28.0"
#define SQLITE_VERSION_NUMBER 3027001 #define SQLITE_VERSION_NUMBER 3028000
#define SQLITE_SOURCE_ID "2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd" #define SQLITE_SOURCE_ID "2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50"
/* /*
** CAPI3REF: Run-Time Library Version Numbers ** CAPI3REF: Run-Time Library Version Numbers
@ -189,6 +189,9 @@ SQLITE_API int sqlite3_libversion_number(void);
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
SQLITE_API int sqlite3_compileoption_used(const char *zOptName); SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
SQLITE_API const char *sqlite3_compileoption_get(int N); SQLITE_API const char *sqlite3_compileoption_get(int N);
#else
# define sqlite3_compileoption_used(X) 0
# define sqlite3_compileoption_get(X) ((void*)0)
#endif #endif
/* /*
@ -2086,8 +2089,8 @@ struct sqlite3_mem_methods {
** **
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt> ** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
** <dd> ^This option is used to enable or disable the two-argument ** <dd> ^This option is used to enable or disable the
** version of the [fts3_tokenizer()] function which is part of the ** [fts3_tokenizer()] function which is part of the
** [FTS3] full-text search engine extension. ** [FTS3] full-text search engine extension.
** There should be two additional arguments. ** There should be two additional arguments.
** The first argument is an integer which is 0 to disable fts3_tokenizer() or ** 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]. ** <li> Direct writes to [shadow tables].
** </ul> ** </ul>
** </dd> ** </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> ** </dl>
*/ */
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ #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_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */ #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* 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 ** 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 ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
** are not counted. ** 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 ** of rows that changed due to SQL statement run against database
** connection D. Any changes by other database connections are ignored. ** connection D. Any changes by other database connections are ignored.
** To detect changes against a database file from other database ** 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); 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 ** CAPI3REF: Determine If A Prepared Statement Has Been Reset
** METHOD: sqlite3_stmt ** METHOD: sqlite3_stmt
@ -4033,7 +4060,9 @@ typedef struct sqlite3_context sqlite3_context;
** ^The fifth argument to the BLOB and string binding interfaces ** ^The fifth argument to the BLOB and string binding interfaces
** is a destructor used to dispose of the BLOB or ** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called ** 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 ** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the ** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed. ** 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> ** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE ** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
** against a virtual table. ** 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> ** </table></blockquote>
** **
** <b>Details:</b> ** <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 ** than within an [xUpdate] method call for an UPDATE statement, then
** the return value is arbitrary and meaningless. ** 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 ** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or ** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to ** [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_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_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_nochange(sqlite3_value*);
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
/* /*
** CAPI3REF: Finding The Subtype Of SQL Values ** 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 ** 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 ** 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 ** 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 ** ^The filename returned by this function is the output of the
** xFullPathname method of the [VFS]. ^In other words, the filename ** 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 ** in size. This function allocates and populates a buffer with a copy
** of the changeset rebased rebased according to the configuration of the ** of the changeset rebased rebased according to the configuration of the
** rebaser object passed as the first argument. If successful, (*ppOut) ** 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 ** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
** responsibility of the caller to eventually free the new buffer using ** responsibility of the caller to eventually free the new buffer using
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut) ** 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 ** 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 ** "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 ** 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 extension function is allocated a single auxiliary data slot for
** each FTS query (MATCH expression). If the extension function is invoked ** 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 ** The xDelete callback, if one is specified, is also invoked on the
** auxiliary data pointer after the FTS5 query has finished. ** 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 ** 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 ** xDelete parameter was not NULL, it is invoked on the auxiliary data
** pointer before returning. ** pointer before returning.

View File

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

View File

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

View File

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

View File

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

View File

@ -296,6 +296,9 @@ endfunction()
# qt5_add_big_resources(outfiles inputfile ... ) # qt5_add_big_resources(outfiles inputfile ... )
function(QT5_ADD_BIG_RESOURCES outfiles ) 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(options)
set(oneValueArgs) 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 AUTOMOC OFF)
set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOUIC OFF) set_target_properties(rcc_object_${outfilename} PROPERTIES AUTOUIC OFF)
add_dependencies(rcc_object_${outfilename} big_resources_${outfilename}) 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} add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Core_RCC_EXECUTABLE} COMMAND ${Qt5Core_RCC_EXECUTABLE}
ARGS ${rcc_options} --name ${outfilename} --pass 2 --temp $<TARGET_OBJECTS:rcc_object_${outfilename}> --output ${outfile} ${infile} 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) { if (d->state != Stopped) {
QAbstractAnimation::State oldState = d->state; QAbstractAnimation::State oldState = d->state;
d->state = Stopped; d->state = Stopped;
emit stateChanged(oldState, d->state); emit stateChanged(d->state, oldState);
if (oldState == QAbstractAnimation::Running) if (oldState == QAbstractAnimation::Running)
QAnimationTimer::unregisterAnimation(this); QAnimationTimer::unregisterAnimation(this);
} }
if (d->group)
d->group->removeAnimation(this);
} }
/*! /*!

View File

@ -113,6 +113,11 @@ QAnimationGroup::QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent)
*/ */
QAnimationGroup::~QAnimationGroup() 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() void QAnimationGroup::clear()
{ {
Q_D(QAnimationGroup); Q_D(QAnimationGroup);
qDeleteAll(d->animations); d->clear(false);
} }
/*! /*!
@ -284,6 +289,24 @@ bool QAnimationGroup::event(QEvent *event)
return QAbstractAnimation::event(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 *) void QAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *)
{ {

View File

@ -73,6 +73,8 @@ public:
virtual void animationInsertedAt(int) { } virtual void animationInsertedAt(int) { }
virtual void animationRemoved(int, QAbstractAnimation *); virtual void animationRemoved(int, QAbstractAnimation *);
void clear(bool onDestruction);
void disconnectUncontrolledAnimation(QAbstractAnimation *anim) void disconnectUncontrolledAnimation(QAbstractAnimation *anim)
{ {
//0 for the signal here because we might be called from the animation destructor //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); Q_Q(QSequentialAnimationGroup);
QAnimationGroupPrivate::animationRemoved(index, anim); QAnimationGroupPrivate::animationRemoved(index, anim);
Q_ASSERT(currentAnimation); // currentAnimation should always be set if (!currentAnimation)
return;
if (actualDuration.size() > index) if (actualDuration.size() > index)
actualDuration.removeAt(index); actualDuration.removeAt(index);

View File

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

View File

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

View File

@ -610,7 +610,7 @@ QSimpleTextCodec::QSimpleTextCodec(int i) : forwardIndex(i), reverseMap(0)
QSimpleTextCodec::~QSimpleTextCodec() QSimpleTextCodec::~QSimpleTextCodec()
{ {
delete reverseMap.load(); delete reverseMap.loadAcquire();
} }
static QByteArray *buildReverseMap(int forwardIndex) 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 : '?'; const char replacement = (state && state->flags & ConvertInvalidToNull) ? 0 : '?';
int invalid = 0; int invalid = 0;
QByteArray *rmap = reverseMap.load(); QByteArray *rmap = reverseMap.loadAcquire();
if (!rmap){ if (!rmap){
rmap = buildReverseMap(this->forwardIndex); rmap = buildReverseMap(this->forwardIndex);
if (!reverseMap.testAndSetRelease(0, rmap)) { if (!reverseMap.testAndSetRelease(0, rmap)) {
delete rmap; delete rmap;
rmap = reverseMap.load(); rmap = reverseMap.loadAcquire();
} }
} }

View File

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

View File

@ -286,15 +286,11 @@ if (!invalidRe.isValid()) {
{ {
//! [24] //! [24]
QRegularExpression re("^this pattern must match exactly$");
//! [24]
}
{
//! [25]
QString p("a .*|pattern"); 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 embed bigger resources, where compiling to C++ sources and then to
binaries would be too time consuming or memory intensive. 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 \section1 Arguments
You can set additional \c{OPTIONS} that should be added to the \c{rcc} calls. 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/qrandom.cpp \
global/qhooks.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. # 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 # 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 # Clang: ICE if not generating F16C code, so use qfloat16_f16c.c
@ -124,14 +128,3 @@ gcc:ltcg {
} else { } else {
SOURCES += $$VERSIONTAGGING_SOURCES 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 QT_END_NAMESPACE
#include "qfloat16tables.cpp"
#ifdef QFLOAT16_INCLUDE_FAST #ifdef QFLOAT16_INCLUDE_FAST
# include "qfloat16_f16c.c" # include "qfloat16_f16c.c"
#endif #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. Defined on Any UNIX BSD/SYSV system.
*/ */
/*!
\macro Q_OS_WASM
\relates <QtGlobal>
Defined on Web Assembly.
*/
/*! /*!
\macro Q_CC_SYM \macro Q_CC_SYM
\relates <QtGlobal> \relates <QtGlobal>
@ -2945,6 +2952,7 @@ QString QSysInfo::machineHostName()
struct utsname u; struct utsname u;
if (uname(&u) == 0) if (uname(&u) == 0)
return QString::fromLocal8Bit(u.nodename); return QString::fromLocal8Bit(u.nodename);
return QString();
#else #else
# ifdef Q_OS_WIN # ifdef Q_OS_WIN
// Important: QtNetwork depends on machineHostName() initializing ws2_32.dll // Important: QtNetwork depends on machineHostName() initializing ws2_32.dll
@ -2957,7 +2965,6 @@ QString QSysInfo::machineHostName()
hostName[sizeof(hostName) - 1] = '\0'; hostName[sizeof(hostName) - 1] = '\0';
return QString::fromLocal8Bit(hostName); return QString::fromLocal8Bit(hostName);
#endif #endif
return QString();
} }
#endif // QT_BOOTSTRAPPED #endif // QT_BOOTSTRAPPED
@ -3612,7 +3619,7 @@ bool qEnvironmentVariableIsSet(const char *varName) noexcept
(void)getenv_s(&requiredSize, 0, 0, varName); (void)getenv_s(&requiredSize, 0, 0, varName);
return requiredSize != 0; return requiredSize != 0;
#else #else
return ::getenv(varName) != 0; return ::getenv(varName) != nullptr;
#endif #endif
} }

View File

@ -1097,7 +1097,7 @@ for (auto _container_ = QtPrivate::qMakeForeachContainer(container); \
#endif #endif
template <typename T> inline T *qGetPtrHelper(T *ptr) { return ptr; } 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: // 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 #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 { \ struct HolderBase { \
~HolderBase() noexcept \ ~HolderBase() noexcept \
{ if (guard.load() == QtGlobalStatic::Initialized) \ { if (guard.loadRelaxed() == QtGlobalStatic::Initialized) \
guard.store(QtGlobalStatic::Destroyed); } \ guard.storeRelaxed(QtGlobalStatic::Destroyed); } \
}; \ }; \
static struct Holder : public HolderBase { \ static struct Holder : public HolderBase { \
Type value; \ Type value; \
Holder() \ Holder() \
noexcept(noexcept(Type ARGS)) \ noexcept(noexcept(Type ARGS)) \
: value ARGS \ : value ARGS \
{ guard.store(QtGlobalStatic::Initialized); } \ { guard.storeRelaxed(QtGlobalStatic::Initialized); } \
} holder; \ } holder; \
return &holder.value; \ return &holder.value; \
} }
@ -108,12 +108,12 @@ QT_BEGIN_NAMESPACE
int x = guard.loadAcquire(); \ int x = guard.loadAcquire(); \
if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) { \ if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) { \
QMutexLocker locker(&mutex); \ QMutexLocker locker(&mutex); \
if (guard.load() == QtGlobalStatic::Uninitialized) { \ if (guard.loadRelaxed() == QtGlobalStatic::Uninitialized) { \
d = new Type ARGS; \ d = new Type ARGS; \
static struct Cleanup { \ static struct Cleanup { \
~Cleanup() { \ ~Cleanup() { \
delete d; \ delete d; \
guard.store(QtGlobalStatic::Destroyed); \ guard.storeRelaxed(QtGlobalStatic::Destroyed); \
} \ } \
} cleanup; \ } cleanup; \
guard.storeRelease(QtGlobalStatic::Initialized); \ guard.storeRelease(QtGlobalStatic::Initialized); \
@ -129,8 +129,8 @@ struct QGlobalStatic
{ {
typedef T Type; typedef T Type;
bool isDestroyed() const { return guard.load() <= QtGlobalStatic::Destroyed; } bool isDestroyed() const { return guard.loadRelaxed() <= QtGlobalStatic::Destroyed; }
bool exists() const { return guard.load() == QtGlobalStatic::Initialized; } bool exists() const { return guard.loadRelaxed() == QtGlobalStatic::Initialized; }
operator Type *() { if (isDestroyed()) return nullptr; return innerFunction(); } operator Type *() { if (isDestroyed()) return nullptr; return innerFunction(); }
Type *operator()() { if (isDestroyed()) return nullptr; return innerFunction(); } Type *operator()() { if (isDestroyed()) return nullptr; return innerFunction(); }
Type *operator->() Type *operator->()

View File

@ -432,7 +432,24 @@ void QLibraryInfo::reload()
{ {
QLibraryInfoPrivate::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. Returns the location specified by \a loc.
@ -444,18 +461,8 @@ QLibraryInfo::location(LibraryLocation loc)
QString ret = rawLocation(loc, FinalPaths); QString ret = rawLocation(loc, FinalPaths);
// Automatically prepend the sysroot to target paths // Automatically prepend the sysroot to target paths
if (loc < SysrootPath || loc > LastHostPath) { if (loc < SysrootPath || loc > LastHostPath)
QString sysroot = rawLocation(SysrootPath, FinalPaths); sysrootify(&ret);
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);
}
}
}
return ret; return ret;
} }
@ -598,6 +605,8 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group)
} else { } else {
// we make any other path absolute to the prefix directory // we make any other path absolute to the prefix directory
baseDir = rawLocation(PrefixPath, group); baseDir = rawLocation(PrefixPath, group);
if (group == EffectivePaths)
sysrootify(&baseDir);
} }
#else #else
if (loc == PrefixPath) { if (loc == PrefixPath) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -147,7 +147,7 @@ using QtMiscUtils::fromHex;
// Has been defined in the header / inlined before Qt 5.4 // Has been defined in the header / inlined before Qt 5.4
QDebug::~QDebug() QDebug::~QDebug()
{ {
if (!--stream->ref) { if (stream && !--stream->ref) {
if (stream->space && stream->buffer.endsWith(QLatin1Char(' '))) if (stream->space && stream->buffer.endsWith(QLatin1Char(' ')))
stream->buffer.chop(1); stream->buffer.chop(1);
if (stream->message_output) { if (stream->message_output) {
@ -843,36 +843,34 @@ QDebug &QDebug::resetFormat()
class QDebugStateSaverPrivate class QDebugStateSaverPrivate
{ {
public: public:
QDebugStateSaverPrivate(QDebug &dbg) QDebugStateSaverPrivate(QDebug::Stream *stream)
: m_dbg(dbg), : m_stream(stream),
m_spaces(dbg.autoInsertSpaces()), m_spaces(stream->space),
m_flags(0), m_flags(stream->context.version > 1 ? stream->flags : 0),
m_streamParams(dbg.stream->ts.d_ptr->params) m_streamParams(stream->ts.d_ptr->params)
{ {
if (m_dbg.stream->context.version > 1)
m_flags = m_dbg.stream->flags;
} }
void restoreState() void restoreState()
{ {
const bool currentSpaces = m_dbg.autoInsertSpaces(); const bool currentSpaces = m_stream->space;
if (currentSpaces && !m_spaces) if (currentSpaces && !m_spaces)
if (m_dbg.stream->buffer.endsWith(QLatin1Char(' '))) if (m_stream->buffer.endsWith(QLatin1Char(' ')))
m_dbg.stream->buffer.chop(1); m_stream->buffer.chop(1);
m_dbg.setAutoInsertSpaces(m_spaces); m_stream->space = m_spaces;
m_dbg.stream->ts.d_ptr->params = m_streamParams; m_stream->ts.d_ptr->params = m_streamParams;
if (m_dbg.stream->context.version > 1) if (m_stream->context.version > 1)
m_dbg.stream->flags = m_flags; m_stream->flags = m_flags;
if (!currentSpaces && m_spaces) if (!currentSpaces && m_spaces)
m_dbg.stream->ts << ' '; m_stream->ts << ' ';
} }
QDebug &m_dbg; QDebug::Stream *m_stream;
// QDebug state // QDebug state
const bool m_spaces; const bool m_spaces;
int m_flags; const int m_flags;
// QTextStream state // QTextStream state
const QTextStreamPrivate::Params m_streamParams; const QTextStreamPrivate::Params m_streamParams;
@ -886,7 +884,7 @@ public:
\sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces() \sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces()
*/ */
QDebugStateSaver::QDebugStateSaver(QDebug &dbg) 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 class Q_CORE_EXPORT QDebug
{ {
friend class QMessageLogger; friend class QMessageLogger;
friend class QDebugStateSaver;
friend class QDebugStateSaverPrivate; friend class QDebugStateSaverPrivate;
struct Stream { struct Stream {
enum { VerbosityShift = 29, VerbosityMask = 0x7 }; enum { VerbosityShift = 29, VerbosityMask = 0x7 };
@ -114,7 +115,10 @@ public:
inline QDebug(QString *string) : stream(new Stream(string)) {} inline QDebug(QString *string) : stream(new Stream(string)) {}
inline QDebug(QtMsgType t) : stream(new Stream(t)) {} inline QDebug(QtMsgType t) : stream(new Stream(t)) {}
inline QDebug(const QDebug &o):stream(o.stream) { ++stream->ref; } 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); inline QDebug &operator=(const QDebug &other);
QDebug &operator=(QDebug &&other) noexcept
{ QDebug{std::move(other)}.swap(*this); return *this; }
~QDebug(); ~QDebug();
inline void swap(QDebug &other) noexcept { qSwap(stream, other.stream); } inline void swap(QDebug &other) noexcept { qSwap(stream, other.stream); }
@ -203,10 +207,7 @@ public:
inline QDebug &QDebug::operator=(const QDebug &other) inline QDebug &QDebug::operator=(const QDebug &other)
{ {
if (this != &other) { QDebug{other}.swap(*this);
QDebug copy(other);
qSwap(stream, copy.stream);
}
return *this; return *this;
} }

View File

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

View File

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

View File

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

View File

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

View File

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

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