REFERENCE:

LACE:

System Description ( LACE) files
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The way in which a program is built is govenerned by a description file,
the syntax of which follows that of LACE as described in Eiffel: The Language.

Only a minimum subset of LACE is implemented in the current release of 
Eon/Eiffel, and so a full desciption follows. Future releases will see 
proper support for LACE.

For this reason we will refer to the current system as ELACE to alert
programmers to the descrepencies.

ELACE files are textual and must have a ".l" file extension. There general
syntax is as follows:

-------------------------------------------------
| root							        |
	<root class name>

creation
	<creation procedure name>

option
        debug(<on|off>):class_name_list, ...
        trace(<on|off>):class_name_list, ...
        optimise(<on|off>):class_name_list, ...
        assertion(ensure):class_name_list, ...
        assertion(require):class_name_list, ...
        assertion(loop):class_name_list, ...
        assertion(invariant):class_name_list, ...
        assertion(on):class_name_list, ...
        assertion(off):class_name_list, ...
        assertion(none):class_name_list, ...

generate
        executable:"file_name"
        compile_with: "link_flags"
        link_with: "link_flags"

cluster
        "cluster_name"
        "cluster_name"

------------------------------------------------

There are five sections as described below:

"root"		name the root class to be of the program to be compiled

"creation"	name the creation procedure to be called in the root class.
			This is a normal Eiffel creation procedure and must, therefore,
			be named in the creation clause of the root class.

"option"		specify Eiffel compilation options. These handle standard
			Eiffel debugging and efficiency controls. There are 
			implementation differencies which are documented in the
			section on debugging.

"generate"	include extra options for the C++ compiler and linker for
			a particular system. These are extra to those specified in
			the C++ compiler interface file.


"cluster"		name clusters required by the system. These names may include
			environment variables in the form of:

			cluster
				"$(EON)/intrinsic"
				"$(MYCLUSTER)/basic"
		

Example:

---------------------------------------------------
root
        SALES

creation
        init_sales

option
        debug(on):SALES, CUSTOMER, STOCK
        trace(on):SALES
        assertion(ensure):SALES,STOCK
        assertion(require):SALES,STOCK

generate
        executable:"$(ACCOUNTS)/bin/sales"
        link_with: "-lcposix"

cluster
        "$(EON)/intrinsic"
        "$(ACCOUNTS)/accounts"

---------------------------------------------------

The examples shows part of an accounts system. A program called sales is
is compiled and saved in $(ACCOUNTS)/bin. Its root class is SALES and, when
run, the first procedure called is "init_sales". There is debugging control
on classes SALES, CUSTOMER and STOCK.


