| 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 | | - |
| | |