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: -

fork
  Description: Should a new operation system process be spawned for call?

  When not specified the following default behavior applies: If parameter 'file' has been specified the default value for 'fork' is 'true'. If no parameter 'file' has been specified the default value for 'fork' is 'false',

  Domain: true|false

  Default: see description

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: -

exit_code_variable
  Description: Name of variable holding the execution's return code

  Domain: Integer (usually 0 for OK, and any other number for not OK)

  Default: `Void' (no variable is set if attribute is not specified)

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>
        <optional>
          <attribute name="fork">
            <!-- runtime evaluation
            <choice>
              <value>true</value>
              <value>false</value>
            </choice>
            -->
          </attribute>
        </optional>
        <optional>
          <attribute name="exit_code_variable"/>
        </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"/>