23.4.14.1. Do I need to re-make the world for every change?

There is no easy answer to this one, as it depends on the nature of the change. For example, if you just ran CVSup, and it has shown the following files as being updated:

src/games/cribbage/instr.c
src/games/sail/pl_main.c
src/release/sysinstall/config.c
src/release/sysinstall/media.c
src/share/mk/bsd.port.mk

it probably is not worth rebuilding the entire world. You could just go to the appropriate sub-directories and make all install, and that's about it. But if something major changed, for example src/lib/libc/stdlib then you should either re-make the world, or at least those parts of it that are statically linked (as well as anything else you might have added that is statically linked).

At the end of the day, it is your call. You might be happy re-making the world every fortnight say, and let changes accumulate over that fortnight. Or you might want to re-make just those things that have changed, and be confident you can spot all the dependencies.
 - http://64.233.169.104/search?q=cache:9Z-s2h_UBcoJ:www.freebsd.org/doc/en/books/handbook/makeworld.html+freebsd+make+world&hl=en&ct=clnk&cd=1&gl=us
#
 [»]  Re: A coindience?
 by smithdev - Jul 5th 2003 18:14:40

 I'll chip in for the fairly sophisticated user who is new to the autotools.

 I've the goat book, the potto book (that O'Reilly one) and a couple of
 others. I've read the info bits.

 I couldn't even get started until I found the autoproject script here on
 Freshmeat.

 I think that the best thing that could reasonably happen is cribbing an idea
 from the kernel community: a make menuconfig to streamline the process.

 -- 
 gentoo is all that

  - http://freshmeat.net/articles/view/889/
#
Renaming is the killer app of distributed version control
 - http://www.markshuttleworth.com/archives/123

And by extension, why not your build system?
#
Fast iteration is more than just about time and speed. It's also about
how you feel about the code and what you dare do with it.
 - http://gamesfromwithin.com/?p=42
#

What annoys me: Ant is broken (Score:5, Insightful)
by The Pim (140414) on Friday June 14 2002, @01:25PM (#3702950)

I've gotten used to holding my tongue, but since you started it, I'll put my
rant under yours. :-)

I've used Ant, and concluded that it's only strength is that it comes with a
bunch of modules ready-to-use. (Never mind that most of those modules would be
five lines in a more modular, flexible system like make.) Further, in several
respects, it has several serious regressions compared to other build systems.
In light of this, it seems to me that the main reason Ant is popular is that
it attempts to cover for the deficiencies of common Java compilers. What a
mess!

The first regression is that Ant (by default) doesn't do reliable rebuilds.
The most basic function of a build system is to produce correct output, and
Ant doesn't do it! Its default algorithm for rebuilding is to compile only
those source files that are newer than their corresponding class files. So,
for example, if you change an interface, Ant won't recompile all the classes
that implement the interface. You won't know that they are broken until you
(or someone else) tries a full rebuild.

Ant has a "depend" task that attempts to fix this, by tracking source
dependencies. Unfortunately, because most Java compilers don't do their part,
Ant has to do this in an utterly kludgy way--by parsing class files! Not only
is this slow and has some weird side-effects, it's still not completely
reliable: Only the compiler really knows what files depend on what others.
(For example, if it in-lines a constant, this may not be evident in the class
file.) However, as far as I know, gcc is the only Java compiler that can
output correct dependencies (jikes claims to do it, but is broken). Even if
your compiler does output dependencies, you can't easily use them with Ant,
because it stores its dependencies in a non-standard format.

Another regression is that in Ant, individual source and class files are not
first-class objects to the build system. You can't easily depend on, or ask to
rebuild, a single class file. It's all or nothing. This too is largely due to
compiler deficiencies: There is no way to tell most compilers to compile only
the given sources; they insist upon compiling everything they think is
out-of-date (again, gcc is an exception). This misfeature takes control out of
the build system's hands, with the result that "recompile everything that's
out-of-date" is the only feasible approach. Another effect is that parallel
and distributed builds cannot be done reliably.

Not to mention,

    The organic growth and dynamic flexibility shows how close Java can be to
    Lisp.

I don't even know where to start on that one. All Ant shows is that if you
give people a half-working workaround for broken tools, they'll flock to it.

 - http://slashdot.org/comments.pl?sid=34220&cid=3702950
#
There's another factor besides effort that dictates how often you build: as
project complexity increases, build times lengthen, even as you throw more
hardware at them. At some point, you have to struggle just to do a nightly
build.

Mike Gunderloy
Friday, November 16, 2001

 - http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=862
#
A crucial observation here is that you have to run through the loop again and
again to write a program, and so it follows that the faster the
Edit-Compile-Test loop, the more productive you will be, down to a natural
limit of instantaneous compiles.
 - Joel on Software "Daily Builds Are Your Friend"
 - http://www.joelonsoftware.com/articles/fog0000000023.html
