|
|
@@ -245,6 +245,50 @@ void cmFortranParser_RuleModule(cmFortranParser* parser,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void cmFortranParser_RuleSubmodule(cmFortranParser* parser,
|
|
|
+ const char* module_name,
|
|
|
+ const char* submodule_name)
|
|
|
+{
|
|
|
+ if (parser->InPPFalseBranch) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // syntax: "submodule (module_name) submodule_name"
|
|
|
+ // requires: "module_name.mod"
|
|
|
+ // provides: "module_name@submodule_name.smod"
|
|
|
+ //
|
|
|
+ // FIXME: Some compilers split the submodule part of a module into a
|
|
|
+ // separate "module_name.smod" file. Whether it is generated or
|
|
|
+ // not depends on conditions more subtle than we currently detect.
|
|
|
+ // For now we depend directly on "module_name.mod".
|
|
|
+
|
|
|
+ std::string const& mod_name = cmSystemTools::LowerCase(module_name);
|
|
|
+ std::string const& sub_name = cmSystemTools::LowerCase(submodule_name);
|
|
|
+ parser->Info.Requires.insert(mod_name + ".mod");
|
|
|
+ parser->Info.Provides.insert(mod_name + "@" + sub_name + ".smod");
|
|
|
+}
|
|
|
+
|
|
|
+void cmFortranParser_RuleSubmoduleNested(cmFortranParser* parser,
|
|
|
+ const char* module_name,
|
|
|
+ const char* submodule_name,
|
|
|
+ const char* nested_submodule_name)
|
|
|
+{
|
|
|
+ if (parser->InPPFalseBranch) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // syntax: "submodule (module_name:submodule_name) nested_submodule_name"
|
|
|
+ // requires: "module_name@submodule_name.smod"
|
|
|
+ // provides: "module_name@nested_submodule_name.smod"
|
|
|
+
|
|
|
+ std::string const& mod_name = cmSystemTools::LowerCase(module_name);
|
|
|
+ std::string const& sub_name = cmSystemTools::LowerCase(submodule_name);
|
|
|
+ std::string const& nest_name =
|
|
|
+ cmSystemTools::LowerCase(nested_submodule_name);
|
|
|
+ parser->Info.Requires.insert(mod_name + "@" + sub_name + ".smod");
|
|
|
+ parser->Info.Provides.insert(mod_name + "@" + nest_name + ".smod");
|
|
|
+}
|
|
|
+
|
|
|
void cmFortranParser_RuleDefine(cmFortranParser* parser, const char* macro)
|
|
|
{
|
|
|
if (!parser->InPPFalseBranch) {
|