Merge topic 'vs-show-def-files'

e7e713cc VS: Add module definition `.def` files to .vcxproj files (#15313)
247c168b Refactor `.def` file lookup
adfc8a67 cmGeneratorTarget: Fix IMPLEMENT_VISIT_IMPL for template data types
This commit is contained in:
Brad King 2015-11-04 10:13:27 -05:00 committed by CMake Topic Stage
commit 49ac682d39
7 changed files with 30 additions and 16 deletions

View File

@ -81,7 +81,7 @@ void cmCommonTargetGenerator::AddFeatureFlags(
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmCommonTargetGenerator::AddModuleDefinitionFlag(std::string& flags) void cmCommonTargetGenerator::AddModuleDefinitionFlag(std::string& flags)
{ {
if(this->ModuleDefinitionFile.empty()) if(!this->ModuleDefinitionFile)
{ {
return; return;
} }
@ -98,7 +98,7 @@ void cmCommonTargetGenerator::AddModuleDefinitionFlag(std::string& flags)
// vs6's "cl -link" pass it to the linker. // vs6's "cl -link" pass it to the linker.
std::string flag = defFileFlag; std::string flag = defFileFlag;
flag += (this->LocalGenerator->ConvertToLinkReference( flag += (this->LocalGenerator->ConvertToLinkReference(
this->ModuleDefinitionFile)); this->ModuleDefinitionFile->GetFullPath()));
this->LocalGenerator->AppendFlags(flags, flag); this->LocalGenerator->AppendFlags(flags, flag);
} }

View File

@ -54,7 +54,7 @@ protected:
std::string ConfigName; std::string ConfigName;
// The windows module definition source file (.def), if any. // The windows module definition source file (.def), if any.
std::string ModuleDefinitionFile; cmSourceFile const* ModuleDefinitionFile;
// Target-wide Fortran module output directory. // Target-wide Fortran module output directory.
bool FortranModuleDirectoryComputed; bool FortranModuleDirectoryComputed;

View File

@ -573,7 +573,7 @@ static void handleSystemIncludesDep(cmLocalGenerator *lg,
{ \ { \
std::vector<cmSourceFile*> sourceFiles; \ std::vector<cmSourceFile*> sourceFiles; \
this->GetSourceFiles(sourceFiles, config); \ this->GetSourceFiles(sourceFiles, config); \
TagVisitor<DATA ## Tag DATATYPE> visitor(this, data); \ TagVisitor< DATA##Tag DATATYPE > visitor(this, data); \
for(std::vector<cmSourceFile*>::const_iterator si = sourceFiles.begin(); \ for(std::vector<cmSourceFile*>::const_iterator si = sourceFiles.begin(); \
si != sourceFiles.end(); ++si) \ si != sourceFiles.end(); ++si) \
{ \ { \
@ -2095,12 +2095,18 @@ cmGeneratorTarget::CompileInfo const* cmGeneratorTarget::GetCompileInfo(
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
std::string cmSourceFile const*
cmGeneratorTarget::GetModuleDefinitionFile(const std::string& config) const cmGeneratorTarget::GetModuleDefinitionFile(const std::string& config) const
{ {
std::string data; std::vector<cmSourceFile const*> data;
IMPLEMENT_VISIT_IMPL(ModuleDefinitionFile, COMMA std::string) IMPLEMENT_VISIT_IMPL(ModuleDefinitionFile,
return data; COMMA std::vector<cmSourceFile const*>)
if(!data.empty())
{
return data.front();
}
return 0;
} }
bool cmGeneratorTarget::IsDLLPlatform() const bool cmGeneratorTarget::IsDLLPlatform() const

View File

@ -220,7 +220,7 @@ public:
cmLocalGenerator* LocalGenerator; cmLocalGenerator* LocalGenerator;
cmGlobalGenerator const* GlobalGenerator; cmGlobalGenerator const* GlobalGenerator;
std::string GetModuleDefinitionFile(const std::string& config) const; cmSourceFile const* GetModuleDefinitionFile(const std::string& config) const;
/** Return whether or not the target is for a DLL platform. */ /** Return whether or not the target is for a DLL platform. */
bool IsDLLPlatform() const; bool IsDLLPlatform() const;

View File

@ -1497,9 +1497,9 @@ void cmMakefileTargetGenerator
this->AppendTargetDepends(depends); this->AppendTargetDepends(depends);
// Add a dependency on the link definitions file, if any. // Add a dependency on the link definitions file, if any.
if(!this->ModuleDefinitionFile.empty()) if(this->ModuleDefinitionFile)
{ {
depends.push_back(this->ModuleDefinitionFile); depends.push_back(this->ModuleDefinitionFile->GetFullPath());
} }
// Add a dependency on user-specified manifest files, if any. // Add a dependency on user-specified manifest files, if any.

View File

@ -195,9 +195,10 @@ cmNinjaDeps cmNinjaTargetGenerator::ComputeLinkDeps() const
std::transform(deps.begin(), deps.end(), result.begin(), MapToNinjaPath()); std::transform(deps.begin(), deps.end(), result.begin(), MapToNinjaPath());
// Add a dependency on the link definitions file, if any. // Add a dependency on the link definitions file, if any.
if(!this->ModuleDefinitionFile.empty()) if(this->ModuleDefinitionFile)
{ {
result.push_back(this->ConvertToNinjaPath(this->ModuleDefinitionFile)); result.push_back(this->ConvertToNinjaPath(
this->ModuleDefinitionFile->GetFullPath()));
} }
// Add a dependency on user-specified manifest files, if any. // Add a dependency on user-specified manifest files, if any.

View File

@ -1613,6 +1613,12 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
(*this->BuildFileStream ) << cmVS10EscapeXML(obj) << "\" />\n"; (*this->BuildFileStream ) << cmVS10EscapeXML(obj) << "\" />\n";
} }
if (cmSourceFile const* defsrc =
this->GeneratorTarget->GetModuleDefinitionFile(""))
{
this->WriteSource("None", defsrc);
}
if (this->IsMissingFiles) if (this->IsMissingFiles)
{ {
this->WriteMissingFiles(); this->WriteMissingFiles();
@ -2642,10 +2648,11 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config)
if(this->MSTools) if(this->MSTools)
{ {
std::string def = this->GeneratorTarget->GetModuleDefinitionFile(""); if (cmSourceFile const* defsrc =
if(!def.empty()) this->GeneratorTarget->GetModuleDefinitionFile(""))
{ {
linkOptions.AddFlag("ModuleDefinitionFile", def.c_str()); linkOptions.AddFlag("ModuleDefinitionFile",
defsrc->GetFullPath().c_str());
} }
linkOptions.AppendFlag("IgnoreSpecificDefaultLibraries", linkOptions.AppendFlag("IgnoreSpecificDefaultLibraries",
"%(IgnoreSpecificDefaultLibraries)"); "%(IgnoreSpecificDefaultLibraries)");