As a curiousity, wouldn't you be able to use a regular target and properties to define what to call? For instance, your gateway project can just do this:

   <target
     name="process"
     description="Builds recursively all subprojects">
     <foreach
       item="Folder"
       property="foldername">
       <in>
         <items>
           <includes name="*"/>
           <excludes name="CVS"/>
         </items>
       </in>
       <do>
         <nant
           buildfile="${foldername}/default.build"
           target="${project.config} ${operation}"/>
       </do>
     </foreach>
   </target>

The master just needs to set the "operation" property before calling. I'm not certain these wildcard targets are necessary in this case.

<property name="operation" value="build" />
<nant buildfile="gateway.build" target="process" />

etc...

Giuseppe Greco wrote:

Hi all,

I've just completed the implementation of the
stuff we discussed yesterday.

Right now I'm out of office and I don't have
CVS access due to proxy restrictions, so
attached to this email you will find the
modified files. I'll send you a patch tomorrow.

The modified files are:

NAnt.Core/Project.cs
    line    81           added WildTarget const
    line   132           added _currentTarget field
    lines  410 -  416    added CurrentTarget property
    lines  784 -  796    replaced do-while statement
    lines 1415 - 1419    added wild targets handling

NAnt.Core/Functions/NAntFunctions.cs
    lines   83 - 98      added GetCurrentTarget functioin

These modifications allow you to specify a wild target
that is executed when the user specifies a target that
does not exist in the current build file. Here's an
example:

<project
  name="myProject"
  default="build">

  <target name="build">
    <echo message="This is the build target."/>
  </target>

  <target name="*">
    <echo message="This is the ${target::get-current-target()} target."/>
  </target>
</project>

if you type

nant hello

from the command, you get the message "This is the hello target".

Furthermore, using the master-gateway-slave build file pattern is
much easier (see my previous emails). Here below is another
example.

Let's start with the usual project:

/myProject
     + default.build
     + /src
         + default.build
         + /Subproject
                + default.build
                + HelloWorld.cs

the master build file (/myProject/default.build) looks
like this:

<?xml version="1.0"?>

<project
  name="myProject"
  default="build">

 <target
    name="build"
    description="Builds the current configuration">
    <nant
      buildfile="src/default.build"
      target="${target::get-current-target()}"/>
  </target>

  <target
    name="test"
    description="Tests the current configuration">
    <nant
      buildfile="src/default.build"
      target="${target::get-current-target()}"/>
  </target>

  <target
    name="clean"
    description="Deletes the current configuration">
    <nant
      buildfile="src/default.build"
      target="${target::get-current-target()}"/>
  </target>

</project>


... and the gateway build file (/myProject/src/default.build) like this:

<?xml version="1.0"?>

<project
  name="myProject"
  default="*">

  <target
    name="*"
    description="Builds recursively all subprojects">
    <foreach
      item="Folder"
      property="foldername">
      <in>
        <items>
          <includes name="*"/>
          <excludes name="CVS"/>
        </items>
      </in>
      <do>
        <nant
          buildfile="${foldername}/default.build"
          target="${project.config} ${target::get-current-target()}"/>
      </do>
    </foreach>
  </target>

</project>

I don't report the slave build file (/myProject/src/Subproject/default.build)
since it is like any other build file written till now.

Wild targets allow you to write more compact build files and
provide a standard way to handle unexpected targets.

What do you think about that?

j3d.

----------------------------------------
Giuseppe Greco

::agamura::

phone:  +41 (0)91 604 67 65
mobile: +41 (0)76 390 60 32
email:  [EMAIL PROTECTED]
web:    www.agamura.com
----------------------------------------



------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ nant-developers mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to