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