profileevaluator.h 5.13 KB
Newer Older
1
/**************************************************************************
con's avatar
con committed
2
3
4
**
** This file is part of Qt Creator
**
hjk's avatar
hjk committed
5
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
con's avatar
con committed
6
**
7
** Contact: Nokia Corporation (qt-info@nokia.com)
con's avatar
con committed
8
**
9
** Commercial Usage
10
**
11
12
13
14
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
15
**
16
** GNU Lesser General Public License Usage
17
**
18
19
20
21
22
23
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
**
25
** If you are unsure which license is appropriate for your use, please
hjk's avatar
hjk committed
26
** contact the sales department at http://qt.nokia.com/contact.
con's avatar
con committed
27
**
28
**************************************************************************/
29

con's avatar
con committed
30
31
32
33
34
35
36
#ifndef PROFILEEVALUATOR_H
#define PROFILEEVALUATOR_H

#include "proitems.h"

#include <QtCore/QHash>
#include <QtCore/QStringList>
37
#ifdef PROEVALUATOR_THREAD_SAFE
38
39
40
# include <QtCore/QMutex>
# include <QtCore/QWaitCondition>
#endif
con's avatar
con committed
41
42
43

QT_BEGIN_NAMESPACE

44
struct ProFileOption;
45
class ProFileParser;
46

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class ProFileEvaluatorHandler
{
public:
    // qmake/project configuration error
    virtual void configError(const QString &msg) = 0;
    // Some error during evaluation
    virtual void evalError(const QString &filename, int lineNo, const QString &msg) = 0;
    // error() and message() from .pro file
    virtual void fileMessage(const QString &msg) = 0;

    enum EvalFileType { EvalProjectFile, EvalIncludeFile, EvalConfigFile, EvalFeatureFile, EvalAuxFile };
    virtual void aboutToEval(ProFile *parent, ProFile *proFile, EvalFileType type) = 0;
    virtual void doneWithEval(ProFile *parent) = 0;
};


con's avatar
con committed
63
64
class ProFileEvaluator
{
65
    class Private;
66

67
public:
68
69
70
71
72
    struct FunctionDef {
        QString string;
        int offset;
    };

73
    struct FunctionDefs {
74
75
        QHash<ProString, FunctionDef> testFunctions;
        QHash<ProString, FunctionDef> replaceFunctions;
76
77
    };

con's avatar
con committed
78
79
80
81
82
83
84
85
    enum TemplateType {
        TT_Unknown = 0,
        TT_Application,
        TT_Library,
        TT_Script,
        TT_Subdirs
    };

86
87
88
    // Call this from a concurrency-free context
    static void initialize();

89
    ProFileEvaluator(ProFileOption *option, ProFileParser *parser, ProFileEvaluatorHandler *handler);
90
    ~ProFileEvaluator();
con's avatar
con committed
91

92
    ProFileEvaluator::TemplateType templateType() const;
93
    void setCumulative(bool on); // Default is true!
94
    void setOutputDir(const QString &dir); // Default is empty
95
96
97

    // -nocache, -cache, -spec, QMAKESPEC
    // -set persistent value
98
    void setConfigCommandLineArguments(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs);
99
    void setParsePreAndPostFiles(bool on); // Default is true
con's avatar
con committed
100
101
102

    bool accept(ProFile *pro);

Oswald Buddenhagen's avatar
Oswald Buddenhagen committed
103
    bool contains(const QString &variableName) const;
104
    QString value(const QString &variableName) const;
con's avatar
con committed
105
106
    QStringList values(const QString &variableName) const;
    QStringList values(const QString &variableName, const ProFile *pro) const;
107
108
109
110
    QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const;
    QStringList absoluteFileValues(
            const QString &variable, const QString &baseDirectory, const QStringList &searchDirs,
            const ProFile *pro) const;
con's avatar
con committed
111
112
113
114
    QString propertyValue(const QString &val) const;

private:
    Private *d;
115

116
    friend struct ProFileOption;
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
// This struct is from qmake, but we are not using everything.
struct ProFileOption
{
    ProFileOption();
    ~ProFileOption();

    //simply global convenience
    //QString libtool_ext;
    //QString pkgcfg_ext;
    //QString prf_ext;
    //QString prl_ext;
    //QString ui_ext;
    //QStringList h_ext;
    //QStringList cpp_ext;
    //QString h_moc_ext;
    //QString cpp_moc_ext;
    //QString obj_ext;
    //QString lex_ext;
    //QString yacc_ext;
    //QString h_moc_mod;
    //QString cpp_moc_mod;
    //QString lex_mod;
    //QString yacc_mod;
    QString dir_sep;
    QString dirlist_sep;
    QString qmakespec;
    QString cachefile;
    QHash<QString, QString> properties;

    enum TARG_MODE { TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE, TARG_MAC9_MODE, TARG_QNX6_MODE };
    TARG_MODE target_mode;
    //QString pro_ext;
    //QString res_ext;

  private:
    friend class ProFileEvaluator;
    friend class ProFileEvaluator::Private;
Oswald Buddenhagen's avatar
Oswald Buddenhagen committed
156
    QHash<ProString, ProStringList> base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf
157
158
    ProFileEvaluator::FunctionDefs base_functions;
    QStringList feature_roots;
159
    QString qmakespec_name;
160
161
162
163
164
#ifdef PROEVALUATOR_THREAD_SAFE
    QMutex mutex;
    QWaitCondition cond;
    bool base_inProgress;
#endif
con's avatar
con committed
165
166
};

Oswald Buddenhagen's avatar
Oswald Buddenhagen committed
167
168
Q_DECLARE_TYPEINFO(ProFileEvaluator::FunctionDef, Q_MOVABLE_TYPE);

ck's avatar
ck committed
169
170
QT_END_NAMESPACE

con's avatar
con committed
171
#endif // PROFILEEVALUATOR_H