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