From 10b2e5346984d95c15d0cc38ddf5c5fad11a6a65 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 14 Jun 2021 16:14:35 -0400 Subject: cmScanDepFormat: Remove Fortran-specific compiled-module-path logic Read and write the `compiled-module-path` field only when explicitly known. Move the assumption that the `compiled-module-path` can be derived from the logical module name from the scandep parser to the `cmake_ninja_dyndep` helper. --- Source/cmGlobalNinjaGenerator.cxx | 16 ++++++++++++---- Source/cmScanDepFormat.cxx | 11 ++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index cbe1bc8..5108a6f 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -2448,7 +2448,6 @@ cm::optional cmcmd_cmake_ninja_depends_fortran( for (std::string const& provide : finfo.Provides) { cmSourceReqInfo src_info; src_info.LogicalName = provide; - src_info.CompiledModulePath = provide; info->ScanDep.Provides.emplace_back(src_info); } for (std::string const& require : finfo.Requires) { @@ -2458,7 +2457,6 @@ cm::optional cmcmd_cmake_ninja_depends_fortran( } cmSourceReqInfo src_info; src_info.LogicalName = require; - src_info.CompiledModulePath = require; info->ScanDep.Requires.emplace_back(src_info); } for (std::string const& include : finfo.Includes) { @@ -2529,8 +2527,18 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile( Json::Value tm = Json::objectValue; for (cmScanDepInfo const& object : objects) { for (auto const& p : object.Provides) { - std::string const mod = cmStrCat( - module_dir, cmSystemTools::GetFilenameName(p.CompiledModulePath)); + std::string mod; + if (!p.CompiledModulePath.empty()) { + // The scanner provided the path to the module file. + mod = p.CompiledModulePath; + if (!cmSystemTools::FileIsFullPath(mod)) { + // Treat relative to work directory (top of build tree). + mod = cmSystemTools::CollapseFullPath(mod, dir_top_bld); + } + } else { + // Assume the module file path matches the logical module name. + mod = cmStrCat(module_dir, p.LogicalName); + } mod_files[p.LogicalName] = mod; tm[p.LogicalName] = mod; } diff --git a/Source/cmScanDepFormat.cxx b/Source/cmScanDepFormat.cxx index ae0e649..6fcbce5 100644 --- a/Source/cmScanDepFormat.cxx +++ b/Source/cmScanDepFormat.cxx @@ -162,9 +162,6 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp, provide["compiled-module-path"]; PARSE_FILENAME(compiled_module_path, provide_info.CompiledModulePath); - } else { - provide_info.CompiledModulePath = - cmStrCat(provide_info.LogicalName, ".mod"); } if (provide.isMember("unique-on-source-path")) { @@ -299,9 +296,7 @@ bool cmScanDepFormat_P1689_Write(std::string const& path, Json::Value provide_obj(Json::objectValue); auto const encoded = EncodeFilename(provide.LogicalName); provide_obj["logical-name"] = encoded; - if (provide.CompiledModulePath.empty()) { - provide_obj["compiled-module-path"] = encoded; - } else { + if (!provide.CompiledModulePath.empty()) { provide_obj["compiled-module-path"] = EncodeFilename(provide.CompiledModulePath); } @@ -321,9 +316,7 @@ bool cmScanDepFormat_P1689_Write(std::string const& path, Json::Value require_obj(Json::objectValue); auto const encoded = EncodeFilename(require.LogicalName); require_obj["logical-name"] = encoded; - if (require.CompiledModulePath.empty()) { - require_obj["compiled-module-path"] = encoded; - } else { + if (!require.CompiledModulePath.empty()) { require_obj["compiled-module-path"] = EncodeFilename(require.CompiledModulePath); } -- cgit v0.12