Fix incremental linking setting for Fortran + VS

This commit fixes a bug where it was impossible to specify
/INCREMENTAL to Fortran projects built with Visual Studio.

The problem was due to the fact that .vfproj files expect
the value of this flag to be "linkIncremental{No,Yes},
whereas .vcproj files expect this value to be 0, 1, or 2.

The implementation of this fix adds a new data structure for
Visual Studio linker flags specific to Fortran.  This can
easily be extended in the future if more such discrepencies
between C/C++ and Fortran linking are discovered.
This commit is contained in:
Zack Galbreath
2014-11-14 13:47:00 -05:00
parent 0700f2ef19
commit 17b0fe0305
3 changed files with 61 additions and 5 deletions
+38 -3
View File
@@ -24,6 +24,26 @@ std::string cmVisualStudioGeneratorOptionsEscapeForXML(std::string ret)
return ret;
}
//----------------------------------------------------------------------------
cmVisualStudioGeneratorOptions
::cmVisualStudioGeneratorOptions(cmLocalVisualStudioGenerator* lg,
Tool tool,
cmVisualStudio10TargetGenerator* g):
cmIDEOptions(),
LocalGenerator(lg), Version(lg->GetVersion()), CurrentTool(tool),
TargetGenerator(g)
{
// Preprocessor definitions are not allowed for linker tools.
this->AllowDefine = (tool != Linker);
// Slash options are allowed for VS.
this->AllowSlash = true;
this->FortranRuntimeDebug = false;
this->FortranRuntimeDLL = false;
this->FortranRuntimeMT = false;
}
//----------------------------------------------------------------------------
cmVisualStudioGeneratorOptions
::cmVisualStudioGeneratorOptions(cmLocalVisualStudioGenerator* lg,
@@ -36,9 +56,8 @@ cmVisualStudioGeneratorOptions
TargetGenerator(g)
{
// Store the given flag tables.
cmIDEFlagTable const** ft = this->FlagTable;
if(table) { *ft++ = table; }
if(extraTable) { *ft++ = extraTable; }
this->AddTable(table);
this->AddTable(extraTable);
// Preprocessor definitions are not allowed for linker tools.
this->AllowDefine = (tool != Linker);
@@ -51,6 +70,22 @@ cmVisualStudioGeneratorOptions
this->FortranRuntimeMT = false;
}
//----------------------------------------------------------------------------
void cmVisualStudioGeneratorOptions::AddTable(cmVS7FlagTable const* table)
{
if(table)
{
for(int i=0; i < FlagTableCount; ++i)
{
if (!this->FlagTable[i])
{
this->FlagTable[i] = table;
break;
}
}
}
}
//----------------------------------------------------------------------------
void cmVisualStudioGeneratorOptions::FixExceptionHandlingDefault()
{