GenoM3 - Generator of robotic component
Copyright (c) 2009-2025 LAAS/CNRS

			    Changes in genom 2.99.45

Released on Apr 22th, 2025

    * Skeleton template generates interface names as <x>-libgenom3 instead of
      <x>-genom3.
    * Update newline cancellation rule between <' '> template tags at the
      beginning of a template source.
    * Add AUTHORS, LICENSE and README metadata files (#442).


			    Changes in genom 2.99.44

Released on Mar 24th, 2025

    * Updated client interface to version 20250116
    * Add input port publishers in the C client interface
    * Add a 'data' member in C client output port information, holding a buffer
      of the appropriate type and size for reading ports.
    * Always use autoreconf after updating configure.ac of templates specified
      in --with-template configure option
    * Remove useless codel files (if not modified), e.g. when switching from
      skeleton -l c to -lc++ or vice versa
    * Use an intermediate variable for pkg-config dependencies in skeleton
      generated configure.ac, allowing for more flexibility when manually adding
      more dependencies


			    Changes in genom 2.99.43

Released on Aug 20th, 2024

    * Fix an issue when using paused and non-paused transitions for the same
      event in a codel.
    * Fix inheritance of component properties from a 'used' interface.
    * Don't merge 'doc' title line from 'provided' interfaces.
    * Update the component model documentation.


			    Changes in genom 2.99.42

Released on Feb 16th, 2024

    * Let skeleton generate stubs for external tasks with local codels
    * Fix event namespace for codels imported from interface activities
    * Fix passing arguments of type arrays of native or arrays of strings
      (implicity const cast from type ** to const type * const * forbidden)
    * Fix mapping of pointers to fixed size arrays
    * Fix the use of interfaces with task codels
    * Constify the exception detail in function raising exceptions


			    Changes in genom 2.99.41

Released on Sep 26th, 2023

    * Skeleton template generates codels stubs only for codels directly defined
      in the input files (skipping codels defined in external interfaces). New
      options are added to alter this behaviour:
    ** -x generates stubs for all codels (restore previous behaviour)
    ** --extern=comp,... generates stubs for codels defined in those
         named components/interfaces only.
    * Add an optional component/interface name argument to the skeleton
      template.
      By invoking `skeleton file.gen ... name ...`, the skeleton template will
      only generate stubs for the given component or interface name. When no
      name is given, generate stubs for all components/interfaces defined in
      the input files.
    * Mappings template now also generates the signature of codels defined in
      interfaces.
    * Allow interactive template with no input file (the template command
      [dotgen parse] still allows to parse files later).
    * Add -C option to change to some directory before reading input files (thus
      resolving input file relative to the specified directory).
    * Allow simple codels in attributes. This can be useful as a hook
      performing a related action when an attribute is set.
    * Fixed error detection and reporting when an input file does not exist.
    * Detect and report invalid use of events, ports or remote types in services
      parameters.
    * Fixed internal issues with task, codels and properties inheritance from
      an interface.
    * Fixed call() interface for remote objects (ignore local internal
      parameters).
    * Fixed digest for services and remotes having local parameters or
      exceptions.
    * Fixed name mangling for ports proxy types (use fullname to avoid conflicts
      between ports with different data types).
    * When providing a port via an interface, use the type from the interface so
      that codels from the interface and codel from a component providing it see
      the same type. For backward compatibility, an alias is still created in
      the component, but new skeleton will use the interface type.
    * Improve template function [$object loc] returning the original component
      context where it is defined. This is not necessarily the current component
      in case of interface inheritance.
    * Add a template helper function to parse templates' command line, with
      optional component or interface names:
    ** [template arg files]: the list of files arguments on the command line
    ** [template arg names]: the list of arguments that are not files
    ** [template arg components]: the components objects corresponding to names
    ** [template arg next]: previous `template arg` function (that is unchanged)
    * Add optional component argument to common templates for .pc files (default
      to first component of inputs files for backward compatibility).
    * Fix template function [$type return-value] for bounded string or arrays
      passed by value.
    * Do not pretend to support yacc. Bison is required.
    * Match template.* files against a list of known template engines to avoid
      obscure error message if backup files are present.
    * Support --without-templates in component configuration.



			    Changes in genom 2.99.40

Released on Sep 7th, 2022

    * Remove the 'const' qualifier from the C mapping of _maximum in bounded
      sequence
    * Allow 'stack' property to be specified at component level (for all tasks)
    * Fix possibly missing 'optional' keyword in generated type documentation


			    Changes in genom 2.99.39

Released on Dec 2nd, 2020

    * Fix potentially missing declaration for builtin integer types in codels
      signatures (#270)
    * Fix missing parameter in generated client callback signatures
    * Fix multiply defined symbols with -fno-common (gcc-10 default) in pcpp
    * Fix peak usage computation of profiling events
    * Log events corresponding to the sleep time required to get a
      new profiling event (in verbose profiling mode)
    * Various minor enhancement in the profundis GUI (vertical scrolling with
      mouse wheel, double click on leaf items, mouse button action
      documentation, key bindings to open/close all items).
    * Export profiling stats in seconds instead of ns (#276)


			    Changes in genom 2.99.38

Released on Jul 30th, 2020

    * Fix inverted logic in profiling functions when the events queue is full.
    * Fix profiling API for C++.
    * Update profiling API to make it component-independant.
    * Allow to resize the profiling events queue at code generation time.
    * Reduce memory footprint of the 'profundis' tool, to load bigger files
      without paging.


			    Changes in genom 2.99.37

Released on Jul 17th, 2020

    * Add execution profiling functions, for use by templates
    * Update newline cancellation rule between <' '> template tags
    * [$service codels] engine procedure can now have a filter to select
      validate, simple or fsm codels.


			    Changes in genom 2.99.36

Released on Feb 26th, 2020

    * Add engine function [$component codels ?validate|simple|fsm? ...]
    * Document all the code generator engine procedures


			    Changes in genom 2.99.35

Released on Jan 15th, 2020

    * Fix lining with dependencies in Makefile of skeleton templates (LIBADD
      instead of LDFLAGS).
    * Ensure GNU-make is used by the configure script of skeleton template.


			    Changes in genom 2.99.34

Released on Nov 4th, 2019

    * Add missing comma separator in the list of skeleton .pc files.
    * Allow renaming of attribute parameters - as for codels with :: syntax.
    * Handle non-ASCII paths and file names in genom installation prefix and in
      components source diretories (#224).
    * Handle non-ASCII characters in the main heading comment of .gen files.


			    Changes in genom 2.99.33

Released on May 27th, 2019
    * Avoid to 'Require' the codels-require packages in the codels .pc files, as
      this causes over-linking of the codels library. Use 'Libs.private'
      instead.
    * Fix genom_sequence_resize() macro when the "length" parameter is an
      expression.
    * Avoid loosing precision in the json serialization of floating point
      numbers. Use %.17g for doubles and %.9g for floats.


			    Changes in genom 2.99.32

Released on Feb 11th, 2019

    * Replace readdir_r by readdir, because of readdir_r deprecation in
      glibc-2.25
    * Make sure global weak symbols of exceptions are visible
    * Fixes failed detection of the genom3 binary (#145)


			    Changes in genom 2.99.31

Released on Jun 19th, 2018

    * Fix port related functions with ports declared a simple builtin types
    * Added template "return-value reference" function, handling the special
      case of C function returning arrays.
    * Fix genom_sequence_reserve() called with 0 length (related to #144)
    * Disable static libraries by default in skeleton generated configure.ac
    * Allow declaration of several 'uses', 'provides' or 'extends' component
      properties


			    Changes in genom 2.99.30

Released on Nov 10th, 2017
 . Fix conversion of numeric constant to IDL octet type.
 . Allow documenting a "port", by using a "doc" attribute in a block
   declaration attached to the port.
 . Skeleton template generates an optional README.adoc file from the .gen file.
 . Add a "yes for all" option in the interactive merge action of "skeleton".
 . Improve skeleton merge mode so that merged but unchanged files are not
   touched (useful in particular with configure.ac).
 . Allow parsing multiple input files including the same files (#130).
 . Add tutorials on "how to use external dependency" and "IDS purpose and
   usage".
 . Use asciidoctor instead of asciidoc to generate the static documentation.


			    Changes in genom 2.99.29

Released on May 18th, 2017
 . Don't require a <start> codel for activities defined in an interface.
 . Fix several issues with unions, in particular in the JSON serialisation.
 . Allow 'interrupt' and 'doc' properties to be specified in multiple chunks.
 . Update the `workflow` tutorial.
 . Improve style of the online doc.


			    Changes in genom 2.99.28

Released on Jul 11th, 2016
 . Fix the computation of mutually exclusive codels for a validation codel.
 . Fix the IDL mappings for bounded sequences of bounded strings (or arrays).
 . Also split pkg-config output at newlines, recent versions use this
   separator.


			    Changes in genom 2.99.27

Released on Apr 12th, 2016
 . Fix the scanning of json sequences in the common template source files.

			    Changes in genom 2.99.26

Released on Nov 9th, 2015
 . INCOMPATIBLE CHANGE: Introduced 'paused' transitions. This allows to execute
   multiple states of a periodic activity during the same period. This breaks
   the behaviour of all activities running in a periodic task. In order to
   sleep until the next period, activities must now return a 'paused'
   transition (see documentation). A 'paused' transition in a task with no
   period behaves as the former special 'sleep' state (waits until another
   codel runs and returns a regular transition - i.e. not a paused one).
 . Dropped the special 'sleep' state (superseeded by 'paused' transitions).
 . Added a new [$codel mutex] template procedure, returning the list of mutually
   exclusive codels (sharing resources). This helps template in implementing
   better parallelism.
 . Do not require a 'start' state for permanent (task) activities. They may
   define only a 'stop' event.
 . Check at compile time that 'async' codels do not share any data with other
   tasks: since they are expected to run in parallel with other codels, this is
   a mandatory property. As a convenient exception, async codels sharing data
   with only the start or stop state of other permanent activities are still
   allowed.
 . Skeleton template remembers the -l c++ option so that 'make regen' works.
 . Miscelaneaous bug fixes, in particular in sequences mapping.

			    Changes in genom 2.99.25

Released on May 28th, 2015
 . Added configure options to install only the runtime or the code generator
   tool
 . Fixed Typo in the doc of language::mapping code generator procedure
 . Added an optional parameter to [language mappings] controlling #line
   generation
 . Do not generate #line directives for the IDL mappings of the C client
 . Fixed json encoding of 'chars' in the common template json library
 . Miscelaneous bug fixes in the build system


			    Changes in genom 2.99.24

Released on July 24th, 2014
 . Rewrote the documentation with asciidoc. This integrates nicely in the
   gollum-wikis of the redmine project page.
 . Provided common json {,de}serialization functions that can be reused by
   templates.
 . Added a description of supported options to the C client interface init()
   function.
 . Renamed the standard "connect_remote" service to "connect_service" for
   clarity.
 . Updated C codel interface to pass them an additional context pointer
   (genom_context self). Ports, remotes and functions throwing exceptions are
   updated accordingly.


			    Changes in genom 2.99.23

Released on March 10th, 2014
 . Added a new genom-IDL type "optional< type >"
 . Fixed compatibility issues with tcl-8.6
 . Fixed the definition of the error code in genom_syserr
 . Dropped error code from genom_mwerr exception
 . Fixed a bunch of minor bugs in the parser / code generator.


			    Changes in genom 2.99.22

Released on December 13th, 2013
 . Support an "extern" parameter in tcl procedure [$component types], returning
   the list of public types of the components interface.
 . Fix version in the genom3.pc file (use @PACKAGE_VERSION@ in instead of
   @VERSION@).
 . Install C client libraries and headers in a middleware-dependent location,
   so that multiple builds can be installed inside the same prefix. .pc files
   are "middlewarized" too, so PKG_CONFIG_PATH must be tuned.
 . Fix skeleton codels Makefile for -l c++ option.


			    Changes in genom 2.99.21

Released on July 26th, 2013
 . Changed the C++ IDL mapping for bounded sequences (use a
   genom::bounded_sequence instead of tr1::array).
 . Fixed a few syntactic issues in the C++ IDL mapping.
 . Fixed the C client interface to be able to invoke requests synchronously:
   added a result() function getting the result of a request and changed the
   semantics of send() so that it is always non-blocking (callbacks are
   optional).
 . Fixed the constness of the json_error() function in the c/client.h
   interface.
 . Added a .pc file for the version of the c/client.h interface, to detect
   versions mistmatch early during the configuration of clients.
 . Centralized a client.h tcl template source describing the instanciated
   c/client interface, so that templates providing a C client are guaranteed to
   be compatible.
 . Removed the version number in the installation path of genom3 builtin
   templates.
 . The --tmpldir or the GENOM_TMPL_PATH variable do not discard the genom3
   builtin template path anymore.
 . Replaced middleware-specific errors with a common middleware exception
   mwerr.
 . Added a [$port throw] procedure in the tcl template engine, that reports
   exceptions that can be raised during the reading or writing of a port.
 . Fix error reporting in the tcl template engine (line error number and error
   backtrace).
 . Improved documentation for the [$type ...] procedure in the tcl template
   engine.


			    Changes in genom 2.99.20

Released on June 10th, 2013
 . Changed codels prototypes so that basic types are passed by value instead of
   const reference.
 . Updated the "genom_state" standard port, with a list of running activities
   and timing properties of tasks.
 . Added a standard service for killing a component.
 . Changed the "mappings" templates to generate the mappings on stdout instead
   of as many files as components.
 . Changed the skeleton template so that components are named with a "-genom3"
   suffix instead of "-genom". This is more consistent with e.g. robotpkg
   packages.
 . Updated IDL to C++ mappings. They should now be complete and stable.
 . Fixed the C mappings for bounded sequences when used in a C++ context.
 . Added an abort() method in the client/c interface, for aborting services via
   a client request id.
 . Renamed the environment variable used to redefine the .gen prepocessor from
   "CPP" to "GENOM_CPP".
 . Added [$type parent] and [$type nested] procedures in the tcl generator
   engine, to access nested types definitions (required for the IDL to C++
   mappings).
 . Added a [dotgen interface] procedure in the tcl generator engine, listing
   existing interfaces in the input file.
 . Added a "+silent" mode to the tcl [engine mode] procedure, that leaves
   stdout uncluttered for template-specific usage.
 . Documented the IDL type manipulation procedures of the tcl generator engine.
 . Documented the IDL to C++ mappings and added missing entries for ports and
   remotes in the IDL to C mappings.


			    Changes in genom 2.99.19

Released on May 13th, 2013
 . Added proper exceptions in lieu of integer reports. This allows services to
   report additional information in case of abnormal termination. A few
   incompatible changes in the codels API, the ports mapping and the remote
   services had to be introduced.
 . Added service local variables. Local variables are specific to each instance
   of running services (i.e. specific to internal activities). They are useful
   for sharing a reentrantstate among codels of reentrant services.
 . Dropped the 'strerror()' method in ports and remotes objets. This is
   superseeded by exceptions.
 . Added more runtime consistency checks in the codels finite state machine.
 . Updated C mapping of bound sequences so that it is also valid in C++ and can
   be included in C++ code (issue with the constructor of a 'const' member).
 . Fixed [dotgen type] tcl engine procedure not returning anonymous types.
 . Added a [$component types visibility ?filter?] tcl engine procedure,
   returning the list of types defined in a component (public interface and/or
   private types).
 . Added a [$type types] tcl engine procedure, returning the list of types
   recursively contained in $type.
 . Added a [$type mangle] tcl engine procedure, returning a unique ascii type
   name suitable for use a an identifier in source code.
 . Added a 'filter' callback in the objects digest computation, so that some
   objects can be excluded from the digest.
 . Improved a lot the error reporting in TCL templates.
 . Fixed the skeleton template when invoked from another directory than the
   .gen file.
 . Fixed a bunch of minor bugs and added respective regression tests.
 . Added more documentation on the builtin templates (skeleton, mappings and
   interactive).
 . Documented the available #pragma directives.
 . Added a requirement on python-aafigure for managing the figures in the
   documentation (but no figure was added yet).
 . Fixed a bunch of minor issues in the documentation generation.


			    Changes in genom 2.99.15

Released on November 21st, 2012
 . Added 'native' IDL keyword. The meaning is slightly different from that of
   the OMG IDL. GenoM 'native' keyowrd defines a new opaque type, that can be
   used only in codels (or IDS). The type is manipulated as a pointer by GenoM
   and the templates, and codels are responsible for the actual type
   definition or memory management. This is typically used to store types in
   the IDS that cannot be represented as IDL (external types, opaque types,
   etc.).
 . Renamed #pragma native to #pragma masquerade. This is to avoid confusion
   with the new 'native' IDL keyword. The #pragma purpose is also hopefully
   clearer.
 . Updated mappings for the IDL 'char' type. 'char's are now mapped to
   uint8_t in C/C++, so that the C 'char' type is reserved for strings.
 . Fixed grammar to allow compound initializers with just a doc string and no
    value.
 . Improved syntax error handling in the parser. In particular, missing
   semicolons or syntax erros in codels parameters should not spew loads of
   errors anymore.
 . Updated skeleton template to generate $component-genom.pc instead of
   lib$component_codels.pc, because the top level package is most often used in
   other genom components to include a part of the interface (rather than
   linking with the codels).
 . Fixed skeleton '-l c++' option for compiling codels with a C++ compiler.
 . Temporary disabled support for C++ codels interface. This will not be
   supported in 3.0, but remains on the TODO list. C++ codels must use the C
   interface in the meantime.
 . Fixed a bunch of minor bugs and added respective regression tests.


			    Changes in genom 2.99.14

Released on October 19th, 2012

 . Added a list of "common" exceptions to be thrown by templates and std
   services. Letting templates define their own exceptions raise an issue with
   the generated enum implementing the exception list. Due to the way the
   parser works, the enum may become desynchronized between the codels and the
   server implementation.

 . Fixed a few compilation/configuration glitches.


			    Changes in genom 2.99.13

Released on September 7th, 2012

 . Implemented "remote" objects that can be used to invoke remote services from
   components. Remotes can be passed as parameters to the codels, with an
   object-like interface (currently, the sole available method is a synchronous
   call()).
 . Updated "port" interface so that they are passed to the codels with an
   object-like interface, which basically consists of data(), read() or write()
   methods (this corresponds to the former "handle" kind or ports). There are
   now only two kind of ports : simple or multiple (i.e a dictionary of simple
   ports).
 . Implemented "interfaces". Interfaces can define the same objects as regular
   components. They can be 'provided' or 'used' by components, which means that
   the component basically inherits of all the objects defined in the
   interface. This is meant to share service declarations between users and
   providers of services (the ROS template requires that both sides agree on
   the parameter naming). Services defined in a interface are declared as
   "remote" objects when "used" and as regular services when "provided". Ports
   see their direction swapped.
 . Split services into 'functions' and 'activity', so that there are now 3 kind
   of services (with attributes). Functions can only have stateless codels,
   that are run synchronously by the control task. They are expected to perform
   only small computations and run in a short amount of time. Activities are
   complex services, that run in an execution task and define a state
   machine. They are expected to modify the robot's state or perform heavy
   computation.
 . Updated the .gen grammar so that components are defined within a block of
   braces { }, as for other objects. Also updated properties so that they are
   now defined without a colon :. Keywords that are verbs can be spelled with
   or without the final 's'. (e.g. throw or throws). The "service" kind of
   codel parameters is renamed to "local", which is hopefully more explicit.
 . Added "#pragma provides" that provide an interface for all components. This
   is used to implement generic genom services.
 . Delegated the parsing of input .gen files to the templates. This greatly
   simplifies option parsing in genom and also let templates define a few
   common objects (via interfaces) before parsing the input.
 . Updated the C client interface by renaming some poorly named symbols
   (e.g. requests -> services).
 . Improved a few parsing error messages.
 . Fixed a few bugs in the tcl engine procedures.

			    Changes in genom 2.99.12

Released on July 2nd, 2012

 . Updated the dotgen grammar in an incompatible way: each service parameter
   now defines a variable local to each instance of the running service. Codels
   must now explicitly declare their parameters as coming from the service. For
   symmetry, 'inport' and 'outport' keywords have been replaced by 'port in'
   and 'port out' (2 words), and the syntax of port declarations updated.
 . Updated the semantics of 'attributes' so that it is possible to continue
   writing IDS accessors in a simple manner. Attributes are declared with the
   same syntax as services, except that they take their parameters from the
   IDS. They can only have 'validate' codels (i.e no task, no state machine).
 . Switched documentation to texinfo, and provide HTML, PDF, info(1) and ASCII
   documents. The goal was to provide a better (split) HTML output. Also, an
   info(1) file is a useful reference while coding.
 . Updated documentation for the available preprocessing directives (#pragma)
   and improved the naming/description of a few grammar rules.


			    Changes in genom 2.99.11

Released on May 29th, 2012

 . Defined a generic genom.gen that defines two standard services
   (abort_activity and connect_input) as well as a standard outport
   (genom_state). Templates can use this to implement those standard services
   and ports, but this is not a requirement.
 . Updated codel port handle API by making a clear distinction between regular
   port handles and port handles sets.
 . Updated generic c/client.h API with better names for the two kinds of ports
   (regular and sets). Added a protocol number to deal with future breakage of
   this API.
 . Added detection of conflicting codels, i.e. codels with the same name but
   different prototypes. This is questionnable for C++ codels, but since this
   is not supported yet ...
 . Improved automatic merge of user code with newer version of the skeleton.
 . Added a utility procedure in the TCL backend for computing the MD5 digest of
   a component's interface: [$component digest].
 . Deleted unsued and obscure [$type foreach] procedure in the TCL backend.
 . Fixed a few bugs related to the dotgen "template" object processing.


			    Changes in genom 2.99.10

Released on April 30th, 2012

 . Added an "asynchronous" style of codels. Those codels are allowed to block
   their execution context (typically waiting for an internal event). Other
   execution contexts can run in parallel.
 . Added a generic C client interface to the runtime headers. This interface
   may be implemented by templates to provide a middleware-independant C
   client.
 . Added a tcl backend procedure returning the list of available templates.
 . Improved the skeleton template so that it generates a configure script that
   is able to handle a list of templates to compile with the codels. This
   simplifies component development and testing.
 . Improved a few syntax error messages in the .gen parser.
 . Miscelanous minor fixes in the tcl backend procedures.
 . Minor fixes for building with gcc-4.6 -Werror.
 . Minor cosmetic improments in the skeleton template.


			    Changes in genom 2.99.8

Released on March 12th, 2012

 . Implemented '#pragma native <template> <type> <string>'. This attaches
   <string> data to an IDL <type>, for a specific <template>. It can be
   retrieved from the backend and used in a template for doing any specific
   action. The intended use is to bind ros standard messages to an IDL type,
   but the genom specification does not define this further.

 . Changed the IDL->C mapping for enums so that the sizeof is guaranteed to be
   4 and the enumerated constants can be used anywhere in C code.

 . Renamed port handle IDL type to genom::port_handle and
   genom::port_handle_set and simplified the codels API. There are now 4 main
   functions: genom_port_open/close and genom_port_rdlock/wrlock. Access to
   individual port handle members is disallowed in dotgen specification.

 . Fixed multidimensional array declarators in dotgen parser as well as in the
   [$type declarator] tcl backend procedure. Fixed passing multidimensional
   array by value according to C obfuscation in this domain.

 . Allow fusionable properties to be declared at several places in a dotgen
   specification (e.g. multiple throw lines for codels).

 . Added default values for component properties: lang (c), version (0).

 . The C helper macro for resizing sequences has been renamed to
   genom_sequence_reserve. It also initializes resized data to 0.

 . Made the template search function recursive, so that templates can define
   'sub-templates' in subdirectories (e.g. pocolibs/server and
   pocolibs/client).

 . Updated mappings and skeleton builtin templates so that they generate
   Makefiles that can track input dependency and automatic regeneration.

 . Added tcl backend procedures: [dotgen input deps] and [template deps]. They
   both return a list of files suitable for make(1) dependency generation.

 . Fixed minor bugs in the following tcl backend procedures: [template
   require], [wrap], [dotgen parse].

 . Export site-template directory in genom3.pc


			    Changes in genom 2.99.7

Released on November 18th, 2011

 . Deleted 'in/outport event' kind of inports. This will not be in 3.0.
 . Added 'in/outport handle' for components that require dynamic port
   creation/access or custom serialization etc. This introduces the notion of a
   port API provided by genom that every template must implement.
 . Improved skeleton template so that it's more readily useful (fixed a bunch
   of small issues).
 . Fixed the .gen parser in corner cases (e.g. nul delay, delay without period,
   etc.)
 . Fixed LP64 bugs


			    Changes in genom 2.99.6

Released on June 29th, 2011

 . Renamed 'build-require' property into 'codels-require'. This is hopefully
   clearer and this also corresponds to the original GenoM2 syntax.

 . Service parameters should now be documented with ':' instead of '::'. The
   later was sometimes ambiguous when the default value of a parameter was an
   enum with a namespace prefix. For instance, a parameter specification may
   look like: enumtype x = ns::value : "doc".

 . Codel names are not automatically prefixed anymore: the symbol defined in a
   dotgen specification is left unchanged. This allows using codels defined in
   an external library if they are directly compatible.

 . Added and interactive and/or automatic merging strategy in the TCL generator
   engine. This is used by the skeleton template (-i and -u options) to update
   generated files that may have been already modified. An external merge tool
   (-m option) can also be defined, should the automatic strategy fail.

 . Completely rewrote the TCL engine [language ...] procedures. The TCL engine
   now has a [lang ?language?] procedure that configures the current
   programming language once for all, and all other [language ...] procedures
   have been converted to object oriented methods that work with genom objects
   (codels, types, etc.) and directly output string in the configured language.

 . According to the above, [object::foreach] was renamed to [$type foreach]
   (for any $type object). It is now able to generate the loop constructs
   (according to the current language) that are required to process sequences
   and arrays. This is less generic, but more useful in practice.

 . Imported the C preprocessor from the pcc project, and make it the default C
   preprocessor for dotgen files. It is installed as libexec/genom-pcpp.

 . Implemented the '#pragma require <pkg>' directive in genom-pcpp. This is
   required to solve the chicken-egg problem raised by 'require' directives of
   components: the C preprocessor needs to #include files from path that are
   found in the require'd .pc files. When a '#pragma require' directive is
   present, genom-pcpp forks a pkg-config and dynamically adds -I/-D
   directives. '#pragma require' packages are merged into the 'require'
   property of all the components of a specification.

 . Added -N option to genom. This options makes genom simply parse a
   specification (like -n) and then dump it in dotgen language. This is useful
   mostly for debugging, and the dump is not complete yet (only components and
   components properties are dumped at the moment).

 . Fixed the dotgen lexer so that it handles # cpp directives anywhere (not
   just between valid statements).

 . Fixed compilation on MacOS 10.5 with older bison 2.3 (removed too recent
   bison declarations).


			    Changes in genom 2.99.5

Released on March 18th, 2011

 . Added the "port array" type. Port arraya are meant to be used by components
   that create a variable number of posters, whose name or quantity cannot be
   determined at compile time. Port arrays are declared by appending an empty
   `[]' right after the port declaration. Any reference to this port in a codel
   parameters must specify an IDS member that is used to access a particuler
   element in the port array.

 . Added a 'template' keyword in .gen language. Template declarations share the
   same syntax as the components. All tasks, ports, attributes, services and ids
   created in a template context are applied to all components of a
   specification. This is meant to be used in template implementations, to add
   generic services to a .gen specification.

 . Changed the skeleton template so that it generates an installable libray of
   codels. The strategy is to make sure that genom will not impose any build
   system for the templates (nor for the codels). To achieve this, codels are
   required to provide a pkg-config file (.pc) that describes how to link with
   the codels and should install themselves as a standalone library. Templates
   must use this file to link with the codels library.

 . Removed the [buildenv] tcl procedure. Codels and templates must now be
   completely decoupled in terms of build system. There thus is no need to try
   to implement an abstraction of the build system.

 . Removed the 'libcodel' template. This is now superseeded by the new skeleton
   template and the strategy of always installing the codels as an independent
   library.

 . Made generated enum values start from 0, not 1.

 . Added option --signature to the 'mapping' template. Passing --signature
   generates the codel signatures in addition to the type definitions (the
   default) of a specification.

 . Added an optional direction parameter to [$codel parameters] template
   procedure. The optional direction may one of "in", "out", "inout", "inport"
   or "outport". For "in" and "out", parameters of type "inout" are also
   returned.

 . Added an optional argument "perm" for setting permissions in [template
   parse] engine procedure. If the "perm" option is specified, those
   persmissions are set on the newly created files. The perm argument syntax is
   the same as the tcl "file attributes -permissions" procedure: an octal
   number or a string of the form [ugoa][+-][rwx].

 . Made the 'event' argument optional in [$service fsm ?event?] and [$task fsm
   ?event?] procedures. If no event is specified, those procedures return the
   full list of events declared for the service or task.

 . Added the [$task services] procedure, returning the list of services of a
   task.

 . Allowed the throw property in a component declaration. Exceptions declared
   there are potentially throwable by all services and all tasks.


			    Changes in genom 2.99.4

Released on September 20th, 2010

 . Removed the restriction about having only one component in a .gen
   file. There can now be several components defined. Objects that are
   implicitely attached to a component (such as tasks, services...) use the
   latest component declaration.

 . Changed the syntax for IDS definition. IDS is now declared with the
   top-level 'ids' keyword, much like an IDL struct. For instance:
      ids {
        long a;
        long b;
      };
   Several ids declarations are allowed and concatenated all together for each
   component. This allows to assemble an IDS from different bits easily.

 . Added a 'scheduling' property for tasks in .gen files. The only possible
   value is 'real-time' (leaving the scheduling property undefined meaning "no
   real-time constraints").

 . Made the 'task' property of services optional in .gen files. It is up to the
   templates to provide a default execution context for services without an
   explicit task.

 . Added -l option switch in built-in 'skeleton' template, for selecting the
   codels language (the interface of codels being defined by the "lang"
   attribute of the .gen file). The only case where it is useful to have a
   different language for interface and implementation of codels is for the
   generation of codels with a C signature but implemented with C++ code
   (equivalent of the "lang: c++" of GenoM version 2).

 . Added [dotgen parse] tcl engine procedure, for parsing extra .gen code
   either from a file or from a string. This is useful for templates willing to
   implement extra services or features on top of a .gen file. [dotgen parse]
   appends to the existing specification.

 . Added a 'component' property for tasks, services and ports in tcl engine. It
   returns the component object to which the task, service or port belongs.

 . Added the component namespace in codel signatures.

 . Added regression tests for built-in templates 'mappings' and 'skeleton'.

 . Changed [object foreach] tcl engine procedure to invoke its 'body' script
   before and after recursion into deeper objects, so that it is possible to
   generate "opening" and "closing" code in a non-recursive manner with the
   [object foreach] procedure.

 . Added runtime C helper macros for managing memory allocation of
   variable-length sequences. These functions are helper macros only, meaning
   that a codel is free to implement its own strategy. The helper macros can
   be used by templates as well.

 . Fixed installation of .pc pkg-config file that was not installed.

 . Fixed stdout and stderr of interactive template sometimes randomly
   intermingled.

 . Improved some error messages in case of a syntax error in a .gen file.


			    Changes in genom 2.99.3

Released on July 6th, 2010

 . Added [language member {lang} {type} {members}] tcl procedure. This
   procedure returns a language construction to access a member of a type.
   If 'members' is a list, it is interpreted as a hierachy of members.

 . Added [$parameter base] tcl procedure. It returns the base type (i.e. the
   IDS or a port type) of that parameter.

 . Added optional pattern in the tcl [$type members ?pattern?] procedure, to
   retrive members of a type matching pattern only. If pattern is the name of a
   member, that member only is returned.

 . Changed port declaration syntax and added input and output typed event
   ports. Ports are now declared with {in|out}port {data|event}<[type]> name;

 . Added components 'attributes'. Component attributes are values from the IDS
   that are considered as global parameters controlling the component
   behaviour.

 . Added [language invoke {lang} {codel} {params}] tcl procedure. It returns a
   string corresponding to the invocation of a codel in the language lang, with
   the list of parameters params.

 . The tcl [language cname {lang} {object} ] procedure now accepts codel
   objects and return the symbol name of the codel in the language lang.

 . Added [object foreach {var} {object} {body}] tcl procedure. It works for
   object of class 'type' and traverses, in depth-first order, the type tree.
   For each sub-type in the tree, it evaluates the body with var set to the
   current element. If var is a list of two variable names, the second variable
   is set to the hierachy of types leading from the main type to the current
   element.

 . Added optional type parameter in the  [$parameter initializer ?type?] tcl
   procedure for parameters. If type is a sub-type of the parameter type, the
   procedure returns the initializer for that specific sub-type only.

			    Changes in genom 2.99.2

Released on June 27th, 2010

 . Developed the first draft of the C++ mappings.
   For bounded version of string and sequences, the mapping relies on a runtime
   header that contains a generic implementation of those types. For now, those
   structs provide no method, until we decide what is really needed. Unbounded
   strings and sequences use the STL string and vector types directly. Unions
   are mapped to a struct containing the discriminant plus a native union, but
   union members whose C++ mapping have a non-trivial constructor are not
   allowed. The other (basic) types have the same mapping as in C.

 . Make everything optional in a .gen file: it is up to a template to decide
   what is mandatory for it.

 . The 'throws' keyword was renamed to 'throw', for consistency with other
   keywords.

 . Implement the long long integers. Long long are 64 bits integers.

 . Make the C mapping use the C99 fixed size integer types.

 . Templates are now looked in a path (colon-separated list of directories).
   Added the GENOM_TMPL_PATH environment variable that can define (as for the
   -t option) this path. Added the default share/genom/site-template directory
   in the template search path, so that external templates can install in a
   location not dependent on GenoM version.

 . Interactive template accepts a -b (batch) option that disable line editing
   facility and is well suited for non-interactive use.

 . Improved a bit the regression tests. In particular, the C and C++ mappings
   for a set of complex IDL datatypes are compiled to check that the mapping at
   least generate code that has a meaning.

 . Add --version option to the genom tool.


			    Changes in genom 2.99.1

 Released on June 9th, 2010.

 . Started documentation. The full document is available in PDF, HTML or ascii
   text. It contains a detailed list of the dotgen (.gen) grammar rules; some
   of the most basic rules are explained. The genom command line tool usage is
   described (also available as a separate unix man page). Tcl template
   commands are extensively described.

 . Added a release() method in the C mapping for unbounded sequences. The code
   allocating some memory for the sequence is expected to update this pointer
   so that other parts of the code can possibly reallocate some storage.

 . Improved some TCL template commands. Parameters of a service can now be
   retrieved by filtering them on their nature (in, out, inout, port...).
   Same for the port list.

 . Added [template require] template procedure. It loads additional tcl source
   code that is made available to the template files.

 . Beautify code generation: two newline characters around <' ... '> markers in
   template files are replaced by only one newline. This handles the case where
   a whole line of template source consists only in TCL code: you naturally
   expect this line to be removed in the generated source.

 . Fixed error line reporting in template files, and improved error reporting
   verbosity in verbose (-v) mode.


			    Changes in genom 2.99.0

 Released on March 26th, 2010.

 . First public version. This was released after the most basic design was
   achieved and has proven to be able to generate some code.
