clean up build pass project initialization
[profile/ivi/qtbase.git] / qmake / option.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the qmake application of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
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 QStringList mkspecPaths();
112     static bool prepareProject(const QString &pfile);
113     static bool postProcessProject(QMakeProject *);
114
115     enum StringFixFlags {
116         FixNone                 = 0x00,
117         FixEnvVars              = 0x01,
118         FixPathCanonicalize     = 0x02,
119         FixPathToLocalSeparators  = 0x04,
120         FixPathToTargetSeparators = 0x08,
121         FixPathToNormalSeparators = 0x10
122     };
123     static QString fixString(QString string, uchar flags);
124
125     //and convenience functions
126     inline static QString fixPathToLocalOS(const QString &in, bool fix_env=true, bool canonical=true)
127     {
128         uchar flags = FixPathToLocalSeparators;
129         if(fix_env)
130             flags |= FixEnvVars;
131         if(canonical)
132             flags |= FixPathCanonicalize;
133         return fixString(in, flags);
134     }
135     inline static QString fixPathToTargetOS(const QString &in, bool fix_env=true, bool canonical=true)
136     {
137         uchar flags = FixPathToTargetSeparators;
138         if(fix_env)
139             flags |= FixEnvVars;
140         if(canonical)
141             flags |= FixPathCanonicalize;
142         return fixString(in, flags);
143     }
144     inline static QString normalizePath(const QString &in, bool fix_env=true, bool canonical=true)
145     {
146         uchar flags = FixPathToNormalSeparators;
147         if (fix_env)
148             flags |= FixEnvVars;
149         if (canonical)
150             flags |= FixPathCanonicalize;
151         return fixString(in, flags);
152     }
153
154     inline static bool hasFileExtension(const QString &str, const QStringList &extensions)
155     {
156         foreach (const QString &ext, extensions)
157             if (str.endsWith(ext))
158                 return true;
159         return false;
160     }
161
162     //global qmake mode, can only be in one mode per invocation!
163     enum QMAKE_MODE { QMAKE_GENERATE_NOTHING,
164                       QMAKE_GENERATE_PROJECT, QMAKE_GENERATE_MAKEFILE, QMAKE_GENERATE_PRL,
165                       QMAKE_SET_PROPERTY, QMAKE_UNSET_PROPERTY, QMAKE_QUERY_PROPERTY };
166     static QMAKE_MODE qmake_mode;
167
168     //all modes
169     static QString qmake_abslocation;
170     static QFile output;
171     static QString output_dir;
172     static int debug_level;
173     static int warn_level;
174     enum QMAKE_RECURSIVE { QMAKE_RECURSIVE_DEFAULT, QMAKE_RECURSIVE_YES, QMAKE_RECURSIVE_NO };
175     static QMAKE_RECURSIVE recursive;
176     static QStringList before_user_vars, after_user_vars, user_configs;
177     enum HOST_MODE { HOST_UNKNOWN_MODE, HOST_UNIX_MODE, HOST_WIN_MODE, HOST_MACX_MODE };
178     static HOST_MODE host_mode;
179     enum TARG_MODE { TARG_UNKNOWN_MODE, TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE,
180                      TARG_INTEGRITY_MODE };
181     static TARG_MODE target_mode;
182     static bool target_mode_overridden;
183     static QString user_template, user_template_prefix;
184     static QStringList shellPath;
185
186     //QMAKE_*_PROPERTY options
187     struct prop {
188         static QStringList properties;
189     };
190
191     //QMAKE_GENERATE_PROJECT options
192     struct projfile {
193         static bool do_pwd;
194         static QStringList project_dirs;
195     };
196
197     //QMAKE_GENERATE_MAKEFILE options
198     struct mkfile {
199         static QString qmakespec;
200         static bool do_cache;
201         static bool do_deps;
202         static bool do_mocs;
203         static bool do_dep_heuristics;
204         static bool do_preprocess;
205         static bool do_stub_makefile;
206         static QString project_root;
207         static QString project_build_root;
208         static QString cachefile;
209         static int cachefile_depth;
210         static QStringList project_files;
211         static QString qmakespec_commandline;
212     };
213
214 private:
215     static int parseCommandLine(int, char **, int=0);
216     static bool resolveSpec(QString *spec);
217 };
218
219 inline QString fixEnvVariables(const QString &x) { return Option::fixString(x, Option::FixEnvVars); }
220 inline QStringList splitPathList(const QString &paths) { return paths.split(Option::dirlist_sep); }
221
222 // this is a stripped down version of the one found in QtCore
223 class QLibraryInfo
224 {
225 public:
226     enum LibraryLocation
227     {
228         PrefixPath,
229         DocumentationPath,
230         HeadersPath,
231         LibrariesPath,
232         BinariesPath,
233         PluginsPath,
234         DataPath,
235         TranslationsPath,
236         SettingsPath,
237         ExamplesPath,
238         ImportsPath,
239         TestsPath
240     };
241     static QString location(LibraryLocation);
242 };
243
244 QT_END_NAMESPACE
245
246 #endif // OPTION_H