diff options
Diffstat (limited to 'src/tools/windeployqt/utils.h')
-rw-r--r-- | src/tools/windeployqt/utils.h | 72 |
1 files changed, 17 insertions, 55 deletions
diff --git a/src/tools/windeployqt/utils.h b/src/tools/windeployqt/utils.h index 0fe3a6948f..fb3ba0b40b 100644 --- a/src/tools/windeployqt/utils.h +++ b/src/tools/windeployqt/utils.h @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #ifndef UTILS_H #define UTILS_H @@ -45,7 +20,6 @@ QT_BEGIN_NAMESPACE enum PlatformFlag { // OS WindowsBased = 0x00001, - UnixBased = 0x00002, // CPU IntelBased = 0x00010, ArmBased = 0x00020, @@ -55,11 +29,12 @@ enum PlatformFlag { ClangMsvc = 0x00400, ClangMinGW = 0x00800, // Platforms - WindowsDesktopMsvc = WindowsBased + IntelBased + Msvc, + WindowsDesktopMsvc = WindowsBased + Msvc, + WindowsDesktopMsvcIntel = WindowsDesktopMsvc + IntelBased, + WindowsDesktopMsvcArm = WindowsDesktopMsvc + ArmBased, WindowsDesktopMinGW = WindowsBased + IntelBased + MinGW, WindowsDesktopClangMsvc = WindowsBased + IntelBased + ClangMsvc, WindowsDesktopClangMinGW = WindowsBased + IntelBased + ClangMinGW, - Unix = UnixBased, UnknownPlatform }; @@ -93,7 +68,7 @@ inline std::wostream &operator<<(std::wostream &str, const QString &s) // Container class for JSON output class JsonOutput { - using SourceTargetMapping = QPair<QString, QString>; + using SourceTargetMapping = std::pair<QString, QString>; using SourceTargetMappings = QList<SourceTargetMapping>; public: @@ -162,13 +137,12 @@ inline QString normalizeFileName(const QString &name) { return name; } #endif // !Q_OS_WIN static const char windowsSharedLibrarySuffix[] = ".dll"; -static const char unixSharedLibrarySuffix[] = ".so"; -inline QString sharedLibrarySuffix(Platform platform) { return QLatin1String((platform & WindowsBased) ? windowsSharedLibrarySuffix : unixSharedLibrarySuffix); } +inline QString sharedLibrarySuffix() { return QLatin1StringView(windowsSharedLibrarySuffix); } bool isBuildDirectory(Platform platform, const QString &dirName); bool createSymbolicLink(const QFileInfo &source, const QString &target, QString *errorMessage); -bool createDirectory(const QString &directory, QString *errorMessage); +bool createDirectory(const QString &directory, QString *errorMessage, bool dryRun); QString findInPath(const QString &file); extern const char *qmakeInfixKey; // Fake key containing the libinfix @@ -195,19 +169,6 @@ bool runProcess(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, 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 short *machineArch = nullptr) -{ - return platform == Unix ? - readElfExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug) : - readPeExecutable(executableFileName, errorMessage, dependentLibraries, wordSize, isDebug, - (platform == WindowsDesktopMinGW), machineArch); -} #ifdef Q_OS_WIN # if !defined(IMAGE_FILE_MACHINE_ARM64) @@ -218,14 +179,15 @@ QString getArchString (unsigned short machineArch); // Return dependent modules of executable files. -inline QStringList findDependentLibraries(const QString &executableFileName, Platform platform, QString *errorMessage) +inline QStringList findDependentLibraries(const QString &executableFileName, QString *errorMessage) { QStringList result; - readExecutable(executableFileName, platform, errorMessage, &result); + readPeExecutable(executableFileName, errorMessage, &result); return result; } QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wordSize); +QStringList findDxc(Platform platform, const QString &qtBinDir, unsigned wordSize); bool patchQtCore(const QString &path, QString *errorMessage); @@ -249,7 +211,7 @@ bool updateFile(const QString &sourceFileName, QString *errorMessage) { const QFileInfo sourceFileInfo(sourceFileName); - const QString targetFileName = targetDirectory + QLatin1Char('/') + sourceFileInfo.fileName(); + const QString targetFileName = targetDirectory + u'/' + sourceFileInfo.fileName(); if (optVerboseLevel > 1) std::wcout << "Checking " << sourceFileName << ", " << targetFileName << '\n'; @@ -263,7 +225,7 @@ bool updateFile(const QString &sourceFileName, if (sourceFileInfo.isSymLink()) { const QString sourcePath = sourceFileInfo.symLinkTarget(); const QString relativeSource = QDir(sourceFileInfo.absolutePath()).relativeFilePath(sourcePath); - if (relativeSource.contains(QLatin1Char('/'))) { + if (relativeSource.contains(u'/')) { *errorMessage = QString::fromLatin1("Symbolic links across directories are not supported (%1).") .arg(QDir::toNativeSeparators(sourceFileName)); return false; @@ -289,11 +251,11 @@ bool updateFile(const QString &sourceFileName, return false; } } // target symbolic link exists - return createSymbolicLink(QFileInfo(targetDirectory + QLatin1Char('/') + relativeSource), sourceFileInfo.fileName(), errorMessage); + return createSymbolicLink(QFileInfo(targetDirectory + u'/' + relativeSource), sourceFileInfo.fileName(), errorMessage); } // Source is symbolic link if (sourceFileInfo.isDir()) { - if ((flags & SkipQmlDesignerSpecificsDirectories) && sourceFileInfo.fileName() == QLatin1String("designer")) { + if ((flags & SkipQmlDesignerSpecificsDirectories) && sourceFileInfo.fileName() == QLatin1StringView("designer")) { if (optVerboseLevel) std::wcout << "Skipping " << QDir::toNativeSeparators(sourceFileName) << ".\n"; return true; @@ -323,13 +285,13 @@ bool updateFile(const QString &sourceFileName, const QStringList allEntries = directoryFileEntryFunction(dir) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (const QString &entry : allEntries) - if (!updateFile(sourceFileName + QLatin1Char('/') + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage)) + if (!updateFile(sourceFileName + u'/' + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage)) return false; // Remove empty directories, for example QML import folders for which the filter did not match. if (created && (flags & RemoveEmptyQmlDirectories)) { QDir d(targetFileName); const QStringList entries = d.entryList(QStringList(), QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - if (entries.isEmpty() || (entries.size() == 1 && entries.first() == QLatin1String("qmldir"))) { + if (entries.isEmpty() || (entries.size() == 1 && entries.first() == QLatin1StringView("qmldir"))) { if (!d.removeRecursively()) { *errorMessage = QString::fromLatin1("Cannot remove empty directory %1.") .arg(QDir::toNativeSeparators(targetFileName)); |