cmGeneratorTarget: Implement cmTargetPropertyComputer interface
Populate a local member for the sources property when the instance is created. Pass the parameter to avoid the policy check when doing so. Ordinarily, the GetSources function should not be called unconditionally (at generate time), but we need to do so here in case the property is read in a generator expression. The intent is to be able to implement cmGeneratorTarget without requiring cmTarget.
This commit is contained in:
parent
848ae2a663
commit
fa9dbc56a1
@ -18,6 +18,7 @@
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmTarget.h"
|
||||
#include "cmTargetLinkLibraryType.h"
|
||||
#include "cmTargetPropertyComputer.h"
|
||||
#include "cm_auto_ptr.hxx"
|
||||
#include "cmake.h"
|
||||
|
||||
@ -42,6 +43,28 @@
|
||||
#define UNORDERED_SET std::set
|
||||
#endif
|
||||
|
||||
template <>
|
||||
const char* cmTargetPropertyComputer::GetSources<cmGeneratorTarget>(
|
||||
cmGeneratorTarget const* tgt, cmMessenger* /* messenger */,
|
||||
cmListFileBacktrace const& /* context */)
|
||||
{
|
||||
return tgt->GetSourcesProperty();
|
||||
}
|
||||
|
||||
template <>
|
||||
const char* cmTargetPropertyComputer::ComputeLocationForBuild<
|
||||
cmGeneratorTarget>(cmGeneratorTarget const* tgt)
|
||||
{
|
||||
return tgt->GetLocation("");
|
||||
}
|
||||
|
||||
template <>
|
||||
const char* cmTargetPropertyComputer::ComputeLocation<cmGeneratorTarget>(
|
||||
cmGeneratorTarget const* tgt, const std::string& config)
|
||||
{
|
||||
return tgt->GetLocation(config);
|
||||
}
|
||||
|
||||
class cmGeneratorTarget::TargetPropertyEntry
|
||||
{
|
||||
static cmLinkImplItem NoLinkImplItem;
|
||||
@ -320,6 +343,21 @@ cmGeneratorTarget::~cmGeneratorTarget()
|
||||
cmDeleteAll(this->LinkInformation);
|
||||
}
|
||||
|
||||
const char* cmGeneratorTarget::GetSourcesProperty() const
|
||||
{
|
||||
std::vector<std::string> values;
|
||||
for (std::vector<cmGeneratorTarget::TargetPropertyEntry *>::const_iterator
|
||||
it = this->SourceEntries.begin(),
|
||||
end = this->SourceEntries.end();
|
||||
it != end; ++it) {
|
||||
values.push_back((*it)->ge->GetInput());
|
||||
}
|
||||
static std::string value;
|
||||
value.clear();
|
||||
value = cmJoin(values, "");
|
||||
return value.c_str();
|
||||
}
|
||||
|
||||
cmGlobalGenerator* cmGeneratorTarget::GetGlobalGenerator() const
|
||||
{
|
||||
return this->GetLocalGenerator()->GetGlobalGenerator();
|
||||
|
@ -532,6 +532,8 @@ public:
|
||||
|
||||
std::string GetFortranModuleDirectory(std::string const& working_dir) const;
|
||||
|
||||
const char* GetSourcesProperty() const;
|
||||
|
||||
private:
|
||||
void AddSourceCommon(const std::string& src);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user