1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the qmake application 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$
**
****************************************************************************/
#ifndef OPTION_H
#define OPTION_H
#include <qmakeglobals.h>
#include <qmakevfs.h>
#include <qmakeparser.h>
#include <qmakeevaluator.h>
#include <qstring.h>
#include <qstringlist.h>
#include <qfile.h>
QT_BEGIN_NAMESPACE
#define QMAKE_VERSION_STR "3.1"
QString qmake_getpwd();
bool qmake_setpwd(const QString &p);
#define debug_msg if(Option::debug_level) debug_msg_internal
void debug_msg_internal(int level, const char *fmt, ...); //don't call directly, use debug_msg
enum QMakeWarn {
WarnNone = 0x00,
WarnParser = 0x01,
WarnLogic = 0x02,
WarnDeprecated = 0x04,
WarnAll = 0xFF
};
void warn_msg(QMakeWarn t, const char *fmt, ...);
class QMakeProject;
class EvalHandler : public QMakeHandler {
public:
void message(int type, const QString &msg, const QString &fileName, int lineNo) override;
void fileMessage(int type, const QString &msg) override;
void aboutToEval(ProFile *, ProFile *, EvalFileType) override;
void doneWithEval(ProFile *) override;
};
struct Option
{
static EvalHandler evalHandler;
static QMakeGlobals *globals;
static ProFileCache *proFileCache;
static QMakeVfs *vfs;
static QMakeParser *parser;
//simply global convenience
static QString libtool_ext;
static QString pkgcfg_ext;
static QString prf_ext;
static QString prl_ext;
static QString ui_ext;
static QStringList h_ext;
static QStringList cpp_ext;
static QStringList c_ext;
static QString objc_ext;
static QString objcpp_ext;
static QString cpp_moc_ext;
static QString obj_ext;
static QString lex_ext;
static QString yacc_ext;
static QString h_moc_mod;
static QString lex_mod;
static QString yacc_mod;
static QString dir_sep;
static QString pro_ext;
static QString res_ext;
static char field_sep;
enum CmdLineFlags {
QMAKE_CMDLINE_SUCCESS = 0x00,
QMAKE_CMDLINE_SHOW_USAGE = 0x01,
QMAKE_CMDLINE_BAIL = 0x02,
QMAKE_CMDLINE_ERROR = 0x04
};
//both of these must be called..
static int init(int argc = 0, char **argv = nullptr); //parse cmdline
static void prepareProject(const QString &pfile);
static bool postProcessProject(QMakeProject *);
enum StringFixFlags {
FixNone = 0x00,
FixEnvVars = 0x01,
FixPathCanonicalize = 0x02,
FixPathToLocalSeparators = 0x04,
FixPathToTargetSeparators = 0x08,
FixPathToNormalSeparators = 0x10
};
static QString fixString(QString string, uchar flags);
//and convenience functions
inline static QString fixPathToLocalOS(const QString &in, bool fix_env=true, bool canonical=true)
{
uchar flags = FixPathToLocalSeparators;
if(fix_env)
flags |= FixEnvVars;
if(canonical)
flags |= FixPathCanonicalize;
return fixString(in, flags);
}
inline static QString fixPathToTargetOS(const QString &in, bool fix_env=true, bool canonical=true)
{
uchar flags = FixPathToTargetSeparators;
if(fix_env)
flags |= FixEnvVars;
if(canonical)
flags |= FixPathCanonicalize;
return fixString(in, flags);
}
inline static QString normalizePath(const QString &in, bool fix_env=true, bool canonical=true)
{
uchar flags = FixPathToNormalSeparators;
if (fix_env)
flags |= FixEnvVars;
if (canonical)
flags |= FixPathCanonicalize;
return fixString(in, flags);
}
inline static bool hasFileExtension(const QString &str, const QStringList &extensions)
{
for (const QString &ext : extensions)
if (str.endsWith(ext))
return true;
return false;
}
//global qmake mode, can only be in one mode per invocation!
enum QMAKE_MODE { QMAKE_GENERATE_NOTHING,
QMAKE_GENERATE_PROJECT, QMAKE_GENERATE_MAKEFILE, QMAKE_GENERATE_PRL,
QMAKE_SET_PROPERTY, QMAKE_UNSET_PROPERTY, QMAKE_QUERY_PROPERTY };
static QMAKE_MODE qmake_mode;
//all modes
static QFile output;
static QString output_dir;
static int debug_level;
static int warn_level;
static bool recursive;
//QMAKE_*_PROPERTY options
struct prop {
static QStringList properties;
};
//QMAKE_GENERATE_PROJECT options
struct projfile {
static bool do_pwd;
static QStringList project_dirs;
};
//QMAKE_GENERATE_MAKEFILE options
struct mkfile {
static bool do_deps;
static bool do_mocs;
static bool do_dep_heuristics;
static bool do_preprocess;
static int cachefile_depth;
static QStringList project_files;
};
private:
static int parseCommandLine(QStringList &args, QMakeCmdLineParserState &state);
};
inline QString fixEnvVariables(const QString &x) { return Option::fixString(x, Option::FixEnvVars); }
inline QStringList splitPathList(const QString &paths) { return paths.isEmpty() ? QStringList() : paths.split(Option::globals->dirlist_sep); }
QT_END_NAMESPACE
#endif // OPTION_H
|