| 60 | } |
| 61 | |
| 62 | bool QMakeProjectFile::read() |
| 63 | { |
| 64 | // default values |
| 65 | // NOTE: if we already have such a var, e.g. in an include file, we must not overwrite it here! |
| 66 | if (!m_variableValues.contains(QStringLiteral("QT"))) { |
| 67 | m_variableValues[QStringLiteral("QT")] = QStringList{QStringLiteral("core"), QStringLiteral("gui")}; |
| 68 | } |
| 69 | if (!m_variableValues.contains(QStringLiteral("CONFIG"))) { |
| 70 | m_variableValues[QStringLiteral("CONFIG")] = QStringList() << QStringLiteral("qt"); |
| 71 | } |
| 72 | |
| 73 | Q_ASSERT(m_mkspecs); |
| 74 | auto addVars = [&](const auto& vars) { |
| 75 | for (auto it = vars.begin(), end = vars.end(); it != end; ++it) { |
| 76 | if (!m_variableValues.contains(it.key())) { |
| 77 | m_variableValues.insert(it.key(), it.value()); |
| 78 | } |
| 79 | } |
| 80 | }; |
| 81 | addVars(m_mkspecs->variableMap()); |
| 82 | if (m_cache) { |
| 83 | addVars(m_cache->variableMap()); |
| 84 | } |
| 85 | |
| 86 | /// TODO: more special variables |
| 87 | m_variableValues[QStringLiteral("PWD")] = QStringList() << pwd(); |
| 88 | m_variableValues[QStringLiteral("_PRO_FILE_")] = QStringList() << proFile(); |
| 89 | m_variableValues[QStringLiteral("_PRO_FILE_PWD_")] = QStringList() << proFilePwd(); |
| 90 | m_variableValues[QStringLiteral("OUT_PWD")] = QStringList() << outPwd(); |
| 91 | |
| 92 | const QString qtInstallHeaders = QStringLiteral("QT_INSTALL_HEADERS"); |
| 93 | const QString qtVersion = QStringLiteral("QT_VERSION"); |
| 94 | const QString qtInstallLibs = QStringLiteral("QT_INSTALL_LIBS"); |
| 95 | |
| 96 | const QString executable = QMakeConfig::qmakeExecutable(project()); |
| 97 | if (!m_qmakeQueryCache.contains(executable)) { |
| 98 | const auto queryResult = QMakeConfig::queryQMake(executable, {qtInstallHeaders, qtVersion, qtInstallLibs}); |
| 99 | if (queryResult.isEmpty()) { |
| 100 | qCWarning(KDEV_QMAKE) << "Failed to query qmake - bad qmake executable configured?" << executable; |
| 101 | } |
| 102 | m_qmakeQueryCache[executable] = queryResult; |
| 103 | } |
| 104 | |
| 105 | const auto cachedQueryResult = m_qmakeQueryCache.value(executable); |
| 106 | m_qtIncludeDir = cachedQueryResult.value(qtInstallHeaders); |
| 107 | m_qtVersion = cachedQueryResult.value(qtVersion); |
| 108 | m_qtLibDir = cachedQueryResult.value(qtInstallLibs); |
| 109 | |
| 110 | return QMakeFile::read(); |
| 111 | } |
| 112 | |
| 113 | QStringList QMakeProjectFile::subProjects() const |
| 114 | { |
nothing calls this directly
no test coverage detected