<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<project name="allElements delegation and assemble customTargets.xml">
<!-- FILE WILL BE OVERWRITTEN WHEN GENERATED -->
    <target name="allElementsExceptSvnFetch" unless="is.svn.fetch">
        <antcall target="norcpbuild"/>
        <antcall target="rcpbuild"/>
    </target>
    
    <target name="norcpbuild" unless="build.container.feature">
        <ant antfile="${genericTargets}" target="${target}">
            <property name="type" value="feature" />
            <property name="id" value="org.apache.easyant4e.feature" />
        </ant>
        
    </target>

    <target name="rcpbuild" if="build.container.feature">
        <ant antfile="${genericTargets}" target="${target}">
            <property name="type" value="feature" />
            <property name="id" value="org.eclipse.pde.build.container.feature" />
        </ant>
    </target>
    
    <!-- generated assemble targets -->      
    <target name="assemble.org.apache.easyant4e.feature">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">
            <property name="zipargs" value="" />
        </ant>
    </target>

    
    <!-- assmble targets for RCP build -->  
    <target name="assemble.org.eclipse.pde.build.container.feature.win32.win32.x86">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-win32.win32.x86.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.ppc">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.ppc.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86_64">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86_64.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.linux.motif.x86">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-linux.motif.x86.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.solaris.motif.sparc">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-solaris.motif.sparc.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.solaris.gtk.sparc">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-solaris.gtk.sparc.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.aix.motif.ppc">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-aix.motif.ppc.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.hpux.motif.PA_RISC">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-hpux.motif.PA_RISC.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.ppc">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.ppc.zip"/>
        </ant>
    </target>
    <target name="assemble.org.eclipse.pde.build.container.feature.macosx.carbon.x86">
        <ant antfile="${assembleScriptName}" dir="${buildDirectory}">           
            <property name="archiveName" value="${archiveNamePrefix}-macosx.carbon.x86.zip"/>
        </ant>
    </target>   
</project>
