On Thursday 01 May 2008 00:42, Dave Korn wrote:
> >> I can give you 7.3787e+19 reasons
> >> why your proposed solution is ineffective
> > Correction; in haste, I miscalculated. The reality is even worse;
> > csmake would require 1.021456e+27 distinct rules, to replace just
> > _one_ simple pattern rule of the form:
> > %.TXT: %.APP ; dostool $<
> I think that's rather a red herring
Again with respect, it is not; it is an example from a real world
application, which didn't work, and was impossible to fix with the old
make-3.79 in earlier versions of MSYS, yet which works perfectly with
Chuck's newer make-3.81. (csmake reproduces the old -- broken IMO --
behaviour of MSYS's make-3.79).
> - after all, that's not a
> pseudo-target, which is what you were talking about originally.
Doesn't make a pin of difference. GNU make treats real and pseudo
targets alike; build it with the --enable-case-insensitive-file-system
option, (which IMO is how it should be built for MS-Windows), and both
real and pseudo targets become case insensitive.
> If MinGW wants to be POSIX-alike, it should do what POSIX does, and
> treat them as case-sensitive.
Can't have it both ways. MinGW does *not* make any pretense to being
POSIX-alike; quite the opposite, in fact. It keeps recurring on this
list; MinGW is *not* POSIX, because MS-Windows is not POSIX; if you
want POSIX-alike, use Cygwin.
> On the other hand, if MinGW wants to be like Windows, it should do
> what NMAKE does, and treat them as case-sensitive.
Yes, exactly; this is the only sane correct behaviour, IMO.
> As to respecting the properties of the filing system:
> Some filing systems are case-sensitive. Some are not. Even on
> Windows, this is the case.
Yes. This is a limitation of GNU make itself; it either considers *all*
addressable file systems as case sensitive or as case insensitive. It
does not have any provision for dealing with hybrid networks, where
some hosts serve a case sensitive file system, while others may be case
insensitive; it adopts an unsatisfactory compromise, which is decided
at build time for make itself, and that is best based on the localhost
file system properties.
> How do you decide on which filing system (at which drive letter and
> path) the non-existent file that doesn't ever get created
> corresponding to the phony target lives (or rather, doesn't live) on?
How do you, (or rather, how does make), know whether *any* target is
real or pseudo? Sure, GNU make has the special `PHONY' target, to
declare pseudo-targets, but that's decidedly non-portable. Write your
makefile to rely on this feature, and it is broken for any make which
doesn't support the GNU make idiom, if any file named to match any of
your pseudo-targets, (including a file called PHONY itself), ever
appears in your build directory, with a newer timestamp than its