Xace Files |

Xace is a notation to specify the information needed to compile an Eiffel program. It stands for XML Assembly of Classes in Eiffel. It was initially designed to be independent of Eiffel compilers and then be converted to the supported Eiffel compilers' own notations with the tool gexace. That way only one file needs to be written and maintained. Xace is also natively supported by the Gobo tools without the need to be converted first.

## Syntax

The syntax of Xace is very simple. As mentioned above, an Xace file is an XML file. The root element is either `system` or `library` depending on whether the file describes an Eiffel program or library.

`system`
  Root element of an Xace file describing an Eiffel program.

  Attributes:

  `name`
    Name of the system. Required

  Elements:

  `description`
    Free text. Optional.
  `root`
    Root class and procedure of the Eiffel system. Several such elements can be specified, but after processing its `if`/`unless` attributes, no more than one should remain.
  `option`
    System-level options. Zero or more such elements can be specified.
  `cluster`
    Cluster containing the Eiffel classes of this system. Zero or more such elements can be specified.
  `mount`
    Library used by this system. Zero or more such elements can be specified.
`library`
  Root element of an Xace file describing an Eiffel library.

  Attributes:

  `name`
    Name of the system. Required
  `prefix`
    Prefix to be applied to the names of the clusters of this library when mounted. Optional.

  Elements:

  `description`
    Free text. Optional.
  `option`
    Library-level options. Zero or more such elements can be specified.
  `cluster`
    Cluster containing the Eiffel classes of this library. Zero or more such elements can be specified.
  `mount`
    Library used by this library. Zero or more such elements can be specified.
`root`
  Eiffel root class and creation procedure of the system.

  Attributes:

  `class`
    Name of the root class. Optional.
  `creation`
    Name of the root creation procedure. Optional.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
`option`
  Options used to compile the system. There are several kinds of options, at the system level, at the cluster level, at the class level and at the feature level. Options have either a name and a value, or no name and no value but are used to group several options together to apply a common `if`/`unless` condition.

  Attributes:

  `name`
    Name of the option. Optional.
  `value`
    Value of this option. Required when `name` is provided.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.

  Elements:

  `option`
    Nested option. Useful when grouping together options with the same `if`/`unless` condition. Zero or more such elements can be specified.
`cluster`
  Cluster containing Eiffel classes.

  Attributes:

  `name`
    Name of the cluster. Required.
  `location`
    Pathname of this cluster. Default value: use the name of the cluster as pathname. Optional.
  `relative`
    Is the pathname of this cluster relative to the pathname of its parent cluster? Default value: false when `location` is provided, true when `name` is used instead. Optional.
  `prefix`
    Prefix to be added to the name of this cluster and recursively to its subclusters. Optional.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.

  Elements:

  `option`
    Cluster-level options. Zero or more such elements can be specified.
  `cluster`
    Subcluster. Zero or more such elements can be specified.
  `class`
    Used to specify class-level options for classes of this cluster. Zero or more such elements can be specified.
  `mount`
    Library used by this cluster. Zero or more such elements can be specified.
`class`
  Used to specify class-level options.

  Attributes:

  `name`
    Name of the class. Required.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.

  Elements:

  `option`
    Class-level options. Zero or more such elements can be specified.
  `feature`
    Used to specify feature-level options for features of this class. Zero or more such elements can be specified.
`feature`
  Used to specify feature-level options.

  Attributes:

  `name`
    Name of the feature. Required.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.

  Elements:

  `option`
    Feature-level options. Zero or more such elements can be specified.
`mount`
  Use clusters defined in a library defined in another Xace file.

  Attributes:

  `location`
    Pathname of the Xace file of the mounted library. Required.
  `prefix`
    Prefix to be added to the names of the clusters of the mounted library. Optional.
  `if`
    Ignore this element if the expression is not satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.
  `unless`
    Ignore this element if the expression is satisfied. Expressions can be of two forms: Just "${FOO}" which evaluates to true if the variable FOO is defined, and "${FOO}=bar" or "${FOO}=${BAR}" which evaluates to true if the variable FOO is set to "bar" or if variables FOO and BAR expand to the same value. Cannot have both `if` and `unless`. Optional.

## Options

Following is the list of options supported in Xace (of the form `<option name="..." value="..."/>`) at the various levels (system/library, cluster, class and feature), and how they are translated to the Eiffel compiler dependent notations. "N/A" does not necessarily mean that the corresponding Eiffel compiler does not support this facility, it could just be that the facility is not parameterizable or is activated from the command-line or from a separate tool rather than from the Eiffel configuration file. When an entry is marked "N/A" the option will be silently ignored and nothing will be generated in the Eiffel compiler dependent configuration file for this option. Likewise when the name of an option is not supported in Xace.

The Default section shows Xace default value when this option is not explicitly specified in the Xace file. It can be different from the default value used by the various Eiffel compiler dependent notations. For further details about each option, please refer to the documentation provided with the Eiffel compilers.

`abstract`
  Values:
    true | false
  Default:
    false
  Scope:
    cluster
  Description:
    Specify that this cluster should not be searched for Eiffel classes (but its subclusters can if they don't have this option set).
  ISE ECF:
    true =>
      if there is at least one non-abstract subcluster =>
        `<cluster name="`...`" location="`...`"/>`
      if there is no non-abstract subcluster =>
        No output
    false => `<cluster name="`...`" location="`...`"/>`

`address_expression`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Enable expressions of the form '$(s.to_c)' instead of having to declare 'a' of type ANY, and then having to assign 's.to_c' to 'a' and passing '$a'. Turn this option on only if you have advanced knowledge of the garbage collector insides, since using this syntax illegally can lead to bugs very hard to trace.
  ISE ECF:
    true => `<setting name="address_expression" value="true"/>`
    false => `<setting name="address_expression" value="false"/>`

`array_optimization`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Enable array optimization in loops when the array has been declared as local variable or formal argument.
    The system needs to be compiled in finalized mode in order for this option to have any effect.
  ISE ECF:
    true => `<setting name="array_optimization" value="true"/>`
    false => `<setting name="array_optimization" value="false"/>`

`assembly`
  Values:
    Name
  Default:
    No default
  Scope:
    cluster
  Description:
    Specify that the cluster is in fact a .NET assembly.
  ISE ECF:
    name => `<assembly name="`cluster_name`" location="`cluster_pathname`" assembly_name="`name`"/>`

`assertion`
  Values:
    none | generate | require | supplier_precondition | ensure | invariant | loop_invariant | loop_variant | check | all
  Default:
    require
  Scope:
    system/library, cluster, class
  Description:
    Set default assertion level.
    The purpose of 'generate' is to generate the code of the assertions in the generated code even if these assertions are turned off.
    Several of these options can be specified.
  ISE ECF:
    none => `<option/>`
    generate => `<option/>`
    require => `<option><assertions precondition="true"/></option>`
    supplier_precondition => `<option><assertions supplier_precondition="true"/></option>`
    ensure => `<option><assertions ensure="true"/></option>`
    invariant => `<option><assertions invariant="true"/></option>`
    loop_invariant => `<option><assertions loop="true"/></option>`
    loop_variant => `<option><assertions loop="true"/></option>`
    check => `<option><assertions check="true"/></option>`
    all => `<option><assertions precondition="true" supplier_precondition="true" ensure="true" invariant="true" loop="true" check="true"/></option>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`attached_by_default`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library, cluster, class
  Description:
    Are types attached by default when no attachment mark is specified?
  ISE ECF:
    true => `<option is_attached_by_default="true"/>`
    false => `<option is_attached_by_default="false"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`automatic_backup`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Automatically generate a backup during recompilation.
  ISE ECF:
    true => `<setting name="automatic_backup" value="true"/>`
    false => `<setting name="automatic_backup" value="false"/>`

`c_compiler_options`
  Values:
    C options
  Default:
    No default
  Scope:
    system/library
  Description:
    Specify options to be passed to the C compiler which is responsible for compiling the C code that has been generated from the Eiffel system.
    Several of these options can be specified.
    This option makes only sense for Eiffel compilers which generate C code.
  ISE ECF:
    options => `<external_cflag value="`options`"/>`

`check_generic_creation_constraint`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    Check generic creation constraint.
  ISE ECF:
    true => `<setting name="check_generic_creation_constraint" value="true"/>`
    false => `<setting name="check_generic_creation_constraint" value="false"/>`

`check_vape`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    Report VAPE validity errors (ETL 2nd edition page 122).
  ISE ECF:
    true => `<setting name="check_vape" value="true"/>`
    false => `<setting name="check_vape" value="false"/>`

`cls_compliant`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Is the generated code CLS compliant?
  ISE ECF:
    true => `<setting name="cls_compliant" value="true"/>`
    false => `<setting name="cls_compliant" value="false"/>`

`console_application`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    Under Windows, generate either a console or a windows application.
  ISE ECF:
    true => `<setting name="console_application" value="true"/>`
    false => `<setting name="console_application" value="false"/>`

`culture`
  Values:
    Culture
  Default:
    neutral
  Scope:
    cluster
  Description:
    Specify the culture of the .NET assembly.
    The option 'assembly' should be set in order for this option to have any effect.
  ISE ECF:
    culture => `<assembly name="`cluster_name`" location="`cluster_pathname`" assembly_culture="`culture`"/>`

`dead_code_removal`
  Values:
    none | low_level | feature | class | all
  Default:
    all
  Scope:
    system/library
  Description:
    Do not include dead code in the generated application.
    'low_level' means that unreachable chuncks of code are not included.
    'feature' means that features which are never called are not included.
    'class' means the classes which are in the system but which are never instanciated in the living code are not included.
    The system needs to be compiled in finalized mode in order for this option to have any effect.
    Several of these options can be specified.
  ISE ECF:
    none => `<setting name="dead_code_removal" value="false"/>`
    low_level => `<setting name="dead_code_removal" value="false"/>`
    feature => `<setting name="dead_code_removal" value="true"/>`
    class => `<setting name="dead_code_removal" value="false"/>`
    all => `<setting name="dead_code_removal" value="true"/>`
    If several occurrences of ECF options would need to be generated, only one occurrence would actually be generated with value 'true' if there is at least one 'true' and 'false' otherwise.

`debug`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library, cluster, class
  Description:
    Enable debug instructions.
  ISE ECF:
    true => `<option debug="true"/>`
    false => `<option debug="false"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`debug_tag`
  Values:
    Debug tag
  Default:
    No default
  Scope:
    system/library, cluster, class
  Description:
    Enable debug instructions with tag 'tag'.
    Several of these options can be specified.
  ISE ECF:
    tag => `<option><debug name="`tag`" enabled=true"/></option>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`dotnet_naming_convention`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Should the Eiffel code use .NET naming convention when calling routines from the assembly (use Eiffel naming convention otherwise)?
  ISE ECF:
    true => `<setting name="dotnet_naming_convention" value="true"/>`
    false => `<setting name="dotnet_naming_convention" value="false"/>`

`dynamic_runtime`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Enable the use of the Eiffel runtime as a DLL or shared library.
  ISE ECF:
    true => `<setting name="dynamic_runtime" value="true"/>`
    false => `<setting name="dynamic_runtime" value="false"/>`

`ecf_library`
  Values:
    Pathname
  Default:
    No default
  Scope:
    cluster
  Description:
    Specify that the cluster is the root of a library that is otherwise described by the ECF file 'pathname'.
  ISE ECF:
    pathname => `<library name="`cluster_name`" location="`pathname`"/>`

`enforce_unique_class_names`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Should class names be unique even across libraries?
  ISE ECF:
    true => `<setting name="enforce_unique_class_names" value="true"/>`
    false => `<setting name="enforce_unique_class_names" value="false"/>`

`exception_trace`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Enable to see a complete exception trace when a finalized application is crashing. The system needs to be compiled in finalized mode in order for this option to have any effect.
  ISE ECF:
    true => `<setting name="exception_trace" value="true"/>`
    false => `<setting name="exception_trace" value="false"/>`

`exclude`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library, cluster
  Description:
    Specify a filename, or a directory name, that should not be taken into account when searching the clusters for Eiffel classes.
    Several of these options can be specified.
  ISE ECF:
    pathname => `<file_rule><exclude>/`pathname`$</exclude></file_rule>`

`export`
  Values:
    External name
  Default:
    No default
  Scope:
    class, feature
  Description:
    Specify that this class (and its features) or this feature should be visible from C when using Cecil for example.
  ISE ECF:
    external_class_name => `<visible class="`CLASS_NAME`" class_rename="`external_class_name`"/>`
    external_feature_name => `<visible class="`CLASS_NAME`" feature="`feature_name`" feature_rename="`external_feature_name`"/>`

`external_runtime`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library
  Description:
    Use external runtime located in 'pathname'.
  ISE ECF:
    pathname => `<setting name="external_runtime" value="`pathname`"/>`

`force_32bits`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Force compilation for 32bits (.NET only).
  ISE ECF:
    true => `<setting name="force_32bits" value="true"/>`
    false => `<setting name="force_32bits" value="false"/>`

`full_class_checking`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library, cluster, class
  Description:
    Run flat Degree 3.
  ISE ECF:
    true => `<option full_class_checking="true"/>`
    false => `<option full_class_checking="false"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`garbage_collector`
  Values:
    none | internal | boehm
  Default:
    internal
  Scope:
    system/library
  Description:
    Select garbage collector.
  ISE ECF:
    N/A

`header`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library
    Accepted at the cluster-level for backward compatibility.
  Description:
    Specify a directory containing C header files.
    Several of these options can be specified.
  ISE ECF:
    pathname => `<external_include location="`pathname`"/>`

`il_verifiable`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Is the generated code IL verifiable?
  ISE ECF:
    true => `<setting name="il_verifiable" value="true"/>`
    false => `<setting name="il_verifiable" value="false"/>`

`include`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library, cluster
  Description:
    Specify a filename that should be taken into account when searching the clusters for Eiffel classes, even though it does not necessarily have a .e extension.
    Several of these options can be specified.
  ISE ECF:
    pathname => `<file_rule><include>/`pathname`$</include></file_rule>`

`inlining`
  Values:
    none | array | constant | once | all
  Default:
    all
  Scope:
    system/library
  Description:
    Enable inlining. 'array' means ARRAY and STRING inlining, 'constants' means constant inlining, 'once' means once-feature inlining, and 'all' means anything that can be inlined.
    Several of these options can be specified.
  ISE ECF:
    none => `<setting name="inlining" value="false"/>`
    array => `<setting name="inlining" value="true"/>`
    constant => `<setting name="inlining" value="true"/>`
    once => `<setting name="inlining" value="true"/>`
    all => `<setting name="inlining" value="true"/>`
    If several occurrences of ECF options would need to be generated, only one occurrence would actually be generated with value 'true' if there is at least one 'true' and 'false' otherwise.
    The option has effect only in finalized mode.

`inlining_size`
  Values:
    Integer value >= 0 and <= 100
  Default:
    0
  Scope:
    system/library
  Description:
    Specify maximum size of routines to be inlined.
    No effect if 'inlining' is disabled.
  ISE ECF:
    value => `<setting name="inlining_size" value="`value`"/>`
    The default value in ECF is 4.

`line_generation`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Generate C pragmas '#line x' in generated C code.
  ISE ECF:
    true => `<setting name="line_generation" value="true"/>`
    false => `<setting name="line_generation" value="false"/>`

`link`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library
    Accepted at the cluster-level for backward compatibility.
  Description:
    Specify object files, library files or command line options to be passed to the linker.
    Several of these options can be specified.
  ISE ECF:
    pathname => `<external_library location="`pathname`"/>`

`metadata_cache_path`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Specify pathname where XML files describing DLLs assemblies will be generated.
  ISE ECF:
    pathname => `<setting name="metadata_cache_path" value="`pathname`"/>`
    ISE's default: $ISE_EIFFEL\dotnet\assemblies

`msil_classes_per_module`
  Values:
    Integer value > 0
  Default:
    5
  Scope:
    system/library
  Description:
    Number of classes generated per .NET module during incremental compilation. Increasing this value will slow down the incremental recompilation, but speed up the time to load the assembly while debugging in workbench mode.
  ISE ECF:
    value => `<setting name="msil_classes_per_module" value="`value`"/>`

`msil_clr_version`
  Values:
    Version
  Default:
    No default
  Scope:
    system/library
  Example:
    v1.1.4322
  Description:
    When compiling to the .NET framework. Specify version of .NET framework to be used.
  ISE ECF:
    version => `<setting name="msil_clr_version" value="`version`"/>`
    ISE's ECF default: highest installed .NET version.

`msil_culture`
  Values:
    Culture
  Default:
    No default
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. MSIL culture.
  ISE ECF:
    culture => `<setting name="msil_culture" value="`culture`"/>`

`msil_generation`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Compile to the .NET framework.
  ISE ECF:
    true => `<setting name="msil_generation" value="true"/>`
    false => `<setting name="msil_generation" value="false"/>`

`msil_key_file_name`
  Values:
    Pathname
  Default:
    No default
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Key to be able to add the generated binary to the Global Assembly Cache (GAC).
  ISE ECF:
    pathname => `<setting name="msil_key_file_name" value="`pathname`"/>`

`msil_use_optimized_precompile`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Use an optimized version of a precompile.
  ISE ECF:
    true => `<setting name="msil_use_optimized_precompile" value="true"/>`
    false => `<setting name="msil_use_optimized_precompile" value="false"/>`

`multithreaded`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Enable generation of a multithreaded application.
  ISE ECF:
    true => `<capability><concurrency use="thread" support="thread"/></capability>`
    false => `<capability><concurrency use="none" support="none"/></capability>`

`namespace`
  Values:
    Namespace
  Default:
    No default
  Scope:
    system/library, cluster, class
  Description:
    When compiling to the .NET framework. Specify the namespace to be used for the classes.
  ISE ECF:
    namespace => `<option namespace="`namespace`"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`old_verbatim_strings`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library
  Description:
    Use the old format for verbatim strings.
  ISE ECF:
    true => `<setting name="old_verbatim_strings" value="true"/>`
    false => `<setting name="old_verbatim_strings" value="false"/>`

`override_cluster`
  Values:
    Cluster name
  Default:
    No default
  Scope:
    system/library
  Description:
    Enable all classes of 'cluster_name' to override the classes with the same names located in other clusters.
    Several of these options can be specified.
  ISE ECF:
    cluster_name => `<override name="`cluster_name`" location="..."/>`

`prefix`
  Values:
    Prefix
  Default:
    No default
  Scope:
    cluster
  Description:
    Specify the class name prefix for classes of this cluster or .NET assembly.
  ISE ECF:
    assembly_prefix => `<assembly name="`cluster_name`" location="`cluster_pathname`" prefix="`assembly_prefix`"/>`
    cluster_prefix => `<cluster name="`cluster_name`" location="`cluster_pathname`" prefix="`cluster_prefix`"/>`

`profile`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library, cluster, class
  Description:
    Enable Eiffel profiling.
  ISE ECF:
    true => `<option profile="true"/>`
    false => `<option profile="false"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`public_key_token`
  Values:
    Public key token
  Default:
    b77a5c561934e089
  Scope:
    cluster
  Description:
    Specify the public_key_token of the .NET assembly.
    The option 'assembly' should be set in order for this option to have any effect.
  ISE ECF:
    public_key_token => `<assembly name="`cluster_name`" location="`cluster_pathname`" assembly_key="`public_key_token`"/>`

`read_only`
  Values:
    true | false
  Default:
    false
  Scope:
    cluster
  Description:
    Specify that the classes in the cluster directory should be considered as read-only by the underlying Eiffel tool.
    This option is only supported by ISE's EiffelStudio when the cluster is also 'recursive'. Otherwise it has no effect
  ISE ECF:
    true => `<cluster readonly="true"/>`
    false => `<cluster readonly="false"/>`

`recursive`
  Values:
    true | false
  Default:
    false
  Scope:
    cluster
  Description:
    Specify that the cluster directory and its subdirectories should be recursively traversed to find Eiffel classes.
  ISE ECF:
    true => `<cluster recursive="true"/>`
    false => `<cluster recursive="false"/>`

`shared_library_definition`
  Values:
    filename.def
  Default:
    No default
  Scope:
    system/library
  Description:
    Specify the file where the Eiffel compiler will look when generating the exported functions of a shared library.
  ISE ECF:
    filename.def => `<setting name="shared_library_definition" value="`filename.def`"/>`

`syntax`
  Values:
    obsolete | transitional | standard | provisional
  Default:
    standard
  Scope:
    system/library, cluster, class
  Description:
    Instruct the Eiffel parser to accept or reject some syntax notations for some Eiffel constructs. This is typically used during transitional periods.
  ISE ECF:
    obsolete => `<option syntax="obsolete"/>`
    transitional => `<option syntax="transitional"/>`
    standard => `<option syntax="standard"/>`
    provisional => `<option syntax="provisional"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`target`
  Values:
    exe | dll | com | no_main
  Default:
    exe
  Scope:
    system/library
  Description:
    Specify the output target of the application.
  ISE ECF:
    exe => `<setting name="msil_generation_type" value="exe"/>`
    dll => `<setting name="msil_generation_type" value="dll"/>`
    com => `<setting name="msil_generation_type" value="exe"/>`
    no_main => `<setting name="msil_generation_type" value="exe"/>`

`trace`
  Values:
    true | false
  Default:
    false
  Scope:
    system/library, cluster, class
  Description:
    Enable trace mode.
  ISE ECF:
    true => `<option trace="true"/>`
    false => `<option trace="false"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.

`use_cluster_name_as_namespace`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Should the cluster name be used as namespace (e.g. base.STRING)?
  ISE ECF:
    true => `<setting name="use_cluster_name_as_namespace" value="true"/>`
    false => `<setting name="use_cluster_name_as_namespace" value="false"/>`

`use_full_cluster_name_as_namespace`
  Values:
    true | false
  Default:
    true
  Scope:
    system/library
  Description:
    When compiling to the .NET framework. Should the cluster name be used as namespace (e.g. base.STRING)?
  ISE ECF:
    true => `<setting name="use_all_cluster_name_as_namespace" value="true"/>`
    false => `<setting name="use_all_cluster_name_as_namespace" value="false"/>`

`version`
  Values:
    Version
  Default:
    1.0.5000.0
  Scope:
    cluster
  Description:
    Specify the version of the .NET assembly.
    The option 'assembly' should be set in order for this option to have any effect.
  ISE ECF:
    version => `<assembly name="`cluster_name`" location="`cluster_pathname`" assembly_version="`version`"/>`

`void_safety`
  Values:
    none | on_demand | complete
  Default:
    none
  Scope:
    system/library
  Description:
    Should void-safety rules be checked?
  ISE ECF:
    none => `<option void_safety="none"/>`
    on_demand => `<option void_safety="initialization"/>`
    complete => `<option void_safety="all"/>`

`warning`
  Values:
    none | style | default | all
  Default:
    default
  Scope:
    system/library, cluster, class
  Description:
    Specify warning level.
    'style' means that Eiffel style warnings (e.g. having feature names in all upper-case) are emitted.
    'default' means that warnings such as local variables unused are emitted.
    'all' means that all warnings are emitted.
  ISE ECF:
    none => `<option warning="false"/>`
    style => `<option warning="true"/>`
    default => `<option warning="true"/>`
    all => `<option warning="true"/>`
    Replace `<option>` by `<class_option class="`...`">` in case of class-level option.