1
/****************************************************************************
2
**
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
6
**
7
** This file is part of the qmake application of the Qt Toolkit.
8
**
9
** $QT_BEGIN_LICENSE:LGPL$
10
** GNU Lesser General Public License Usage
11
** This file may be used under the terms of the GNU Lesser General Public
12
** License version 2.1 as published by the Free Software Foundation and
13
** appearing in the file LICENSE.LGPL included in the packaging of this
14
** file. Please review the following information to ensure the GNU Lesser
15
** General Public License version 2.1 requirements will be met:
16
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17
**
18
** In addition, as a special exception, Nokia gives you certain additional
19
** rights. These rights are described in the Nokia Qt LGPL Exception
20
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21
**
22
** GNU General Public License Usage
23
** Alternatively, this file may be used under the terms of the GNU General
24
** Public License version 3.0 as published by the Free Software Foundation
25
** and appearing in the file LICENSE.GPL included in the packaging of this
26
** file. Please review the following information to ensure the GNU General
27
** Public License version 3.0 requirements will be met:
28
** http://www.gnu.org/copyleft/gpl.html.
29
**
30
** Other Usage
31
** Alternatively, this file may be used in accordance with the terms and
32
** conditions contained in a signed written agreement between you and Nokia.
33
**
34
**
35
**
36
**
37
**
38
** $QT_END_LICENSE$
39
**
40
****************************************************************************/
41
42
#ifndef OPTION_H
43
#define OPTION_H
44
45
#include "project.h"
46
#include <qstring.h>
47
#include <qstringlist.h>
48
#include <qfile.h>
49
50
QT_BEGIN_NAMESPACE
51
52
#define QMAKE_VERSION_MAJOR 2
53
#define QMAKE_VERSION_MINOR 1
54
#define QMAKE_VERSION_PATCH 0
55
const char *qmake_version();
56
57
QString qmake_getpwd();
58
bool qmake_setpwd(const QString &p);
59
60
#define debug_msg if(Option::debug_level) debug_msg_internal
61
void debug_msg_internal(int level, const char *fmt, ...); //don't call directly, use debug_msg
62
enum QMakeWarn {
63
    WarnNone    = 0x00,
64
    WarnParser  = 0x01,
65
    WarnLogic   = 0x02,
66
    WarnDeprecated = 0x04,
67
    WarnAll     = 0xFF
68
};
69
void warn_msg(QMakeWarn t, const char *fmt, ...);
70
71
struct Option
72
{
73
    //simply global convenience
74
    static QString js_ext;
75
    static QString libtool_ext;
76
    static QString pkgcfg_ext;
77
    static QString prf_ext;
78
    static QString prl_ext;
79
    static QString ui_ext;
80
    static QStringList h_ext;
81
    static QStringList cpp_ext;
82
    static QStringList c_ext;
83
    static QString h_moc_ext;
84
    static QString cpp_moc_ext;
85
    static QString obj_ext;
86
    static QString lex_ext;
87
    static QString yacc_ext;
88
    static QString h_moc_mod;
89
    static QString cpp_moc_mod;
90
    static QString lex_mod;
91
    static QString yacc_mod;
92
    static QString dir_sep;
93
    static QString dirlist_sep;
94
    static QString sysenv_mod;
95
    static QString pro_ext;
96
    static QString mmp_ext;
97
    static QString res_ext;
98
    static char field_sep;
99
    static const char *application_argv0;
100
101
    enum CmdLineFlags {
102
        QMAKE_CMDLINE_SUCCESS       = 0x00,
103
        QMAKE_CMDLINE_SHOW_USAGE    = 0x01,
104
        QMAKE_CMDLINE_BAIL          = 0x02,
105
        QMAKE_CMDLINE_ERROR         = 0x04
106
    };
107
108
    //both of these must be called..
109
    static int init(int argc=0, char **argv=0); //parse cmdline
110
    static void applyHostMode();
111
    static bool postProcessProject(QMakeProject *);
112
113
    enum StringFixFlags {
114
        FixNone                 = 0x00,
115
        FixEnvVars              = 0x01,
116
        FixPathCanonicalize     = 0x02,
117
        FixPathToLocalSeparators  = 0x04,
118
        FixPathToTargetSeparators = 0x08
119
    };
120
    static QString fixString(QString string, uchar flags);
121
122
    //and convenience functions
123
    inline static QString fixPathToLocalOS(const QString &in, bool fix_env=true, bool canonical=true)
124
    {
125
        uchar flags = FixPathToLocalSeparators;
126
        if(fix_env)
127
            flags |= FixEnvVars;
128
        if(canonical)
129
            flags |= FixPathCanonicalize;
130
        return fixString(in, flags);
131
    }
132
    inline static QString fixPathToTargetOS(const QString &in, bool fix_env=true, bool canonical=true)
133
    {
134
        uchar flags = FixPathToTargetSeparators;
135
        if(fix_env)
136
            flags |= FixEnvVars;
137
        if(canonical)
138
            flags |= FixPathCanonicalize;
139
        return fixString(in, flags);
140
    }
141
142
    inline static bool hasFileExtension(const QString &str, const QStringList &extensions)
143
    {
144
        foreach (const QString &ext, extensions)
145
            if (str.endsWith(ext))
146
                return true;
147
        return false;
148
    }
149
150
    //global qmake mode, can only be in one mode per invocation!
151
    enum QMAKE_MODE { QMAKE_GENERATE_NOTHING,
152
                      QMAKE_GENERATE_PROJECT, QMAKE_GENERATE_MAKEFILE, QMAKE_GENERATE_PRL,
153
                      QMAKE_SET_PROPERTY, QMAKE_UNSET_PROPERTY, QMAKE_QUERY_PROPERTY };
154
    static QMAKE_MODE qmake_mode;
155
156
    //all modes
157
    static QString qmake_abslocation;
158
    static QFile output;
159
    static QString output_dir;
160
    static int debug_level;
161
    static int warn_level;
162
    enum QMAKE_RECURSIVE { QMAKE_RECURSIVE_DEFAULT, QMAKE_RECURSIVE_YES, QMAKE_RECURSIVE_NO };
163
    static QMAKE_RECURSIVE recursive;
164
    static QStringList before_user_vars, after_user_vars, user_configs, after_user_configs;
165
    enum HOST_MODE { HOST_UNKNOWN_MODE, HOST_UNIX_MODE, HOST_WIN_MODE, HOST_MACX_MODE };
166
    static HOST_MODE host_mode;
167
    enum TARG_MODE { TARG_UNKNOWN_MODE, TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE,
168
                     TARG_SYMBIAN_MODE, TARG_INTEGRITY_MODE };
169
    static TARG_MODE target_mode;
170
    static bool target_mode_overridden;
171
    static QString user_template, user_template_prefix;
172
    static QStringList shellPath;
173
174
    //QMAKE_*_PROPERTY options
175
    struct prop {
176
        static QStringList properties;
177
    };
178
179
    //QMAKE_GENERATE_PROJECT options
180
    struct projfile {
181
        static bool do_pwd;
182
        static QStringList project_dirs;
183
    };
184
185
    //QMAKE_GENERATE_MAKEFILE options
186
    struct mkfile {
187
        static QString qmakespec;
188
        static bool do_cache;
189
        static bool do_deps;
190
        static bool do_mocs;
191
        static bool do_dep_heuristics;
192
        static bool do_preprocess;
193
        static bool do_stub_makefile;
194
        static QString cachefile;
195
        static int cachefile_depth;
196
        static QStringList project_files;
197
        static QString qmakespec_commandline;
198
    };
199
200
private:
201
    static int parseCommandLine(int, char **, int=0);
202
};
203
204
inline QString fixEnvVariables(const QString &x) { return Option::fixString(x, Option::FixEnvVars); }
205
inline QStringList splitPathList(const QString &paths) { return paths.split(Option::dirlist_sep); }
206
207
// this is a stripped down version of the one found in QtCore
208
class QLibraryInfo
209
{
210
public:
211
    enum LibraryLocation
212
    {
213
        PrefixPath,
214
        DocumentationPath,
215
        HeadersPath,
216
        LibrariesPath,
217
        BinariesPath,
218
        PluginsPath,
219
        DataPath,
220
        TranslationsPath,
221
        SettingsPath,
222
        DemosPath,
223
        ExamplesPath,
224
        ImportsPath
225
    };
226
    static QString location(LibraryLocation);
227
};
228
229
QT_END_NAMESPACE
230
231
#endif // OPTION_H