Create Fortran info variables for .mod behavior

Define CMAKE_Fortran_MODDIR_DEFAULT and CMAKE_Fortran_MODOUT_FLAG
variables to help some Fortran compilers generate .mod files in the
current working directory.
This commit is contained in:
Brad King 2010-11-12 09:03:49 -05:00
parent 3c245ab2ba
commit 34e1ac2489
2 changed files with 36 additions and 0 deletions

View File

@ -1336,6 +1336,29 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"this variable is defined to 1.", "this variable is defined to 1.",
false,"Variables for Languages"); false,"Variables for Languages");
cm->DefineProperty(
"CMAKE_Fortran_MODDIR_FLAG", cmProperty::VARIABLE,
"Fortran flag for module output directory.",
"This stores the flag needed to pass the value of the "
"Fortran_MODULE_DIRECTORY target property to the compiler.",
false,"Variables for Languages");
cm->DefineProperty(
"CMAKE_Fortran_MODDIR_DEFAULT", cmProperty::VARIABLE,
"Fortran default module output directory.",
"Most Fortran compilers write .mod files to the current working "
"directory. "
"For those that do not, this is set to \".\" and used when the "
"Fortran_MODULE_DIRECTORY target property is not set.",
false,"Variables for Languages");
cm->DefineProperty(
"CMAKE_Fortran_MODOUT_FLAG", cmProperty::VARIABLE,
"Fortran flag to enable module output.",
"Most Fortran compilers write .mod files out by default. "
"For others, this stores the flag needed to enable module output.",
false,"Variables for Languages");
// variables that are used by cmake but not to be documented // variables that are used by cmake but not to be documented
cm->DefineProperty("CMAKE_MATCH_0", cmProperty::VARIABLE,0,0); cm->DefineProperty("CMAKE_MATCH_0", cmProperty::VARIABLE,0,0);
cm->DefineProperty("CMAKE_MATCH_1", cmProperty::VARIABLE,0,0); cm->DefineProperty("CMAKE_MATCH_1", cmProperty::VARIABLE,0,0);

View File

@ -1723,6 +1723,8 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
this->Target->GetProperty("Fortran_MODULE_DIRECTORY"); this->Target->GetProperty("Fortran_MODULE_DIRECTORY");
const char* moddir_flag = const char* moddir_flag =
this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_FLAG"); this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_FLAG");
const char* moddir_default =
this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_DEFAULT");
if(target_mod_dir && moddir_flag) if(target_mod_dir && moddir_flag)
{ {
// Compute the full path to the module directory. // Compute the full path to the module directory.
@ -1743,6 +1745,10 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
// Make sure the module output directory exists. // Make sure the module output directory exists.
cmSystemTools::MakeDirectory(this->FortranModuleDirectory.c_str()); cmSystemTools::MakeDirectory(this->FortranModuleDirectory.c_str());
} }
else if(moddir_default && moddir_flag)
{
this->FortranModuleDirectory = moddir_default;
}
this->FortranModuleDirectoryComputed = true; this->FortranModuleDirectoryComputed = true;
} }
@ -1760,6 +1766,13 @@ const char* cmMakefileTargetGenerator::GetFortranModuleDirectory()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmMakefileTargetGenerator::AddFortranFlags(std::string& flags) void cmMakefileTargetGenerator::AddFortranFlags(std::string& flags)
{ {
// Enable module output if necessary.
if(const char* modout_flag =
this->Makefile->GetDefinition("CMAKE_Fortran_MODOUT_FLAG"))
{
this->LocalGenerator->AppendFlags(flags, modout_flag);
}
// Add a module output directory flag if necessary. // Add a module output directory flag if necessary.
if(const char* mod_dir = this->GetFortranModuleDirectory()) if(const char* mod_dir = this->GetFortranModuleDirectory())
{ {