mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-08-02 23:57:23 +08:00
Ninja: Honor Fortran_BUILDING_INTRINSIC_MODULES
In commit b65930a7a7 (Fortran: Add Fortran_BUILDING_INTRINSIC_MODULES for building intrinsics, 2025-01-09, v4.0.0-rc1~223^2) we only implemented the property for the Makefile generators. Implement it for the Ninja generators too. Fixes: #26803
This commit is contained in:
parent
365c7d6af8
commit
0e142193ac
@ -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`.
|
||||
|
||||
6
Help/release/dev/fortran-intrinsic-modules-ninja.rst
Normal file
6
Help/release/dev/fortran-intrinsic-modules-ninja.rst
Normal file
@ -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`.
|
||||
@ -7,6 +7,7 @@
|
||||
#include <cstdio>
|
||||
#include <functional>
|
||||
#include <iterator>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <utility>
|
||||
|
||||
@ -2565,6 +2566,7 @@ cm::optional<cmSourceInfo> cmcmd_cmake_ninja_depends_fortran(
|
||||
std::vector<std::string> 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<cmSourceInfo> 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<cmSourceInfo> cmcmd_cmake_ninja_depends_fortran(
|
||||
}
|
||||
info->ScanDep.Provides.emplace_back(src_info);
|
||||
}
|
||||
for (std::string const& require : finfo.Requires) {
|
||||
std::set<std::string> 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;
|
||||
|
||||
@ -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.
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user