[PATCH] D58118: Fix llvm-config behavior when LLVM_TOOLS_INSTALL_DIR has a depth greater than one

serge via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 12 06:46:10 PST 2019


serge-sans-paille created this revision.
serge-sans-paille added reviewers: sylvestre.ledru, tstellar.
serge-sans-paille added a project: LLVM.
Herald added subscribers: llvm-commits, jdoerfert.

`llvm-config` makes the assumption that `LLVM_TOOLS_INSTALL_DIR` is a single directory. Choosing a (relative) path with a depth greater than one leads to invalid prefix computation.


Repository:
  rL LLVM

https://reviews.llvm.org/D58118

Files:
  tools/llvm-config/llvm-config.cpp


Index: tools/llvm-config/llvm-config.cpp
===================================================================
--- tools/llvm-config/llvm-config.cpp
+++ tools/llvm-config/llvm-config.cpp
@@ -268,7 +268,6 @@
   // tree.
   bool IsInDevelopmentTree;
   enum { CMakeStyle, CMakeBuildModeStyle } DevelopmentTreeLayout;
-  llvm::SmallString<256> CurrentPath(GetExecutablePath(argv[0]));
   std::string CurrentExecPrefix;
   std::string ActiveObjRoot;
 
@@ -279,11 +278,18 @@
     build_mode = CMAKE_CFG_INTDIR;
 #endif
 
-  // Create an absolute path, and pop up one directory (we expect to be inside a
-  // bin dir).
-  sys::fs::make_absolute(CurrentPath);
-  CurrentExecPrefix =
-      sys::path::parent_path(sys::path::parent_path(CurrentPath)).str();
+  // Create an absolute path, and pop up as much directory as in
+  // LLVM_TOOLS_INSTALL_DIR
+  {
+    llvm::SmallString<256> CurrentPath(GetExecutablePath(argv[0]));
+    sys::fs::make_absolute(CurrentPath);
+    for (auto iter = sys::path::begin(LLVM_TOOLS_INSTALL_DIR),
+              end = sys::path::end(LLVM_TOOLS_INSTALL_DIR);
+         iter != end; ++iter) {
+      CurrentPath = sys::path::parent_path(CurrentPath).str();
+    }
+    CurrentExecPrefix = sys::path::parent_path(CurrentPath).str();
+  }
 
   // Check to see if we are inside a development tree by comparing to possible
   // locations (prefix style or CMake style).


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58118.186454.patch
Type: text/x-patch
Size: 1391 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190212/a98eb58a/attachment.bin>


More information about the llvm-commits mailing list