Browse Source

cmGeneratorTarget: search for relative paths to the binary directory

Dependencies in the form `./somepath.txt` are not found otherwise
because we only match on last-path-component searches and `.` never
shows up in a full path as a full component.
Ben Boeckel 5 years ago
parent
commit
db4780d584
1 changed files with 11 additions and 0 deletions
  1. 11 0
      Source/cmGeneratorTarget.cxx

+ 11 - 0
Source/cmGeneratorTarget.cxx

@@ -2713,6 +2713,17 @@ void cmTargetTraceDependencies::FollowName(std::string const& name)
   if (i == this->NameMap.end() || i->first != name) {
     // Check if we know how to generate this file.
     cmSourcesWithOutput sources = this->Makefile->GetSourcesWithOutput(name);
+    // If we failed to find a target or source and we have a relative path, it
+    // might be a valid source if made relative to the current binary
+    // directory.
+    if (!sources.Target && !sources.Source &&
+        !cmSystemTools::FileIsFullPath(name)) {
+      auto fullname =
+        cmStrCat(this->Makefile->GetCurrentBinaryDirectory(), '/', name);
+      fullname = cmSystemTools::CollapseFullPath(
+        fullname, this->Makefile->GetHomeOutputDirectory());
+      sources = this->Makefile->GetSourcesWithOutput(fullname);
+    }
     i = this->NameMap.emplace_hint(i, name, sources);
   }
   if (cmTarget* t = i->second.Target) {