# geant

## Description

Sometimes when projects get large it is useful to make build scripts more modular. It would be useful for example to call subtargets in a procedural manner and it would be useful to use more than one build script since the build script usually grows with the size of the project. With the geant task you can accomplish this.

## Parameters

arguments
  Description: Comma separated list of values to be passed as arguments to the target to be called. The number of values must match the number of formal arguments of that target. The sequence is important: the first value will be used for the first actual parameter, the second as the second and so on. This is the so called terse way of argument passing.

  Domain: Comma separated list of values

  Default: -

file
  Description: Name of build file to invoke

  Domain: Name of existing file

  Default: -

target
  Description: Name of target to invoke in current build file respectively in buildfile specified through attribute file if provided.

  Domain: existing target

  Default: -

reuse_variables
  Description: Should variables defined in current build file be available in invoked build file? Note: This attribute is only evaluated if attribute file if provided.

  Domain: true|false

  Default: false

## Parameters specified as nested elements

argument
  Description: Element representing a actual argument for the target to be called. The name of the matching formal argument is specified by the attribute 'name'. The value to be used is specified through the attribute 'value'. The names of the arguments and the number of arguments must match the formal ones of the target to be called.

  Domain: -

  Default: -

## RNG Specification

    <define name="geant">
      <element name="geant">
        <ref name="dir_if_unless"/>
        <optional>
          <choice>
            <attribute name="arguments"/>
            <zeroOrMore>
              <element name="argument">
                <attribute name="name"/>
                <attribute name="value"/>
              </element>
            <zeroOrMore>
          </choice>
        </optional>
        <choice>
          <attribute name="target"/>
          <group>
            <attribute name="file"/>
              <optional>
                <attribute name="reuse_variables">
                  <!-- runtime evaluation
                  <choice>
                    <value>true</value>
                    <value>false</value>
                  </choice>
                  -->
                </attribute>
              </optional>
              <optional>
                <ref name="fileset"/>
              </optional>
            </group>
            <group>
              <attribute name="file"/>
              <attribute name="target"/>
              <optional>
                <attribute name="reuse_variables">
                  <!-- runtime evaluation
                  <choice>
                    <value>true</value>
                    <value>false</value>
                  </choice>
                  -->
                </attribute>
              </optional>
              <optional>
                <ref name="fileset"/>
              </optional>
            </group>
          <ref name="fileset"/>
          </choice>
      </element>
    </define>

## Examples

      <geant file="build2.eant"/>

      <geant file="build2.eant" target="compile"/>

      <geant file="build2.eant" target="compile" reuse_variables="true"/>

      <geant target="compile"/>