Author: jmolenda
Date: Fri Dec  8 19:06:19 2017
New Revision: 320240

URL: http://llvm.org/viewvc/llvm-project?rev=320240&view=rev
Log:
Update PlatformDarwin::GetDeveloperDir to handle the two
most common cases where the Xcode.app bundle puts lldb -
either as a default part of the bundle, or in a toolchain
subdirectory, so the platform subclasses can find files
relative to this directory.

Dropped support for handling the case where the lldb
framework was in /Library/PrivateFrameworks.  I think
this was intended to handle the case where lldb is installed
in / (outside the Xcode.app bundle) - but in that case, we
can look in the raw directory file paths to find anything.

<rdar://problem/35285622> 

Modified:
    lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp?rev=320240&r1=320239&r2=320240&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp (original)
+++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp Fri Dec  8 
19:06:19 2017
@@ -1132,28 +1132,33 @@ bool PlatformDarwin::ARMGetSupportedArch
   return false;
 }
 
+// Return a directory path like /Applications/Xcode.app/Contents/Developer
 const char *PlatformDarwin::GetDeveloperDirectory() {
   std::lock_guard<std::mutex> guard(m_mutex);
   if (m_developer_directory.empty()) {
     bool developer_dir_path_valid = false;
     char developer_dir_path[PATH_MAX];
     FileSpec temp_file_spec;
+
+    // Get the lldb framework's file path, and if it exists, truncate some
+    // components to only the developer directory path.
     if (HostInfo::GetLLDBPath(ePathTypeLLDBShlibDir, temp_file_spec)) {
       if (temp_file_spec.GetPath(developer_dir_path,
                                  sizeof(developer_dir_path))) {
+        // e.g. 
/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework
         char *shared_frameworks =
             strstr(developer_dir_path, "/SharedFrameworks/LLDB.framework");
         if (shared_frameworks) {
-          ::snprintf(shared_frameworks,
-                     sizeof(developer_dir_path) -
-                         (shared_frameworks - developer_dir_path),
-                     "/Developer");
+          shared_frameworks[0] = '\0';  // truncate developer_dir_path at this 
point
+          strncat (developer_dir_path, "/Developer", sizeof 
(developer_dir_path) - 1); // add /Developer on
           developer_dir_path_valid = true;
         } else {
-          char *lib_priv_frameworks = strstr(
-              developer_dir_path, "/Library/PrivateFrameworks/LLDB.framework");
-          if (lib_priv_frameworks) {
-            *lib_priv_frameworks = '\0';
+          // e.g. 
/Applications/Xcode.app/Contents/Developer/Toolchains/iOS11.2.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework
+          char *developer_toolchains =
+            strstr(developer_dir_path, "/Contents/Developer/Toolchains/");
+          if (developer_toolchains) {
+            developer_toolchains += sizeof ("/Contents/Developer") - 1;
+            developer_toolchains[0] = '\0'; // truncate developer_dir_path at 
this point
             developer_dir_path_valid = true;
           }
         }


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to