Re: [Lldb-commits] [lldb] r320240 - Update PlatformDarwin::GetDeveloperDir to handle the two
No worries! Do you want me to assign a PR/radar to you? Thanks! -- Davide On Thu, Dec 21, 2017 at 5:41 PM, Jason Molendawrote: > Yeah I need to see if I can write a unit test instantiating the platform and > changing the values that HostInfo::GetLLDBPath returns to synthetic values, > but I haven’t had time to look at that yet. > >> On Dec 21, 2017, at 7:01 AM, Davide Italiano via lldb-commits >> wrote: >> >> Jason, any chance we can write a test case for this? >> >> -- >> Davide >> >>> On Mon, Dec 11, 2017 at 12:52 AM, Davide Italiano >>> wrote: >>> Testcase? >>> >>> On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commits >>> wrote: Author: jmolenda Date: Fri Dec 8 19:06:19 2017 New Revision: 320240 URL: http://llvm.org/viewvc/llvm-project?rev=320240=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. 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=320239=320240=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 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 >> ___ >> lldb-commits mailing list >> lldb-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > ___ lldb-commits mailing list lldb-commits@lists.llvm.org
Re: [Lldb-commits] [lldb] r320240 - Update PlatformDarwin::GetDeveloperDir to handle the two
Yeah I need to see if I can write a unit test instantiating the platform and changing the values that HostInfo::GetLLDBPath returns to synthetic values, but I haven’t had time to look at that yet. > On Dec 21, 2017, at 7:01 AM, Davide Italiano via lldb-commits >wrote: > > Jason, any chance we can write a test case for this? > > -- > Davide > >> On Mon, Dec 11, 2017 at 12:52 AM, Davide Italiano >> wrote: >> Testcase? >> >> On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commits >> wrote: >>> Author: jmolenda >>> Date: Fri Dec 8 19:06:19 2017 >>> New Revision: 320240 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=320240=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. >>> >>> >>> >>> 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=320239=320240=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 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 > ___ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r320240 - Update PlatformDarwin::GetDeveloperDir to handle the two
Jason, any chance we can write a test case for this? -- Davide On Mon, Dec 11, 2017 at 12:52 AM, Davide Italianowrote: > Testcase? > > On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commits > wrote: >> Author: jmolenda >> Date: Fri Dec 8 19:06:19 2017 >> New Revision: 320240 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=320240=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. >> >> >> >> 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=320239=320240=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 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 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r320240 - Update PlatformDarwin::GetDeveloperDir to handle the two
Testcase? On Fri, Dec 8, 2017 at 7:06 PM, Jason Molenda via lldb-commitswrote: > Author: jmolenda > Date: Fri Dec 8 19:06:19 2017 > New Revision: 320240 > > URL: http://llvm.org/viewvc/llvm-project?rev=320240=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. > > > > 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=320239=320240=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 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 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits