diff --git a/src/jomlib/makefile.cpp b/src/jomlib/makefile.cpp index 94ef2d4..e2879b1 100644 --- a/src/jomlib/makefile.cpp +++ b/src/jomlib/makefile.cpp @@ -114,6 +114,7 @@ void Command::evaluateModifiers() DescriptionBlock::DescriptionBlock(Makefile* mkfile) : m_bFileExists(false), m_bVisitedByCycleCheck(false), + m_bVisitedByPreselectInferenceRules(false), m_bNoCyclesRootedHere(false), m_canAddCommands(ACSUnknown), m_pMakefile(mkfile) diff --git a/src/jomlib/makefile.h b/src/jomlib/makefile.h index 84ae63d..064cebb 100644 --- a/src/jomlib/makefile.h +++ b/src/jomlib/makefile.h @@ -104,6 +104,7 @@ class DescriptionBlock : public CommandContainer { bool m_bFileExists; bool m_bVisitedByCycleCheck; bool m_bNoCyclesRootedHere; + bool m_bVisitedByPreselectInferenceRules; QVector m_inferenceRules; enum AddCommandsState { ACSUnknown, ACSEnabled, ACSDisabled }; diff --git a/src/jomlib/parser.cpp b/src/jomlib/parser.cpp index ec21a35..0e8b7cd 100644 --- a/src/jomlib/parser.cpp +++ b/src/jomlib/parser.cpp @@ -726,16 +726,17 @@ QVector Parser::findRulesByTargetName(const QString& targetFileP void Parser::preselectInferenceRules(DescriptionBlock *target) { - if (!target->m_commands.isEmpty()) { - /* If we already have commands for this target, then we've already - * generated all the commands for the dependents already. Nothing - * more to do. */ + if (target->m_bVisitedByPreselectInferenceRules) + // We already processed this target return; - } - QVector rules = findRulesByTargetName(target->targetName()); - if (!rules.isEmpty()) - target->m_inferenceRules = rules; + target->m_bVisitedByPreselectInferenceRules = true; + + if (target->m_commands.isEmpty()) { + QVector rules = findRulesByTargetName(target->targetName()); + if (!rules.isEmpty()) + target->m_inferenceRules = rules; + } foreach (const QString &dependentName, target->m_dependents) { DescriptionBlock *dependent = m_makefile->target(dependentName);