Merge topic 'use-generator-target'
c2b7336f
cmGeneratorTarget: Move GetConfigCommonSourceFiles from cmTarget.69329fff
cmGeneratorTarget: Move GetLanguages from cmTarget.0431f2c4
cmGeneratorTarget: Move ComputeLinkImplementationLanguages from cmTarget.abe9505d
cmGeneratorTarget: Move HaveBuildTreeRPath from cmTarget.d4a24c0e
cmGeneratorTarget: Move GetLinkImplementation from cmTarget.83981cf5
cmTarget: Add GetLinkImplMap method.771e79a2
cmLinkItem: Add cmOptionalLinkImplementation type.3846ebcf
cmLinkItem: Add cmLinkImplementation type.a7f5d70d
cmGeneratorTarget: Move compile defintions processing from cmTarget.d051086c
cmGeneratorTarget: Move compile features processing from cmTarget.db4cb92b
cmGeneratorTarget: Move compile options processing from cmTarget.e6ccbf6f
cmGeneratorTarget: Move include directory processing from cmTarget.8bfb0c53
cmGeneratorTarget: Move link iface helpers from cmTarget.2cb3e574
cmGeneratorTarget: Move GetImportLinkInterface from cmTarget.6d3d099b
cmGeneratorTarget: Move ComputeLinkInterfaceLibraries from cmTarget.0db9d927
cmGeneratorTarget: Move GetLinkInterfaceLibraries from cmTarget. ...
This commit is contained in:
commit
27e4b21dfa
|
@ -362,9 +362,11 @@ void cmComputeLinkDepends::FollowLinkEntry(BFSEntry const& qe)
|
||||||
// Follow the item's dependencies.
|
// Follow the item's dependencies.
|
||||||
if(entry.Target)
|
if(entry.Target)
|
||||||
{
|
{
|
||||||
|
cmGeneratorTarget* gtgt =
|
||||||
|
this->GlobalGenerator->GetGeneratorTarget(entry.Target);
|
||||||
// Follow the target dependencies.
|
// Follow the target dependencies.
|
||||||
if(cmTarget::LinkInterface const* iface =
|
if(cmLinkInterface const* iface =
|
||||||
entry.Target->GetLinkInterface(this->Config, this->Target->Target))
|
gtgt->GetLinkInterface(this->Config, this->Target->Target))
|
||||||
{
|
{
|
||||||
const bool isIface =
|
const bool isIface =
|
||||||
entry.Target->GetType() == cmTarget::INTERFACE_LIBRARY;
|
entry.Target->GetType() == cmTarget::INTERFACE_LIBRARY;
|
||||||
|
@ -398,7 +400,7 @@ void cmComputeLinkDepends::FollowLinkEntry(BFSEntry const& qe)
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void
|
void
|
||||||
cmComputeLinkDepends
|
cmComputeLinkDepends
|
||||||
::FollowSharedDeps(int depender_index, cmTarget::LinkInterface const* iface,
|
::FollowSharedDeps(int depender_index, cmLinkInterface const* iface,
|
||||||
bool follow_interface)
|
bool follow_interface)
|
||||||
{
|
{
|
||||||
// Follow dependencies if we have not followed them already.
|
// Follow dependencies if we have not followed them already.
|
||||||
|
@ -461,8 +463,10 @@ void cmComputeLinkDepends::HandleSharedDependency(SharedDepEntry const& dep)
|
||||||
// Target items may have their own dependencies.
|
// Target items may have their own dependencies.
|
||||||
if(entry.Target)
|
if(entry.Target)
|
||||||
{
|
{
|
||||||
if(cmTarget::LinkInterface const* iface =
|
cmGeneratorTarget* gtgt =
|
||||||
entry.Target->GetLinkInterface(this->Config, this->Target->Target))
|
this->GlobalGenerator->GetGeneratorTarget(entry.Target);
|
||||||
|
if(cmLinkInterface const* iface =
|
||||||
|
gtgt->GetLinkInterface(this->Config, this->Target->Target))
|
||||||
{
|
{
|
||||||
// Follow public and private dependencies transitively.
|
// Follow public and private dependencies transitively.
|
||||||
this->FollowSharedDeps(index, iface, true);
|
this->FollowSharedDeps(index, iface, true);
|
||||||
|
@ -552,8 +556,8 @@ void cmComputeLinkDepends::AddVarLinkEntries(int depender_index,
|
||||||
void cmComputeLinkDepends::AddDirectLinkEntries()
|
void cmComputeLinkDepends::AddDirectLinkEntries()
|
||||||
{
|
{
|
||||||
// Add direct link dependencies in this configuration.
|
// Add direct link dependencies in this configuration.
|
||||||
cmTarget::LinkImplementation const* impl =
|
cmLinkImplementation const* impl =
|
||||||
this->Target->Target->GetLinkImplementation(this->Config);
|
this->Target->GetLinkImplementation(this->Config);
|
||||||
this->AddLinkEntries(-1, impl->Libraries);
|
this->AddLinkEntries(-1, impl->Libraries);
|
||||||
for(std::vector<cmLinkItem>::const_iterator
|
for(std::vector<cmLinkItem>::const_iterator
|
||||||
wi = impl->WrongConfigLibraries.begin();
|
wi = impl->WrongConfigLibraries.begin();
|
||||||
|
@ -932,8 +936,10 @@ int cmComputeLinkDepends::ComputeComponentCount(NodeList const& nl)
|
||||||
{
|
{
|
||||||
if(cmTarget const* target = this->EntryList[*ni].Target)
|
if(cmTarget const* target = this->EntryList[*ni].Target)
|
||||||
{
|
{
|
||||||
if(cmTarget::LinkInterface const* iface =
|
cmGeneratorTarget* gtgt =
|
||||||
target->GetLinkInterface(this->Config, this->Target->Target))
|
this->GlobalGenerator->GetGeneratorTarget(target);
|
||||||
|
if(cmLinkInterface const* iface =
|
||||||
|
gtgt->GetLinkInterface(this->Config, this->Target->Target))
|
||||||
{
|
{
|
||||||
if(iface->Multiplicity > count)
|
if(iface->Multiplicity > count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -102,7 +102,7 @@ private:
|
||||||
std::queue<SharedDepEntry> SharedDepQueue;
|
std::queue<SharedDepEntry> SharedDepQueue;
|
||||||
std::set<int> SharedDepFollowed;
|
std::set<int> SharedDepFollowed;
|
||||||
void FollowSharedDeps(int depender_index,
|
void FollowSharedDeps(int depender_index,
|
||||||
cmTarget::LinkInterface const* iface,
|
cmLinkInterface const* iface,
|
||||||
bool follow_interface = false);
|
bool follow_interface = false);
|
||||||
void QueueSharedDependencies(int depender_index,
|
void QueueSharedDependencies(int depender_index,
|
||||||
std::vector<cmLinkItem> const& deps);
|
std::vector<cmLinkItem> const& deps);
|
||||||
|
|
|
@ -1925,7 +1925,7 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
|
||||||
(outputRuntime && this->Target->Target->HaveInstallTreeRPATH() &&
|
(outputRuntime && this->Target->Target->HaveInstallTreeRPATH() &&
|
||||||
linking_for_install);
|
linking_for_install);
|
||||||
bool use_build_rpath =
|
bool use_build_rpath =
|
||||||
(outputRuntime && this->Target->Target->HaveBuildTreeRPATH(this->Config) &&
|
(outputRuntime && this->Target->HaveBuildTreeRPATH(this->Config) &&
|
||||||
!linking_for_install);
|
!linking_for_install);
|
||||||
bool use_link_rpath =
|
bool use_link_rpath =
|
||||||
outputRuntime && linking_for_install &&
|
outputRuntime && linking_for_install &&
|
||||||
|
|
|
@ -252,8 +252,7 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmTarget::LinkImplementation const* impl =
|
cmLinkImplementation const* impl = depender->GetLinkImplementation(*it);
|
||||||
depender->Target->GetLinkImplementation(*it);
|
|
||||||
|
|
||||||
// A target should not depend on itself.
|
// A target should not depend on itself.
|
||||||
emitted.insert(depender->GetName());
|
emitted.insert(depender->GetName());
|
||||||
|
@ -296,8 +295,8 @@ void cmComputeTargetDepends::AddInterfaceDepends(int depender_index,
|
||||||
std::set<std::string> &emitted)
|
std::set<std::string> &emitted)
|
||||||
{
|
{
|
||||||
cmGeneratorTarget const* depender = this->Targets[depender_index];
|
cmGeneratorTarget const* depender = this->Targets[depender_index];
|
||||||
if(cmTarget::LinkInterface const* iface =
|
if(cmLinkInterface const* iface =
|
||||||
dependee->Target->GetLinkInterface(config,
|
dependee->GetLinkInterface(config,
|
||||||
depender->Target))
|
depender->Target))
|
||||||
{
|
{
|
||||||
for(std::vector<cmLinkItem>::const_iterator
|
for(std::vector<cmLinkItem>::const_iterator
|
||||||
|
|
|
@ -796,9 +796,8 @@ cmExportFileGenerator
|
||||||
std::vector<std::string>& missingTargets)
|
std::vector<std::string>& missingTargets)
|
||||||
{
|
{
|
||||||
// Add the transitive link dependencies for this configuration.
|
// Add the transitive link dependencies for this configuration.
|
||||||
cmTarget::LinkInterface const* iface = target->Target->GetLinkInterface(
|
cmLinkInterface const* iface = target->GetLinkInterface(config,
|
||||||
config,
|
target->Target);
|
||||||
target->Target);
|
|
||||||
if (!iface)
|
if (!iface)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -909,9 +908,8 @@ cmExportFileGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the transitive link dependencies for this configuration.
|
// Add the transitive link dependencies for this configuration.
|
||||||
if(cmTarget::LinkInterface const* iface =
|
if(cmLinkInterface const* iface =
|
||||||
target->Target
|
target->GetLinkInterface(config, target->Target))
|
||||||
->GetLinkInterface(config, target->Target))
|
|
||||||
{
|
{
|
||||||
this->SetImportLinkProperty(suffix, target,
|
this->SetImportLinkProperty(suffix, target,
|
||||||
"IMPORTED_LINK_INTERFACE_LANGUAGES",
|
"IMPORTED_LINK_INTERFACE_LANGUAGES",
|
||||||
|
|
|
@ -609,7 +609,7 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
|
||||||
|
|
||||||
// the compilerdefines for this target
|
// the compilerdefines for this target
|
||||||
std::vector<std::string> cdefs;
|
std::vector<std::string> cdefs;
|
||||||
target->GetCompileDefinitions(cdefs, buildType, "C");
|
gtgt->GetCompileDefinitions(cdefs, buildType, "C");
|
||||||
|
|
||||||
// Expand the list.
|
// Expand the list.
|
||||||
for(std::vector<std::string>::const_iterator di = cdefs.begin();
|
for(std::vector<std::string>::const_iterator di = cdefs.begin();
|
||||||
|
|
|
@ -1108,8 +1108,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||||
|
|
||||||
if(isInterfaceProperty)
|
if(isInterfaceProperty)
|
||||||
{
|
{
|
||||||
if(cmTarget::LinkInterfaceLibraries const* iface =
|
if(cmLinkInterfaceLibraries const* iface =
|
||||||
target->GetLinkInterfaceLibraries(context->Config, headTarget, true))
|
gtgt->GetLinkInterfaceLibraries(context->Config, headTarget, true))
|
||||||
{
|
{
|
||||||
linkedTargetsContent =
|
linkedTargetsContent =
|
||||||
getLinkedTargetsContent(iface->Libraries, target,
|
getLinkedTargetsContent(iface->Libraries, target,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -12,7 +12,7 @@
|
||||||
#ifndef cmGeneratorTarget_h
|
#ifndef cmGeneratorTarget_h
|
||||||
#define cmGeneratorTarget_h
|
#define cmGeneratorTarget_h
|
||||||
|
|
||||||
#include "cmStandardIncludes.h"
|
#include "cmLinkItem.h"
|
||||||
|
|
||||||
class cmCustomCommand;
|
class cmCustomCommand;
|
||||||
class cmGlobalGenerator;
|
class cmGlobalGenerator;
|
||||||
|
@ -106,6 +106,21 @@ public:
|
||||||
const char *GetLinkInterfaceDependentNumberMaxProperty(const std::string &p,
|
const char *GetLinkInterfaceDependentNumberMaxProperty(const std::string &p,
|
||||||
const std::string& config) const;
|
const std::string& config) const;
|
||||||
|
|
||||||
|
cmLinkInterface const* GetLinkInterface(const std::string& config,
|
||||||
|
cmTarget const* headTarget) const;
|
||||||
|
void ComputeLinkInterface(const std::string& config,
|
||||||
|
cmOptionalLinkInterface& iface,
|
||||||
|
cmTarget const* head) const;
|
||||||
|
|
||||||
|
cmLinkInterfaceLibraries const*
|
||||||
|
GetLinkInterfaceLibraries(const std::string& config,
|
||||||
|
cmTarget const* headTarget,
|
||||||
|
bool usage_requirements_only) const;
|
||||||
|
|
||||||
|
void ComputeLinkInterfaceLibraries(const std::string& config,
|
||||||
|
cmOptionalLinkInterface &iface,
|
||||||
|
cmTarget const* head,
|
||||||
|
bool usage_requirements_only) const;
|
||||||
|
|
||||||
/** Get the full path to the target according to the settings in its
|
/** Get the full path to the target according to the settings in its
|
||||||
makefile and the configuration type. */
|
makefile and the configuration type. */
|
||||||
|
@ -183,6 +198,25 @@ public:
|
||||||
LinkClosure const* GetLinkClosure(const std::string& config) const;
|
LinkClosure const* GetLinkClosure(const std::string& config) const;
|
||||||
void ComputeLinkClosure(const std::string& config, LinkClosure& lc) const;
|
void ComputeLinkClosure(const std::string& config, LinkClosure& lc) const;
|
||||||
|
|
||||||
|
cmLinkImplementation const*
|
||||||
|
GetLinkImplementation(const std::string& config) const;
|
||||||
|
|
||||||
|
void ComputeLinkImplementationLanguages(const std::string& config,
|
||||||
|
cmOptionalLinkImplementation& impl
|
||||||
|
) const;
|
||||||
|
|
||||||
|
// Compute the set of languages compiled by the target. This is
|
||||||
|
// computed every time it is called because the languages can change
|
||||||
|
// when source file properties are changed and we do not have enough
|
||||||
|
// information to forward these property changes to the targets
|
||||||
|
// until we have per-target object file properties.
|
||||||
|
void GetLanguages(std::set<std::string>& languages,
|
||||||
|
std::string const& config) const;
|
||||||
|
|
||||||
|
bool GetConfigCommonSourceFiles(std::vector<cmSourceFile*>& files) const;
|
||||||
|
|
||||||
|
bool HaveBuildTreeRPATH(const std::string& config) const;
|
||||||
|
|
||||||
/** Full path with trailing slash to the top-level directory
|
/** Full path with trailing slash to the top-level directory
|
||||||
holding object files for this target. Includes the build
|
holding object files for this target. Includes the build
|
||||||
time config name placeholder if needed for the generator. */
|
time config name placeholder if needed for the generator. */
|
||||||
|
@ -202,6 +236,17 @@ public:
|
||||||
std::vector<std::string> GetIncludeDirectories(
|
std::vector<std::string> GetIncludeDirectories(
|
||||||
const std::string& config, const std::string& lang) const;
|
const std::string& config, const std::string& lang) const;
|
||||||
|
|
||||||
|
void GetCompileOptions(std::vector<std::string> &result,
|
||||||
|
const std::string& config,
|
||||||
|
const std::string& language) const;
|
||||||
|
|
||||||
|
void GetCompileFeatures(std::vector<std::string> &features,
|
||||||
|
const std::string& config) const;
|
||||||
|
|
||||||
|
void GetCompileDefinitions(std::vector<std::string> &result,
|
||||||
|
const std::string& config,
|
||||||
|
const std::string& language) const;
|
||||||
|
|
||||||
bool IsSystemIncludeDirectory(const std::string& dir,
|
bool IsSystemIncludeDirectory(const std::string& dir,
|
||||||
const std::string& config) const;
|
const std::string& config) const;
|
||||||
|
|
||||||
|
@ -317,6 +362,8 @@ public:
|
||||||
const std::string &report,
|
const std::string &report,
|
||||||
const std::string &compatibilityType) const;
|
const std::string &compatibilityType) const;
|
||||||
|
|
||||||
|
class TargetPropertyEntry;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class cmTargetTraceDependencies;
|
friend class cmTargetTraceDependencies;
|
||||||
struct SourceEntry { std::vector<cmSourceFile*> Depends; };
|
struct SourceEntry { std::vector<cmSourceFile*> Depends; };
|
||||||
|
@ -375,9 +422,41 @@ private:
|
||||||
};
|
};
|
||||||
mutable std::map<std::string, LinkImplClosure> LinkImplClosureMap;
|
mutable std::map<std::string, LinkImplClosure> LinkImplClosureMap;
|
||||||
|
|
||||||
|
typedef std::map<std::string, cmHeadToLinkInterfaceMap>
|
||||||
|
LinkInterfaceMapType;
|
||||||
|
mutable LinkInterfaceMapType LinkInterfaceMap;
|
||||||
|
mutable LinkInterfaceMapType LinkInterfaceUsageRequirementsOnlyMap;
|
||||||
|
|
||||||
|
cmHeadToLinkInterfaceMap&
|
||||||
|
GetHeadToLinkInterfaceMap(std::string const& config) const;
|
||||||
|
cmHeadToLinkInterfaceMap& GetHeadToLinkInterfaceUsageRequirementsMap(
|
||||||
|
std::string const& config) const;
|
||||||
|
|
||||||
|
cmLinkInterface const*
|
||||||
|
GetImportLinkInterface(const std::string& config, cmTarget const* head,
|
||||||
|
bool usage_requirements_only) const;
|
||||||
|
|
||||||
|
std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries;
|
||||||
|
std::vector<TargetPropertyEntry*> CompileOptionsEntries;
|
||||||
|
std::vector<TargetPropertyEntry*> CompileFeaturesEntries;
|
||||||
|
std::vector<TargetPropertyEntry*> CompileDefinitionsEntries;
|
||||||
|
|
||||||
|
void ExpandLinkItems(std::string const& prop, std::string const& value,
|
||||||
|
std::string const& config, cmTarget const* headTarget,
|
||||||
|
bool usage_requirements_only,
|
||||||
|
std::vector<cmLinkItem>& items,
|
||||||
|
bool& hadHeadSensitiveCondition) const;
|
||||||
|
void LookupLinkItems(std::vector<std::string> const& names,
|
||||||
|
std::vector<cmLinkItem>& items) const;
|
||||||
|
|
||||||
typedef std::pair<std::string, bool> OutputNameKey;
|
typedef std::pair<std::string, bool> OutputNameKey;
|
||||||
typedef std::map<OutputNameKey, std::string> OutputNameMapType;
|
typedef std::map<OutputNameKey, std::string> OutputNameMapType;
|
||||||
mutable OutputNameMapType OutputNameMap;
|
mutable OutputNameMapType OutputNameMap;
|
||||||
|
mutable bool PolicyWarnedCMP0022;
|
||||||
|
mutable bool DebugIncludesDone;
|
||||||
|
mutable bool DebugCompileOptionsDone;
|
||||||
|
mutable bool DebugCompileFeaturesDone;
|
||||||
|
mutable bool DebugCompileDefinitionsDone;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<cmTarget const*> const&
|
std::vector<cmTarget const*> const&
|
||||||
|
|
|
@ -330,7 +330,8 @@ void cmGhsMultiTargetGenerator::WriteCompilerDefinitions(
|
||||||
const std::string &config, const std::string &language)
|
const std::string &config, const std::string &language)
|
||||||
{
|
{
|
||||||
std::vector<std::string> compileDefinitions;
|
std::vector<std::string> compileDefinitions;
|
||||||
this->Target->GetCompileDefinitions(compileDefinitions, config, language);
|
this->GeneratorTarget->GetCompileDefinitions(compileDefinitions,
|
||||||
|
config, language);
|
||||||
for (std::vector<std::string>::const_iterator cdI =
|
for (std::vector<std::string>::const_iterator cdI =
|
||||||
compileDefinitions.begin();
|
compileDefinitions.begin();
|
||||||
cdI != compileDefinitions.end(); ++cdI)
|
cdI != compileDefinitions.end(); ++cdI)
|
||||||
|
@ -343,7 +344,7 @@ void cmGhsMultiTargetGenerator::WriteIncludes(const std::string &config,
|
||||||
const std::string &language)
|
const std::string &language)
|
||||||
{
|
{
|
||||||
std::vector<std::string> includes =
|
std::vector<std::string> includes =
|
||||||
this->Target->GetIncludeDirectories(config, language);
|
this->GeneratorTarget->GetIncludeDirectories(config, language);
|
||||||
for (std::vector<std::string>::const_iterator includes_i = includes.begin();
|
for (std::vector<std::string>::const_iterator includes_i = includes.begin();
|
||||||
includes_i != includes.end(); ++includes_i)
|
includes_i != includes.end(); ++includes_i)
|
||||||
{
|
{
|
||||||
|
@ -558,7 +559,7 @@ bool cmGhsMultiTargetGenerator::IsNotKernel(std::string const &config,
|
||||||
{
|
{
|
||||||
bool output;
|
bool output;
|
||||||
std::vector<std::string> options;
|
std::vector<std::string> options;
|
||||||
this->Target->GetCompileOptions(options, config, language);
|
this->GeneratorTarget->GetCompileOptions(options, config, language);
|
||||||
output =
|
output =
|
||||||
options.end() == std::find(options.begin(), options.end(), "-kernel");
|
options.end() == std::find(options.begin(), options.end(), "-kernel");
|
||||||
return output;
|
return output;
|
||||||
|
@ -587,7 +588,7 @@ bool cmGhsMultiTargetGenerator::DetermineIfDynamicDownload(
|
||||||
{
|
{
|
||||||
std::vector<std::string> options;
|
std::vector<std::string> options;
|
||||||
bool output = false;
|
bool output = false;
|
||||||
this->Target->GetCompileOptions(options, config, language);
|
this->GeneratorTarget->GetCompileOptions(options, config, language);
|
||||||
for (std::vector<std::string>::const_iterator options_i = options.begin();
|
for (std::vector<std::string>::const_iterator options_i = options.begin();
|
||||||
options_i != options.end(); ++options_i)
|
options_i != options.end(); ++options_i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1550,7 +1550,6 @@ void cmGlobalGenerator::CreateGeneratorTargets(TargetTypes targetTypes,
|
||||||
ti != targets.end(); ++ti)
|
ti != targets.end(); ++ti)
|
||||||
{
|
{
|
||||||
cmTarget* t = &ti->second;
|
cmTarget* t = &ti->second;
|
||||||
t->Compute();
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(t, lg);
|
cmGeneratorTarget* gt = new cmGeneratorTarget(t, lg);
|
||||||
this->GeneratorTargets[t] = gt;
|
this->GeneratorTargets[t] = gt;
|
||||||
generatorTargets[t] = gt;
|
generatorTargets[t] = gt;
|
||||||
|
|
|
@ -1145,7 +1145,8 @@ bool cmGlobalUnixMakefileGenerator3
|
||||||
::NeedRequiresStep(cmTarget const& target)
|
::NeedRequiresStep(cmTarget const& target)
|
||||||
{
|
{
|
||||||
std::set<std::string> languages;
|
std::set<std::string> languages;
|
||||||
target.GetLanguages(languages,
|
cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&target);
|
||||||
|
gtgt->GetLanguages(languages,
|
||||||
target.GetMakefile()->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
target.GetMakefile()->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
||||||
for(std::set<std::string>::const_iterator l = languages.begin();
|
for(std::set<std::string>::const_iterator l = languages.begin();
|
||||||
l != languages.end(); ++l)
|
l != languages.end(); ++l)
|
||||||
|
|
|
@ -254,7 +254,7 @@ bool cmGlobalVisualStudio8Generator::AddCheckTarget()
|
||||||
mf->AddUtilityCommand(CMAKE_CHECK_BUILD_SYSTEM_TARGET, false,
|
mf->AddUtilityCommand(CMAKE_CHECK_BUILD_SYSTEM_TARGET, false,
|
||||||
no_working_directory, no_depends,
|
no_working_directory, no_depends,
|
||||||
noCommandLines);
|
noCommandLines);
|
||||||
tgt->Compute();
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(tgt, lg);
|
cmGeneratorTarget* gt = new cmGeneratorTarget(tgt, lg);
|
||||||
mf->AddGeneratorTarget(tgt, gt);
|
mf->AddGeneratorTarget(tgt, gt);
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ bool cmGlobalVisualStudioGenerator::Compute()
|
||||||
AddUtilityCommand("ALL_BUILD", true, no_working_dir,
|
AddUtilityCommand("ALL_BUILD", true, no_working_dir,
|
||||||
no_depends, no_commands, false,
|
no_depends, no_commands, false,
|
||||||
"Build all projects");
|
"Build all projects");
|
||||||
allBuild->Compute();
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(allBuild, gen[0]);
|
cmGeneratorTarget* gt = new cmGeneratorTarget(allBuild, gen[0]);
|
||||||
allBuild->GetMakefile()->AddGeneratorTarget(allBuild, gt);
|
allBuild->GetMakefile()->AddGeneratorTarget(allBuild, gt);
|
||||||
|
|
||||||
|
@ -836,17 +836,19 @@ void RegisterVisualStudioMacros(const std::string& macrosFile,
|
||||||
bool
|
bool
|
||||||
cmGlobalVisualStudioGenerator::TargetIsFortranOnly(cmTarget const& target)
|
cmGlobalVisualStudioGenerator::TargetIsFortranOnly(cmTarget const& target)
|
||||||
{
|
{
|
||||||
|
cmGeneratorTarget* gt = this->GetGeneratorTarget(&target);
|
||||||
|
|
||||||
// check to see if this is a fortran build
|
// check to see if this is a fortran build
|
||||||
std::set<std::string> languages;
|
std::set<std::string> languages;
|
||||||
{
|
{
|
||||||
// Issue diagnostic if the source files depend on the config.
|
// Issue diagnostic if the source files depend on the config.
|
||||||
std::vector<cmSourceFile*> sources;
|
std::vector<cmSourceFile*> sources;
|
||||||
if (!target.GetConfigCommonSourceFiles(sources))
|
if (!gt->GetConfigCommonSourceFiles(sources))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
target.GetLanguages(languages, "");
|
gt->GetLanguages(languages, "");
|
||||||
if(languages.size() == 1)
|
if(languages.size() == 1)
|
||||||
{
|
{
|
||||||
if(*languages.begin() == "Fortran")
|
if(*languages.begin() == "Fortran")
|
||||||
|
|
|
@ -463,7 +463,7 @@ cmGlobalXCodeGenerator::AddExtraTargets(cmLocalGenerator* root,
|
||||||
cmTarget* allbuild = mf->AddUtilityCommand("ALL_BUILD", true, no_depends,
|
cmTarget* allbuild = mf->AddUtilityCommand("ALL_BUILD", true, no_depends,
|
||||||
no_working_directory,
|
no_working_directory,
|
||||||
"echo", "Build all projects");
|
"echo", "Build all projects");
|
||||||
allbuild->Compute();
|
|
||||||
cmGeneratorTarget* allBuildGt = new cmGeneratorTarget(allbuild, root);
|
cmGeneratorTarget* allBuildGt = new cmGeneratorTarget(allbuild, root);
|
||||||
mf->AddGeneratorTarget(allbuild, allBuildGt);
|
mf->AddGeneratorTarget(allbuild, allBuildGt);
|
||||||
|
|
||||||
|
@ -498,7 +498,7 @@ cmGlobalXCodeGenerator::AddExtraTargets(cmLocalGenerator* root,
|
||||||
true, no_depends,
|
true, no_depends,
|
||||||
no_working_directory,
|
no_working_directory,
|
||||||
"make", "-f", file.c_str());
|
"make", "-f", file.c_str());
|
||||||
check->Compute();
|
|
||||||
cmGeneratorTarget* checkGt = new cmGeneratorTarget(check, root);
|
cmGeneratorTarget* checkGt = new cmGeneratorTarget(check, root);
|
||||||
mf->AddGeneratorTarget(check, checkGt);
|
mf->AddGeneratorTarget(check, checkGt);
|
||||||
}
|
}
|
||||||
|
@ -1124,7 +1124,7 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
|
||||||
|
|
||||||
// organize the sources
|
// organize the sources
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!cmtarget.GetConfigCommonSourceFiles(classes))
|
if (!gtgt->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1383,8 +1383,8 @@ void cmGlobalXCodeGenerator::ForceLinkerLanguage(cmTarget& cmtarget)
|
||||||
if(llang.empty()) { return; }
|
if(llang.empty()) { return; }
|
||||||
|
|
||||||
// If the language is compiled as a source trust Xcode to link with it.
|
// If the language is compiled as a source trust Xcode to link with it.
|
||||||
cmTarget::LinkImplementation const* impl =
|
cmLinkImplementation const* impl =
|
||||||
cmtarget.GetLinkImplementation("NOCONFIG");
|
gtgt->GetLinkImplementation("NOCONFIG");
|
||||||
for(std::vector<std::string>::const_iterator li = impl->Languages.begin();
|
for(std::vector<std::string>::const_iterator li = impl->Languages.begin();
|
||||||
li != impl->Languages.end(); ++li)
|
li != impl->Languages.end(); ++li)
|
||||||
{
|
{
|
||||||
|
@ -1505,7 +1505,8 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(cmXCodeObject* buildPhases,
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!cmtarget.GetConfigCommonSourceFiles(classes))
|
cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
|
||||||
|
if (!gtgt->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1805,7 +1806,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
||||||
|
|
||||||
// Compute the compilation flags for each language.
|
// Compute the compilation flags for each language.
|
||||||
std::set<std::string> languages;
|
std::set<std::string> languages;
|
||||||
target.GetLanguages(languages, configName);
|
cmGeneratorTarget *gtgt = this->GetGeneratorTarget(&target);
|
||||||
|
gtgt->GetLanguages(languages, configName);
|
||||||
std::map<std::string, std::string> cflags;
|
std::map<std::string, std::string> cflags;
|
||||||
for (std::set<std::string>::iterator li = languages.begin();
|
for (std::set<std::string>::iterator li = languages.begin();
|
||||||
li != languages.end(); ++li)
|
li != languages.end(); ++li)
|
||||||
|
@ -1827,7 +1829,6 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
||||||
AddCompileOptions(flags, &target, lang, configName);
|
AddCompileOptions(flags, &target, lang, configName);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmGeneratorTarget *gtgt = this->GetGeneratorTarget(&target);
|
|
||||||
std::string llang = gtgt->GetLinkerLanguage(configName);
|
std::string llang = gtgt->GetLinkerLanguage(configName);
|
||||||
if(binary && llang.empty())
|
if(binary && llang.empty())
|
||||||
{
|
{
|
||||||
|
@ -1855,7 +1856,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
||||||
this->AppendDefines(ppDefs, exportMacro);
|
this->AppendDefines(ppDefs, exportMacro);
|
||||||
}
|
}
|
||||||
std::vector<std::string> targetDefines;
|
std::vector<std::string> targetDefines;
|
||||||
target.GetCompileDefinitions(targetDefines, configName, "C");
|
gtgt->GetCompileDefinitions(targetDefines, configName, "C");
|
||||||
this->AppendDefines(ppDefs, targetDefines);
|
this->AppendDefines(ppDefs, targetDefines);
|
||||||
buildSettings->AddAttribute
|
buildSettings->AddAttribute
|
||||||
("GCC_PREPROCESSOR_DEFINITIONS", ppDefs.CreateList());
|
("GCC_PREPROCESSOR_DEFINITIONS", ppDefs.CreateList());
|
||||||
|
@ -2557,7 +2558,8 @@ cmGlobalXCodeGenerator::CreateUtilityTarget(cmTarget& cmtarget)
|
||||||
if(cmtarget.GetType() == cmTarget::UTILITY)
|
if(cmtarget.GetType() == cmTarget::UTILITY)
|
||||||
{
|
{
|
||||||
std::vector<cmSourceFile*> sources;
|
std::vector<cmSourceFile*> sources;
|
||||||
if (!cmtarget.GetConfigCommonSourceFiles(sources))
|
cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
|
||||||
|
if (!gtgt->GetConfigCommonSourceFiles(sources))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3085,7 +3087,8 @@ bool cmGlobalXCodeGenerator::CreateGroups(cmLocalGenerator* root,
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!cmtarget.GetConfigCommonSourceFiles(classes))
|
cmGeneratorTarget* gtgt = this->GetGeneratorTarget(&cmtarget);
|
||||||
|
if (!gtgt->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,4 +56,66 @@ struct cmLinkImplementationLibraries
|
||||||
std::vector<cmLinkItem> WrongConfigLibraries;
|
std::vector<cmLinkItem> WrongConfigLibraries;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct cmLinkInterfaceLibraries
|
||||||
|
{
|
||||||
|
// Libraries listed in the interface.
|
||||||
|
std::vector<cmLinkItem> Libraries;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmLinkInterface: public cmLinkInterfaceLibraries
|
||||||
|
{
|
||||||
|
// Languages whose runtime libraries must be linked.
|
||||||
|
std::vector<std::string> Languages;
|
||||||
|
|
||||||
|
// Shared library dependencies needed for linking on some platforms.
|
||||||
|
std::vector<cmLinkItem> SharedDeps;
|
||||||
|
|
||||||
|
// Number of repetitions of a strongly connected component of two
|
||||||
|
// or more static libraries.
|
||||||
|
int Multiplicity;
|
||||||
|
|
||||||
|
// Libraries listed for other configurations.
|
||||||
|
// Needed only for OLD behavior of CMP0003.
|
||||||
|
std::vector<cmLinkItem> WrongConfigLibraries;
|
||||||
|
|
||||||
|
bool ImplementationIsInterface;
|
||||||
|
|
||||||
|
cmLinkInterface(): Multiplicity(0), ImplementationIsInterface(false) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmOptionalLinkInterface: public cmLinkInterface
|
||||||
|
{
|
||||||
|
cmOptionalLinkInterface():
|
||||||
|
LibrariesDone(false), AllDone(false),
|
||||||
|
Exists(false), HadHeadSensitiveCondition(false),
|
||||||
|
ExplicitLibraries(0) {}
|
||||||
|
bool LibrariesDone;
|
||||||
|
bool AllDone;
|
||||||
|
bool Exists;
|
||||||
|
bool HadHeadSensitiveCondition;
|
||||||
|
const char* ExplicitLibraries;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmHeadToLinkInterfaceMap:
|
||||||
|
public std::map<cmTarget const*, cmOptionalLinkInterface>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmLinkImplementation: public cmLinkImplementationLibraries
|
||||||
|
{
|
||||||
|
// Languages whose runtime libraries must be linked.
|
||||||
|
std::vector<std::string> Languages;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Cache link implementation computation from each configuration.
|
||||||
|
struct cmOptionalLinkImplementation: public cmLinkImplementation
|
||||||
|
{
|
||||||
|
cmOptionalLinkImplementation():
|
||||||
|
LibrariesDone(false), LanguagesDone(false),
|
||||||
|
HadHeadSensitiveCondition(false) {}
|
||||||
|
bool LibrariesDone;
|
||||||
|
bool LanguagesDone;
|
||||||
|
bool HadHeadSensitiveCondition;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1079,7 +1079,8 @@ void cmLocalGenerator::AddCompileDefinitions(std::set<std::string>& defines,
|
||||||
const std::string& lang)
|
const std::string& lang)
|
||||||
{
|
{
|
||||||
std::vector<std::string> targetDefines;
|
std::vector<std::string> targetDefines;
|
||||||
target->GetCompileDefinitions(targetDefines, config, lang);
|
cmGeneratorTarget* gtgt = this->GlobalGenerator->GetGeneratorTarget(target);
|
||||||
|
gtgt->GetCompileDefinitions(targetDefines, config, lang);
|
||||||
this->AppendDefines(defines, targetDefines);
|
this->AppendDefines(defines, targetDefines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,6 +1091,10 @@ void cmLocalGenerator::AddCompileOptions(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
std::string langFlagRegexVar = std::string("CMAKE_")+lang+"_FLAG_REGEX";
|
std::string langFlagRegexVar = std::string("CMAKE_")+lang+"_FLAG_REGEX";
|
||||||
|
|
||||||
|
cmGeneratorTarget* gtgt =
|
||||||
|
this->GlobalGenerator->GetGeneratorTarget(target);
|
||||||
|
|
||||||
if(const char* langFlagRegexStr =
|
if(const char* langFlagRegexStr =
|
||||||
this->Makefile->GetDefinition(langFlagRegexVar))
|
this->Makefile->GetDefinition(langFlagRegexVar))
|
||||||
{
|
{
|
||||||
|
@ -1100,7 +1105,7 @@ void cmLocalGenerator::AddCompileOptions(
|
||||||
{
|
{
|
||||||
cmSystemTools::ParseWindowsCommandLine(targetFlags, opts);
|
cmSystemTools::ParseWindowsCommandLine(targetFlags, opts);
|
||||||
}
|
}
|
||||||
target->GetCompileOptions(opts, config, lang);
|
gtgt->GetCompileOptions(opts, config, lang);
|
||||||
for(std::vector<std::string>::const_iterator i = opts.begin();
|
for(std::vector<std::string>::const_iterator i = opts.begin();
|
||||||
i != opts.end(); ++i)
|
i != opts.end(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -1121,7 +1126,7 @@ void cmLocalGenerator::AddCompileOptions(
|
||||||
this->AppendFlags(flags, targetFlags);
|
this->AppendFlags(flags, targetFlags);
|
||||||
}
|
}
|
||||||
std::vector<std::string> opts;
|
std::vector<std::string> opts;
|
||||||
target->GetCompileOptions(opts, config, lang);
|
gtgt->GetCompileOptions(opts, config, lang);
|
||||||
for(std::vector<std::string>::const_iterator i = opts.begin();
|
for(std::vector<std::string>::const_iterator i = opts.begin();
|
||||||
i != opts.end(); ++i)
|
i != opts.end(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -1130,7 +1135,7 @@ void cmLocalGenerator::AddCompileOptions(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<std::string> features;
|
std::vector<std::string> features;
|
||||||
target->GetCompileFeatures(features, config);
|
gtgt->GetCompileFeatures(features, config);
|
||||||
for(std::vector<std::string>::const_iterator it = features.begin();
|
for(std::vector<std::string>::const_iterator it = features.begin();
|
||||||
it != features.end(); ++it)
|
it != features.end(); ++it)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1257,7 +1257,9 @@ cmLocalUnixMakefileGenerator3
|
||||||
{
|
{
|
||||||
// Get the set of source languages in the target.
|
// Get the set of source languages in the target.
|
||||||
std::set<std::string> languages;
|
std::set<std::string> languages;
|
||||||
target.GetLanguages(languages,
|
cmGeneratorTarget *gtgt =
|
||||||
|
this->GlobalGenerator->GetGeneratorTarget(&target);
|
||||||
|
gtgt->GetLanguages(languages,
|
||||||
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
||||||
fout << "\n"
|
fout << "\n"
|
||||||
<< "# Per-language clean rules from dependency scanning.\n"
|
<< "# Per-language clean rules from dependency scanning.\n"
|
||||||
|
|
|
@ -305,9 +305,12 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
|
||||||
// We may be modifying the source groups temporarily, so make a copy.
|
// We may be modifying the source groups temporarily, so make a copy.
|
||||||
std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
|
std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
|
||||||
|
|
||||||
|
cmGeneratorTarget* gt =
|
||||||
|
this->GlobalGenerator->GetGeneratorTarget(&target);
|
||||||
|
|
||||||
// get the classes from the source lists then add them to the groups
|
// get the classes from the source lists then add them to the groups
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!target.GetConfigCommonSourceFiles(classes))
|
if (!gt->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -763,7 +763,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
|
||||||
targetOptions.Parse(defineFlags.c_str());
|
targetOptions.Parse(defineFlags.c_str());
|
||||||
targetOptions.ParseFinish();
|
targetOptions.ParseFinish();
|
||||||
std::vector<std::string> targetDefines;
|
std::vector<std::string> targetDefines;
|
||||||
target.GetCompileDefinitions(targetDefines, configName, "CXX");
|
gt->GetCompileDefinitions(targetDefines, configName, "CXX");
|
||||||
targetOptions.AddDefines(targetDefines);
|
targetOptions.AddDefines(targetDefines);
|
||||||
targetOptions.SetVerboseMakefile(
|
targetOptions.SetVerboseMakefile(
|
||||||
this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
|
this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
|
||||||
|
@ -1469,10 +1469,13 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
|
||||||
// We may be modifying the source groups temporarily, so make a copy.
|
// We may be modifying the source groups temporarily, so make a copy.
|
||||||
std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
|
std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
|
||||||
|
|
||||||
|
cmGeneratorTarget* gt =
|
||||||
|
this->GlobalGenerator->GetGeneratorTarget(&target);
|
||||||
|
|
||||||
// get the classes from the source lists then add them to the groups
|
// get the classes from the source lists then add them to the groups
|
||||||
this->ModuleDefinitionFile = "";
|
this->ModuleDefinitionFile = "";
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!target.GetConfigCommonSourceFiles(classes))
|
if (!gt->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1514,8 +1517,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
|
||||||
{
|
{
|
||||||
// VS >= 8 support per-config source locations so we
|
// VS >= 8 support per-config source locations so we
|
||||||
// list object library content as external objects.
|
// list object library content as external objects.
|
||||||
cmGeneratorTarget* gt =
|
|
||||||
this->GlobalGenerator->GetGeneratorTarget(&target);
|
|
||||||
std::vector<std::string> objs;
|
std::vector<std::string> objs;
|
||||||
gt->UseObjectLibraries(objs, "");
|
gt->UseObjectLibraries(objs, "");
|
||||||
if(!objs.empty())
|
if(!objs.empty())
|
||||||
|
|
|
@ -276,7 +276,7 @@ void cmMakefileTargetGenerator::WriteTargetLanguageFlags()
|
||||||
{
|
{
|
||||||
// write language flags for target
|
// write language flags for target
|
||||||
std::set<std::string> languages;
|
std::set<std::string> languages;
|
||||||
this->Target->GetLanguages(languages,
|
this->GeneratorTarget->GetLanguages(languages,
|
||||||
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
|
||||||
// put the compiler in the rules.make file so that if it changes
|
// put the compiler in the rules.make file so that if it changes
|
||||||
// things rebuild
|
// things rebuild
|
||||||
|
|
|
@ -403,7 +403,9 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmLocalGenerator* lg,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
std::vector<cmSourceFile*> srcFiles;
|
std::vector<cmSourceFile*> srcFiles;
|
||||||
target->GetConfigCommonSourceFiles(srcFiles);
|
cmGeneratorTarget* gtgt =
|
||||||
|
lg->GetGlobalGenerator()->GetGeneratorTarget(target);
|
||||||
|
gtgt->GetConfigCommonSourceFiles(srcFiles);
|
||||||
for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
|
for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
|
||||||
fileIt != srcFiles.end();
|
fileIt != srcFiles.end();
|
||||||
++fileIt)
|
++fileIt)
|
||||||
|
@ -474,8 +476,6 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmLocalGenerator* lg,
|
||||||
/*byproducts=*/rcc_output, depends,
|
/*byproducts=*/rcc_output, depends,
|
||||||
commandLines, false, autogenComment.c_str());
|
commandLines, false, autogenComment.c_str());
|
||||||
|
|
||||||
autogenTarget->Compute();
|
|
||||||
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(autogenTarget, lg);
|
cmGeneratorTarget* gt = new cmGeneratorTarget(autogenTarget, lg);
|
||||||
makefile->AddGeneratorTarget(autogenTarget, gt);
|
makefile->AddGeneratorTarget(autogenTarget, gt);
|
||||||
|
|
||||||
|
@ -663,7 +663,10 @@ void cmQtAutoGenerators::SetupSourceFiles(cmTarget const* target)
|
||||||
const char* sepHeaders = "";
|
const char* sepHeaders = "";
|
||||||
|
|
||||||
std::vector<cmSourceFile*> srcFiles;
|
std::vector<cmSourceFile*> srcFiles;
|
||||||
target->GetConfigCommonSourceFiles(srcFiles);
|
cmGeneratorTarget *gtgt = target->GetMakefile()
|
||||||
|
->GetGlobalGenerator()
|
||||||
|
->GetGeneratorTarget(target);
|
||||||
|
gtgt->GetConfigCommonSourceFiles(srcFiles);
|
||||||
|
|
||||||
const char *skipMocSep = "";
|
const char *skipMocSep = "";
|
||||||
const char *skipUicSep = "";
|
const char *skipUicSep = "";
|
||||||
|
@ -1048,7 +1051,10 @@ void cmQtAutoGenerators::SetupAutoRccTarget(cmTarget const* target)
|
||||||
cmMakefile *makefile = target->GetMakefile();
|
cmMakefile *makefile = target->GetMakefile();
|
||||||
|
|
||||||
std::vector<cmSourceFile*> srcFiles;
|
std::vector<cmSourceFile*> srcFiles;
|
||||||
target->GetConfigCommonSourceFiles(srcFiles);
|
cmGeneratorTarget *gtgt = target->GetMakefile()
|
||||||
|
->GetGlobalGenerator()
|
||||||
|
->GetGeneratorTarget(target);
|
||||||
|
gtgt->GetConfigCommonSourceFiles(srcFiles);
|
||||||
|
|
||||||
std::string qrcInputs;
|
std::string qrcInputs;
|
||||||
const char* qrcInputsSep = "";
|
const char* qrcInputsSep = "";
|
||||||
|
|
1275
Source/cmTarget.cxx
1275
Source/cmTarget.cxx
File diff suppressed because it is too large
Load Diff
|
@ -132,15 +132,11 @@ public:
|
||||||
void AddPostBuildCommand(cmCustomCommand const &cmd)
|
void AddPostBuildCommand(cmCustomCommand const &cmd)
|
||||||
{this->PostBuildCommands.push_back(cmd);}
|
{this->PostBuildCommands.push_back(cmd);}
|
||||||
|
|
||||||
void Compute();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the list of the source files used by this target
|
* Get the list of the source files used by this target
|
||||||
*/
|
*/
|
||||||
void GetSourceFiles(std::vector<cmSourceFile*> &files,
|
void GetSourceFiles(std::vector<cmSourceFile*> &files,
|
||||||
const std::string& config) const;
|
const std::string& config) const;
|
||||||
bool GetConfigCommonSourceFiles(std::vector<cmSourceFile*>& files) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add sources to the target.
|
* Add sources to the target.
|
||||||
*/
|
*/
|
||||||
|
@ -233,54 +229,16 @@ public:
|
||||||
|
|
||||||
void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
|
void GetObjectLibrariesCMP0026(std::vector<cmTarget*>& objlibs) const;
|
||||||
|
|
||||||
/** The link interface specifies transitive library dependencies and
|
|
||||||
other information needed by targets that link to this target. */
|
|
||||||
struct LinkInterfaceLibraries
|
|
||||||
{
|
|
||||||
// Libraries listed in the interface.
|
|
||||||
std::vector<cmLinkItem> Libraries;
|
|
||||||
};
|
|
||||||
struct LinkInterface: public LinkInterfaceLibraries
|
|
||||||
{
|
|
||||||
// Languages whose runtime libraries must be linked.
|
|
||||||
std::vector<std::string> Languages;
|
|
||||||
|
|
||||||
// Shared library dependencies needed for linking on some platforms.
|
|
||||||
std::vector<cmLinkItem> SharedDeps;
|
|
||||||
|
|
||||||
// Number of repetitions of a strongly connected component of two
|
|
||||||
// or more static libraries.
|
|
||||||
int Multiplicity;
|
|
||||||
|
|
||||||
// Libraries listed for other configurations.
|
|
||||||
// Needed only for OLD behavior of CMP0003.
|
|
||||||
std::vector<cmLinkItem> WrongConfigLibraries;
|
|
||||||
|
|
||||||
bool ImplementationIsInterface;
|
|
||||||
|
|
||||||
LinkInterface(): Multiplicity(0), ImplementationIsInterface(false) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Get the link interface for the given configuration. Returns 0
|
|
||||||
if the target cannot be linked. */
|
|
||||||
LinkInterface const* GetLinkInterface(const std::string& config,
|
|
||||||
cmTarget const* headTarget) const;
|
|
||||||
LinkInterfaceLibraries const*
|
|
||||||
GetLinkInterfaceLibraries(const std::string& config,
|
|
||||||
cmTarget const* headTarget,
|
|
||||||
bool usage_requirements_only) const;
|
|
||||||
|
|
||||||
struct LinkImplementation: public cmLinkImplementationLibraries
|
|
||||||
{
|
|
||||||
// Languages whose runtime libraries must be linked.
|
|
||||||
std::vector<std::string> Languages;
|
|
||||||
};
|
|
||||||
LinkImplementation const*
|
|
||||||
GetLinkImplementation(const std::string& config) const;
|
|
||||||
|
|
||||||
cmLinkImplementationLibraries const*
|
cmLinkImplementationLibraries const*
|
||||||
GetLinkImplementationLibraries(const std::string& config) const;
|
GetLinkImplementationLibraries(const std::string& config) const;
|
||||||
|
|
||||||
|
void ComputeLinkImplementationLibraries(const std::string& config,
|
||||||
|
cmOptionalLinkImplementation& impl,
|
||||||
|
cmTarget const* head) const;
|
||||||
|
|
||||||
|
cmOptionalLinkImplementation&
|
||||||
|
GetLinkImplMap(std::string const& config) const;
|
||||||
|
|
||||||
cmTarget const* FindTargetToLink(std::string const& name) const;
|
cmTarget const* FindTargetToLink(std::string const& name) const;
|
||||||
|
|
||||||
/** Strip off leading and trailing whitespace from an item named in
|
/** Strip off leading and trailing whitespace from an item named in
|
||||||
|
@ -331,7 +289,6 @@ public:
|
||||||
bool GetImplibGNUtoMS(std::string const& gnuName, std::string& out,
|
bool GetImplibGNUtoMS(std::string const& gnuName, std::string& out,
|
||||||
const char* newExt = 0) const;
|
const char* newExt = 0) const;
|
||||||
|
|
||||||
bool HaveBuildTreeRPATH(const std::string& config) const;
|
|
||||||
bool HaveInstallTreeRPATH() const;
|
bool HaveInstallTreeRPATH() const;
|
||||||
|
|
||||||
// Get the properties
|
// Get the properties
|
||||||
|
@ -346,18 +303,6 @@ public:
|
||||||
If no macro should be defined null is returned. */
|
If no macro should be defined null is returned. */
|
||||||
const char* GetExportMacro() const;
|
const char* GetExportMacro() const;
|
||||||
|
|
||||||
void GetCompileDefinitions(std::vector<std::string> &result,
|
|
||||||
const std::string& config,
|
|
||||||
const std::string& language) const;
|
|
||||||
|
|
||||||
// Compute the set of languages compiled by the target. This is
|
|
||||||
// computed every time it is called because the languages can change
|
|
||||||
// when source file properties are changed and we do not have enough
|
|
||||||
// information to forward these property changes to the targets
|
|
||||||
// until we have per-target object file properties.
|
|
||||||
void GetLanguages(std::set<std::string>& languages,
|
|
||||||
std::string const& config) const;
|
|
||||||
|
|
||||||
/** Return whether this target is an executable with symbol exports
|
/** Return whether this target is an executable with symbol exports
|
||||||
enabled. */
|
enabled. */
|
||||||
bool IsExecutableWithExports() const;
|
bool IsExecutableWithExports() const;
|
||||||
|
@ -401,9 +346,6 @@ public:
|
||||||
/** @return whether this target have a well defined output file name. */
|
/** @return whether this target have a well defined output file name. */
|
||||||
bool HaveWellDefinedOutputFiles() const;
|
bool HaveWellDefinedOutputFiles() const;
|
||||||
|
|
||||||
std::vector<std::string> GetIncludeDirectories(
|
|
||||||
const std::string& config,
|
|
||||||
const std::string& language) const;
|
|
||||||
void InsertInclude(std::string const& entry,
|
void InsertInclude(std::string const& entry,
|
||||||
cmListFileBacktrace const& bt,
|
cmListFileBacktrace const& bt,
|
||||||
bool before = false);
|
bool before = false);
|
||||||
|
@ -415,12 +357,6 @@ public:
|
||||||
|
|
||||||
void AppendBuildInterfaceIncludes();
|
void AppendBuildInterfaceIncludes();
|
||||||
|
|
||||||
void GetCompileOptions(std::vector<std::string> &result,
|
|
||||||
const std::string& config,
|
|
||||||
const std::string& language) const;
|
|
||||||
void GetCompileFeatures(std::vector<std::string> &features,
|
|
||||||
const std::string& config) const;
|
|
||||||
|
|
||||||
bool IsNullImpliedByLinkLibraries(const std::string &p) const;
|
bool IsNullImpliedByLinkLibraries(const std::string &p) const;
|
||||||
|
|
||||||
std::string GetDebugGeneratorExpressions(const std::string &value,
|
std::string GetDebugGeneratorExpressions(const std::string &value,
|
||||||
|
@ -439,6 +375,18 @@ public:
|
||||||
return this->MaxLanguageStandards;
|
return this->MaxLanguageStandards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmStringRange GetIncludeDirectoriesEntries() const;
|
||||||
|
cmBacktraceRange GetIncludeDirectoriesBacktraces() const;
|
||||||
|
|
||||||
|
cmStringRange GetCompileOptionsEntries() const;
|
||||||
|
cmBacktraceRange GetCompileOptionsBacktraces() const;
|
||||||
|
|
||||||
|
cmStringRange GetCompileFeaturesEntries() const;
|
||||||
|
cmBacktraceRange GetCompileFeaturesBacktraces() const;
|
||||||
|
|
||||||
|
cmStringRange GetCompileDefinitionsEntries() const;
|
||||||
|
cmBacktraceRange GetCompileDefinitionsBacktraces() const;
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
const LinkLibraryVectorType &GetLinkLibrariesForVS6() const {
|
const LinkLibraryVectorType &GetLinkLibrariesForVS6() const {
|
||||||
return this->LinkLibrariesForVS6;}
|
return this->LinkLibrariesForVS6;}
|
||||||
|
@ -553,11 +501,7 @@ private:
|
||||||
bool IsApple;
|
bool IsApple;
|
||||||
bool IsImportedTarget;
|
bool IsImportedTarget;
|
||||||
bool BuildInterfaceIncludesAppended;
|
bool BuildInterfaceIncludesAppended;
|
||||||
mutable bool DebugIncludesDone;
|
|
||||||
mutable bool DebugCompileOptionsDone;
|
|
||||||
mutable bool DebugCompileDefinitionsDone;
|
|
||||||
mutable bool DebugSourcesDone;
|
mutable bool DebugSourcesDone;
|
||||||
mutable bool DebugCompileFeaturesDone;
|
|
||||||
mutable bool LinkImplementationLanguageIsContextDependent;
|
mutable bool LinkImplementationLanguageIsContextDependent;
|
||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
bool LinkLibrariesForVS6Analyzed;
|
bool LinkLibrariesForVS6Analyzed;
|
||||||
|
@ -591,23 +535,10 @@ private:
|
||||||
void ComputeImportInfo(std::string const& desired_config,
|
void ComputeImportInfo(std::string const& desired_config,
|
||||||
ImportInfo& info) const;
|
ImportInfo& info) const;
|
||||||
|
|
||||||
|
|
||||||
LinkInterface const*
|
|
||||||
GetImportLinkInterface(const std::string& config, cmTarget const* head,
|
|
||||||
bool usage_requirements_only) const;
|
|
||||||
|
|
||||||
cmLinkImplementationLibraries const*
|
cmLinkImplementationLibraries const*
|
||||||
GetLinkImplementationLibrariesInternal(const std::string& config,
|
GetLinkImplementationLibrariesInternal(const std::string& config,
|
||||||
cmTarget const* head) const;
|
cmTarget const* head) const;
|
||||||
|
|
||||||
void ExpandLinkItems(std::string const& prop, std::string const& value,
|
|
||||||
std::string const& config, cmTarget const* headTarget,
|
|
||||||
bool usage_requirements_only,
|
|
||||||
std::vector<cmLinkItem>& items,
|
|
||||||
bool& hadHeadSensitiveCondition) const;
|
|
||||||
void LookupLinkItems(std::vector<std::string> const& names,
|
|
||||||
std::vector<cmLinkItem>& items) const;
|
|
||||||
|
|
||||||
std::string ProcessSourceItemCMP0049(const std::string& s);
|
std::string ProcessSourceItemCMP0049(const std::string& s);
|
||||||
|
|
||||||
void ClearLinkMaps();
|
void ClearLinkMaps();
|
||||||
|
|
|
@ -965,7 +965,7 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
|
||||||
std::vector<cmSourceGroup> sourceGroups =
|
std::vector<cmSourceGroup> sourceGroups =
|
||||||
this->Makefile->GetSourceGroups();
|
this->Makefile->GetSourceGroups();
|
||||||
std::vector<cmSourceFile*> classes;
|
std::vector<cmSourceFile*> classes;
|
||||||
if (!this->Target->GetConfigCommonSourceFiles(classes))
|
if (!this->GeneratorTarget->GetConfigCommonSourceFiles(classes))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1934,7 +1934,7 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||||
clOptions.Parse(flags.c_str());
|
clOptions.Parse(flags.c_str());
|
||||||
clOptions.Parse(defineFlags.c_str());
|
clOptions.Parse(defineFlags.c_str());
|
||||||
std::vector<std::string> targetDefines;
|
std::vector<std::string> targetDefines;
|
||||||
this->Target->GetCompileDefinitions(targetDefines,
|
this->GeneratorTarget->GetCompileDefinitions(targetDefines,
|
||||||
configName.c_str(), "CXX");
|
configName.c_str(), "CXX");
|
||||||
clOptions.AddDefines(targetDefines);
|
clOptions.AddDefines(targetDefines);
|
||||||
if(this->MSTools)
|
if(this->MSTools)
|
||||||
|
|
Loading…
Reference in New Issue