summaryrefslogtreecommitdiffstats
path: root/src/shared
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2019-01-04 12:11:11 +0100
committerLiang Qi <liang.qi@qt.io>2019-01-04 13:03:26 +0100
commit7b23692538f55d499bf094a750311e1e4cd13ec6 (patch)
tree7e85cdabe0e069ee8fcbc3da3764327b4f8e2ba2 /src/shared
parentaa316d1d463777612db4b144d945bbaf67481494 (diff)
parent32897fd0b98966d22ecbd475a0e6a77ca8b1108d (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.cpp4
-rw-r--r--src/shared/winutils/qmlutils.h3
-rw-r--r--src/shared/winutils/utils.cpp32
-rw-r--r--src/shared/winutils/utils.h17
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)