From: Yongwei W. <wuy...@gm...> - 2007-09-29 05:44:56
|
On 29/09/2007, Charles Wilson <cwi...@us...> wrote: > 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. *I* did not say it should (though I do not think it bad; see bottom of my message). However, please notice that your statement "even PHONY targets are impacted by the underlying file system" is not true. > [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. Cygwin is intended to emulate Unix behaviour. When the Makefile contains rules like what I originally presented, which did not require the file system to be case-sensitive, it *should* work with any complaints. > 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. I can argue that MSYS is exactly like the Cygwin case. I may even further argue the native Win32 Make should work the same way as expected in my example, since, *ahem*, the Unix principle never prevents one from shooting on his feet. As a tool, its duty is to do its job as the *user* expects, when possible. Don't say we are on Windows. GNU is Unix! This said, I think making phony targets different from file targets is the most ideal way. Since I am not planning to spend the labour myself right now, I won't insist here it must be done. I am still ready to argue whether it is the best way :-). > 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. Agreed on this part. However, whatever way Make behaves in this example, the user has to modify his make rules. Making Make case-insensitive does not bring the user real benefits! *Are we expecting the user to (be able to) write Debug when he wants DEBUG?* This looks to me the current --case-insensitive-file-system is doing. Best regards, Yongwei -- Wu Yongwei URL: http://wyw.dcweb.cn/ |