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 META_H
30#define META_H
31
32#include "project.h"
33
34#include <qhash.h>
35#include <qstringlist.h>
36#include <qstring.h>
37
38QT_BEGIN_NAMESPACE
39
40class QMakeProject;
41
42class QMakeMetaInfo
43{
44 ProValueMap vars;
45 static QHash<QString, ProValueMap> cache_vars;
46public:
47
48 // These functions expect the path to be normalized
49 static QString checkLib(const QString &lib);
50 bool readLib(const QString &meta_file);
51
52 bool isEmpty(const ProKey &v);
53 ProStringList &values(const ProKey &v);
54 ProString first(const ProKey &v);
55 ProValueMap &variables();
56};
57
58inline bool QMakeMetaInfo::isEmpty(const ProKey &v)
59{ return !vars.contains(v) || vars[v].isEmpty(); }
60
61inline ProStringList &QMakeMetaInfo::values(const ProKey &v)
62{ return vars[v]; }
63
64inline ProString QMakeMetaInfo::first(const ProKey &v)
65{
66#if defined(Q_CC_SUN) && (__SUNPRO_CC == 0x500) || defined(Q_CC_HP)
67 // workaround for Sun WorkShop 5.0 bug fixed in Forte 6
68 if (isEmpty(v))
69 return ProString("");
70 else
71 return vars[v].first();
72#else
73 return isEmpty(v) ? ProString("") : vars[v].first();
74#endif
75}
76
77inline ProValueMap &QMakeMetaInfo::variables()
78{ return vars; }
79
80QT_END_NAMESPACE
81
82#endif // META_H
83