Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef UTILS_H
5#define UTILS_H
6
7#include <QStringList>
8#include <QMap>
9#include <QtCore/QFile>
10#include <QtCore/QDir>
11#include <QtCore/QDateTime>
12#include <QtCore/QJsonArray>
13#include <QtCore/QJsonObject>
14#include <QtCore/QJsonDocument>
15
16#include <iostream>
17
18QT_BEGIN_NAMESPACE
19
20struct PeHeaderInfoStruct {
21 unsigned wordSize = 0;
22 bool isDebug = false;
23 unsigned short machineArch = 0;
24};
25
46
47Q_DECLARE_FLAGS(Platform, PlatformFlag)
48
49Q_DECLARE_OPERATORS_FOR_FLAGS(Platform)
50
51inline bool platformHasDebugSuffix(Platform p) // Uses 'd' debug suffix
52{
53 return p.testFlag(Msvc) || p.testFlag(ClangMsvc);
54}
55
56enum ListOption {
57 ListNone = 0,
58 ListSource,
59 ListTarget,
60 ListRelative,
61 ListMapping
62};
63
64inline std::wostream &operator<<(std::wostream &str, const QString &s)
65{
66#ifdef Q_OS_WIN
67 str << reinterpret_cast<const wchar_t *>(s.utf16());
68#else
69 str << s.toStdWString();
70#endif
71 return str;
72}
73
74// Container class for JSON output
76{
79
80public:
81 void addFile(const QString &source, const QString &target)
82 {
83 m_files.append(SourceTargetMapping(source, target));
84 }
85
86 void removeTargetDirectory(const QString &targetDirectory)
87 {
88 for (int i = m_files.size() - 1; i >= 0; --i) {
89 if (m_files.at(i).second == targetDirectory)
90 m_files.removeAt(i);
91 }
92 }
93
95 {
96 QJsonObject document;
97 QJsonArray files;
98 for (const SourceTargetMapping &mapping : m_files) {
99 QJsonObject object;
100 object.insert(QStringLiteral("source"), QDir::toNativeSeparators(mapping.first));
101 object.insert(QStringLiteral("target"), QDir::toNativeSeparators(mapping.second));
102 files.append(object);
103 }
104 document.insert(QStringLiteral("files"), files);
105 return QJsonDocument(document).toJson();
106 }
107 QByteArray toList(ListOption option, const QDir &base) const
108 {
109 QByteArray list;
110 for (const SourceTargetMapping &mapping : m_files) {
111 const QString source = QDir::toNativeSeparators(mapping.first);
112 const QString fileName = QFileInfo(mapping.first).fileName();
113 const QString target = QDir::toNativeSeparators(mapping.second) + QDir::separator() + fileName;
114 switch (option) {
115 case ListNone:
116 break;
117 case ListSource:
118 list += source.toUtf8() + '\n';
119 break;
120 case ListTarget:
121 list += target.toUtf8() + '\n';
122 break;
123 case ListRelative:
124 list += QDir::toNativeSeparators(base.relativeFilePath(target)).toUtf8() + '\n';
125 break;
126 case ListMapping:
127 list += '"' + source.toUtf8() + "\" \"" + QDir::toNativeSeparators(base.relativeFilePath(target)).toUtf8() + "\"\n";
128 break;
129 }
130 }
131 return list;
132 }
133private:
134 SourceTargetMappings m_files;
135};
136
137#ifdef Q_OS_WIN
138QString normalizeFileName(const QString &name);
139QString winErrorMessage(unsigned long error);
140QString findSdkTool(const QString &tool);
141#else // !Q_OS_WIN
142inline QString normalizeFileName(const QString &name) { return name; }
143#endif // !Q_OS_WIN
144
145static const char windowsSharedLibrarySuffix[] = ".dll";
146
147inline QString sharedLibrarySuffix() { return QLatin1StringView(windowsSharedLibrarySuffix); }
148bool isBuildDirectory(Platform platform, const QString &dirName);
149
150bool createSymbolicLink(const QFileInfo &source, const QString &target, QString *errorMessage);
151bool createDirectory(const QString &directory, QString *errorMessage, bool dryRun);
152QString findInPath(const QString &file);
153
154extern const char *qmakeInfixKey; // Fake key containing the libinfix
155
156QMap<QString, QString> queryQtPaths(const QString &qmakeBinary, QString *errorMessage);
157
163
164QStringList findSharedLibraries(const QDir &directory, Platform platform,
165 DebugMatchMode debugMatchMode,
166 const QString &prefix = QString());
167
168bool updateFile(const QString &sourceFileName, const QStringList &nameFilters,
169 const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage);
170bool runProcess(const QString &binary, const QStringList &args,
171 const QString &workingDirectory = QString(),
172 unsigned long *exitCode = 0, QByteArray *stdOut = 0, QByteArray *stdErr = 0,
173 QString *errorMessage = 0, int timeout = 30000);
174
175bool readPeExecutableInfo(const QString &peExecutableFileName, QString *errorMessage,
176 PeHeaderInfoStruct *headerInfo);
177
178bool readPeExecutableDependencies(const QString &peExecutableFileName, QString *errorMessage,
179 QStringList *dependentLibraries = 0);
180
181#ifdef Q_OS_WIN
182# if !defined(IMAGE_FILE_MACHINE_ARM64)
183# define IMAGE_FILE_MACHINE_ARM64 0xAA64
184# endif
185QString getArchString (unsigned short machineArch);
186#endif // Q_OS_WIN
187
188// Return dependent modules of executable files.
189
190inline QStringList findDependentLibraries(const QString &executableFileName, QString *errorMessage)
191{
192 QStringList result;
193 readPeExecutableDependencies(executableFileName, errorMessage, &result);
194 return result;
195}
196
197QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wordSize);
198QStringList findDxc(Platform platform, const QString &qtBinDir, unsigned wordSize);
199
200bool patchQtCore(const QString &path, QString *errorMessage);
201
202extern int optVerboseLevel;
203
204// Recursively update a file or directory, matching DirectoryFileEntryFunction against the QDir
205// to obtain the files.
212
213template <class DirectoryFileEntryFunction>
214bool updateFile(const QString &sourceFileName,
215 DirectoryFileEntryFunction directoryFileEntryFunction,
216 const QString &targetDirectory,
217 unsigned flags,
218 JsonOutput *json,
219 QString *errorMessage)
220{
221 const QFileInfo sourceFileInfo(sourceFileName);
222 const QString targetFileName = targetDirectory + u'/' + sourceFileInfo.fileName();
223 if (optVerboseLevel > 1)
224 std::wcout << "Checking " << sourceFileName << ", " << targetFileName << '\n';
225
226 if (!sourceFileInfo.exists()) {
227 *errorMessage = QString::fromLatin1("%1 does not exist.").arg(QDir::toNativeSeparators(sourceFileName));
228 return false;
229 }
230
231 const QFileInfo targetFileInfo(targetFileName);
232
233 if (sourceFileInfo.isSymLink()) {
234 const QString sourcePath = sourceFileInfo.symLinkTarget();
235 const QString relativeSource = QDir(sourceFileInfo.absolutePath()).relativeFilePath(sourcePath);
236 if (relativeSource.contains(u'/')) {
237 *errorMessage = QString::fromLatin1("Symbolic links across directories are not supported (%1).")
238 .arg(QDir::toNativeSeparators(sourceFileName));
239 return false;
240 }
241
242 // Update the linked-to file
243 if (!updateFile(sourcePath, directoryFileEntryFunction, targetDirectory, flags, json, errorMessage))
244 return false;
245
246 if (targetFileInfo.exists()) {
247 if (!targetFileInfo.isSymLink()) {
248 *errorMessage = QString::fromLatin1("%1 already exists and is not a symbolic link.")
249 .arg(QDir::toNativeSeparators(targetFileName));
250 return false;
251 } // Not a symlink
252 const QString relativeTarget = QDir(targetFileInfo.absolutePath()).relativeFilePath(targetFileInfo.symLinkTarget());
253 if (relativeSource == relativeTarget) // Exists and points to same entry: happy.
254 return true;
255 QFile existingTargetFile(targetFileName);
256 if (!(flags & SkipUpdateFile) && !existingTargetFile.remove()) {
257 *errorMessage = QString::fromLatin1("Cannot remove existing symbolic link %1: %2")
258 .arg(QDir::toNativeSeparators(targetFileName), existingTargetFile.errorString());
259 return false;
260 }
261 } // target symbolic link exists
262 return createSymbolicLink(QFileInfo(targetDirectory + u'/' + relativeSource), sourceFileInfo.fileName(), errorMessage);
263 } // Source is symbolic link
264
265 if (sourceFileInfo.isDir()) {
266 if ((flags & SkipQmlDesignerSpecificsDirectories) && sourceFileInfo.fileName() == QLatin1StringView("designer")) {
267 if (optVerboseLevel)
268 std::wcout << "Skipping " << QDir::toNativeSeparators(sourceFileName) << ".\n";
269 return true;
270 }
271 bool created = false;
272 if (targetFileInfo.exists()) {
273 if (!targetFileInfo.isDir()) {
274 *errorMessage = QString::fromLatin1("%1 already exists and is not a directory.")
275 .arg(QDir::toNativeSeparators(targetFileName));
276 return false;
277 } // Not a directory.
278 } else { // exists.
279 QDir d(targetDirectory);
280 if (optVerboseLevel)
281 std::wcout << "Creating " << targetFileName << ".\n";
282 if (!(flags & SkipUpdateFile)) {
283 created = d.mkdir(sourceFileInfo.fileName());
284 if (!created) {
285 *errorMessage = QString::fromLatin1("Cannot create directory %1 under %2.")
286 .arg(sourceFileInfo.fileName(), QDir::toNativeSeparators(targetDirectory));
287 return false;
288 }
289 }
290 }
291 // Recurse into directory
292 QDir dir(sourceFileName);
293
294 const QStringList allEntries = directoryFileEntryFunction(dir) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
295 for (const QString &entry : allEntries)
296 if (!updateFile(sourceFileName + u'/' + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage))
297 return false;
298 // Remove empty directories, for example QML import folders for which the filter did not match.
299 if (created && (flags & RemoveEmptyQmlDirectories)) {
300 QDir d(targetFileName);
301 const QStringList entries = d.entryList(QStringList(), QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
302 if (entries.isEmpty() || (entries.size() == 1 && entries.first() == QLatin1StringView("qmldir"))) {
303 if (!d.removeRecursively()) {
304 *errorMessage = QString::fromLatin1("Cannot remove empty directory %1.")
305 .arg(QDir::toNativeSeparators(targetFileName));
306 return false;
307 }
308 if (json)
309 json->removeTargetDirectory(targetFileName);
310 }
311 }
312 return true;
313 } // Source is directory.
314
315 if (targetFileInfo.exists()) {
316 if (!(flags & ForceUpdateFile)
317 && targetFileInfo.lastModified() >= sourceFileInfo.lastModified()) {
318 if (optVerboseLevel)
319 std::wcout << sourceFileInfo.fileName() << " is up to date.\n";
320 if (json)
321 json->addFile(sourceFileName, targetDirectory);
322 return true;
323 }
324 QFile targetFile(targetFileName);
325 if (!(flags & SkipUpdateFile) && !targetFile.remove()) {
326 *errorMessage = QString::fromLatin1("Cannot remove existing file %1: %2")
327 .arg(QDir::toNativeSeparators(targetFileName), targetFile.errorString());
328 return false;
329 }
330 } // target exists
331 QFile file(sourceFileName);
332 if (optVerboseLevel)
333 std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n";
334 if (!(flags & SkipUpdateFile)) {
335 if (!file.copy(targetFileName)) {
336 *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
337 .arg(QDir::toNativeSeparators(sourceFileName),
338 QDir::toNativeSeparators(targetFileName),
339 file.errorString());
340 return false;
341 }
342 if (!(file.permissions() & QFile::WriteUser)) { // QTBUG-40152, clear inherited read-only attribute
343 QFile targetFile(targetFileName);
344 if (!targetFile.setPermissions(targetFile.permissions() | QFile::WriteUser)) {
345 *errorMessage = QString::fromLatin1("Cannot set write permission on %1: %2")
346 .arg(QDir::toNativeSeparators(targetFileName), file.errorString());
347 return false;
348 }
349 } // Check permissions
350 } // !SkipUpdateFile
351 if (json)
352 json->addFile(sourceFileName, targetDirectory);
353 return true;
354}
355
356// Base class to filter files by name filters functions to be passed to updateFile().
358public:
359 explicit NameFilterFileEntryFunction(const QStringList &nameFilters) : m_nameFilters(nameFilters) {}
360 QStringList operator()(const QDir &dir) const { return dir.entryList(m_nameFilters, QDir::Files); }
361
362private:
363 const QStringList m_nameFilters;
364};
365
366// Convenience for all files.
367inline bool updateFile(const QString &sourceFileName, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
368{
369 return updateFile(sourceFileName, NameFilterFileEntryFunction(QStringList()), targetDirectory, flags, json, errorMessage);
370}
371
372QT_END_NAMESPACE
373
374#endif // UTILS_H
QStringList operator()(const QDir &dir) const
Definition main.cpp:884
DllDirectoryFileEntryFunction(Platform platform, DebugMatchMode debugMatchMode, const QString &prefix=QString())
Definition main.cpp:880
void addFile(const QString &source, const QString &target)
Definition utils.h:81
void removeTargetDirectory(const QString &targetDirectory)
Definition utils.h:86
QByteArray toJson() const
Definition utils.h:94
QByteArray toList(ListOption option, const QDir &base) const
Definition utils.h:107
QStringList operator()(const QDir &dir) const
Definition utils.h:360
NameFilterFileEntryFunction(const QStringList &nameFilters)
Definition utils.h:359
QStringList operator()(const QDir &dir) const
Definition main.cpp:921
QmlDirectoryFileEntryFunction(const QString &moduleSourcePath, Platform platform, DebugMatchMode debugMatchMode, unsigned flags)
Definition main.cpp:915
static Platform platformFromMkSpec(const QString &xSpec)
Definition main.cpp:135
static bool isQtModule(const QString &libName)
Definition main.cpp:833
static QString libraryPath(const QString &libraryLocation, const char *name, const QString &infix, Platform platform, bool debug)
Definition main.cpp:1311
static QString lineBreak(QString s)
Definition main.cpp:786
static QString msgFileDoesNotExist(const QString &file)
Definition main.cpp:238
static QStringList compilerRunTimeLibs(const QString &qtBinDir, Platform platform, bool isDebug, unsigned short machineArch)
Definition main.cpp:1388
static bool updateLibrary(const QString &sourceFileName, const QString &targetDirectory, const Options &options, QString *errorMessage)
Definition main.cpp:1461
static bool findDependentQtLibraries(const QString &qtBinDir, const QString &binary, Platform platform, QString *errorMessage, QStringList *qtDependencies, QStringList *nonQtDependencies)
Definition main.cpp:843
static void assignKnownModuleIds()
Definition main.cpp:60
static QCommandLineOption createVerboseOption()
Definition main.cpp:267
ExlusiveOptionValue
Definition main.cpp:153
@ OptionEnabled
Definition main.cpp:155
@ OptionAuto
Definition main.cpp:154
@ OptionDisabled
Definition main.cpp:156
static int parseArguments(const QStringList &arguments, QCommandLineParser *parser, Options *options, QString *errorMessage)
Definition main.cpp:335
static ExlusiveOptionValue parseExclusiveOptions(const QCommandLineParser *parser, const QCommandLineOption &enableOption, const QCommandLineOption &disableOption)
Definition main.cpp:159
static int qtVersion(const QMap< QString, QString > &qtpathsVariables)
Definition main.cpp:1450
static QStringList translationNameFilters(const ModuleBitset &modules, const QString &prefix)
Definition main.cpp:1174
static QString findBinary(const QString &directory, Platform platform)
Definition main.cpp:223
static DeployResult deploy(const Options &options, const QMap< QString, QString > &qtpathsVariables, const PluginInformation &pluginInfo, QString *errorMessage)
Definition main.cpp:1491
static int parseEarlyArguments(const QStringList &arguments, Options *options, QString *errorMessage)
Definition main.cpp:276
static QCommandLineOption createQMakeOption()
Definition main.cpp:249
static bool deployWebEngineCore(const QMap< QString, QString > &qtpathsVariables, const PluginInformation &pluginInfo, const Options &options, bool isDebug, QString *errorMessage)
Definition main.cpp:1897
static QStringList qmlCacheFileFilters()
Definition main.cpp:901
static QString pdbFileName(QString libraryFileName)
Definition main.cpp:893
CommandLineParseFlag
Definition main.cpp:243
@ CommandLineParseError
Definition main.cpp:244
@ CommandLineVersionRequested
Definition main.cpp:246
@ CommandLineParseHelpRequested
Definition main.cpp:245
static QString moduleNameToOptionName(const QString &moduleName, bool internal)
Definition main.cpp:93
static QString formatQtPlugins(const PluginInformation &pluginInfo)
Definition main.cpp:120
#define DECLARE_KNOWN_MODULE(name)
Definition main.cpp:43
static QCommandLineOption createQtPathsOption()
Definition main.cpp:258
static bool needsPluginType(const QString &subDirName, const PluginInformation &pluginInfo, const PluginSelections &pluginSelections)
Definition main.cpp:1089
static qint64 qtModule(QString module, const QString &infix)
Definition main.cpp:973
static QString vcRedistDir()
Definition main.cpp:1325
static QString webProcessBinary(const char *binaryName, Platform p)
Definition main.cpp:87
static QStringList findFFmpegLibs(const QString &qtBinDir, Platform platform)
Definition main.cpp:1244
static const char webEngineProcessC[]
Definition main.cpp:85
static QString deployPlugin(const QString &plugin, const QDir &subDir, const bool dueToModule, const DebugMatchMode &debugMatchMode, ModuleBitset *pluginNeededQtModules, const ModuleBitset &disabledQtModules, const PluginSelections &pluginSelections, const QString &libraryLocation, const QString &infix, Platform platform, bool deployInsightTrackerPlugin, bool deployOpenSslPlugin)
Definition main.cpp:999
static QString helpText(const QCommandLineParser &p, const PluginInformation &pluginInfo)
Definition main.cpp:798
static bool deployWebProcess(const QMap< QString, QString > &qtpathsVariables, const char *binaryName, const PluginInformation &pluginInfo, const Options &sourceOptions, QString *errorMessage)
Definition main.cpp:1876
static QStringList findMinGWRuntimePaths(const QString &qtBinDir, Platform platform, const QStringList &runtimeFilters)
Definition main.cpp:1360
#define DEFINE_KNOWN_MODULE(name)
Definition main.cpp:57
#define IMAGE_FILE_MACHINE_ARM64
Definition main.cpp:26
static QString getIcuVersion(const QString &libName)
Definition main.cpp:1483
static bool deployTranslations(const QString &sourcePath, const ModuleBitset &usedQtModules, const QString &target, const Options &options, QString *errorMessage)
Definition main.cpp:1187
static QtModuleInfoStore qtModuleEntries
Definition main.cpp:41
QStringList findQtPlugins(ModuleBitset *usedQtModules, const ModuleBitset &disabledQtModules, const PluginInformation &pluginInfo, const PluginSelections &pluginSelections, const QString &qtPluginsDirName, const QString &libraryLocation, const QString &infix, DebugMatchMode debugMatchModeIn, Platform platform, QString *platformPlugin, bool deployInsightTrackerPlugin, bool deployOpenSslPlugin)
Definition main.cpp:1100
static QStringList findOpenSslLibraries(const QString &openSslRootDir, Platform platform)
Definition main.cpp:1272
static QString vcDebugRedistDir()
Definition main.cpp:1323
static QByteArray formatQtModules(const ModuleBitset &mask, bool option=false)
Definition main.cpp:105
int main(int argc, char *argv[])
[ctor_close]
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]
Definition qimage.cpp:4006
ModuleBitset usedQtLibraries
Definition main.cpp:1307
ModuleBitset directlyUsedQtLibraries
Definition main.cpp:1306
operator bool() const
Definition main.cpp:1302
bool isDebug
Definition main.cpp:1305
ModuleBitset deployedQtLibraries
Definition main.cpp:1308
bool success
Definition main.cpp:1304
QString libraryDirectory
Definition main.cpp:204
bool translations
Definition main.cpp:186
JsonOutput * json
Definition main.cpp:209
DebugDetection debugDetection
Definition main.cpp:211
QStringList binaries
Definition main.cpp:208
bool quickImports
Definition main.cpp:185
bool systemDxc
Definition main.cpp:188
bool ffmpeg
Definition main.cpp:191
bool forceOpenSslPlugin
Definition main.cpp:217
unsigned updateFileFlags
Definition main.cpp:196
int qmlImportTimeout
Definition main.cpp:199
ListOption list
Definition main.cpp:210
QStringList qmlImportPaths
Definition main.cpp:169
QString qtpathsBinary
Definition main.cpp:201
bool deployPdb
Definition main.cpp:212
PluginSelections pluginSelections
Definition main.cpp:192
QStringList qmlDirectories
Definition main.cpp:197
QString translationsDirectory
Definition main.cpp:202
QStringList languages
Definition main.cpp:203
ModuleBitset additionalLibraries
Definition main.cpp:194
QString directory
Definition main.cpp:200
bool patchQt
Definition main.cpp:214
bool systemD3dCompiler
Definition main.cpp:187
Platform platform
Definition main.cpp:193
bool createAppx
Definition main.cpp:218
bool ignoreLibraryErrors
Definition main.cpp:215
QString pluginDirectory
Definition main.cpp:205
QString qmlDirectory
Definition main.cpp:207
bool softwareRasterizer
Definition main.cpp:190
QString openSslRootDirectory
Definition main.cpp:206
ModuleBitset disabledLibraries
Definition main.cpp:195
bool dryRun
Definition main.cpp:213
bool deployInsightTrackerPlugin
Definition main.cpp:216
QString appxCertificatePath
Definition main.cpp:219
bool plugins
Definition main.cpp:183
DebugDetection
Definition main.cpp:177
@ DebugDetectionForceRelease
Definition main.cpp:180
@ DebugDetectionForceDebug
Definition main.cpp:179
@ DebugDetectionAuto
Definition main.cpp:178
bool libraries
Definition main.cpp:184
bool compilerRunTime
Definition main.cpp:189
QString findD3dCompiler(Platform platform, const QString &qtBinDir, unsigned wordSize)
Definition utils.cpp:504
bool runProcess(const QString &binary, const QStringList &args, const QString &workingDirectory=QString(), unsigned long *exitCode=0, QByteArray *stdOut=0, QByteArray *stdErr=0, QString *errorMessage=0, int timeout=30000)
Definition utils.cpp:137
PlatformFlag
Definition utils.h:26
@ MinGW
Definition utils.h:34
@ WindowsDesktopMsvcArm
Definition utils.h:40
@ ClangMinGW
Definition utils.h:36
@ ClangMsvc
Definition utils.h:35
@ WindowsBased
Definition utils.h:28
@ WindowsDesktopMsvc
Definition utils.h:38
@ Msvc
Definition utils.h:33
@ WindowsDesktopMinGW
Definition utils.h:41
@ UnknownPlatform
Definition utils.h:44
@ WindowsDesktopMsvcIntel
Definition utils.h:39
@ ArmBased
Definition utils.h:31
@ WindowsDesktopClangMinGW
Definition utils.h:43
@ WindowsDesktopClangMsvc
Definition utils.h:42
@ IntelBased
Definition utils.h:30
QStringList findDxc(Platform platform, const QString &qtBinDir, unsigned wordSize)
Definition utils.cpp:509
int optVerboseLevel
Definition utils.cpp:28
QStringList findSharedLibraries(const QDir &directory, Platform platform, DebugMatchMode debugMatchMode, const QString &prefix=QString())
Definition utils.cpp:81
const char * qmakeInfixKey
Definition utils.cpp:192
QString findInPath(const QString &file)
Definition main.cpp:2840
bool createSymbolicLink(const QFileInfo &source, const QString &target, QString *errorMessage)
Definition utils.cpp:38
bool readPeExecutableDependencies(const QString &peExecutableFileName, QString *errorMessage, QStringList *dependentLibraries=0)
Definition utils.cpp:498
UpdateFileFlag
Definition utils.h:206
@ RemoveEmptyQmlDirectories
Definition utils.h:209
@ SkipUpdateFile
Definition utils.h:208
@ ForceUpdateFile
Definition utils.h:207
@ SkipQmlDesignerSpecificsDirectories
Definition utils.h:210
bool updateFile(const QString &sourceFileName, DirectoryFileEntryFunction directoryFileEntryFunction, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
Definition utils.h:214
bool createDirectory(const QString &directory, QString *errorMessage, bool dryRun)
Definition utils.cpp:57
static const char windowsSharedLibrarySuffix[]
Definition utils.h:145
DebugMatchMode
Definition utils.h:158
@ MatchRelease
Definition utils.h:160
@ MatchDebug
Definition utils.h:159
@ MatchDebugOrRelease
Definition utils.h:161
bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
Definition utils.cpp:249
QStringList findDependentLibraries(const QString &executableFileName, QString *errorMessage)
Definition utils.h:190
bool updateFile(const QString &sourceFileName, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage)
Definition utils.h:367
bool isBuildDirectory(Platform platform, const QString &dirName)
Definition utils.cpp:30
bool patchQtCore(const QString &path, QString *errorMessage)
Definition utils.cpp:517
QMap< QString, QString > queryQtPaths(const QString &qmakeBinary, QString *errorMessage)
Definition utils.cpp:194
bool readPeExecutableInfo(const QString &peExecutableFileName, QString *errorMessage, PeHeaderInfoStruct *headerInfo)
Definition utils.cpp:491
QString sharedLibrarySuffix()
Definition utils.h:147
QString normalizeFileName(const QString &name)
Definition utils.h:142