From: Charles W. <cwi...@us...> - 2007-09-28 20:23:51
|
Keith Marshall wrote: > so, Chuck's notion that the newer `all' file, corresponding to the phony > target of the same name, (identically here), will cause `foo' to be > remade doesn't seem to hold true; indeed it would appear to contradict: Sorry -- it looks like I misanalyzed the code. I should have done what Keith did and just tested the proposition in actual practice. An ounce of experience beats a pound of theory, every time. [and on that point, see zlib example, below...] However, given the remainder of Keith's examples, I still /believe/ that while I was wrong on the specifics I was right on the generality: make -- even on MSYS *and* on cygwin [1] -- should not pretend the underlying filesystem is case-sensitive when it actually isn't. [1] cygwin: it is true that the make-3.81 distributed by cygwin pretends to be case sensitive. The only excuse for that, IMO, is the following: (a) most of the time, open-source projects are not so short-sighted as to rely on case sensitivity to distinguish files and targets -- so cygwin-make's insanity doesn't actually hurt anything. (b) in those rare cases where they do, and it is not feasible to patch the Makefile[.in|am] (and send that patch upstream), cygwin provides the "managed mount" feature to simulate case-sensitivity. If cygwin's make did not at least pretend to case-sensitivity, then the workaround for problematic packages mentioned in (b) would not be possible. The cygwin team made the decision that the potential for confusion in distributing a make that is insane (e.g. believes in non-truth) is outweighed by the advantages allowed when using managed mounts. As MSYS does not provide managed mounts, that rationale is unsupportable for the msys version of make. Regarding Earnie's post: > IMO, --case-insensitive-file-system should not be used for the MSYS > build of make. The reason is that we are trying to allow the creature > comforts of POSIX as much as possible for ``configure && make'' and > this switch doesn't allow for the creature comfort. It is not a creature comfort if you have two non-PHONY targets: DEBUG: touch DEBUG debug: touch debug that clobber each other. Actually, I've seen the old make cause problems with old zlib distributions (1.1.3?): zlib used to rely on case distinction between .s and .S files -- I believe one was "original" assembly code and the other was "post-processed" assembly code, but the details are fuzzy. The zlib folks eventually realized that case-dependency was not the Tao of Cross Platform, and changed their build process. Up to that point, I always had to patch the zlib makefile myself... BTW, this is not just a Windows problem. Many embedded systems use (case-insensitive, non-case-preserving) FAT filesystems even if they themselves have nothing to do with MSDOS or Windows. FAT is just a very inexpensive (in terms of disk space overhead AND code size), dirt-simple filesystem which makes it convenient for the relatively modest needs and space constraints of many embedded systems. True, you don't ordinarily USE that filesystem when building software -- such as libz.a -- for the embedded target, but still... -- Chuck |