Wed 04 Aug 2010 01:50:42 PM UTC, comment #7:
Hi Eli,
> Sorry, I don't follow. I'm not even sure we are talking about the same thing, so let's step back for a moment and see that we understand each other.
Ful ACK.
> This code's sole purpose is to define the value of $MAKE such that it will cause the same executable to be invoked by sub-Make's. There's no other purpose here. Agreed?
ACK.
> Next, let's forget about the comment, it is only correct for Posix platforms. Let's talk only about what the code actually does on Windows. Okay?
ACK.
> Now, the code in question, in its WINDOWS32 branch, simply mirrors all backslashes to forward slashes (except in a couple of weirdo cases, which we will ignore for the moment). Unlike the Posix branch, this code does NOT prepend the current directory to the value of argv[0]. Do you agree?
NACK. The line
argv[0] = xstrdup(w32ify(argv[0],1));
calls w32ify() with the second parameter being 1 causing w32ify() to call _fullpath().
Then _fullpath() calls GetFullPathName() which is described as:
"merges the name of the current drive and directory with a specified file name to determine the full path and file name of a specified file."
> Now, if you agree with all of the above, please describe a use-case where the result of this code will be a value of $MAKE which could potentially invoke a different executable in a sub-Make.
1. Have make.exe in the current directory (and not in the PATH).
2. Have a subdirectory 'subdir'.
3. Have a Makefile with the following content:
all:
cd subdir && $(MAKE)
4. Use cmd.exe and enter 'make'.
You'll get:
cd subdir && make
make: not found
make: *** [all] Error 127
Oliver Schmidt - oliv.schmidt(at)sap.com
|