diff options
author | Liang Qi <liang.qi@qt.io> | 2019-01-04 12:11:11 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2019-01-04 13:03:26 +0100 |
commit | 7b23692538f55d499bf094a750311e1e4cd13ec6 (patch) | |
tree | 7e85cdabe0e069ee8fcbc3da3764327b4f8e2ba2 /src/shared | |
parent | aa316d1d463777612db4b144d945bbaf67481494 (diff) | |
parent | 32897fd0b98966d22ecbd475a0e6a77ca8b1108d (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts:
src/qdoc/htmlgenerator.cpp
src/qtattributionsscanner/qdocgenerator.cpp
Done-With: Martin Smith <martin.smith@qt.io>
Change-Id: I56a23175579a1a699939179da2f35bbcd6c73367
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/winutils/qmlutils.cpp | 4 | ||||
-rw-r--r-- | src/shared/winutils/qmlutils.h | 3 | ||||
-rw-r--r-- | src/shared/winutils/utils.cpp | 32 | ||||
-rw-r--r-- | src/shared/winutils/utils.h | 17 |
4 files changed, 41 insertions, 15 deletions
diff --git a/src/shared/winutils/qmlutils.cpp b/src/shared/winutils/qmlutils.cpp index 414446499..6e8d5192b 100644 --- a/src/shared/winutils/qmlutils.cpp +++ b/src/shared/winutils/qmlutils.cpp @@ -51,7 +51,7 @@ QString QmlImportScanResult::Module::installPath(const QString &root) const const int lastSlashPos = relativePath.lastIndexOf(QLatin1Char('/')); if (lastSlashPos != -1) { result += QLatin1Char('/'); - result += relativePath.left(lastSlashPos); + result += relativePath.leftRef(lastSlashPos); } return result; } @@ -116,7 +116,7 @@ QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringL + QStringLiteral(": ") + QString::fromLocal8Bit(stdErr); return result; } - QJsonParseError jsonParseError; + QJsonParseError jsonParseError{}; const QJsonDocument data = QJsonDocument::fromJson(stdOut, &jsonParseError); if (data.isNull() ) { *errorMessage = binary + QStringLiteral(" returned invalid JSON output: ") diff --git a/src/shared/winutils/qmlutils.h b/src/shared/winutils/qmlutils.h index a05007103..87e6ca132 100644 --- a/src/shared/winutils/qmlutils.h +++ b/src/shared/winutils/qmlutils.h @@ -47,10 +47,9 @@ struct QmlImportScanResult { QString relativePath; }; - QmlImportScanResult() : ok(false) {} void append(const QmlImportScanResult &other); - bool ok; + bool ok = false; QList<Module> modules; QStringList plugins; }; diff --git a/src/shared/winutils/utils.cpp b/src/shared/winutils/utils.cpp index cdf017715..00a205438 100644 --- a/src/shared/winutils/utils.cpp +++ b/src/shared/winutils/utils.cpp @@ -493,8 +493,6 @@ QString findInPath(const QString &file) const char *qmakeInfixKey = "QT_INFIX"; -QMap<QString, QString> queryQMakeAll(QString *errorMessage); - QMap<QString, QString> queryQMakeAll(QString *errorMessage) { QByteArray stdOut; @@ -819,12 +817,12 @@ inline void determineDebugAndDependentLibs(const ImageNtHeader *nth, const void { const bool hasDebugEntry = nth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size; QStringList dependentLibraries; - if (dependentLibrariesIn || (isDebugIn && hasDebugEntry && !isMinGW)) + if (dependentLibrariesIn || (isDebugIn != nullptr && hasDebugEntry && !isMinGW)) dependentLibraries = readImportSections(nth, fileMemory, errorMessage); if (dependentLibrariesIn) *dependentLibrariesIn = dependentLibraries; - if (isDebugIn) { + if (isDebugIn != nullptr) { if (isMinGW) { // Use logic that's used e.g. in objdump / pfd library *isDebugIn = !(nth->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED); @@ -840,7 +838,7 @@ inline void determineDebugAndDependentLibs(const ImageNtHeader *nth, const void // and debug flags. bool readPeExecutable(const QString &peExecutableFileName, QString *errorMessage, QStringList *dependentLibrariesIn, unsigned *wordSizeIn, - bool *isDebugIn, bool isMinGW) + bool *isDebugIn, bool isMinGW, unsigned short *machineArchIn) { bool result = false; HANDLE hFile = NULL; @@ -890,6 +888,9 @@ bool readPeExecutable(const QString &peExecutableFileName, QString *errorMessage fileMemory, isMinGW, dependentLibrariesIn, isDebugIn, errorMessage); } + if (machineArchIn) + *machineArchIn = ntHeaders->FileHeader.Machine; + result = true; if (optVerboseLevel > 1) { std::wcout << __FUNCTION__ << ": " << QDir::toNativeSeparators(peExecutableFileName) @@ -970,7 +971,7 @@ QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wor #else // Q_OS_WIN bool readPeExecutable(const QString &, QString *errorMessage, - QStringList *, unsigned *, bool *, bool) + QStringList *, unsigned *, bool *, bool, unsigned short *) { *errorMessage = QStringLiteral("Not implemented."); return false; @@ -1032,4 +1033,23 @@ bool patchQtCore(const QString &path, QString *errorMessage) return true; } +#ifdef Q_OS_WIN +QString getArchString(unsigned short machineArch) +{ + switch (machineArch) { + case IMAGE_FILE_MACHINE_I386: + return QStringLiteral("x86"); + case IMAGE_FILE_MACHINE_ARM: + return QStringLiteral("arm"); + case IMAGE_FILE_MACHINE_AMD64: + return QStringLiteral("x64"); + case IMAGE_FILE_MACHINE_ARM64: + return QStringLiteral("arm64"); + default: + break; + } + return QString(); +} +#endif // Q_OS_WIN + QT_END_NAMESPACE diff --git a/src/shared/winutils/utils.h b/src/shared/winutils/utils.h index a5e6f01f7..5552a3665 100644 --- a/src/shared/winutils/utils.h +++ b/src/shared/winutils/utils.h @@ -82,8 +82,8 @@ inline std::wostream &operator<<(std::wostream &str, const QString &s) // Container class for JSON output class JsonOutput { - typedef QPair<QString, QString> SourceTargetMapping; - typedef QList<SourceTargetMapping> SourceTargetMappings; + using SourceTargetMapping = QPair<QString, QString>; + using SourceTargetMappings = QList<SourceTargetMapping>; public: void addFile(const QString &source, const QString &target) @@ -185,21 +185,28 @@ bool runElevatedBackgroundProcess(const QString &binary, const QStringList &args bool readPeExecutable(const QString &peExecutableFileName, QString *errorMessage, QStringList *dependentLibraries = 0, unsigned *wordSize = 0, - bool *isDebug = 0, bool isMinGW = false); + bool *isDebug = 0, bool isMinGW = false, unsigned short *machineArch = nullptr); bool readElfExecutable(const QString &elfExecutableFileName, QString *errorMessage, QStringList *dependentLibraries = 0, unsigned *wordSize = 0, bool *isDebug = 0); inline bool readExecutable(const QString &executableFileName, Platform platform, QString *errorMessage, QStringList *dependentLibraries = 0, - unsigned *wordSize = 0, bool *isDebug = 0) + unsigned *wordSize = 0, bool *isDebug = 0, unsigned short *machineArch = nullptr) { return platform == Unix ? readElfExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug) : readPeExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug, - (platform == WindowsDesktopMinGW)); + (platform == WindowsDesktopMinGW), machineArch); } +#ifdef Q_OS_WIN +# if !defined(IMAGE_FILE_MACHINE_ARM64) +# define IMAGE_FILE_MACHINE_ARM64 0xAA64 +# endif +QString getArchString (unsigned short machineArch); +#endif // Q_OS_WIN + // Return dependent modules of executable files. inline QStringList findDependentLibraries(const QString &executableFileName, Platform platform, QString *errorMessage) |