forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/10.0'
Change-Id: Ie591b7130b33a042509e56701384f8ff4d9cb7f8
This commit is contained in:
@@ -209,12 +209,51 @@ void CMakeProject::readPresets()
|
||||
return data;
|
||||
};
|
||||
|
||||
std::function<void(Internal::PresetsData & presetData, Utils::FilePaths & inclueStack)>
|
||||
resolveIncludes = [&](Internal::PresetsData &presetData, Utils::FilePaths &includeStack) {
|
||||
if (presetData.include) {
|
||||
for (const QString &path : presetData.include.value()) {
|
||||
Utils::FilePath includePath = Utils::FilePath::fromUserInput(path);
|
||||
if (!includePath.isAbsolutePath())
|
||||
includePath = presetData.fileDir.resolvePath(path);
|
||||
|
||||
Internal::PresetsData includeData = parsePreset(includePath);
|
||||
if (includeData.include) {
|
||||
if (includeStack.contains(includePath)) {
|
||||
TaskHub::addTask(BuildSystemTask(
|
||||
Task::TaskType::Warning,
|
||||
Tr::tr("Attempt to include %1 which was already parsed.")
|
||||
.arg(includePath.path()),
|
||||
Utils::FilePath(),
|
||||
-1));
|
||||
TaskHub::requestPopup();
|
||||
} else {
|
||||
resolveIncludes(includeData, includeStack);
|
||||
}
|
||||
}
|
||||
|
||||
presetData.configurePresets = includeData.configurePresets
|
||||
+ presetData.configurePresets;
|
||||
presetData.buildPresets = includeData.buildPresets + presetData.buildPresets;
|
||||
|
||||
includeStack << includePath;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const Utils::FilePath cmakePresetsJson = projectDirectory().pathAppended("CMakePresets.json");
|
||||
const Utils::FilePath cmakeUserPresetsJson = projectDirectory().pathAppended("CMakeUserPresets.json");
|
||||
|
||||
Internal::PresetsData cmakePresetsData = parsePreset(cmakePresetsJson);
|
||||
Internal::PresetsData cmakeUserPresetsData = parsePreset(cmakeUserPresetsJson);
|
||||
|
||||
// resolve the include
|
||||
Utils::FilePaths includeStack = {cmakePresetsJson};
|
||||
resolveIncludes(cmakePresetsData, includeStack);
|
||||
|
||||
includeStack = {cmakeUserPresetsJson};
|
||||
resolveIncludes(cmakeUserPresetsData, includeStack);
|
||||
|
||||
m_presetsData = combinePresets(cmakePresetsData, cmakeUserPresetsData);
|
||||
setupBuildPresets(m_presetsData);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user