Jose Alberto Fernandez wrote: > > From: [EMAIL PROTECTED] > > > > > > We have 31 different modules all maintained by CVS. We have > > several different > > products that can include any combination of the 31 CVS > > modules. We need a > > process that can build any of the products (i.e. any > > combination of modules) > > based on CVS tag. We also need a module level build process > > for each module > > that understands how to build just that particular module. > > We have also > > defined default targets that all build files (both product > > and module) must > > support. These are clean, fetch, compile, test, docs, > > package, and deploy. > > > > Given this we defined a two level system. At the highest > > level we have one > > build file that understands all possible modules. This is > > called the root > > build. The root build coordinates the build of each module > > based on the > > target called. For example, a root clean will call all clean > > targets for > > each module checked out. To understand weather or not a > > module's build > > targets can be called from the root build, I use a target > > that checks each > > module for a build file and set a property if it is available > > to be called > > with an ant tasks. After checking all modules build > > availability, I need to > > conditionally call the ant task for each module, thus the > > if/unless for > > tasks. > > > > Without if/unless for tasks and using the most frequently offered > > alternative, I would need to wrap all 31 ant calls in a > > target. Plus each > > module supports 6 default targets. So now I have 186 (31 x > > 6) wrapped tasks > > in their own target, all just to get conditional processing > > of an ant task. > > I am sure this is not what is meant by a target. > > > > Maybe the problem is that you are abstracting your build the wrong way. > Why are you trying to put the ifs at the top level build file? > > In my opinion the top buildfile, should: > > (1) set properties for modules that do not need to be build. > <property name="exclude.moduleX" value="true" /> > > (2) call the corresponding top level target of all the modules: > <ant dir="moduleX" target="build" /> > <ant dir="moduleY" target="build" /> > .... > > Each module build file default rule is of the form: > <target name="build" ..... unless="exclude.moduleX" > > .... > </target> > > There is no need for 186 combinations or funny one liners. Is just putting > the burden of the decision on the right place. > > Jose Alberto
The problem here is that I don't (or want to) know if a module is part of a CVS tag. So in your example, item (2) would fail for each module that is not part of the CVS tag that I am building. I can't predict which modules are part of a specific CVS tag. If every module was a part of every CVS tag, your method would work. -alan
