You need to use ant 1.8 and the <local> task.
<local> declares that a property is local to the current scope,
as defined by the enclosing <target> or <seqential>

see: http://ant.apache.org/manual/CoreTasks/local.html

  <for list="${kernel.currver.variants}" param="kernel.variant"
delimiter=" " trim="true">
      <sequential>
        <local name="dir.kernel.build"/>
        <local name="dir.module.build"/>
        <if>
          <equals arg1="@{kernel.variant}" arg2='""' />
         <then>
            <property name="dir.kernel.build"
location="/lib/modules/${kernel.version}/build" />
            <property name="dir.module.build"
location="${dir.build}/output/${kernel.version}" />
          </then>
          <else>
            <property name="dir.kernel.build"
location="/lib/modules/${kernel.versi...@{kernel.variant}/build" />
            <property name="dir.module.build"
location="${dir.build}/output/${kernel.versi...@{kernel.variant}" />
          </else>

...


Peter

On Wed, May 5, 2010 at 2:24 PM, Bailey, Darragh <[email protected]> wrote:
>
> Have recently just started using Ant, with the goal to using it as the 
> default build tool across an entire project. While most of the project will 
> be java based, there are a few parts that won't be and I'm trying to make ant 
> work as effectively as possible for these sections.
>
> One of them just happens to be a kernel module. While there will be a 
> makefile called by the Ant target in the end, I'm trying to set Ant up as the 
> entry point so that developers moving between different parts of the project 
> will get the same interface and the same targets to be called. It also 
> simplifies the work around a continuous build tool, in that it doesn't have 
> to run differently for the different components.
>
>
> For the kernel module build, I'm trying to allow for more than 1 kernel 
> version and different kernel variants. In most cases the kernel version will 
> be 2.6.18-194.el5 (RHEL5 Update 5 kernel) and the variant will be the 
> default. However at times developers will want to build against multiple 
> kernel versions and/or variants when developing/debugging issues.
>
> Examples:
> Default Properties
> kernel.versions = 2.6.18-194.el5
> kernel.variants = ""
>
> Additionally "kernel.${kernel.version}.variants = xxx" can be used to specify 
> the variants for a particular version, rather than using the default set. I 
> use "" to represent the default variant simply because that is the method 
> that works best when building kmod-* rpm packages as I'm using a spec 
> template similar to what fedora uses.
>
> Properties set by a Developer
> kernel.versions = 2.6.18-194.el5 2.6.33-k.org
> kernel.variants = ""
> kernel.2.6.18-194.el5.variants = xen
>
>
>
> Coming from a make background I was previously used to expanding targets 
> dynamically based on values set in properties in the makefile in order to 
> reference multiple kernel versions and variants and then using pattern based 
> rules to build the necessary target. Right now I've got something partially 
> working in Ant using the foreach/for tasks from ant-contrib, but I'm not sure 
> that this is the best way to accomplish this. I'm also using if/the/else to 
> work around the use of "" which Ant doesn't really like when it comes to 
> specifying an empty value for a property.
>
> I know I have a bug in the xml below, in that the for loop I attempt to 
> change properties which by default Ant won't overwrite after setting them 
> initially. Like I mentioned before I'm very much used to make and I've yet to 
> fully get to grips with Ant.
>
>
> Any suggestions on other Ant tasks that could simplify this would be very 
> welcome:
>
>
>  <target name="compile" if="isLinux"
>          description="Compile the source against all requested kernel 
> versions and variants">
>    <!-- determine the default kernel version, only set if not already set -->
>    <exec executable="uname" outputproperty="kernel.versions">
>      <arg value="-r" />
>    </exec>
>    <foreach target="compile-module" list="${kernel.versions}" delimiter=" " 
> param="kernel.version" />
>  </target>
>
>
>  <!-- default compile task, restrict to running on linux also try to avoid 
> rebuilding if
>      it has already been compiled and the sources have not be modified.
>
>      TODO:
>        Handle if different kernel version or variants used
>        Handle building for multiple variants
>        Handle building for multiple kernel versions
>
>        Compile the source against the specified kernel version and variant
>  -->
>  <target name="compile-module" depends="init" if="isLinux" >
>
>
>    <!-- Will set the variants to the default value only if not already set 
> (i.e. doesn't override) -->
>    <property name="kernel.${kernel.version}.variants" 
> value="${kernel.variants}" />
>    <propertycopy property="kernel.currver.variants" override="true" 
> from="kernel.${kernel.version}.variants" />
>
>    <for list="${kernel.currver.variants}" param="kernel.variant" delimiter=" 
> " trim="true">
>      <sequential>
>        <if>
>          <equals arg1="@{kernel.variant}" arg2='""' />
>          <then>
>            <property name="dir.kernel.build" 
> location="/lib/modules/${kernel.version}/build" />
>            <property name="dir.module.build" 
> location="${dir.build}/output/${kernel.version}" />
>          </then>
>          <else>
>            <property name="dir.kernel.build" 
> location="/lib/modules/${kernel.versi...@{kernel.variant}/build" />
>            <property name="dir.module.build" 
> location="${dir.build}/output/${kernel.versi...@{kernel.variant}" />
>          </else>
>        </if>
>        <!--<property name="kernel.arch" />-->
>        <echoproperties prefix="name."/>
>        <echoproperties prefix="dir."/>
>        <echoproperties prefix="kernel."/>
>        <echo message="kernel.variant='@{kernel.variant}'" />
>        <!-- Copy the src to a directory under the build directory, excluding 
> hidden files -->
>        <copy todir="${dir.module.build}">
>          <fileset dir="${dir.src}">
>            <exclude name="**/.*" />
>          </fileset>
>        </copy>
>
>        <!-- execute the require make command, specifying the kernel directory 
> to use -->
>        <exec executable="make">
>          <arg value="-C" />
>          <arg value="${dir.kernel.build}" />
>          <arg value="M=${dir.module.build}" />
>          <arg value="modules" />
>        </exec>
>      </sequential>
>    </for>
>  </target>
>
>
>
> --
> Regards,
> Darragh Bailey
>
> Systems Software Engineer
> Hewlett Packard Galway Ltd.
>
> Postal Address:    Hewlett Packard Galway Limited, Ballybrit Business Park, 
> Galway
> Registered Office: Hewlett Packard Galway Limited, 63-74 Sir John Rogerson's 
> Quay Dublin 2
> Registered Number: 361933
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to