1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the qmake application of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29#ifndef IOUTILS_H
30#define IOUTILS_H
31
32#include "qmake_global.h"
33
34#include <qstring.h>
35
36QT_BEGIN_NAMESPACE
37
38namespace QMakeInternal {
39
40/*!
41 This class provides replacement functionality for QFileInfo, QFile & QDir,
42 as these are abysmally slow.
43*/
44class QMAKE_EXPORT IoUtils {
45public:
46 enum FileType {
47 FileNotFound = 0,
48 FileIsRegular = 1,
49 FileIsDir = 2
50 };
51
52 static FileType fileType(const QString &fileName);
53 static bool exists(const QString &fileName) { return fileType(fileName) != FileNotFound; }
54 static bool isRelativePath(const QString &fileName);
55 static bool isAbsolutePath(const QString &fileName) { return !isRelativePath(fileName); }
56 static QStringView pathName(const QString &fileName); // Requires normalized path
57 static QStringView fileName(const QString &fileName); // Requires normalized path
58 static QString resolvePath(const QString &baseDir, const QString &fileName);
59 static QString shellQuoteUnix(const QString &arg);
60 static QString shellQuoteWin(const QString &arg);
61 static QString shellQuote(const QString &arg)
62#ifdef Q_OS_UNIX
63 { return shellQuoteUnix(arg); }
64#else
65 { return shellQuoteWin(arg); }
66#endif
67#if defined(PROEVALUATOR_FULL)
68 static bool touchFile(const QString &targetFileName, const QString &referenceFileName, QString *errorString);
69# if defined(QT_BUILD_QMAKE) && defined(Q_OS_UNIX)
70 static bool readLinkTarget(const QString &symlinkPath, QString *target);
71# endif
72#endif
73};
74
75} // namespace ProFileEvaluatorInternal
76
77QT_END_NAMESPACE
78
79#endif // IOUTILS_H
80