Use cascading-if for per-config test and install code
When generating per-config blocks in test and install scripts replace the form IF() # config == A ENDIF() IF() # config == B ENDIF() with IF() # config == A ELSEIF() # config == B ELSE() # no config matches ENDIF() for clarity and to support the else() case cleanly.
This commit is contained in:
parent
9ccefd55c5
commit
77ddb6a0cd
|
@ -209,6 +209,7 @@ void cmScriptGenerator::GenerateScriptActionsPerConfig(std::ostream& os,
|
||||||
// In a multi-configuration generator we produce a separate rule
|
// In a multi-configuration generator we produce a separate rule
|
||||||
// in a block for each configuration that is built. We restrict
|
// in a block for each configuration that is built. We restrict
|
||||||
// the list of configurations to those to which this rule applies.
|
// the list of configurations to those to which this rule applies.
|
||||||
|
bool first = true;
|
||||||
for(std::vector<std::string>::const_iterator i =
|
for(std::vector<std::string>::const_iterator i =
|
||||||
this->ConfigurationTypes->begin();
|
this->ConfigurationTypes->begin();
|
||||||
i != this->ConfigurationTypes->end(); ++i)
|
i != this->ConfigurationTypes->end(); ++i)
|
||||||
|
@ -218,10 +219,19 @@ void cmScriptGenerator::GenerateScriptActionsPerConfig(std::ostream& os,
|
||||||
{
|
{
|
||||||
// Generate a per-configuration block.
|
// Generate a per-configuration block.
|
||||||
std::string config_test = this->CreateConfigTest(config);
|
std::string config_test = this->CreateConfigTest(config);
|
||||||
os << indent << "IF(" << config_test << ")\n";
|
os << indent << (first? "IF(" : "ELSEIF(") << config_test << ")\n";
|
||||||
this->GenerateScriptForConfig(os, config, indent.Next());
|
this->GenerateScriptForConfig(os, config, indent.Next());
|
||||||
os << indent << "ENDIF(" << config_test << ")\n";
|
first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!first)
|
||||||
|
{
|
||||||
|
if(this->NeedsScriptNoConfig())
|
||||||
|
{
|
||||||
|
os << indent << "ELSE()\n";
|
||||||
|
this->GenerateScriptNoConfig(os, indent.Next());
|
||||||
|
}
|
||||||
|
os << indent << "ENDIF()\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,8 @@ protected:
|
||||||
virtual void GenerateScriptForConfig(std::ostream& os,
|
virtual void GenerateScriptForConfig(std::ostream& os,
|
||||||
const char* config,
|
const char* config,
|
||||||
Indent const& indent);
|
Indent const& indent);
|
||||||
|
virtual void GenerateScriptNoConfig(std::ostream&, Indent const&) {}
|
||||||
|
virtual bool NeedsScriptNoConfig() const { return false; }
|
||||||
|
|
||||||
// Test if this generator does something for a given configuration.
|
// Test if this generator does something for a given configuration.
|
||||||
bool GeneratesForConfig(const char*);
|
bool GeneratesForConfig(const char*);
|
||||||
|
|
Loading…
Reference in New Issue