Line | Source Code | Coverage |
---|
1 | /**************************************************************************** | - |
2 | ** | - |
3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
4 | ** Contact: http://www.qt-project.org/legal | - |
5 | ** | - |
6 | ** This file is part of the QtCore module 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 "qdir.h" | - |
43 | #include "qfile.h" | - |
44 | #include "qsettings.h" | - |
45 | #include "qlibraryinfo.h" | - |
46 | #include "qscopedpointer.h" | - |
47 | | - |
48 | #ifdef QT_BUILD_QMAKE | - |
49 | QT_BEGIN_NAMESPACE | - |
50 | extern QString qt_libraryInfoFile(); | - |
51 | QT_END_NAMESPACE | - |
52 | #elif defined(QT_BOOTSTRAPPED) | - |
53 | QString qt_libraryInfoFile() | - |
54 | { | - |
55 | QString qmakeAbsoluteLocation = QLatin1String(QT_QMAKE_LOCATION); | - |
56 | if (!qmakeAbsoluteLocation.isEmpty()) | - |
57 | return QDir(QFileInfo(qmakeAbsoluteLocation).absolutePath()).filePath(QLatin1String("qt.conf")); | - |
58 | return QString(); | - |
59 | } | - |
60 | #else | - |
61 | # include "qcoreapplication.h" | - |
62 | #endif | - |
63 | | - |
64 | #ifdef Q_OS_MAC | - |
65 | # include "private/qcore_mac_p.h" | - |
66 | #endif | - |
67 | | - |
68 | #include "qconfig.cpp" | - |
69 | | - |
70 | QT_BEGIN_NAMESPACE | - |
71 | | - |
72 | extern void qDumpCPUFeatures(); // in qsimd.cpp | - |
73 | | - |
74 | #ifndef QT_NO_SETTINGS | - |
75 | | - |
76 | struct QLibrarySettings | - |
77 | { | - |
78 | QLibrarySettings(); | - |
79 | QScopedPointer<QSettings> settings; | - |
80 | #ifdef QT_BOOTSTRAPPED | - |
81 | bool haveEffectivePaths; | - |
82 | bool havePaths; | - |
83 | #endif | - |
84 | }; | - |
85 | Q_GLOBAL_STATIC(QLibrarySettings, qt_library_settings) never executed: delete x; executed: return thisGlobalStatic.pointer.load(); Execution Count:371 partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x) no Evaluation Count:0 | yes Evaluation Count:26 |
evaluated: !thisGlobalStatic.pointer.load() yes Evaluation Count:26 | yes Evaluation Count:345 |
partially evaluated: !thisGlobalStatic.destroyed yes Evaluation Count:26 | no Evaluation Count:0 |
| 0-371 |
86 | | - |
87 | class QLibraryInfoPrivate | - |
88 | { | - |
89 | public: | - |
90 | static QSettings *findConfiguration(); | - |
91 | #ifndef QT_BOOTSTRAPPED | - |
92 | static void cleanup() | - |
93 | { | - |
94 | QLibrarySettings *ls = qt_library_settings(); executed (the execution status of this line is deduced): QLibrarySettings *ls = qt_library_settings(); | - |
95 | if (ls) partially evaluated: ls yes Evaluation Count:210 | no Evaluation Count:0 |
| 0-210 |
96 | ls->settings.reset(0); executed: ls->settings.reset(0); Execution Count:210 | 210 |
97 | } executed: } Execution Count:210 | 210 |
98 | #else | - |
99 | static bool haveGroup(QLibraryInfo::PathGroup group) | - |
100 | { | - |
101 | QLibrarySettings *ls = qt_library_settings(); | - |
102 | return ls ? (group == QLibraryInfo::EffectivePaths | - |
103 | ? ls->haveEffectivePaths : ls->havePaths) : false; | - |
104 | } | - |
105 | #endif | - |
106 | static QSettings *configuration() | - |
107 | { | - |
108 | QLibrarySettings *ls = qt_library_settings(); executed (the execution status of this line is deduced): QLibrarySettings *ls = qt_library_settings(); | - |
109 | return ls ? ls->settings.data() : 0; executed: return ls ? ls->settings.data() : 0; Execution Count:161 | 161 |
110 | } | - |
111 | }; | - |
112 | | - |
113 | QLibrarySettings::QLibrarySettings() | - |
114 | : settings(QLibraryInfoPrivate::findConfiguration()) | - |
115 | { | - |
116 | #ifndef QT_BOOTSTRAPPED | - |
117 | qAddPostRoutine(QLibraryInfoPrivate::cleanup); executed (the execution status of this line is deduced): qAddPostRoutine(QLibraryInfoPrivate::cleanup); | - |
118 | bool haveEffectivePaths; executed (the execution status of this line is deduced): bool haveEffectivePaths; | - |
119 | bool havePaths; executed (the execution status of this line is deduced): bool havePaths; | - |
120 | #endif | - |
121 | if (settings) { partially evaluated: settings no Evaluation Count:0 | yes Evaluation Count:26 |
| 0-26 |
122 | // This code needs to be in the regular library, as otherwise a qt.conf that | - |
123 | // works for qmake would break things for dynamically built Qt tools. | - |
124 | QStringList children = settings->childGroups(); never executed (the execution status of this line is deduced): QStringList children = settings->childGroups(); | - |
125 | haveEffectivePaths = children.contains(QLatin1String("EffectivePaths")); never executed (the execution status of this line is deduced): haveEffectivePaths = children.contains(QLatin1String("EffectivePaths")); | - |
126 | // Backwards compat: an existing but empty file is claimed to contain the Paths section. | - |
127 | havePaths = !haveEffectivePaths || children.contains(QLatin1String("Paths")); never evaluated: !haveEffectivePaths never evaluated: children.contains(QLatin1String("Paths")) | 0 |
128 | #ifndef QT_BOOTSTRAPPED | - |
129 | if (!havePaths) never evaluated: !havePaths | 0 |
130 | settings.reset(0); never executed: settings.reset(0); | 0 |
131 | #else | - |
132 | } else { | - |
133 | haveEffectivePaths = false; | - |
134 | havePaths = false; | - |
135 | #endif | - |
136 | } | 0 |
137 | } executed: } Execution Count:26 | 26 |
138 | | - |
139 | QSettings *QLibraryInfoPrivate::findConfiguration() | - |
140 | { | - |
141 | QString qtconfig = QStringLiteral(":/qt/etc/qt.conf"); executed (the execution status of this line is deduced): QString qtconfig = QString::fromUtf8("" ":/qt/etc/qt.conf" "", sizeof(":/qt/etc/qt.conf") - 1); | - |
142 | #ifdef QT_BOOTSTRAPPED | - |
143 | if(!QFile::exists(qtconfig)) | - |
144 | qtconfig = qt_libraryInfoFile(); | - |
145 | #else | - |
146 | if (!QFile::exists(qtconfig) && QCoreApplication::instance()) { partially evaluated: !QFile::exists(qtconfig) yes Evaluation Count:26 | no Evaluation Count:0 |
evaluated: QCoreApplication::instance() yes Evaluation Count:23 | yes Evaluation Count:3 |
| 0-26 |
147 | #ifdef Q_OS_MAC | - |
148 | CFBundleRef bundleRef = CFBundleGetMainBundle(); | - |
149 | if (bundleRef) { | - |
150 | QCFType<CFURLRef> urlRef = CFBundleCopyResourceURL(bundleRef, | - |
151 | QCFString(QLatin1String("qt.conf")), | - |
152 | 0, | - |
153 | 0); | - |
154 | if (urlRef) { | - |
155 | QCFString path = CFURLCopyFileSystemPath(urlRef, kCFURLPOSIXPathStyle); | - |
156 | qtconfig = QDir::cleanPath(path); | - |
157 | } | - |
158 | } | - |
159 | if (qtconfig.isEmpty()) | - |
160 | #endif | - |
161 | { | - |
162 | QDir pwd(QCoreApplication::applicationDirPath()); executed (the execution status of this line is deduced): QDir pwd(QCoreApplication::applicationDirPath()); | - |
163 | qtconfig = pwd.filePath(QLatin1String("qt.conf")); executed (the execution status of this line is deduced): qtconfig = pwd.filePath(QLatin1String("qt.conf")); | - |
164 | } | - |
165 | } executed: } Execution Count:23 | 23 |
166 | #endif | - |
167 | if (QFile::exists(qtconfig)) partially evaluated: QFile::exists(qtconfig) no Evaluation Count:0 | yes Evaluation Count:26 |
| 0-26 |
168 | return new QSettings(qtconfig, QSettings::IniFormat); never executed: return new QSettings(qtconfig, QSettings::IniFormat); | 0 |
169 | return 0; //no luck executed: return 0; Execution Count:26 | 26 |
170 | } | - |
171 | | - |
172 | #endif // QT_NO_SETTINGS | - |
173 | | - |
174 | /*! | - |
175 | \class QLibraryInfo | - |
176 | \inmodule QtCore | - |
177 | \brief The QLibraryInfo class provides information about the Qt library. | - |
178 | | - |
179 | Many pieces of information are established when Qt is configured and built. | - |
180 | This class provides an abstraction for accessing that information. | - |
181 | By using the static functions of this class, an application can obtain | - |
182 | information about the instance of the Qt library which the application | - |
183 | is using at run-time. | - |
184 | | - |
185 | You can also use a \c qt.conf file to override the hard-coded paths | - |
186 | that are compiled into the Qt library. For more information, see | - |
187 | the \l {Using qt.conf} documentation. | - |
188 | | - |
189 | \sa QSysInfo, {Using qt.conf} | - |
190 | */ | - |
191 | | - |
192 | #ifndef QT_BOOTSTRAPPED | - |
193 | | - |
194 | /*! | - |
195 | \internal | - |
196 | | - |
197 | You cannot create a QLibraryInfo, instead only the static functions are available to query | - |
198 | information. | - |
199 | */ | - |
200 | | - |
201 | QLibraryInfo::QLibraryInfo() | - |
202 | { } | - |
203 | | - |
204 | /*! | - |
205 | Returns the person to whom this build of Qt is licensed. | - |
206 | | - |
207 | \sa licensedProducts() | - |
208 | */ | - |
209 | | - |
210 | QString | - |
211 | QLibraryInfo::licensee() | - |
212 | { | - |
213 | const char *str = QT_CONFIGURE_LICENSEE; never executed (the execution status of this line is deduced): const char *str = qt_configure_licensee_str + 12;; | - |
214 | return QString::fromLocal8Bit(str); never executed: return QString::fromLocal8Bit(str); | 0 |
215 | } | - |
216 | | - |
217 | /*! | - |
218 | Returns the products that the license for this build of Qt has access to. | - |
219 | | - |
220 | \sa licensee() | - |
221 | */ | - |
222 | | - |
223 | QString | - |
224 | QLibraryInfo::licensedProducts() | - |
225 | { | - |
226 | const char *str = QT_CONFIGURE_LICENSED_PRODUCTS; never executed (the execution status of this line is deduced): const char *str = qt_configure_licensed_products_str + 12;; | - |
227 | return QString::fromLatin1(str); never executed: return QString::fromLatin1(str); | 0 |
228 | } | - |
229 | | - |
230 | /*! | - |
231 | \since 4.6 | - |
232 | Returns the installation date for this build of Qt. The install date will | - |
233 | usually be the last time that Qt sources were configured. | - |
234 | */ | - |
235 | #ifndef QT_NO_DATESTRING | - |
236 | QDate | - |
237 | QLibraryInfo::buildDate() | - |
238 | { | - |
239 | return QDate::fromString(QString::fromLatin1(qt_configure_installation + 12), Qt::ISODate); never executed: return QDate::fromString(QString::fromLatin1(qt_configure_installation + 12), Qt::ISODate); | 0 |
240 | } | - |
241 | #endif //QT_NO_DATESTRING | - |
242 | | - |
243 | /*! | - |
244 | \since 5.0 | - |
245 | Returns true if this build of Qt was built with debugging enabled, or | - |
246 | false if it was built in release mode. | - |
247 | */ | - |
248 | bool | - |
249 | QLibraryInfo::isDebugBuild() | - |
250 | { | - |
251 | #ifdef QT_DEBUG | - |
252 | return true; | - |
253 | #else | - |
254 | return false; executed: return false; Execution Count:1 | 1 |
255 | #endif | - |
256 | } | - |
257 | | - |
258 | #endif // QT_BOOTSTRAPPED | - |
259 | | - |
260 | /* | - |
261 | * To add a new entry in QLibrary::LibraryLocation, add it to the enum above the bootstrapped values and: | - |
262 | * - add its relative path in the qtConfEntries[] array below | - |
263 | * (the key is what appears in a qt.conf file) | - |
264 | * - add a property name in qmake/property.cpp propList[] array | - |
265 | * (it's used with qmake -query) | - |
266 | * - add to qt_config.prf, qt_module.prf, qt_module_fwdpri.prf | - |
267 | */ | - |
268 | | - |
269 | static const struct { | - |
270 | char key[19], value[13]; | - |
271 | } qtConfEntries[] = { | - |
272 | { "Prefix", "." }, | - |
273 | { "Documentation", "doc" }, // should be ${Data}/doc | - |
274 | { "Headers", "include" }, | - |
275 | { "Libraries", "lib" }, | - |
276 | #ifdef Q_OS_WIN | - |
277 | { "LibraryExecutables", "bin" }, | - |
278 | #else | - |
279 | { "LibraryExecutables", "libexec" }, // should be ${ArchData}/libexec | - |
280 | #endif | - |
281 | { "Binaries", "bin" }, | - |
282 | { "Plugins", "plugins" }, // should be ${ArchData}/plugins | - |
283 | { "Imports", "imports" }, // should be ${ArchData}/imports | - |
284 | { "Qml2Imports", "qml" }, // should be ${ArchData}/qml | - |
285 | { "ArchData", "." }, | - |
286 | { "Data", "." }, | - |
287 | { "Translations", "translations" }, // should be ${Data}/translations | - |
288 | { "Examples", "examples" }, | - |
289 | { "Tests", "tests" }, | - |
290 | #ifdef QT_BOOTSTRAPPED | - |
291 | { "Sysroot", "" }, | - |
292 | { "HostPrefix", "" }, | - |
293 | { "HostBinaries", "bin" }, | - |
294 | { "HostData", "." }, | - |
295 | { "TargetSpec", "" }, | - |
296 | { "HostSpec", "" }, | - |
297 | #endif | - |
298 | }; | - |
299 | | - |
300 | /*! | - |
301 | Returns the location specified by \a loc. | - |
302 | | - |
303 | */ | - |
304 | QString | - |
305 | QLibraryInfo::location(LibraryLocation loc) | - |
306 | { | - |
307 | #ifdef QT_BOOTSTRAPPED | - |
308 | QString ret = rawLocation(loc, FinalPaths); | - |
309 | | - |
310 | // Automatically prepend the sysroot to target paths | - |
311 | if (loc < SysrootPath || loc > LastHostPath) { | - |
312 | QString sysroot = rawLocation(SysrootPath, FinalPaths); | - |
313 | if (!sysroot.isEmpty() && ret.length() > 2 && ret.at(1) == QLatin1Char(':') | - |
314 | && (ret.at(2) == QLatin1Char('/') || ret.at(2) == QLatin1Char('\\'))) | - |
315 | ret.replace(0, 2, sysroot); // Strip out the drive on Windows targets | - |
316 | else | - |
317 | ret.prepend(sysroot); | - |
318 | } | - |
319 | | - |
320 | return ret; | - |
321 | } | - |
322 | | - |
323 | QString | - |
324 | QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group) | - |
325 | { | - |
326 | #else | - |
327 | # define rawLocation(loca, group) location(loca) | - |
328 | # define group dummy | - |
329 | #endif | - |
330 | QString ret; executed (the execution status of this line is deduced): QString ret; | - |
331 | #ifdef QT_BOOTSTRAPPED | - |
332 | // Logic for choosing the right data source: if EffectivePaths are requested | - |
333 | // and qt.conf with that section is present, use it, otherwise fall back to | - |
334 | // FinalPaths. For FinalPaths, use qt.conf if present and contains not only | - |
335 | // [EffectivePaths], otherwise fall back to builtins. | - |
336 | if (!QLibraryInfoPrivate::haveGroup(group) | - |
337 | && (group == FinalPaths | - |
338 | || !(group = FinalPaths, QLibraryInfoPrivate::haveGroup(FinalPaths)))) | - |
339 | #elif !defined(QT_NO_SETTINGS) | - |
340 | if (!QLibraryInfoPrivate::configuration()) partially evaluated: !QLibraryInfoPrivate::configuration() yes Evaluation Count:161 | no Evaluation Count:0 |
| 0-161 |
341 | #endif | - |
342 | { | - |
343 | const char *path = 0; executed (the execution status of this line is deduced): const char *path = 0; | - |
344 | if (unsigned(loc) < sizeof(qt_configure_prefix_path_strs)/sizeof(qt_configure_prefix_path_strs[0])) evaluated: unsigned(loc) < sizeof(qt_configure_prefix_path_strs)/sizeof(qt_configure_prefix_path_strs[0]) yes Evaluation Count:156 | yes Evaluation Count:5 |
| 5-156 |
345 | path = qt_configure_prefix_path_strs[loc] + 12; executed: path = qt_configure_prefix_path_strs[loc] + 12; Execution Count:156 | 156 |
346 | #ifndef Q_OS_WIN // On Windows we use the registry | - |
347 | else if (loc == SettingsPath) partially evaluated: loc == SettingsPath yes Evaluation Count:5 | no Evaluation Count:0 |
| 0-5 |
348 | path = QT_CONFIGURE_SETTINGS_PATH; executed: path = qt_configure_settings_path_str + 12; Execution Count:5 | 5 |
349 | #endif | - |
350 | | - |
351 | if (path) partially evaluated: path yes Evaluation Count:161 | no Evaluation Count:0 |
| 0-161 |
352 | ret = QString::fromLocal8Bit(path); executed: ret = QString::fromLocal8Bit(path); Execution Count:161 | 161 |
353 | #ifndef QT_NO_SETTINGS | - |
354 | } else { executed: } Execution Count:161 | 161 |
355 | QString key; never executed (the execution status of this line is deduced): QString key; | - |
356 | QString defaultValue; never executed (the execution status of this line is deduced): QString defaultValue; | - |
357 | if (unsigned(loc) < sizeof(qtConfEntries)/sizeof(qtConfEntries[0])) { never evaluated: unsigned(loc) < sizeof(qtConfEntries)/sizeof(qtConfEntries[0]) | 0 |
358 | key = QLatin1String(qtConfEntries[loc].key); never executed (the execution status of this line is deduced): key = QLatin1String(qtConfEntries[loc].key); | - |
359 | defaultValue = QLatin1String(qtConfEntries[loc].value); never executed (the execution status of this line is deduced): defaultValue = QLatin1String(qtConfEntries[loc].value); | - |
360 | } | 0 |
361 | #ifndef Q_OS_WIN // On Windows we use the registry | - |
362 | else if (loc == SettingsPath) never evaluated: loc == SettingsPath | 0 |
363 | key = QLatin1String("Settings"); never executed: key = QLatin1String("Settings"); | 0 |
364 | #endif | - |
365 | | - |
366 | if(!key.isNull()) { never evaluated: !key.isNull() | 0 |
367 | QSettings *config = QLibraryInfoPrivate::configuration(); never executed (the execution status of this line is deduced): QSettings *config = QLibraryInfoPrivate::configuration(); | - |
368 | config->beginGroup(QLatin1String( never executed (the execution status of this line is deduced): config->beginGroup(QLatin1String( | - |
369 | #ifdef QT_BOOTSTRAPPED never executed (the execution status of this line is deduced):
| - |
370 | group == EffectivePaths ? "EffectivePaths" : never executed (the execution status of this line is deduced):
| - |
371 | #endif never executed (the execution status of this line is deduced):
| - |
372 | "Paths")); never executed (the execution status of this line is deduced): "Paths")); | - |
373 | | - |
374 | ret = config->value(key, defaultValue).toString(); never executed (the execution status of this line is deduced): ret = config->value(key, defaultValue).toString(); | - |
375 | | - |
376 | #ifdef QT_BOOTSTRAPPED | - |
377 | if (ret.isEmpty()) { | - |
378 | if (loc == HostPrefixPath) | - |
379 | ret = config->value(QLatin1String(qtConfEntries[PrefixPath].key), | - |
380 | QLatin1String(qtConfEntries[PrefixPath].value)).toString(); | - |
381 | else if (loc == TargetSpecPath || loc == HostSpecPath) | - |
382 | ret = QString::fromLocal8Bit(qt_configure_prefix_path_strs[loc] + 12); | - |
383 | } | - |
384 | #endif | - |
385 | | - |
386 | // expand environment variables in the form $(ENVVAR) | - |
387 | int rep; never executed (the execution status of this line is deduced): int rep; | - |
388 | QRegExp reg_var(QLatin1String("\\$\\(.*\\)")); never executed (the execution status of this line is deduced): QRegExp reg_var(QLatin1String("\\$\\(.*\\)")); | - |
389 | reg_var.setMinimal(true); never executed (the execution status of this line is deduced): reg_var.setMinimal(true); | - |
390 | while((rep = reg_var.indexIn(ret)) != -1) { never evaluated: (rep = reg_var.indexIn(ret)) != -1 | 0 |
391 | ret.replace(rep, reg_var.matchedLength(), never executed (the execution status of this line is deduced): ret.replace(rep, reg_var.matchedLength(), | - |
392 | QString::fromLocal8Bit(qgetenv(ret.mid(rep + 2, never executed (the execution status of this line is deduced): QString::fromLocal8Bit(qgetenv(ret.mid(rep + 2, | - |
393 | reg_var.matchedLength() - 3).toLatin1().constData()).constData())); never executed (the execution status of this line is deduced): reg_var.matchedLength() - 3).toLatin1().constData()).constData())); | - |
394 | } | 0 |
395 | | - |
396 | config->endGroup(); never executed (the execution status of this line is deduced): config->endGroup(); | - |
397 | | - |
398 | ret = QDir::fromNativeSeparators(ret); never executed (the execution status of this line is deduced): ret = QDir::fromNativeSeparators(ret); | - |
399 | } | 0 |
400 | #endif // QT_NO_SETTINGS | - |
401 | } | 0 |
402 | | - |
403 | #ifdef QT_BOOTSTRAPPED | - |
404 | // The specs need to be returned verbatim. | - |
405 | if (loc == TargetSpecPath || loc == HostSpecPath) | - |
406 | return ret; | - |
407 | #endif | - |
408 | | - |
409 | if (!ret.isEmpty() && QDir::isRelativePath(ret)) { partially evaluated: !ret.isEmpty() yes Evaluation Count:161 | no Evaluation Count:0 |
partially evaluated: QDir::isRelativePath(ret) no Evaluation Count:0 | yes Evaluation Count:161 |
| 0-161 |
410 | QString baseDir; never executed (the execution status of this line is deduced): QString baseDir; | - |
411 | #ifdef QT_BOOTSTRAPPED | - |
412 | if (loc == HostPrefixPath || loc == PrefixPath || loc == SysrootPath) { | - |
413 | // We make the prefix/sysroot path absolute to the executable's directory. | - |
414 | // loc == PrefixPath while a sysroot is set would make no sense here. | - |
415 | // loc == SysrootPath only makes sense if qmake lives inside the sysroot itself. | - |
416 | baseDir = QFileInfo(qt_libraryInfoFile()).absolutePath(); | - |
417 | } else if (loc > SysrootPath && loc <= LastHostPath) { | - |
418 | // We make any other host path absolute to the host prefix directory. | - |
419 | baseDir = rawLocation(HostPrefixPath, group); | - |
420 | #else | - |
421 | if (loc == PrefixPath) { never evaluated: loc == PrefixPath | 0 |
422 | if (QCoreApplication::instance()) { never evaluated: QCoreApplication::instance() | 0 |
423 | #ifdef Q_OS_MAC | - |
424 | CFBundleRef bundleRef = CFBundleGetMainBundle(); | - |
425 | if (bundleRef) { | - |
426 | QCFType<CFURLRef> urlRef = CFBundleCopyBundleURL(bundleRef); | - |
427 | if (urlRef) { | - |
428 | QCFString path = CFURLCopyFileSystemPath(urlRef, kCFURLPOSIXPathStyle); | - |
429 | return QDir::cleanPath(QString(path) + QLatin1String("/Contents/") + ret); | - |
430 | } | - |
431 | } | - |
432 | #endif | - |
433 | // We make the prefix path absolute to the executable's directory. | - |
434 | baseDir = QCoreApplication::applicationDirPath(); never executed (the execution status of this line is deduced): baseDir = QCoreApplication::applicationDirPath(); | - |
435 | } else { | 0 |
436 | baseDir = QDir::currentPath(); never executed (the execution status of this line is deduced): baseDir = QDir::currentPath(); | - |
437 | } | 0 |
438 | #endif | - |
439 | } else { | - |
440 | // we make any other path absolute to the prefix directory | - |
441 | baseDir = rawLocation(PrefixPath, group); never executed (the execution status of this line is deduced): baseDir = location(PrefixPath); | - |
442 | } | 0 |
443 | ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret); never executed (the execution status of this line is deduced): ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret); | - |
444 | } | 0 |
445 | return ret; executed: return ret; Execution Count:161 | 161 |
446 | } | - |
447 | | - |
448 | /*! | - |
449 | \enum QLibraryInfo::LibraryLocation | - |
450 | | - |
451 | \keyword library location | - |
452 | | - |
453 | This enum type is used to specify a specific location | - |
454 | specifier: | - |
455 | | - |
456 | \value PrefixPath The default prefix for all paths. | - |
457 | \value DocumentationPath The location for documentation upon install. | - |
458 | \value HeadersPath The location for all headers. | - |
459 | \value LibrariesPath The location of installed libraries. | - |
460 | \value LibraryExecutablesPath The location of installed executables required by libraries at runtime. | - |
461 | \value BinariesPath The location of installed Qt binaries (tools and applications). | - |
462 | \value PluginsPath The location of installed Qt plugins. | - |
463 | \value ImportsPath The location of installed QML extensions to import (QML 1.x). | - |
464 | \value Qml2ImportsPath The location of installed QML extensions to import (QML 2.x). | - |
465 | \value ArchDataPath The location of general architecture-dependent Qt data. | - |
466 | \value DataPath The location of general architecture-independent Qt data. | - |
467 | \value TranslationsPath The location of translation information for Qt strings. | - |
468 | \value ExamplesPath The location for examples upon install. | - |
469 | \value TestsPath The location of installed Qt testcases. | - |
470 | \value SettingsPath The location for Qt settings. Not applicable on Windows. | - |
471 | | - |
472 | \sa location() | - |
473 | */ | - |
474 | | - |
475 | QT_END_NAMESPACE | - |
476 | | - |
477 | #if defined(Q_CC_GNU) && defined(ELF_INTERPRETER) | - |
478 | # include <stdio.h> | - |
479 | # include <stdlib.h> | - |
480 | | - |
481 | extern const char qt_core_interpreter[] __attribute__((section(".interp"))) | - |
482 | = ELF_INTERPRETER; | - |
483 | | - |
484 | extern "C" void qt_core_boilerplate(); | - |
485 | void qt_core_boilerplate() | - |
486 | { | - |
487 | printf("This is the QtCore library version " QT_VERSION_STR "\n" never executed (the execution status of this line is deduced): printf("This is the QtCore library version " "5.0.2" "\n" | - |
488 | "Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).\n" never executed (the execution status of this line is deduced): "Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).\n" | - |
489 | "Contact: http://www.qt-project.org/legal\n" never executed (the execution status of this line is deduced): "Contact: http://www.qt-project.org/legal\n" | - |
490 | "\n" never executed (the execution status of this line is deduced): "\n" | - |
491 | "Build date: %s\n" never executed (the execution status of this line is deduced): "Build date: %s\n" | - |
492 | "Installation prefix: %s\n" never executed (the execution status of this line is deduced): "Installation prefix: %s\n" | - |
493 | "Library path: %s\n" never executed (the execution status of this line is deduced): "Library path: %s\n" | - |
494 | "Include path: %s\n", never executed (the execution status of this line is deduced): "Include path: %s\n", | - |
495 | qt_configure_installation + 12, never executed (the execution status of this line is deduced): qt_configure_installation + 12, | - |
496 | qt_configure_prefix_path_strs[QT_PREPEND_NAMESPACE(QLibraryInfo)::PrefixPath] + 12, never executed (the execution status of this line is deduced): qt_configure_prefix_path_strs[::QLibraryInfo::PrefixPath] + 12, | - |
497 | qt_configure_prefix_path_strs[QT_PREPEND_NAMESPACE(QLibraryInfo)::LibrariesPath] + 12, never executed (the execution status of this line is deduced): qt_configure_prefix_path_strs[::QLibraryInfo::LibrariesPath] + 12, | - |
498 | qt_configure_prefix_path_strs[QT_PREPEND_NAMESPACE(QLibraryInfo)::HeadersPath] + 12); never executed (the execution status of this line is deduced): qt_configure_prefix_path_strs[::QLibraryInfo::HeadersPath] + 12); | - |
499 | | - |
500 | QT_PREPEND_NAMESPACE(qDumpCPUFeatures)(); never executed (the execution status of this line is deduced): ::qDumpCPUFeatures(); | - |
501 | | - |
502 | #ifdef QT_EVAL | - |
503 | extern void qt_core_eval_init(uint); | - |
504 | qt_core_eval_init(1); | - |
505 | #endif | - |
506 | | - |
507 | exit(0); | 0 |
508 | } | - |
509 | | - |
510 | #endif | - |
511 | | - |
| | |