From: Seth Kurtzberg Date: 2003-03-15T18:09:26+09:00 Subject: Re: The onion truck strikes again ... Announcing rake On Saturday 15 March 2003 01:33 am, Jim Weirich wrote: > On Fri, 2003-03-14 at 23:06, Seth Kurtzberg wrote: > > A couple of comments. > > > > 1. I hate having to type Makefile instead of makefile. make will accept > > either, so any make replacement should allow the initial lower case > > letter. Why anyone uses Makefile instead of makefile I've never > > understood... > > Easy to do. Ok. > > > 2. Automatic dependency checking (not just timestamps, but automatically > > discovering dependencies like "make depend") is important. > > I see this functionality as an add-in library. I already have a stand > alone program (called jdepend.rb) which determines the dependencies in a > Java project. I can see reworking the jdepend code so that it can be > used as a library and then in your Rakefile have ... > > require 'jdepend' > JDepend.generate_java_dependencies > > or something like that. Since a Rakefile is really Ruby code, its > trivial to extend it in ways that are difficult in a Makefile. True, but there are also disadvantages to that approach. Specifically, either you are using code in the makefile to generate itself (as in appending additional dependency rules), or you use a second file to hold additional dependencies. Both are undesirable. > > > 3. How about implementing something like the clearcase concept of > > derived objects? > > Enlighten me. Is that like knowing that X.class is derived from X.java? No, it is a much more general concept. Clearcase (which by the way has many disadvantages so I am being selective about its features, not describing it) is both a version control system and a build system. As such, it is able to keep track of all build dependencies. For example, when something is linked, clearcase knows the dependency information for each object file. Thus you can tell it to link something and from that the requirements for rebuilding objects can be deduced. These object files are "derived objects". In the simple case where an object depends on one or more source files, you can do this reasonably well with timestamp based dependencies. However, when the relationships become more complex, complete dependency tracking using only timestamps becomes untenable. This is overkill, really, but I think there is much to be gained from looking at what happens within clearcase and selectively using those features that can be implemented at a reasonable cost. The dependency information is also used to automatically generate optimal parallel build scripts. -- Seth Kurtzberg M. I. S. Corp. 480-661-1849 seth@cql.com