diff --git a/Help/prop_tgt/Fortran_BUILDING_INTRINSIC_MODULES.rst b/Help/prop_tgt/Fortran_BUILDING_INTRINSIC_MODULES.rst index 8e0f71ba96..f7152abe1a 100644 --- a/Help/prop_tgt/Fortran_BUILDING_INTRINSIC_MODULES.rst +++ b/Help/prop_tgt/Fortran_BUILDING_INTRINSIC_MODULES.rst @@ -14,3 +14,7 @@ Turning this property on will correctly add dependencies for building Fortran intrinsic modules whereas turning the property off will ignore Fortran intrinsic modules in the dependency graph as they are supplied by the compiler itself. + +.. versionadded:: 4.5 + This property is now honored by the :ref:`Ninja Generators`. + Previously it was only honored by the :ref:`Makefile Generators`. diff --git a/Help/release/dev/fortran-intrinsic-modules-ninja.rst b/Help/release/dev/fortran-intrinsic-modules-ninja.rst new file mode 100644 index 0000000000..b4209fa920 --- /dev/null +++ b/Help/release/dev/fortran-intrinsic-modules-ninja.rst @@ -0,0 +1,6 @@ +fortran-intrinsic-modules-ninja +------------------------------- + +* The :prop_tgt:`Fortran_BUILDING_INTRINSIC_MODULES` target property is now + honored by the :ref:`Ninja Generators`. Previously it was only honored + by the :ref:`Makefile Generators`. diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 8d29ec42ec..bed1634f2b 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -2565,6 +2566,7 @@ cm::optional cmcmd_cmake_ninja_depends_fortran( std::vector includes; std::string dir_top_bld; std::string module_dir; + bool building_intrinsics = false; if (!arg_src_orig.empty()) { // Prepend the original source file's directory as an include directory @@ -2615,6 +2617,10 @@ cm::optional cmcmd_cmake_ninja_depends_fortran( Json::Value const& tdi_submodule_ext = tdi["submodule-ext"]; fc.SModExt = tdi_submodule_ext.asString(); + + Json::Value const& tdi_building_intrinsics = + tdi["building-intrinsic-modules"]; + building_intrinsics = tdi_building_intrinsics.asBool(); } cmFortranSourceInfo finfo; @@ -2643,7 +2649,11 @@ cm::optional cmcmd_cmake_ninja_depends_fortran( } info->ScanDep.Provides.emplace_back(src_info); } - for (std::string const& require : finfo.Requires) { + std::set requiredModules = finfo.Requires; + if (building_intrinsics) { + requiredModules.insert(finfo.Intrinsics.begin(), finfo.Intrinsics.end()); + } + for (std::string const& require : requiredModules) { // Require modules not provided in the same source. if (finfo.Provides.count(require)) { continue; diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index f2505de290..ec5c369052 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -2376,6 +2376,8 @@ void cmNinjaTargetGenerator::WriteTargetDependInfo(std::string const& lang, this->Makefile->GetSafeDefinition("CMAKE_Fortran_SUBMODULE_SEP"); tdi["submodule-ext"] = this->Makefile->GetSafeDefinition("CMAKE_Fortran_SUBMODULE_EXT"); + tdi["building-intrinsic-modules"] = + this->GeneratorTarget->IsFortranBuildingIntrinsicModules(); } else if (lang == "CXX") { // No extra information necessary. }