diff options
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakenodes.cpp | 19 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakenodes.h | 5 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakeproject.cpp | 66 | ||||
-rw-r--r-- | src/shared/proparser/objective_c.prf | 12 | ||||
-rw-r--r-- | src/shared/proparser/proparser.pri | 2 | ||||
-rw-r--r-- | src/shared/proparser/proparser.qrc | 3 | ||||
-rw-r--r-- | src/shared/proparser/qmakeevaluator.cpp | 39 |
7 files changed, 73 insertions, 73 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index c8dfefb70d4..2644cfb44c7 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -1414,13 +1414,11 @@ QString QmakePriFileNode::varNameForAdding(const QString &mimeType) } if (mimeType == QLatin1String(ProjectExplorer::Constants::CPP_SOURCE_MIMETYPE) + || mimeType == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE) || mimeType == QLatin1String(ProjectExplorer::Constants::C_SOURCE_MIMETYPE)) { return QLatin1String("SOURCES"); } - if (mimeType == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)) - return QLatin1String("OBJECTIVE_SOURCES"); - if (mimeType == QLatin1String(ProjectExplorer::Constants::RESOURCE_MIMETYPE)) return QLatin1String("RESOURCES"); @@ -1932,14 +1930,13 @@ EvalResult *QmakeProFileNode::evaluate(const EvalInput &input) result->newVarValues[IncludePathVar] = includePaths(input.readerExact, input.sysroot, input.buildDirectory, input.projectDir); result->newVarValues[CppFlagsVar] = input.readerExact->values(QLatin1String("QMAKE_CXXFLAGS")); - result->newVarValues[CppHeaderVar] = fileListForVar(input.readerExact, input.readerCumulative, - QLatin1String("HEADERS"), input.projectDir, input.buildDirectory); - result->newVarValues[CppSourceVar] = fileListForVar(input.readerExact, input.readerCumulative, - QLatin1String("SOURCES"), input.projectDir, input.buildDirectory); - result->newVarValues[ObjCSourceVar] = fileListForVar(input.readerExact, input.readerCumulative, - QLatin1String("OBJECTIVE_SOURCES"), input.projectDir, input.buildDirectory); - result->newVarValues[ObjCHeaderVar] = fileListForVar(input.readerExact, input.readerCumulative, - QLatin1String("OBJECTIVE_HEADERS"), input.projectDir, input.buildDirectory); + result->newVarValues[SourceVar] = + fileListForVar(input.readerExact, input.readerCumulative, + QLatin1String("SOURCES"), input.projectDir, input.buildDirectory) + + fileListForVar(input.readerExact, input.readerCumulative, + QLatin1String("HEADERS"), input.projectDir, input.buildDirectory) + + fileListForVar(input.readerExact, input.readerCumulative, + QLatin1String("OBJECTIVE_HEADERS"), input.projectDir, input.buildDirectory); result->newVarValues[UiDirVar] = QStringList() << uiDirPath(input.readerExact, input.buildDirectory); result->newVarValues[HeaderExtensionVar] = QStringList() << input.readerExact->value(QLatin1String("QMAKE_EXT_H")); result->newVarValues[CppExtensionVar] = QStringList() << input.readerExact->value(QLatin1String("QMAKE_EXT_CPP")); diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 968f6bc8a59..32e19a52ca7 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -78,10 +78,7 @@ enum QmakeVariable { DefinesVar = 1, IncludePathVar, CppFlagsVar, - CppHeaderVar, - CppSourceVar, - ObjCSourceVar, - ObjCHeaderVar, + SourceVar, ExactResourceVar, CumulativeResourceVar, UiDirVar, diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 9a53ff58c4e..f3cd7dbffa3 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -458,40 +458,27 @@ void QmakeProject::updateCppCodeModel() // part->precompiledHeaders templatePart->precompiledHeaders.append(pro->variableValue(PrecompiledHeaderVar)); - templatePart->updateLanguageFeatures(); + // TODO: there is no LANG_OBJCXX, so: + const QStringList cxxflags = pro->variableValue(CppFlagsVar); + CppTools::ProjectPartBuilder::evaluateProjectPartToolchain( + templatePart.data(), ToolChainKitInformation::toolChain(k, ToolChain::Language::Cxx), + cxxflags, SysRootKitInformation::sysRoot(k)); + setProjectLanguage(ProjectExplorer::Constants::LANG_CXX, true); ProjectPart::Ptr cppPart = templatePart->copy(); - { // C++ files: - // part->files - foreach (const QString &file, pro->variableValue(CppSourceVar)) { - cppPart->files << ProjectFile(file, ProjectFile::CXXSource); - } - foreach (const QString &file, pro->variableValue(CppHeaderVar)) { - cppPart->files << ProjectFile(file, ProjectFile::CXXHeader); - } - } - ProjectPart::Ptr objcppPart = templatePart->copy(); - { // ObjC++ files: - foreach (const QString &file, pro->variableValue(ObjCSourceVar)) { - // Although the enum constant is called ObjCSourceVar, it actually is ObjC++ source - // code, as qmake does not handle C (and ObjC). - objcppPart->files << ProjectFile(file, ProjectFile::ObjCXXSource); - } - foreach (const QString &file, pro->variableValue(ObjCHeaderVar)) { - objcppPart->files << ProjectFile(file, ProjectFile::ObjCXXHeader); - } - - const QStringList cxxflags = pro->variableValue(CppFlagsVar); - CppTools::ProjectPartBuilder::evaluateProjectPartToolchain(objcppPart.data(), - ToolChainKitInformation::toolChain(k, ToolChain::Language::Cxx), - cxxflags, - SysRootKitInformation::sysRoot(k)); - - if (!objcppPart->files.isEmpty()) { - pinfo.appendProjectPart(objcppPart); - // TODO: there is no LANG_OBJCXX, so: - setProjectLanguage(ProjectExplorer::Constants::LANG_CXX, true); + foreach (const QString &file, pro->variableValue(SourceVar)) { + ProjectFile::Kind kind = ProjectFile::classify(file); + switch (kind) { + case ProjectFile::ObjCHeader: + case ProjectFile::ObjCSource: + case ProjectFile::ObjCXXHeader: + case ProjectFile::ObjCXXSource: + objcppPart->files << ProjectFile(file, kind); + break; + default: + cppPart->files << ProjectFile(file, kind); + break; } } @@ -523,19 +510,12 @@ void QmakeProject::updateCppCodeModel() cppPart->files.prepend(ProjectFile(CppTools::CppModelManager::configurationFileName(), ProjectFile::CXXSource)); - const QStringList cxxflags = pro->variableValue(CppFlagsVar); - CppTools::ProjectPartBuilder::evaluateProjectPartToolchain( - cppPart.data(), ToolChainKitInformation::toolChain(k, ToolChain::Language::Cxx), - cxxflags, SysRootKitInformation::sysRoot(k)); - if (!cppPart->files.isEmpty()) { - pinfo.appendProjectPart(cppPart); - setProjectLanguage(ProjectExplorer::Constants::LANG_CXX, true); - } - - if (!objcppPart->files.isEmpty()) + pinfo.appendProjectPart(cppPart); + objcppPart->displayName += QLatin1String(" (ObjC++)"); + if (!objcppPart->files.isEmpty()) { + pinfo.appendProjectPart(objcppPart); cppPart->displayName += QLatin1String(" (C++)"); - if (!cppPart->files.isEmpty()) - objcppPart->displayName += QLatin1String(" (ObjC++)"); + } } pinfo.finish(); diff --git a/src/shared/proparser/objective_c.prf b/src/shared/proparser/objective_c.prf new file mode 100644 index 00000000000..ed1ad8ad384 --- /dev/null +++ b/src/shared/proparser/objective_c.prf @@ -0,0 +1,12 @@ + +# Objective-C/C++ sources go in SOURCES, like all other sources +SOURCES += $$OBJECTIVE_SOURCES +unset(OBJECTIVE_SOURCES) + +# Strip C/C++ flags from QMAKE_OBJECTIVE_CFLAGS just in case +QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS + +# Add Objective-C/C++ flags to C/C++ flags, the compiler can handle it +QMAKE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS +QMAKE_CXXFLAGS += $$QMAKE_OBJECTIVE_CFLAGS +unset(QMAKE_OBJECTIVE_CFLAGS) diff --git a/src/shared/proparser/proparser.pri b/src/shared/proparser/proparser.pri index a3667e52919..53ab86cf575 100644 --- a/src/shared/proparser/proparser.pri +++ b/src/shared/proparser/proparser.pri @@ -29,4 +29,4 @@ SOURCES += \ ioutils.cpp RESOURCES += proparser.qrc -DEFINES += QMAKE_BUILTIN_PRFS +DEFINES += QMAKE_BUILTIN_PRFS QMAKE_OVERRIDE_PRFS diff --git a/src/shared/proparser/proparser.qrc b/src/shared/proparser/proparser.qrc index 9193eaa31c4..10f360fa490 100644 --- a/src/shared/proparser/proparser.qrc +++ b/src/shared/proparser/proparser.qrc @@ -3,4 +3,7 @@ <file>spec_pre.prf</file> <file>spec_post.prf</file> </qresource> + <qresource prefix="/qmake/override_features" > + <file>objective_c.prf</file> + </qresource> </RCC> diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp index 19e9f8b2326..5e318b170d8 100644 --- a/src/shared/proparser/qmakeevaluator.cpp +++ b/src/shared/proparser/qmakeevaluator.cpp @@ -1953,23 +1953,34 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFeatureFile( // needs to be determined. Failed lookups are represented via non-null empty strings. QString *fnp = &m_featureRoots->cache[qMakePair(fn, currFn)]; if (fnp->isNull()) { - int start_root = 0; - const QStringList &paths = m_featureRoots->paths; - if (!currFn.isEmpty()) { - QStringRef currPath = IoUtils::pathName(currFn); - for (int root = 0; root < paths.size(); ++root) - if (currPath == paths.at(root)) { - start_root = root + 1; - break; - } - } - for (int root = start_root; root < paths.size(); ++root) { - QString fname = paths.at(root) + fn; - if (IoUtils::exists(fname)) { - fn = fname; +#ifdef QMAKE_OVERRIDE_PRFS + { + QString ovrfn(QLatin1String(":/qmake/override_features/") + fn); + if (QFileInfo::exists(ovrfn)) { + fn = ovrfn; goto cool; } } +#endif + { + int start_root = 0; + const QStringList &paths = m_featureRoots->paths; + if (!currFn.isEmpty()) { + QStringRef currPath = IoUtils::pathName(currFn); + for (int root = 0; root < paths.size(); ++root) + if (currPath == paths.at(root)) { + start_root = root + 1; + break; + } + } + for (int root = start_root; root < paths.size(); ++root) { + QString fname = paths.at(root) + fn; + if (IoUtils::exists(fname)) { + fn = fname; + goto cool; + } + } + } #ifdef QMAKE_BUILTIN_PRFS fn.prepend(QLatin1String(":/qmake/features/")); if (QFileInfo::exists(fn)) |