Selaa lähdekoodia

cmake: avoid getcwd in `CollapseFullPath`

`CollapseFullPath` calls getcwd, which is a rather expensive system
call. we can replace it with `GetHomeOutputDirectory()` to save us from
the calling overhead
Tim Blechmann 5 vuotta sitten
vanhempi
sitoutus
22f38c0d6b

+ 2 - 1
Source/cmAddCustomCommandCommand.cxx

@@ -215,7 +215,8 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
       }
 
       if (cmSystemTools::FileIsFullPath(filename)) {
-        filename = cmSystemTools::CollapseFullPath(filename);
+        filename = cmSystemTools::CollapseFullPath(
+          filename, status.GetMakefile().GetHomeOutputDirectory());
       }
       switch (doing) {
         case doing_depfile:

+ 2 - 1
Source/cmAddSubDirectoryCommand.cxx

@@ -53,7 +53,8 @@ bool cmAddSubDirectoryCommand(std::vector<std::string> const& args,
     status.SetError(error);
     return false;
   }
-  srcPath = cmSystemTools::CollapseFullPath(srcPath);
+  srcPath =
+    cmSystemTools::CollapseFullPath(srcPath, mf.GetHomeOutputDirectory());
 
   // Compute the full path to the binary directory.
   std::string binPath;

+ 2 - 1
Source/cmCustomCommandGenerator.cxx

@@ -34,7 +34,8 @@ void AppendPaths(const std::vector<std::string>& inputs,
         it = cmStrCat(lg->GetMakefile()->GetCurrentBinaryDirectory(), '/', it);
       }
       if (cmSystemTools::FileIsFullPath(it)) {
-        it = cmSystemTools::CollapseFullPath(it);
+        it = cmSystemTools::CollapseFullPath(
+          it, lg->GetMakefile()->GetHomeOutputDirectory());
       }
     }
     cm::append(output, result);

+ 2 - 1
Source/cmGeneratorTarget.cxx

@@ -3087,7 +3087,8 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetIncludeDirectories(
     cmLinkImplementationLibraries const* impl =
       this->GetLinkImplementationLibraries(config);
     for (cmLinkImplItem const& lib : impl->Libraries) {
-      std::string libDir = cmSystemTools::CollapseFullPath(lib.AsStr());
+      std::string libDir = cmSystemTools::CollapseFullPath(
+        lib.AsStr(), this->Makefile->GetHomeOutputDirectory());
 
       static cmsys::RegularExpression frameworkCheck(
         "(.*\\.framework)(/Versions/[^/]+)?/[^/]+$");

+ 2 - 1
Source/cmSourceFileLocation.cxx

@@ -31,7 +31,8 @@ cmSourceFileLocation::cmSourceFileLocation(cmMakefile const* mf,
   this->AmbiguousExtension = true;
   this->Directory = cmSystemTools::GetFilenamePath(name);
   if (cmSystemTools::FileIsFullPath(this->Directory)) {
-    this->Directory = cmSystemTools::CollapseFullPath(this->Directory);
+    this->Directory = cmSystemTools::CollapseFullPath(
+      this->Directory, mf->GetHomeOutputDirectory());
   }
   this->Name = cmSystemTools::GetFilenameName(name);
   if (kind == cmSourceFileLocationKind::Known) {