Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ant Rant

One of my current projects at work was to move us from PVCS version control to 
Subversion.  Serves me right for selling them on it.  Now they want me to redo 
the whole build system instead of just changing the PVCS stuff to Subversion 
stuff.  On both Windows and UNIX.  With bother C++ code and Java.

Oh, and I have about 10 business days.

The way it works now is that one set of C++ components ("the backend") builds 
under UNIX with shell scripts and makefiles.  Another set of C++ components 
(mid-tier) some subset of the backend, and the Java code compile under Windows 
  using (gasp) DOS batch files and MSVC project files and ant scripts.  It has 
been decided that the DOS batch scripts need to be replaced for the betterment 
of the human race.  I've been given permission to implement it in any way that 
is somewhat sane and completely free,  The two leading candidates are bash 
scripts (using Cygwin on the Windows side) and makefiles, vs ant.

Here's the thing I'm finding out about ant.  It doesn't do the one single most 
primary thing a build system needs to do: Only build things that need to be 
built.  There does not appear to be a way to make a build.xml file with a 
target such that if a particular module is already built, you don't try to 
build it again.  No way to say "this target has already been built".  No way 
to say "this file is newer than that one, so no need to build this target". 
No way to say "This file exists, so no need to build this target".  This is 
crucial, because using antcall or ant targets run in a separate thread that 
has no access to the dependency calculations already done in the calling ant run.

Debugging ant scripts also seems to be somewhat daunting, since it's not 
composed of a list of steps to run, and many tasks are Java code.

Beyond disappointing.  Am I missing something?

My current inclination is to have a master bash script that controls the logic 
and dependencies, then builds each individual module by running make, running 
MSVC with the project files, or running the ant script, depending on the 
module's source file type and platform.

I really have to pick the technology tomorrow if I'm going to get this done in 

DDDD   David Kramer        david at
DK KD  "Asking whether there is a liberal or conservative bias to the
DKK D  mainstream media is a little like asking whether al Qaeda uses too
DK KD  much oil in their hummus.  The problem with al Qaeda is that
DDDD   they're trying to kill us."                           - Al Franken

BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!

Boston Linux & Unix /