[lldb-dev] Should FileSpec::Resolve() look at PATH?

Greg Clayton gclayton at apple.com
Tue Oct 14 18:21:02 PDT 2014


Again, if you say:

(lldb) platform select remote-ios
(lldb) target create ls

I would expect it to find it in the iOS SDK, not in /bin/ls. So the currently selected platform is the one that must resolve this.


> On Oct 14, 2014, at 6:06 PM, Zachary Turner <zturner at google.com> wrote:
> 
> Although extremely uncommon, it's theoretically possible to have a different system installation directory.  Is this not possible on posix platforms?  Is it guaranteed that /bin/sh is always the path, no matter what strange things a user might have done to their system?

Yes this is possible. This is why you want the platform to resolve this. It can look at the environment for the current host platform if it is the host platform and "do the right thing".

> Maybe a better solution is to have RunShellCommand() call Platform::ResolveExecutable.

That isn't required, maybe for windows? But if this the current platform is the host platform, then running a command like "sh foo.cmd" should find the "sh" in the current path.

> 
> On Tue, Oct 14, 2014 at 5:45 PM, Greg Clayton <gclayton at apple.com> wrote:
> As a follow up, the Platform::ResolveExecutable() should be the one to resolve executables and the function call actually shouldn't go on FileSpec.
> 
> > On Oct 14, 2014, at 5:38 PM, Greg Clayton <gclayton at apple.com> wrote:
> >
> >
> >> On Oct 14, 2014, at 4:36 PM, Zachary Turner <zturner at google.com> wrote:
> >>
> >> I have an issue on Windows when trying to run shell commands.  We specify the shell as "cmd.exe", create a FileSpec out of this, and call FileSpec::Resolve.  This ends up making an absolute path out of cmd.exe, but it does so by just sticking the working directory onto the front of it, which is obviously wrong.
> >>
> >> My question is: For FileSpecs that are only filenames, nothing else, should we attempt to locate a matching file in PATH, and when we find one use the resulting absolute path?
> >
> > Not by default. We should have a method on FileSpec that might say "ResolveExecutableUsingPath()", but I wouldn't do it by default for every file spec. Not every file is an executable, so we shouldn't treat all files as executables by default unless a method is explicitly called on that.
> >
> > As a side questions, we provide a complete path to "/bin/sh" as the shell for unix, shouldn't we specify a full path to "cmd.exe" as well? Does it live in a known location on windows?
> >
> > Greg
> >
> >
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> 
> 





More information about the lldb-dev mailing list