Warning: That file was not part of the compilation database. It may have many parsing errors.
1 | /**************************************************************************** |
---|---|
2 | ** |
3 | ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). |
4 | ** Contact: http://www.qt-project.org/legal |
5 | ** |
6 | ** This file is part of the qmake application of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:LGPL$ |
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 Digia. For licensing terms and |
14 | ** conditions see http://qt.digia.com/licensing. For further information |
15 | ** use the contact form at http://qt.digia.com/contact-us. |
16 | ** |
17 | ** GNU Lesser General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
19 | ** General Public License version 2.1 as published by the Free Software |
20 | ** Foundation and appearing in the file LICENSE.LGPL included in the |
21 | ** packaging of this file. Please review the following information to |
22 | ** ensure the GNU Lesser General Public License version 2.1 requirements |
23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
24 | ** |
25 | ** In addition, as a special exception, Digia gives you certain additional |
26 | ** rights. These rights are described in the Digia Qt LGPL Exception |
27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
28 | ** |
29 | ** GNU General Public License Usage |
30 | ** Alternatively, this file may be used under the terms of the GNU |
31 | ** General Public License version 3.0 as published by the Free Software |
32 | ** Foundation and appearing in the file LICENSE.GPL included in the |
33 | ** packaging of this file. Please review the following information to |
34 | ** ensure the GNU General Public License version 3.0 requirements will be |
35 | ** met: http://www.gnu.org/copyleft/gpl.html. |
36 | ** |
37 | ** |
38 | ** $QT_END_LICENSE$ |
39 | ** |
40 | ****************************************************************************/ |
41 | |
42 | #include "property.h" |
43 | #include "option.h" |
44 | |
45 | #include <qdir.h> |
46 | #include <qmap.h> |
47 | #include <qsettings.h> |
48 | #include <qstringlist.h> |
49 | #include <stdio.h> |
50 | |
51 | QT_BEGIN_NAMESPACE |
52 | |
53 | QStringList qmake_mkspec_paths(); //project.cpp |
54 | |
55 | QMakeProperty::QMakeProperty() : settings(0) |
56 | { |
57 | } |
58 | |
59 | QMakeProperty::~QMakeProperty() |
60 | { |
61 | delete settings; |
62 | settings = 0; |
63 | } |
64 | |
65 | void QMakeProperty::initSettings() |
66 | { |
67 | if(!settings) { |
68 | settings = new QSettings(QSettings::UserScope, "Trolltech", "QMake"); |
69 | settings->setFallbacksEnabled(false); |
70 | } |
71 | } |
72 | |
73 | QString |
74 | QMakeProperty::keyBase(bool version) const |
75 | { |
76 | if (version) |
77 | return QString(qmake_version()) + "/"; |
78 | return QString(); |
79 | } |
80 | |
81 | QString |
82 | QMakeProperty::value(QString v, bool just_check) |
83 | { |
84 | if(v == "QT_INSTALL_PREFIX") |
85 | return QLibraryInfo::location(QLibraryInfo::PrefixPath); |
86 | else if(v == "QT_INSTALL_DATA") |
87 | return QLibraryInfo::location(QLibraryInfo::DataPath); |
88 | else if(v == "QT_INSTALL_DOCS") |
89 | return QLibraryInfo::location(QLibraryInfo::DocumentationPath); |
90 | else if(v == "QT_INSTALL_HEADERS") |
91 | return QLibraryInfo::location(QLibraryInfo::HeadersPath); |
92 | else if(v == "QT_INSTALL_LIBS") |
93 | return QLibraryInfo::location(QLibraryInfo::LibrariesPath); |
94 | else if(v == "QT_INSTALL_BINS") |
95 | return QLibraryInfo::location(QLibraryInfo::BinariesPath); |
96 | else if(v == "QT_INSTALL_PLUGINS") |
97 | return QLibraryInfo::location(QLibraryInfo::PluginsPath); |
98 | else if(v == "QT_INSTALL_IMPORTS") |
99 | return QLibraryInfo::location(QLibraryInfo::ImportsPath); |
100 | else if(v == "QT_INSTALL_TRANSLATIONS") |
101 | return QLibraryInfo::location(QLibraryInfo::TranslationsPath); |
102 | else if(v == "QT_INSTALL_CONFIGURATION") |
103 | return QLibraryInfo::location(QLibraryInfo::SettingsPath); |
104 | else if(v == "QT_INSTALL_EXAMPLES") |
105 | return QLibraryInfo::location(QLibraryInfo::ExamplesPath); |
106 | else if(v == "QT_INSTALL_DEMOS") |
107 | return QLibraryInfo::location(QLibraryInfo::DemosPath); |
108 | else if(v == "QMAKE_MKSPECS") |
109 | return qmake_mkspec_paths().join(Option::dirlist_sep); |
110 | else if(v == "QMAKE_VERSION") |
111 | return qmake_version(); |
112 | #ifdef QT_VERSION_STR |
113 | else if(v == "QT_VERSION") |
114 | return QT_VERSION_STR; |
115 | #endif |
116 | |
117 | initSettings(); |
118 | int slash = v.lastIndexOf( |
119 | QVariant var = settings->value(keyBase(slash == -1) + v); |
120 | bool ok = var.isValid(); |
121 | QString ret = var.toString(); |
122 | if(!ok) { |
123 | QString version = qmake_version(); |
124 | if(slash != -1) { |
125 | version = v.left(slash-1); |
126 | v = v.mid(slash+1); |
127 | } |
128 | settings->beginGroup(keyBase(false)); |
129 | QStringList subs = settings->childGroups(); |
130 | settings->endGroup(); |
131 | subs.sort(); |
132 | for (int x = subs.count() - 1; x >= 0; x--) { |
133 | QString s = subs[x]; |
134 | if(s.isEmpty() || s > version) |
135 | continue; |
136 | var = settings->value(keyBase(false) + s + "/"+ v); |
137 | ok = var.isValid(); |
138 | ret = var.toString(); |
139 | if (ok) { |
140 | if(!just_check) |
141 | debug_msg(1, "Fell back from %s -> %s for '%s'.", version.toLatin1().constData(), |
142 | s.toLatin1().constData(), v.toLatin1().constData()); |
143 | return ret; |
144 | } |
145 | } |
146 | } |
147 | return ok ? ret : QString(); |
148 | } |
149 | |
150 | bool |
151 | QMakeProperty::hasValue(QString v) |
152 | { |
153 | return !value(v, true).isNull(); |
154 | } |
155 | |
156 | void |
157 | QMakeProperty::setValue(QString var, const QString &val) |
158 | { |
159 | initSettings(); |
160 | settings->setValue(keyBase() + var, val); |
161 | } |
162 | |
163 | void |
164 | QMakeProperty::remove(const QString &var) |
165 | { |
166 | initSettings(); |
167 | settings->remove(keyBase() + var); |
168 | } |
169 | |
170 | bool |
171 | QMakeProperty::exec() |
172 | { |
173 | bool ret = true; |
174 | if(Option::qmake_mode == Option::QMAKE_QUERY_PROPERTY) { |
175 | if(Option::prop::properties.isEmpty()) { |
176 | initSettings(); |
177 | settings->beginGroup(keyBase(false)); |
178 | QStringList subs = settings->childGroups(); |
179 | settings->endGroup(); |
180 | subs.sort(); |
181 | for(int x = subs.count() - 1; x >= 0; x--) { |
182 | QString s = subs[x]; |
183 | if(s.isEmpty()) |
184 | continue; |
185 | settings->beginGroup(keyBase(false) + s); |
186 | QStringList keys = settings->childKeys(); |
187 | settings->endGroup(); |
188 | for(QStringList::ConstIterator it2 = keys.begin(); it2 != keys.end(); it2++) { |
189 | QString ret = settings->value(keyBase(false) + s + "/"+ (*it2)).toString(); |
190 | if(s != qmake_version()) |
191 | fprintf(stdout, "%s/", s.toLatin1().constData()); |
192 | fprintf(stdout, "%s:%s\n", (*it2).toLatin1().constData(), ret.toLatin1().constData()); |
193 | } |
194 | } |
195 | QStringList specialProps; |
196 | specialProps.append("QT_INSTALL_PREFIX"); |
197 | specialProps.append("QT_INSTALL_DATA"); |
198 | specialProps.append("QT_INSTALL_DOCS"); |
199 | specialProps.append("QT_INSTALL_HEADERS"); |
200 | specialProps.append("QT_INSTALL_LIBS"); |
201 | specialProps.append("QT_INSTALL_BINS"); |
202 | specialProps.append("QT_INSTALL_PLUGINS"); |
203 | specialProps.append("QT_INSTALL_IMPORTS"); |
204 | specialProps.append("QT_INSTALL_TRANSLATIONS"); |
205 | specialProps.append("QT_INSTALL_CONFIGURATION"); |
206 | specialProps.append("QT_INSTALL_EXAMPLES"); |
207 | specialProps.append("QT_INSTALL_DEMOS"); |
208 | specialProps.append("QMAKE_MKSPECS"); |
209 | specialProps.append("QMAKE_VERSION"); |
210 | #ifdef QT_VERSION_STR |
211 | specialProps.append("QT_VERSION"); |
212 | #endif |
213 | foreach (QString prop, specialProps) |
214 | fprintf(stdout, "%s:%s\n", prop.toLatin1().constData(), value(prop).toLatin1().constData()); |
215 | return true; |
216 | } |
217 | for(QStringList::ConstIterator it = Option::prop::properties.begin(); |
218 | it != Option::prop::properties.end(); it++) { |
219 | if(Option::prop::properties.count() > 1) |
220 | fprintf(stdout, "%s:", (*it).toLatin1().constData()); |
221 | if(!hasValue((*it))) { |
222 | ret = false; |
223 | fprintf(stdout, "**Unknown**\n"); |
224 | } else { |
225 | fprintf(stdout, "%s\n", value((*it)).toLatin1().constData()); |
226 | } |
227 | } |
228 | } else if(Option::qmake_mode == Option::QMAKE_SET_PROPERTY) { |
229 | for(QStringList::ConstIterator it = Option::prop::properties.begin(); |
230 | it != Option::prop::properties.end(); it++) { |
231 | QString var = (*it); |
232 | it++; |
233 | if(it == Option::prop::properties.end()) { |
234 | ret = false; |
235 | break; |
236 | } |
237 | if(!var.startsWith(".")) |
238 | setValue(var, (*it)); |
239 | } |
240 | } else if(Option::qmake_mode == Option::QMAKE_UNSET_PROPERTY) { |
241 | for(QStringList::ConstIterator it = Option::prop::properties.begin(); |
242 | it != Option::prop::properties.end(); it++) { |
243 | QString var = (*it); |
244 | if(!var.startsWith(".")) |
245 | remove(var); |
246 | } |
247 | } |
248 | return ret; |
249 | } |
250 | |
251 | QT_END_NAMESPACE |
252 |
Warning: That file was not part of the compilation database. It may have many parsing errors.