Browse Source

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.
Brad King 4 years ago
parent
commit
10b2e53469
2 changed files with 14 additions and 13 deletions
  1. 12 4
      Source/cmGlobalNinjaGenerator.cxx
  2. 2 9
      Source/cmScanDepFormat.cxx

+ 12 - 4
Source/cmGlobalNinjaGenerator.cxx

@@ -2448,7 +2448,6 @@ cm::optional<cmSourceInfo> 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<cmSourceInfo> 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;
     }

+ 2 - 9
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);
     }