<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paco</id>
		<title>EiffelStudio: an EiffelSoftware project - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paco"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/Special:Contributions/Paco"/>
		<updated>2026-05-10T02:24:17Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_Wish_List&amp;diff=6429</id>
		<title>EiffelStudio Wish List</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_Wish_List&amp;diff=6429"/>
				<updated>2006-11-30T11:25:19Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: /* General */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User suggestions]]&lt;br /&gt;
Welcome to the Eiffel/EiffelStudio Wish List. This is the place where you, the community, get a chance to tell us what you think is important to include in the future versions of the Eiffel compiler and EiffelStudio IDE.&lt;br /&gt;
&lt;br /&gt;
Please use this list responsibly and try to correctly categorize your wishes. A brief description may help us evaluate your requirements but please be brief.&lt;br /&gt;
&lt;br /&gt;
Our stock pile of genie snared, dusty gold lamps is running low for our next release ([[EiffelStudio Releases]]) but we'll be sure to scour the lands for more.&lt;br /&gt;
&lt;br /&gt;
== Compiler ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* A way to author Enum-like class for typed options or flags. Currently using INTEGER and a bag of analogous constants doesn't make Eiffel &amp;quot;elegant&amp;quot;.&lt;br /&gt;
* Addition of a decimal type / REAL_128 for 28 digit precision - ALREADY EXISTS - class MA_DECIMAL in the Gobo libraries is shipped with the compiler.&lt;br /&gt;
* CHARACTER_16 type - Please NO! CHARACTER_32 covers this already.&lt;br /&gt;
* 7-bit (US) ASCII_CHARACTER and ASCII_STRING which extends upon an ARRAY [ASCII_CHARACTER] with values of 0-127, removing the need for UTF8 conversion/checking when passing basic char values to C (gtk interfacing for example when connecting to signals)&lt;br /&gt;
* Make MUTEX recursive on non-windows platforms or at least provide a mutex and separate recursive mutex for all platforms.&lt;br /&gt;
* Ability for multiple precompiles in a system.&lt;br /&gt;
* Ability to compile/debug for both 32/64 bit systems via project settings&lt;br /&gt;
* Ability for for a fully optimal finalization for systems marked as 'client only', so that unused variables will not get generated in the finalized C Code.&lt;br /&gt;
* Ability for studio to work with binutils for cross compilation&lt;br /&gt;
* Ability to be able to control all user settable options in studio without having to resort to manually editing files, this is mainly for C compilation options&lt;br /&gt;
* Have a smarter C code generation system that can launch a C compilation of any module as soon as the C code is generated, this way we can also be smarter when monitoring C compilation progress&lt;br /&gt;
* Ability for ANY to generate a unique id for each object for referencing and hashability&lt;br /&gt;
* With hashable ability of ANY, change object graph traversal for serialization so that multiple threads can serialize at the same time without having to wait linearly (lock_marking/unlock_marking)&lt;br /&gt;
* Ability for Studio to work and compile with Cygwin&lt;br /&gt;
* Ability to get a list of file dependencies in the form of a file listing to stdout. This list would contain a) all .e files used in the system, b) all .lib/.so files explicitly listed in the ECF/Ace file and c) all .h files referenced in external features (ideally that have not been subjected to dead code removal). Preferably, this feature should be able to be used without performing a full compilation (level 4?).&lt;br /&gt;
&lt;br /&gt;
=== .NET ===&lt;br /&gt;
* Consume .NET generics. Not being able to use them is becoming harder.&amp;lt;br/&amp;gt;We cannot write Atlas (AJAX) based web applications because of it. The Visual Studio SDK, used by EiffelEnvision, is increasing it's use of generics and preventing use from supporting some features. The people who want to use the .NET framework classes instead of the Eiffel ones cannot use generics and have to resort to using the non-generic versions of list, which bulks implementation and leads ambiguity.&lt;br /&gt;
* Emit .NET generics types for Eiffel generic classes.&lt;br /&gt;
* Allow direct access to member of TYPED_POINTER [xxx] item out/ref routine arguments.&lt;br /&gt;
* Allow direct setting of TYPED_POINTER [xxx] item for out/ref routine arguments.&lt;br /&gt;
* Optimized ''call.do_nothing'' as a IL pop instruction to removed returned value.&lt;br /&gt;
&lt;br /&gt;
== IDE ==&lt;br /&gt;
* Give the user control over which classes will be compiled over the GUI (say: click on grey class and it becomes yellow and will be compiled always from now on, even though it may not be used at all. This is good for development of classes which are not added over GUI in ES.)&lt;br /&gt;
* While searching for word or after a double click on a word, it would be nice if all words would be highlighted in pastel color style.&lt;br /&gt;
* It's a pain to pick`n`drop huge features source code into the context window for setting break point. What about the following: Pick on the right side of the class text picks the feature as well? (Pick on the left side of the class text picks already the feature call).&lt;br /&gt;
* Make editor and grid more theme compliant in terms of color and font&lt;br /&gt;
* Remove all use of EV_TREE and EV_MULTI_COLUMN_LIST from studio so that all list widgets are drawn by vision2, this will make porting easier, we can also use the grid items to be able to change names of clusters, classes and features inline via the tree items.&lt;br /&gt;
* Extended static checking integrated into the IDE.&lt;br /&gt;
* Rearrange widgets of ''search tool'' so that they use free space on the right. Currently it uses too much vertical space.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* Provide a WEAK_REFERENCE [G] class to abstract away the implementation details currently provided by IDENTIFIED for implementing weak references.&lt;br /&gt;
* Locale support to determine what the default charset is (or whether it is UTF-8 or not)&lt;br /&gt;
* Build an object storing database with built-in record locking so that multiple systems can have access to the same 'objects'&lt;br /&gt;
* Make base.ecf rely on smaller ecf's (kernel.ecf, structures.ecf, support.ecf) so that these smaller dependancies can be compiled in only if needs be.  It would be good if ANY could be optimized so that it doesn't have any references to io (or print) or mismatch information (only needed when storable is employed) as these bring in a lot of overhead when compiling a simple system.  The smaller ecf could also link in with the object files of the runtime to avoid linking against a monolithic runtime (cecil, storable, etc) when you only want to print (&amp;quot;Hello World&amp;quot;)&lt;br /&gt;
* Put more of the run-time code in to inline C code reducing the size of the executable if you are not using certain features, ideally the linked against runtime should only contain the core functionality needed to create objects, perform simple operations and garbage collect, any other features can be brought in on a class/library/configuration level.&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Paco&amp;diff=4592</id>
		<title>User:Paco</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Paco&amp;diff=4592"/>
				<updated>2006-09-17T11:37:10Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:People]]&lt;br /&gt;
&lt;br /&gt;
==About me==&lt;br /&gt;
Software developer. Computer Science enginering degree from LTH, Lund, Sweden 1993. Consultant for Generic Integration AB, Stockholm, Sweden.&lt;br /&gt;
&lt;br /&gt;
==Current work projects==&lt;br /&gt;
* Vaktis. A RBAC-system written in Eiffel.&lt;br /&gt;
* ELDAP. Eiffel LDAP library.&lt;br /&gt;
* aPig. API generator. Generates Eiffel classes, C header files, DEF files, SWIG .i files and HTML documentation from aPig specification files.&lt;br /&gt;
* Eiffel Studio builder for SCons.&lt;br /&gt;
&lt;br /&gt;
==Current spare time projects==&lt;br /&gt;
* ECLOP. Eiffel command line parser library.&lt;br /&gt;
* Yeps (Yet another Eiffel Persistence solution). Berkeley DB based Eiffel persistance library.&lt;br /&gt;
* Taxosoft. System for working with biological taxonomies and nomenclature&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Paco&amp;diff=4591</id>
		<title>User:Paco</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Paco&amp;diff=4591"/>
				<updated>2006-09-17T11:36:17Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:People]]&lt;br /&gt;
&lt;br /&gt;
==About me==&lt;br /&gt;
Software developer. Computer Science enginering degree from LTH, Lund, Sweden 1993. Consultant for Generic Integration AB, Stockholm, Sweden.&lt;br /&gt;
&lt;br /&gt;
==Current work projects==&lt;br /&gt;
*[[Vaktis. A RBAC-system written in Eiffel.]]&lt;br /&gt;
*[[ELDAP. Eiffel LDAP library.]]&lt;br /&gt;
*[[aPig. API generator. Generates Eiffel classes, C header files, DEF files, SWIG .i files and HTML documentation from aPig specification files.]]&lt;br /&gt;
*[[Eiffel Studio builder for SCons.]]&lt;br /&gt;
&lt;br /&gt;
==Current spare time projects==&lt;br /&gt;
*[[ECLOP. Eiffel command line parser library.]]&lt;br /&gt;
*[[Yeps (Yet another Eiffel Persistence solution). Berkeley DB based Eiffel persistance library.]]&lt;br /&gt;
*[[Taxosoft. System for working with biological taxonomies and nomenclature]]&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4590</id>
		<title>Talk:ProposalConfigurationDiscovery</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4590"/>
				<updated>2006-09-17T08:08:50Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''--[[User:Patrickr|Patrickr]] 02:53, 14 September 2006 (CEST)'''&lt;br /&gt;
&lt;br /&gt;
Maybe we could think of libraries more like &amp;quot;plugins&amp;quot; for eiffelstudio (and maybe at a later point there could even be plugins).&lt;br /&gt;
I could imagine a dialog where I could select the libraries to download (and this would also handle dependencies).&lt;br /&gt;
&lt;br /&gt;
Points to think about I see are: dependency handling, nameing schema (for dependency handling), version handling (problems like library a needs version &amp;lt; 2 of b and library c needs version &amp;gt; 2 of b)&lt;br /&gt;
&lt;br /&gt;
In general it may make sense to have a look at how others have solved this problems (e.g. plugin system in eclipse, apt system in debian, ...)&lt;br /&gt;
&lt;br /&gt;
'''--[[User:Paco|Paco]] 10:08, 17 September 2006 (CEST)'''&lt;br /&gt;
&lt;br /&gt;
I would very much like to see an application that is independent of Eiffel&lt;br /&gt;
Studio that could handle installation of Eiffel libraries and components, and&lt;br /&gt;
also depenedencies between libraries and components. I think that looking at&lt;br /&gt;
other &amp;quot;package&amp;quot; handlers like APT is a very good start. Maybe apt could be used&lt;br /&gt;
&amp;quot;as is&amp;quot; but with little tweaks.  &lt;br /&gt;
&lt;br /&gt;
It is important that the application is independent of Eiffel Studio in the&lt;br /&gt;
sense that it can be upgraded independently of Eiffel Studio. In general it&lt;br /&gt;
would be good if the application is independent of Eiffel Studio, but at the&lt;br /&gt;
same time that it can easily be started/called from within Eiffel Studio.  &lt;br /&gt;
&lt;br /&gt;
Some general requirements are:&lt;br /&gt;
&lt;br /&gt;
* Ability to have multiple versions of a given library/component installed. This is useful both for people who are working in different projects using different library/component versions and when upgrading from one library/component version to another. &lt;br /&gt;
&lt;br /&gt;
* Eiffel Studio itself should be regarded as any other library/component as regards dependencies. Eg: &amp;quot;requires EiffelStudio 5.7|6.0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
* A reference implementation of the application should be done as a command line program so that it is scriptable.  &lt;br /&gt;
&lt;br /&gt;
* It would be very nice if the application also could handle CVS/Subversion checkouts/updates for a given library/component (relying of course on the standard CVS/Subversion command line tools). &lt;br /&gt;
&lt;br /&gt;
A requirement on ace/ecf files is that it must be easy to switch between different versions of a given library/component. Ace/ecf files should also explicitly list which version of each library/component the system should be compiled against.&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4589</id>
		<title>Talk:ProposalConfigurationDiscovery</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4589"/>
				<updated>2006-09-17T08:00:56Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''--[[User:Patrickr|Patrickr]] 02:53, 14 September 2006 (CEST)'''&lt;br /&gt;
&lt;br /&gt;
Maybe we could think of libraries more like &amp;quot;plugins&amp;quot; for eiffelstudio (and maybe at a later point there could even be plugins).&lt;br /&gt;
I could imagine a dialog where I could select the libraries to download (and this would also handle dependencies).&lt;br /&gt;
&lt;br /&gt;
Points to think about I see are: dependency handling, nameing schema (for dependency handling), version handling (problems like library a needs version &amp;lt; 2 of b and library c needs version &amp;gt; 2 of b)&lt;br /&gt;
&lt;br /&gt;
In general it may make sense to have a look at how others have solved this problems (e.g. plugin system in eclipse, apt system in debian, ...)&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4588</id>
		<title>Talk:ProposalConfigurationDiscovery</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:ProposalConfigurationDiscovery&amp;diff=4588"/>
				<updated>2006-09-17T07:58:35Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''--[[User:Patrickr|Patrickr]] 02:53, 14 September 2006 (CEST)'''&lt;br /&gt;
&lt;br /&gt;
Maybe we could think of libraries more like &amp;quot;plugins&amp;quot; for eiffelstudio (and maybe at a later point there could even be plugins).&lt;br /&gt;
I could imagine a dialog where I could select the libraries to download (and this would also handle dependencies).&lt;br /&gt;
&lt;br /&gt;
Points to think about I see are: dependency handling, nameing schema (for dependency handling), version handling (problems like library a needs version &amp;lt; 2 of b and library c needs version &amp;gt; 2 of b)&lt;br /&gt;
&lt;br /&gt;
In general it may make sense to have a look at how others have solved this problems (e.g. plugin system in eclipse, apt system in debian, ...)&lt;br /&gt;
&lt;br /&gt;
I would very much like to see an application that is independent of Eiffel Studio that could handle installation of Eiffel libraries and components, and also depenedencies between libraries and components. I think that looking at other &amp;quot;package&amp;quot; handlers like APT is a very good start. Maybe apt could be used &amp;quot;as is&amp;quot; but with little tweaks. &lt;br /&gt;
&lt;br /&gt;
It is important that the application is independent of Eiffel Studio in the sense that it can be upgraded independently of Eiffel Studio. In general it would be good if the application is independent of Eiffel Studio, but at the same time that it can easily be started/called from within Eiffel Studio. &lt;br /&gt;
&lt;br /&gt;
Some general requirements are:&lt;br /&gt;
&lt;br /&gt;
* Ability to have multiple versions of a given library/component installed. This is useful both for people who are working in different projects using different library/component versions and when upgrading from one library/component version to another.&lt;br /&gt;
&lt;br /&gt;
* Eiffel Studio itself should be regarded as any other library/component as regards dependencies. Eg: &amp;quot;requires EiffelStudio 5.7|6.0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* A reference implementation of the application should be done as a command line program so that it is scriptable. &lt;br /&gt;
&lt;br /&gt;
* It would be very nice if the application also could handle CVS/Subversion checkouts/updates for a given library/component (relying of course on the standard CVS/Subversion command line tools).&lt;br /&gt;
&lt;br /&gt;
A requirement on ace/ecf files is that it must be easy to switch between different versions of a given library/component. Ace/ecf files should also explicitly list which version of each library/component the system should be compiled against.&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Configuration&amp;diff=3908</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Configuration&amp;diff=3908"/>
				<updated>2006-07-01T21:51:03Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: /* General ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
== General ideas ==&lt;br /&gt;
* as much as possible independant from the system (windows/unix)&lt;br /&gt;
* one file with multiple configurations (eg. debug, release build)&lt;br /&gt;
* include/exclude as regexp pattern&lt;br /&gt;
* global ignore patterns (eg. cvs/svn)&lt;br /&gt;
* include other configuration files (eg. to add a library just include the config file of the library)&lt;br /&gt;
* relative paths&lt;br /&gt;
* actions before/after run/compile (eg. start a server)&lt;br /&gt;
&lt;br /&gt;
=== Things to implement ideas ===&lt;br /&gt;
* conditions (if windows then ... elseif unix then ... end)&lt;br /&gt;
* variables (user and predefined)&lt;br /&gt;
* inheritance of configuration&lt;br /&gt;
* C code to compile (when wrapping C API:s or optimizing code)&lt;br /&gt;
* Flags to C compiler and linker&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* convert old ace files into new format&lt;br /&gt;
* *.epr vs *.ace&lt;br /&gt;
* [[ProjectFiles]]&lt;br /&gt;
&lt;br /&gt;
== Possible implementation layout ==&lt;br /&gt;
&lt;br /&gt;
Some more information are available here: http://www.ise/tools/public_zone/index.php?op=dl&amp;amp;path=/home/patrickr/public_html/Public/project_configuration.pdf (Part with two config files has changed to only one config file.)&lt;br /&gt;
&lt;br /&gt;
[[Image:Configuration1.jpg]]&lt;br /&gt;
&lt;br /&gt;
A system consists of multiple targets. A target can extend another target. A target can have some libraries, assemblies, clusters and override clusters.&lt;br /&gt;
A library has an associated target. A cluster can have a parent cluster. An override cluster has a some groups it overrides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;The configuration system.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_SYSTEM&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- Name of the system.&lt;br /&gt;
&lt;br /&gt;
	uuid: STRING&lt;br /&gt;
			-- UUID of this system. Used to uniquely identify libraries.&lt;br /&gt;
&lt;br /&gt;
	targets: LIST [CONF_TARGET]&lt;br /&gt;
			-- The configuration targets.&lt;br /&gt;
&lt;br /&gt;
	library_target: CONF_TARGET&lt;br /&gt;
			-- The target to use if this is used as a library.&lt;br /&gt;
	&lt;br /&gt;
	compileable_targets: LIST [CONF_TARGET]&lt;br /&gt;
			-- Targets that can be compiled (e.g. have a root feature).&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A configuration target.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_TARGET&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- Name of the target.&lt;br /&gt;
&lt;br /&gt;
	version: CONF_VERSION&lt;br /&gt;
			-- Version number of the target.&lt;br /&gt;
&lt;br /&gt;
	extends: CONF_TARGET&lt;br /&gt;
			-- If we extend another target, this is the other target.&lt;br /&gt;
&lt;br /&gt;
	libraries: LIST [CONF_LIBRARY]&lt;br /&gt;
			-- The used libraries.&lt;br /&gt;
&lt;br /&gt;
	overrides: LIST [CONF_OVERRIDE]&lt;br /&gt;
			-- The override clusters.&lt;br /&gt;
&lt;br /&gt;
	clusters: LIST [CONF_CLUSTER]&lt;br /&gt;
			-- The normal clusters.&lt;br /&gt;
	&lt;br /&gt;
	assemblies: LIST [CONF_ASSEMBLY]&lt;br /&gt;
			-- The assemblies.&lt;br /&gt;
&lt;br /&gt;
	root: CONF_ROOT&lt;br /&gt;
			-- The root feature.&lt;br /&gt;
&lt;br /&gt;
	options: CONF_OPTIONS&lt;br /&gt;
			-- The options (assertions, debugs, warnings, ...)&lt;br /&gt;
&lt;br /&gt;
	file_rule: CONF_FILE_RULE&lt;br /&gt;
			-- Globally exclude/include file rules.&lt;br /&gt;
&lt;br /&gt;
	external_include: LIST [CONF_EXTERNAL_INCLUDE]&lt;br /&gt;
			-- Global external include files.&lt;br /&gt;
&lt;br /&gt;
	external_objec: LIST [CONF_EXTERNAL_OBJECT]&lt;br /&gt;
			-- Global external object files.&lt;br /&gt;
&lt;br /&gt;
	external_ressource: LIST [CONF_EXTERNAL_RESSOURCE]&lt;br /&gt;
			-- Global external ressource files.&lt;br /&gt;
&lt;br /&gt;
	pre_compile: LIST [CONF_ACTION]&lt;br /&gt;
			-- Actions to be executed before compilation.&lt;br /&gt;
&lt;br /&gt;
	post_action: LIST [CONF_ACTION]&lt;br /&gt;
			-- Actions to be executed after compilation.&lt;br /&gt;
&lt;br /&gt;
	variables: LIST [CONF_VARIABLE]&lt;br /&gt;
			-- User defined variables.&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Base class for configuration groups.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_CONDITIONED&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- The name of the group.&lt;br /&gt;
&lt;br /&gt;
	directory: CONF_DIRECTORY&lt;br /&gt;
			-- The directory of the group.&lt;br /&gt;
&lt;br /&gt;
	options: CONF_OPTIONS&lt;br /&gt;
			-- The options (assertions, debugs, warnings, ...)&lt;br /&gt;
&lt;br /&gt;
	name_prefix: STRING&lt;br /&gt;
			-- An optional name prefix for this group.&lt;br /&gt;
&lt;br /&gt;
	renaming: HASH_TABLE [STRING, STRING]&lt;br /&gt;
			-- Mapping of renamed classes from the old name to the new name.&lt;br /&gt;
&lt;br /&gt;
	class_options: HASH_TABLE [CONF_OPTION, STRING&lt;br /&gt;
			-- Classes with specific options.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A library.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_LIBRARY&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	library_target: CONF_TARGET&lt;br /&gt;
			-- The library target.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A project cluster.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_CLUSTER&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
	is_recursive: BOOLEAN&lt;br /&gt;
			-- Are subdirectories included recursively?&lt;br /&gt;
&lt;br /&gt;
	parent: CONF_CLUSTER&lt;br /&gt;
			-- An optional parent cluster.&lt;br /&gt;
&lt;br /&gt;
	dependencies: LIST [CONF_GROUP]&lt;br /&gt;
			-- Dependencies to other groups.&lt;br /&gt;
&lt;br /&gt;
	file_rule: CONF_FILE_RULE&lt;br /&gt;
			-- Globally exclude/include file rules.&lt;br /&gt;
&lt;br /&gt;
	is_visible (a_feature, a_class: STRING): BOOLEAN&lt;br /&gt;
			-- Is a feature of this cluster visible?&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Clusters that override other groups.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_OVERRIDE&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_CLUSTER&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	override: LIST [CONF_GROUP]&lt;br /&gt;
			-- The groups that this cluster overrides.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CONF_CONDITIONED is a class that allows to specify for which platform, build tuple something is enabled. Conditioned are: CONF_ACTION (pre-/postcompile actions), CONF_EXTERNAL_(INCLUDE|OBJECT|RESSOURCE), CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
== Pseudocode example configuration ==&lt;br /&gt;
files/eiffelvision/eiffelvision.ace&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system EiffelVision&lt;br /&gt;
&lt;br /&gt;
target Library&lt;br /&gt;
    version 2.0.0.1&lt;br /&gt;
    uuid 15ac36b5-2c65-41e9-8309-c504dd430a0b&lt;br /&gt;
&lt;br /&gt;
    library base&lt;br /&gt;
        files/base/base.ace&lt;br /&gt;
&lt;br /&gt;
    cluster vision&lt;br /&gt;
        files/vision&lt;br /&gt;
        recursive&lt;br /&gt;
        uses base&lt;br /&gt;
    &lt;br /&gt;
    external_include&lt;br /&gt;
        files/include/common.h [(all, all)]&lt;br /&gt;
        files/include/windows.h [(windows, all)]&lt;br /&gt;
        files/include/gtk [(unix, all)]&lt;br /&gt;
&lt;br /&gt;
    external_objects&lt;br /&gt;
        files/obj/windows.o [(windows, all)]&lt;br /&gt;
        files/obj/gtk.o [(unix, all)]&lt;br /&gt;
        files/obj/debug.o [(unix, workbench)]&lt;br /&gt;
&lt;br /&gt;
target Debug extends Library&lt;br /&gt;
&lt;br /&gt;
    cluster debug&lt;br /&gt;
        files/debug&lt;br /&gt;
        recursive&lt;br /&gt;
        uses base, vision&lt;br /&gt;
&lt;br /&gt;
    root debug:ROOT_CLASS:make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
files/eiffelstudio/eiffelstudio.ace&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system EiffelStudio&lt;br /&gt;
    version 5.0.0.1&lt;br /&gt;
    uuid 9a8d3871-ef44-484c-9029-c52d17df40f0&lt;br /&gt;
&lt;br /&gt;
target Common&lt;br /&gt;
&lt;br /&gt;
    variable gobo_setting=&amp;quot;some settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    exclude&lt;br /&gt;
        ^\.svn$&lt;br /&gt;
&lt;br /&gt;
    library base &lt;br /&gt;
        files/base/base.ace&lt;br /&gt;
&lt;br /&gt;
    library gobo&lt;br /&gt;
        files/gobo/gobo.ace&lt;br /&gt;
        rename &amp;quot;some_class&amp;quot; as &amp;quot;new_class&amp;quot;&lt;br /&gt;
        prefix &amp;quot;gobo_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    cluster compiler&lt;br /&gt;
        files/compiler&lt;br /&gt;
            uses base, gobo&lt;br /&gt;
&lt;br /&gt;
    root compiler:ROOT_CLASS:make&lt;br /&gt;
&lt;br /&gt;
target Console extends Common&lt;br /&gt;
&lt;br /&gt;
    cluster console&lt;br /&gt;
        files/console&lt;br /&gt;
            uses base, gobo, compiler&lt;br /&gt;
&lt;br /&gt;
    cluster mysub (console)&lt;br /&gt;
        $/mysub&lt;br /&gt;
&lt;br /&gt;
target Workbench extends Common&lt;br /&gt;
&lt;br /&gt;
    library eiffelvision&lt;br /&gt;
        files/eiffelvision/eiffelvision.ace&lt;br /&gt;
&lt;br /&gt;
    cluster workbench&lt;br /&gt;
        files/workbench&lt;br /&gt;
            uses base, gobo, eiffelvision, compiler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Questions and Problems ==&lt;br /&gt;
&lt;br /&gt;
*Specify use of other clusters? '''Yes'''&lt;br /&gt;
*Variables? '''If not defined, take environment variable.'''&lt;br /&gt;
*Path relative to ace file? '''Yes'''&lt;br /&gt;
*When are two libraries the same? '''UUID: http://www.famkruithof.net/guid-uuid-random.html'''&lt;br /&gt;
=== Multiple library usage ===&lt;br /&gt;
====Problem====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System Application&lt;br /&gt;
&lt;br /&gt;
library A&lt;br /&gt;
library B&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System A&lt;br /&gt;
&lt;br /&gt;
library C&lt;br /&gt;
    option Yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System B&lt;br /&gt;
&lt;br /&gt;
library C&lt;br /&gt;
    option No&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have a conflict for the option on library C.&lt;br /&gt;
&lt;br /&gt;
====Solution====&lt;br /&gt;
If the library is directly used in Application, use the this options, otherwise use the options of the Application system.&lt;br /&gt;
&lt;br /&gt;
===File pattern===&lt;br /&gt;
The file pattern match against the relative path in unix format in a cluster.&lt;br /&gt;
e.g. if the cluster is in C:\mycluster&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;Pattern&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;Matches&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
storage/table&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\storage\table\*&lt;br /&gt;
    C:\mycluster\storage\table.e&lt;br /&gt;
    C:\mycluster\something\storage\table\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
^/storage/table/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\storage\table\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
^/.*/test/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\a\test\*&lt;br /&gt;
    C:\mycluster\b\test\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
/test/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\a\test\*&lt;br /&gt;
    C:\mycluster\b\test\*&lt;br /&gt;
    C:\mycluster\something\table\test\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration file format ==&lt;br /&gt;
[[ConfigurationFileFormat|Configuration file format page]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
[[ConfigurationMigration|Configuration migration]]&lt;br /&gt;
&lt;br /&gt;
== Degree 6 ==&lt;br /&gt;
[[ConfigurationDegree6|Configuration degree 6]]&lt;br /&gt;
&lt;br /&gt;
== Ideas for better conditions ==&lt;br /&gt;
[[ConfigurationConditions|Configuration conditions]]&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Configuration&amp;diff=3907</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Configuration&amp;diff=3907"/>
				<updated>2006-07-01T21:50:14Z</updated>
		
		<summary type="html">&lt;p&gt;Paco: /* Things to implement ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Compiler]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
== General ideas ==&lt;br /&gt;
* as much as possible independant from the system (windows/unix)&lt;br /&gt;
* one file with multiple configurations (eg. debug, release build)&lt;br /&gt;
* include/exclude as regexp pattern&lt;br /&gt;
* global ignore patterns (eg. cvs/svn)&lt;br /&gt;
* include other configuration files (eg. to add a library just include the config file of the library)&lt;br /&gt;
* relative paths&lt;br /&gt;
* actions before/after run/compile (eg. start a server)&lt;br /&gt;
&lt;br /&gt;
=== Things to implement ideas ===&lt;br /&gt;
* conditions (if windows then ... elseif unix then ... end)&lt;br /&gt;
* variables (user and predefined)&lt;br /&gt;
* inheritance of configuration&lt;br /&gt;
* C code to compile (when wrapping C API:s or optimizing code)&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* convert old ace files into new format&lt;br /&gt;
* *.epr vs *.ace&lt;br /&gt;
* [[ProjectFiles]]&lt;br /&gt;
&lt;br /&gt;
== Possible implementation layout ==&lt;br /&gt;
&lt;br /&gt;
Some more information are available here: http://www.ise/tools/public_zone/index.php?op=dl&amp;amp;path=/home/patrickr/public_html/Public/project_configuration.pdf (Part with two config files has changed to only one config file.)&lt;br /&gt;
&lt;br /&gt;
[[Image:Configuration1.jpg]]&lt;br /&gt;
&lt;br /&gt;
A system consists of multiple targets. A target can extend another target. A target can have some libraries, assemblies, clusters and override clusters.&lt;br /&gt;
A library has an associated target. A cluster can have a parent cluster. An override cluster has a some groups it overrides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;The configuration system.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_SYSTEM&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- Name of the system.&lt;br /&gt;
&lt;br /&gt;
	uuid: STRING&lt;br /&gt;
			-- UUID of this system. Used to uniquely identify libraries.&lt;br /&gt;
&lt;br /&gt;
	targets: LIST [CONF_TARGET]&lt;br /&gt;
			-- The configuration targets.&lt;br /&gt;
&lt;br /&gt;
	library_target: CONF_TARGET&lt;br /&gt;
			-- The target to use if this is used as a library.&lt;br /&gt;
	&lt;br /&gt;
	compileable_targets: LIST [CONF_TARGET]&lt;br /&gt;
			-- Targets that can be compiled (e.g. have a root feature).&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A configuration target.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_TARGET&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- Name of the target.&lt;br /&gt;
&lt;br /&gt;
	version: CONF_VERSION&lt;br /&gt;
			-- Version number of the target.&lt;br /&gt;
&lt;br /&gt;
	extends: CONF_TARGET&lt;br /&gt;
			-- If we extend another target, this is the other target.&lt;br /&gt;
&lt;br /&gt;
	libraries: LIST [CONF_LIBRARY]&lt;br /&gt;
			-- The used libraries.&lt;br /&gt;
&lt;br /&gt;
	overrides: LIST [CONF_OVERRIDE]&lt;br /&gt;
			-- The override clusters.&lt;br /&gt;
&lt;br /&gt;
	clusters: LIST [CONF_CLUSTER]&lt;br /&gt;
			-- The normal clusters.&lt;br /&gt;
	&lt;br /&gt;
	assemblies: LIST [CONF_ASSEMBLY]&lt;br /&gt;
			-- The assemblies.&lt;br /&gt;
&lt;br /&gt;
	root: CONF_ROOT&lt;br /&gt;
			-- The root feature.&lt;br /&gt;
&lt;br /&gt;
	options: CONF_OPTIONS&lt;br /&gt;
			-- The options (assertions, debugs, warnings, ...)&lt;br /&gt;
&lt;br /&gt;
	file_rule: CONF_FILE_RULE&lt;br /&gt;
			-- Globally exclude/include file rules.&lt;br /&gt;
&lt;br /&gt;
	external_include: LIST [CONF_EXTERNAL_INCLUDE]&lt;br /&gt;
			-- Global external include files.&lt;br /&gt;
&lt;br /&gt;
	external_objec: LIST [CONF_EXTERNAL_OBJECT]&lt;br /&gt;
			-- Global external object files.&lt;br /&gt;
&lt;br /&gt;
	external_ressource: LIST [CONF_EXTERNAL_RESSOURCE]&lt;br /&gt;
			-- Global external ressource files.&lt;br /&gt;
&lt;br /&gt;
	pre_compile: LIST [CONF_ACTION]&lt;br /&gt;
			-- Actions to be executed before compilation.&lt;br /&gt;
&lt;br /&gt;
	post_action: LIST [CONF_ACTION]&lt;br /&gt;
			-- Actions to be executed after compilation.&lt;br /&gt;
&lt;br /&gt;
	variables: LIST [CONF_VARIABLE]&lt;br /&gt;
			-- User defined variables.&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Base class for configuration groups.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_CONDITIONED&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	name: STRING&lt;br /&gt;
			-- The name of the group.&lt;br /&gt;
&lt;br /&gt;
	directory: CONF_DIRECTORY&lt;br /&gt;
			-- The directory of the group.&lt;br /&gt;
&lt;br /&gt;
	options: CONF_OPTIONS&lt;br /&gt;
			-- The options (assertions, debugs, warnings, ...)&lt;br /&gt;
&lt;br /&gt;
	name_prefix: STRING&lt;br /&gt;
			-- An optional name prefix for this group.&lt;br /&gt;
&lt;br /&gt;
	renaming: HASH_TABLE [STRING, STRING]&lt;br /&gt;
			-- Mapping of renamed classes from the old name to the new name.&lt;br /&gt;
&lt;br /&gt;
	class_options: HASH_TABLE [CONF_OPTION, STRING&lt;br /&gt;
			-- Classes with specific options.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A library.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_LIBRARY&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	library_target: CONF_TARGET&lt;br /&gt;
			-- The library target.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;A project cluster.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_CLUSTER&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
	is_recursive: BOOLEAN&lt;br /&gt;
			-- Are subdirectories included recursively?&lt;br /&gt;
&lt;br /&gt;
	parent: CONF_CLUSTER&lt;br /&gt;
			-- An optional parent cluster.&lt;br /&gt;
&lt;br /&gt;
	dependencies: LIST [CONF_GROUP]&lt;br /&gt;
			-- Dependencies to other groups.&lt;br /&gt;
&lt;br /&gt;
	file_rule: CONF_FILE_RULE&lt;br /&gt;
			-- Globally exclude/include file rules.&lt;br /&gt;
&lt;br /&gt;
	is_visible (a_feature, a_class: STRING): BOOLEAN&lt;br /&gt;
			-- Is a feature of this cluster visible?&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[eiffel, N]&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Clusters that override other groups.&amp;quot;&lt;br /&gt;
	date: &amp;quot;$Date$&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	CONF_OVERRIDE&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	CONF_CLUSTER&lt;br /&gt;
&lt;br /&gt;
feature&lt;br /&gt;
&lt;br /&gt;
	override: LIST [CONF_GROUP]&lt;br /&gt;
			-- The groups that this cluster overrides.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CONF_CONDITIONED is a class that allows to specify for which platform, build tuple something is enabled. Conditioned are: CONF_ACTION (pre-/postcompile actions), CONF_EXTERNAL_(INCLUDE|OBJECT|RESSOURCE), CONF_GROUP&lt;br /&gt;
&lt;br /&gt;
== Pseudocode example configuration ==&lt;br /&gt;
files/eiffelvision/eiffelvision.ace&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system EiffelVision&lt;br /&gt;
&lt;br /&gt;
target Library&lt;br /&gt;
    version 2.0.0.1&lt;br /&gt;
    uuid 15ac36b5-2c65-41e9-8309-c504dd430a0b&lt;br /&gt;
&lt;br /&gt;
    library base&lt;br /&gt;
        files/base/base.ace&lt;br /&gt;
&lt;br /&gt;
    cluster vision&lt;br /&gt;
        files/vision&lt;br /&gt;
        recursive&lt;br /&gt;
        uses base&lt;br /&gt;
    &lt;br /&gt;
    external_include&lt;br /&gt;
        files/include/common.h [(all, all)]&lt;br /&gt;
        files/include/windows.h [(windows, all)]&lt;br /&gt;
        files/include/gtk [(unix, all)]&lt;br /&gt;
&lt;br /&gt;
    external_objects&lt;br /&gt;
        files/obj/windows.o [(windows, all)]&lt;br /&gt;
        files/obj/gtk.o [(unix, all)]&lt;br /&gt;
        files/obj/debug.o [(unix, workbench)]&lt;br /&gt;
&lt;br /&gt;
target Debug extends Library&lt;br /&gt;
&lt;br /&gt;
    cluster debug&lt;br /&gt;
        files/debug&lt;br /&gt;
        recursive&lt;br /&gt;
        uses base, vision&lt;br /&gt;
&lt;br /&gt;
    root debug:ROOT_CLASS:make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
files/eiffelstudio/eiffelstudio.ace&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system EiffelStudio&lt;br /&gt;
    version 5.0.0.1&lt;br /&gt;
    uuid 9a8d3871-ef44-484c-9029-c52d17df40f0&lt;br /&gt;
&lt;br /&gt;
target Common&lt;br /&gt;
&lt;br /&gt;
    variable gobo_setting=&amp;quot;some settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    exclude&lt;br /&gt;
        ^\.svn$&lt;br /&gt;
&lt;br /&gt;
    library base &lt;br /&gt;
        files/base/base.ace&lt;br /&gt;
&lt;br /&gt;
    library gobo&lt;br /&gt;
        files/gobo/gobo.ace&lt;br /&gt;
        rename &amp;quot;some_class&amp;quot; as &amp;quot;new_class&amp;quot;&lt;br /&gt;
        prefix &amp;quot;gobo_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    cluster compiler&lt;br /&gt;
        files/compiler&lt;br /&gt;
            uses base, gobo&lt;br /&gt;
&lt;br /&gt;
    root compiler:ROOT_CLASS:make&lt;br /&gt;
&lt;br /&gt;
target Console extends Common&lt;br /&gt;
&lt;br /&gt;
    cluster console&lt;br /&gt;
        files/console&lt;br /&gt;
            uses base, gobo, compiler&lt;br /&gt;
&lt;br /&gt;
    cluster mysub (console)&lt;br /&gt;
        $/mysub&lt;br /&gt;
&lt;br /&gt;
target Workbench extends Common&lt;br /&gt;
&lt;br /&gt;
    library eiffelvision&lt;br /&gt;
        files/eiffelvision/eiffelvision.ace&lt;br /&gt;
&lt;br /&gt;
    cluster workbench&lt;br /&gt;
        files/workbench&lt;br /&gt;
            uses base, gobo, eiffelvision, compiler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Questions and Problems ==&lt;br /&gt;
&lt;br /&gt;
*Specify use of other clusters? '''Yes'''&lt;br /&gt;
*Variables? '''If not defined, take environment variable.'''&lt;br /&gt;
*Path relative to ace file? '''Yes'''&lt;br /&gt;
*When are two libraries the same? '''UUID: http://www.famkruithof.net/guid-uuid-random.html'''&lt;br /&gt;
=== Multiple library usage ===&lt;br /&gt;
====Problem====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System Application&lt;br /&gt;
&lt;br /&gt;
library A&lt;br /&gt;
library B&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System A&lt;br /&gt;
&lt;br /&gt;
library C&lt;br /&gt;
    option Yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
System B&lt;br /&gt;
&lt;br /&gt;
library C&lt;br /&gt;
    option No&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We have a conflict for the option on library C.&lt;br /&gt;
&lt;br /&gt;
====Solution====&lt;br /&gt;
If the library is directly used in Application, use the this options, otherwise use the options of the Application system.&lt;br /&gt;
&lt;br /&gt;
===File pattern===&lt;br /&gt;
The file pattern match against the relative path in unix format in a cluster.&lt;br /&gt;
e.g. if the cluster is in C:\mycluster&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;Pattern&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;Matches&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
storage/table&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\storage\table\*&lt;br /&gt;
    C:\mycluster\storage\table.e&lt;br /&gt;
    C:\mycluster\something\storage\table\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
^/storage/table/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\storage\table\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
^/.*/test/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\a\test\*&lt;br /&gt;
    C:\mycluster\b\test\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
/test/&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&lt;br /&gt;
    C:\mycluster\a\test\*&lt;br /&gt;
    C:\mycluster\b\test\*&lt;br /&gt;
    C:\mycluster\something\table\test\*&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration file format ==&lt;br /&gt;
[[ConfigurationFileFormat|Configuration file format page]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
[[ConfigurationMigration|Configuration migration]]&lt;br /&gt;
&lt;br /&gt;
== Degree 6 ==&lt;br /&gt;
[[ConfigurationDegree6|Configuration degree 6]]&lt;br /&gt;
&lt;br /&gt;
== Ideas for better conditions ==&lt;br /&gt;
[[ConfigurationConditions|Configuration conditions]]&lt;/div&gt;</summary>
		<author><name>Paco</name></author>	</entry>

	</feed>