Commit Graph

22 Commits

Author SHA1 Message Date
Jean-Paul Chaput 628057f7bb * <All Tools>/CMakeLists.txt:
- Change: For the setup_sysconfdir() boostrap/cmake macro uses the
        CMAKE_INSTALL_PREFIX to guess where we are being installed.
        Should be more reliable than any *_TOP environment variable.
2011-02-15 12:50:54 +00:00
Jean-Paul Chaput 552a6760f2 * <All Tools>/CMakeLists.txt:
- Bug: During the packaging stage, DESTDIR must be appended to the
        pathes prepended to CMAKE_MODULE_PATH.
2011-02-02 11:22:17 +00:00
Sophie Belloeil 3455776742 No more setup_apple() 2010-07-22 14:38:07 +00:00
Jean-Paul Chaput 9cb782265e * All Tools:
- Change: Using more Bootstrap macros. Simpler way of setting the
        CMAKE_MODULE_PATH.
2010-07-15 14:31:35 +00:00
Jean-Paul Chaput 19e608152e * All Tools:
- Change: Switch from "goodies" to "bootstrap".
2010-07-14 19:40:09 +00:00
Jean-Paul Chaput c5c5001c35 All tools: using the new Goodies macro.
Suppress loops in Hurricane libraries.
2010-07-13 16:25:46 +00:00
Jean-Paul Chaput 24428fadb1 * All tools:
- Bug: target_link_libraries() must be put back for OSX Snow Leopard
        (doesn't seems to affect Leopard). As I do not have an OSX under
        my hand it's untested and is likely to fail at that point.
2010-07-12 15:13:53 +00:00
Jean-Paul Chaput 6b5169d021 * All tools:
- Library linking: there must not be "target_link_library()" for libraries,
        only when building binaries. Avoid clashes between static module
        or class variables, and strange reinitialisation of those variables.
    - Change: Boost is now always linked staticly.
2010-07-01 11:50:37 +00:00
Jean-Paul Chaput 3968b339e6 * ./coriolis/src/crlcore/src/ccore/Banner.cpp
./coriolis/src/crlcore/src/ccore/crlcore/Banner.h
   - Moved "CBanner" to "Banner", cleaned up, relooked, renamed functions, reorganised. 

 * ./coriolis/src/crlcore/src/ccore/ToolEngine.cpp
   ./coriolis/src/crlcore/src/ccore/crlcore/ToolEngine.h
   ./coriolis/src/crlcore/src/ccore/crlcore/ToolEngines.h
   - Renamed CEngine to ToolEngine, cleaned up, relooked. All fonctions as static
       members.

 * ./coriolis/src/crlcore/src/ccore/Memory.cpp
   ./coriolis/src/crlcore/src/ccore/crlcore/Memory.h
   - Renamed CMemory to Memory (as for Timer), minimal cleanup.

 * ./coriolis/src/crlcore/src/ccore/crlcore/*.h
   - Change anti-double inclusion constants from __XX_H__ to __CRL_XX_H__
       (that is: include namespace) to avoid potential constant clashes with
       other pieces of software.

 * ./coriolis/src/crlcore/src/ccore/Utilities.cpp
   ./coriolis/src/crlcore/src/ccore/crlcore/Utilities.h
   - Finish porting of all features from CUtils. Simplificated mstream using
       member templates. Speedup mstream by using static_cast instead of
       dynamic_cast.

 * ./coriolis/src/crlcore/src/ccore/Environment.cpp
   - Now read CORIOLIS_TOP from UNIX environment instead of hard-coded
       directory (to my personnal installation...). See new method
       "loadFromShell()", needs to be extended to all other variables.

 _____________________________________________________________________________


 * ./hurricane/src/hurricane/BasicLayer.{h,cpp}
   - Suppress all graphics related members from Layer.
   - Adding realName member for symbolic to real transformation.

 * ./hurricane/src/hviewer/CellWidget.cpp
   Bug: Now uses display threshold from Graphics (DisplayStyle) instead
     of layer. Now layers appears/diseapears while zooming/unzooming.

 * ./coriolis/src/crlcore :
   - Separating clearly symbolic technology form real technology.
   - Various file renaming.

 _____________________________________________________________________________


 * ./hurricane/src :
   - Complete include re-organisation.
       include/hurricane/*.h            : kernel.
       include/hurricane/viewer/*.h     : hviewer.
       include/hurricane/inspector/*.h  : hinspector.
     Includes have been moved into subdirectories of .cpp files (as in
       crlcore).
   - Now you must include files like this :
       #include  <hurricane/Layer.h>
       #include  <hurricane/viewer/CellViewer.h>
       #include  <hurricane/inspector/HInspector.h>  
   - Suppressed viewer specific include path in FindHURRICANE.cmake.
   - Re-enabled documentation, with dot disabled as it seems to slow down
      doxygen.

 * ./crlcore/src/crlcore :
   - Adapted to new Hurricane include scheme. Corrected bugs in it's own
       include files (noticeably "Utilities.h").

 _____________________________________________________________________________


 * ./hurricane/doc/hurricane :
   - Added (empty) directories "html" & "latex". Those directories are
       created by doxygen, but as they are used in the CMakeList.txt, they
       must be present even before the fisrt run of cmake (otherwise cmake
       choke on them).
   - Doxygen sets to only generate html & pdf (through LaTeX) documentation.
   - All ".dox" files corrected to suit the new function members naming
       scheme (some work may remains in code examples).

 _____________________________________________________________________________


 * ./hurricane/doc/hurricane/src/hurricane/Layer.{h.cpp}
   ./hurricane/doc/hurricane/src/hurricane/BasicLayer.{h.cpp}
   - Changed "Type" to "Material" to fit better the OpenAccess semantic.
       Introduce Material meanings : pWell, nWell, pImplant, nImplant
       active, metal, cut, obstacle & other.

 * ./coriolis/src/crlcore :
   - Switched to the generic layer model. Updated technology XML configuration
       files, technology parser & AP parser/driver.
   - Note that the representation of transistors visually changes as it's now
       modelled with Implant + Active.

 _____________________________________________________________________________


 * ./hurricane/src/hurricane :
   - CompositeLayer replaced by 5 kind of symbolic layers :
       RegularLayer     (1 BasicLayer)
       DiffusionLayer   (2 or 3 BasicLayers: active+implant,well)
       TransistorLayer  (3 or 4 BasicLayers: poly+active+implant,well)
       ContactLayer     (4 or 5 BasicLayers: metal+cut+active+implant,well)
       ViaLayer         (3 BasicLayers: metal0+cut0+metal1)
   - To better follow the OpenAccess semantic, the "obstacle" Material type
       is renommed to "blockage".
   - NB: doxygen documentation is not up-to-date and issue warnings.

 * ./coriolis/src/crlcore :
   - Migrate from CompositeLayer to the various SymbolicLayers.
   - Symbolic rules are now closer to the reality so that a Cell displayed
       with Hurricane should look identical to the Graal one.
   - Complete rewrite of the AP parser. Much simplificated, do not try to
       merge/articulates segments. This ensure a true rendering of the
       Cell. Especially do not create contact to anchor diffusion segments,
       which leads to very strange randering (DRC error as well).

 _____________________________________________________________________________


 * ./hurricane :
   - Unit evolution to allow Symbolic (lamda) and Real (grid founder) mixing.
       All functions related to Unit translations are now grouped under
       the "DbU" class (another tribute to OpenAccess). "DbU" contains
       only static attributes (constants) and methods. Unit itself becomes
       a typedef inside this class, hence the file renaming from Unit.{h,cpp}
       to DbU.{h.cpp}. Have to replace all instances of "Unit" by "DbU::Unit".
   - Doc will be updated shortly.

 _____________________________________________________________________________


 * ./coriolis/src/crlcore :
   - New AP parser : simplificated, no longer try to re-articulates segments.
       More accurate representation of standart cell innards.
   - More accurate symbolic extentions rules.
   - Propagated changes from Hurricane about Unit/DbU.

 _____________________________________________________________________________


 * ./hurricane/src :
   - Rename "pyext" to "isobar".


 _____________________________________________________________________________


 * ./hurricane/doc/hurricane :
   - Documentation of DbU, replacing documentation of Unit.

 * ./hurricane/src/hurricane/hurricane/DBo.h :
   - Property set is now a mutable member, allowing const DBo to changes
       their properties. Strange side effect on SlotAdapter in which we
       need to declare two separate templates, one for const type and
       another for non-const type.
   - _getTypeName() defined to prevents noisy error message when a
       derived class (from DBo) do not want to implement support for
       the inspector.


 _____________________________________________________________________________


 Derrick Release !!

 * ./hurricane/src
   - Simplification of the Inspector internal mechanism. Simple, but with
       more templates, means a slower compilation.
   - The DbU::Unit problem : DbU::Unit are only typedef over long type,
       so we cannot create a specific overload for them. Uses "getValueRecord()"
       instead of "getRecord()"
   - For HInspectorWidget add a "getClone()" method. Also add a global
       object counter (for Record too) to track down memory leaks.
   - Big rewrite of the HInspectorWidget : now do not leak memory like hell,
       and only kept allocated the current Record and not the full stack
       of them (instead, we stack Slots which are ligthweigh objects).
   - Rename of "real" unit to "grid" unit.
   - New conversion function "getPhysicalsPerGrid()" and associated
       mechanism.

 * ./coriolis/src/crlcore :
   - Synchronise with the Hurricane modifications.


 _____________________________________________________________________________


 * ./hurricane/src/hurricane/DbU.{h,cpp} :
   - Add forgotten converter function physicalToGrid(), physical units to
       founder grid units.

 * ./hurricane/src/hinspector :
   - Added history support, and ability to move through the history stack.
   - Fork support : by typing 'O' (capitalized 'o' letter)  you can open
       a new inspector on the current record.


 _____________________________________________________________________________


 * ./hurricane/src/hinspector :cla
   - No more extra arguments in HInspectorWidget & RecordModel constructors.
       Valid values have to be sets through setRootRecord() & setSlot().
   - Key for forking sub-inspector is now *minus* 'o'.


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - Bug: very tricky one. Do not emit "layoutAboutToChange()" signal
       after destroying the Record used by the RecordModel but before
       setting a new one and not setting the _record field to NULL.
       Now setRootRecord() should work more than once.


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - API : in CellWidget & CellViewer constructors now only takes the
       parent QWidget.
   - Renaming coordinates translation functions for more clarity.
   - Adding a StatusBar showing mouse coordinates.


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - Grid & Spot support (adjusted display threshold).
   - Added new copyToScreen() functions for _drawingBuffer to screen refreshment
       or partial copy (useful for Spot).


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - New Widget policy : a widget do not generate other widget : applied to
       CellWidget which no longer supplies Palette & StatusBar.
         API note: to associate a HPalette to a CellWidget (that is be able
       to select layer) you have to call "bindToPalette()" on the CellWidget.
   - Hurricane reusable widget names prefixed by 'H' : HMousePosition and
       HPalette.


 _____________________________________________________________________________
   

 * ./hurricane/src/hviewer :
   - New feature : support for highlighted selection with decent refresh time.
       To active selection mode, use the 's' key or the "View" menu.
   - New feature : HNetlist to browse a Cell's Netlist. HNetlist can be used
       with any NetInformations derived class, allowing the user to enrich
       the HNetlist displayed fields. For an example, have a look at
       SimpleNetlistWidget.
   - Added proper licence header to all file.


 _____________________________________________________________________________


 * ./hurricane/src/hurricane :
   - New feature : geometrical Query with callback fonctions "a la" OpenAccess.

 * ./hurricane/src/hviewer :
   - Uses Query to draw display.
   - Bug : when drawing segments as lines (width inferior to 1 pixel)
       uses an alternate Pen which is one pixel wide and SolidLine styled,
       avoiding strange orange lines... Mechanism implemented in sub-class
       DrawingPlanes.
   - Make selection always visible regardless the zoom level.
   - CellWidget names it's most importants childs QWidget (mostly menus)
       for later retrieval in customized sub-classes.

 * ./coriolis/src/crlcore/src/cyclop :
   - Created a simple derived class from CellViewer. Example of customisation
       of CellWidget.


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - Bug : now CellViewer can start with a NULL Cell, note that in this
       case all displacement/zooming function of CellWidget became uneffective.
       (display only a black screen)
   - New widget : HGraphics to select the layout graphic's theme.
   - New widget : HDisplayFilter to select displayed hierarchical levels.
   - Distinguish between Close (one viewer) & Exit (all viewers).
   - Small enhancments of DisplayStyle (Description & darkening).

 * ./coriolis/src/crlcore/src/ccore :
   - Xml display parser takes account of DisplayStyle description & darkening.

 * ./coriolis/src/crlcore/src/cyclop :
   - Enhanced COpenCellDialog : ability to open in a new Viewer.
   - Bug : now Cyclop can start on a NULL Cell.
   - Half Bug : when a Cell is loaded at start, call show() *before* setCell()
       so all internal widget resizing due to the insertion of the toolbar,
       menbar palette ... takes places before the Cell fit. Now the loaded
       cell appears correctly fitted.


 _____________________________________________________________________________


 * ./hurricane/src/hviewer :
   - New feature : Command support. Move command is now implemenented as a
       Command and no longer built into the CellWidget. ZoomCommand implemented.
   - New feature : SelectCommand support along with new HSelection widget to
       browse the current selection. Selection is automatically kept up to
       date.
   - Note : Selection Browser & Netlist Browser pointer in the CellViewer are
       resets to NULL on widget destruction by closing. We do not want to keep
       big widget hiden. The are allocateds on demand.
   - New feature : progessive grid. First display 5x5 then 5x5 + 1x1.


 _____________________________________________________________________________
       

 * ./hurricane/src/hviewer :
   - Bug : default argument to setWeight() sould be QFont::Normal and not "-1".
       Shows in Qt debug mode (catched by an assert).
   - Bug : SelectCommand now keep the Selection check button in sync.
   - Change : Palette doesn't show at start.

 * ./hurricane :
   - Now choice between static and dynamic linking. Note that thoses options are
       mutually exclusives.

 * ./coriolis/src/crlcore :
   - New choice between static and dynamic linking.
   - New feature : XmlParser optional warning when file not found (default is
       to warn).
   - New feature : now read environment from user's optional configuration file :
       ~/.environment.alliance.xml
   - Potential bug : when loading/parsing file, the XmlReader hangs if the opened
       file is a directory, and QFile allows directory opening :-(


 _____________________________________________________________________________


 * ./hurricane/src/viewer :
   - New features : advanced selection widget/commands. Communications between
       CellWidget, HSelectionPopup, HSelection & SelectCommand mostly done
       through signal/slots (better undersdanding of the possibilities).
   - Change : debug menu is hidden by default.
   - Change : in all the QTableView rows are now correctly resized, even when
       filtering is active (new forceRowHeight() slot). I'm pretty sure there's
       a better way to handle this, but I haven't found it for now.
   - Change : small naming normalisation in all those TableView.


 _____________________________________________________________________________


 * ./hurricane/src/viewer :
   - New feature : display instances names (vertical on bottom left corner
       of the AB). New CellWidget capability : drawText(). Small modification
       of styles & display.xml to distinguish between different kind of texts.
       (instances name, master cell names, ...).
   - New feature : do not create color, pen & brush at start in Graphics/
       DisplayStyles. Now for the graphics to be used it must be enabled with
       a call to "Graphics::enable()" *AFTER* allocating the QApplication.

 * ./coriolis/src/crlcore/src/cyclop :
   - New argument "--text" to check pure text mode.


 _____________________________________________________________________________


 * ./hurricane/src/hurricane/Name.h
   ./hurricane/src/hurricane/Name.cpp :
   - New feature : Allocate a static member "_emptyName" which could be used
       to manage effeciently empty Name (for functions returning reference on
       Name, by example).

 * ./hurricane/src/hurricane/Property.h
   ./hurricane/src/hurricane/Property.cpp :
   - Change : Now StandardPrivateProperty & StandardSharedProperty templates
       systematically uses static member for the property's name. This leads
       to suppress the "const Name&" argument when creating a property, and
       the _name member is no longer present in each object instance.
   - Change : Property must now be created/get through static methods :
               StandardPrivateProperty<Value>::get ( DBo* );
               StandardPrivateProperty<Value>::create ( DBo* );
               StandardPrivateProperty<Value>::create ( DBo*, const Value& );
       Note that, as before, the Value type must provide a default constructor
       and a copy constructor.

  * ./hurricane/src/hviewer/DisplayStyle.cpp :
    Bug : early Graphics::enable() no longer makes application crash.

  * ./coriolis/src/crlcore/properties :
    - Complete redesign of properties managment. Individual properties relateds
        to the same concept and DBo* are now grouped together into an
        "ExtensionDatas" which is nested into a specific "Extension" Property.
        The various datas can be accessed through static methods of the Extention
        object. Two Extension have been created :
        a. LefDefExtensionDatas / LefDefExtension (on Cell*) : holds convert
             factors & Ioc orders (if any).
        b. NetExtensionDatas/NetExtension (on Net*) : holds various Port names,
             currently only one Name at the same time is managed.

  * ./coriolis/src/crlcore/lefdef :
    - Change : re-enable and big cleanup of the LEF/DEF parsers drivers. Currently
        only the DEF parser is enabled.

  * ./coriolis/src/crlcore/src/AllianceFramework.cpp :
    - New : Ability to pre-load all cells from a library.
       
  * ./coriolis/src/crlcore/src/cyclop :
    - New : Ability to choose the input format "on the fly".

 _____________________________________________________________________________


 * ./hurricane/src/hurricane/ExtensionSlice.h
   ./hurricane/src/hurricane/ExtensionSlice.cpp
   ./hurricane/src/hurricane/ExtensionGo.h
   ./hurricane/src/hurricane/ExtensionGo.cpp :
   - New : support for user-based Gos & Slices. A normal slice is a couple
      (Layer,QuadTree) while a ExtensionSlice is a couple (Name,Quadtree).
      Note that for efficiency ExtensionSlices also uses a mask bitmap.
        This new feature implies modifications of the Cell QuadTrees and
      the Query callback/class. CellWidget & Palette also updated to allow
      the drawing of thoses new slices.

  * ./coriolis/src/crlcore/src/cyclop/DemoGo.{h,cpp} :
    - Example : how to construct & uses an ExtensionGo (draw a thick red
        box around the Cell's abutment box).

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - New : Mask object to manage masks.
    - New : BasicLayer ordering & connectivity is managed.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - New : DebugSession for a selective trace activation, based on "symbols",
        that is, void pointers to objects.
    - New : ExtensionGos are now selectables (integrated to the
        Cell_OccurrencesUnder collection). Note that they are manageds as Gos
        and *not* ExtensionGos.
    - New : Bug flavor of Exception (sibling of Error & Warning).

  * ./hurricane/src/hviewer :
    - Change : ExtensionGos are now hidden by default.

  * ./coriolis/src/crlcore :
    - Technology directly avalaible in RoutingGauge.
    - _viaLayers table in RoutingGauge to manage METAL/METAL connexity.
        Can contains NULL in case of non-contiguous metals.
    - Contants are moved into a Constant top-level namespace named
        "Constant"...
    - RoutingLayerGauge no longer checks for BasicLayer (could be
        RegularLayer).

  * ./coriolis/src/nimbus :
    - Uses Constant namespace.

  * ./coriolis/src/knik :
    - Edges are now drawed as true colored edges between two vertexes,
        and not as sides of the GCell.

  * ./coriolis/src/katabatic :
    - Initial portage from Coriolis 1. AutoContacts resizing is still to be
        activated.

  * ./coriolis/src/unicorn :
    - Bug : bad libraries depndencies in CMakeList.txt.
    - Added Katabatic tool.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Bug : double deletion of ExtensionSlice, one in Cell and one in
        ExtensionGo::unmaterialize() when the last ExtensionGo is removed.
        Keep the one in unmaterialize.
    - Bug : missing "_preDestroy()" in ExtensionGo (not really a bug but may
        be useful in the future).
    - Modification : begin to uses "ltrace(level)" instead of "trace()".
        Levels affecteds to Hurricane are 0-10 (the lowest).

  * ./coriolis/src/katabatic :
    - New : create a Configuration object to group all that's related to
        configuration (RoutingGauge ...).
    - Finished porting :
      a. - AutoContact resizing.
      b. - Structure stripping to get back to Hurricane.
    - Todo : AutoContact removal from the GCell lists whenever destructed.
        In combination with "engineDelete" to speedup the destruction
        process. Not a priority as we never destruct AutoContacts for now.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Bug : memory leak in Query.h. When we do try a levelDown() remove the
        Instance locator that have been created (and is not valid).
    - To trace the numbers of Instances Locator add a counter inside the
        QuadTree. The code is commented but could be useful in case of
        another memory leak...

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - New feature : first try at a more ergonomic interface. The "Controller",
        a simple Tabbed window for managing all settings.
          Reorganize the way things are selected (Nets, Area, single), aglomerated
        selection.
          Use a "logical" progression Netlist -> Selection -> Inspector.
    - In CellWiddget, new Selection managment mecanism to ensure persistent
        Selection across cell modifications.
          New signals/slots to manage Cell modification :
          a. - cellPreModificated() : must be launched *before* the Cell modification
               by the tool about to modify it.
          b. - cellPostModificated() : must be lauched *after* the Cell modification
          This mecanism may be amended to automatically fit with the UpdateSessions.  
    - Cleanup (part 1) : more consistent name for widgets, replace the 'H' prefix by
        a "Widget" suffix. Objects are modified by not filenames yet (due to svn not
        liking file renaming and modications at the same time).
    - Improved support for static building in CMakeList.txt.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug : InspectorWidget was using Record from Occurrences in the SelectionWidget.
        but those Occurences were created on the fly by the CellWidget/Selectors.
        So, whenever the selection changes the Occurrence may diseapear leaving a
        bad Record in the InspectorWidget (core dump).
          Now, the TabInspector keep a copy of the Inspected occurrence, so it
        can go through any selection change.
          In addition, the InspectorWidget could be passed Occurrence that it keeps
        local copy along with Record*.
    - New Feature : internal, first step toward an extensible ControllerWidget :
        now all Tab are derived classes of ControllerTab.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - New feature : full uses of SelectionModel in NetlistWidget, allow multiple
        selection. New option to automatically select Nets from the Netlist
        browser into the SelectionWidget (temporarily set up in cumulative
        mode).
    - Rename : SelectorCommand into SelectorCriterion (file name renaming in
        next commit).
    - Reorganisazion : in CellWidget, SelectorCommand/SelectorCriterions operations
        are gathered in a single object : SelectionCriterions.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Rename : SelectorCommand into SelectorCriterion (file part).

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: Bad detection of libraries in HURRICANE_CHECK_LIBRARY macro.
    - New feature : add a "selectable" characteric on drawable objects. Allows
        to selectively select objects through dragging. Note that it's implemented
        in term of BasicLayer & ExtensionGo. If an object (Component) has a Layer
        composed of more than one BasicLayer it will become selectable as soon as
        one of it's BasicLayer is selectable.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - New feature : remove Hurricane's original basic Timer and replace it with
        the one from Coriolis/crlcore. Added ability to get the elapsed time
        without stopping the timer.
  * ./hurricane/src/hviewer :
    - New feature : complete redesign of the drawing refreshment loop. Now there's
        a "secondary" loop managed by the "RedrawManager" object which bufferize
        the redraw requests. The "_redraw()" function has been made interruptible
        at coarse level (between layer).
          Important note about the redrawing design : the QApplication::processEvents()
        function cannot be called inside the paintEvent() functions/sub-functions.
        So the drawing is separated from the paintEvent. The paintEvent() performs
        only quick pixmap buffer copy. The _redraw() is triggered by the move/refresh
        events bufferized by the RedrawManager, flush periodically the loop event 
        and send direct (not posted) paint events (repaint() call).
          Another constraint is that the displayed Widget can only be painted during
        the paintEvent(). Otherwise the painter refuses to initialize.
    - Ergonomy : adopt more standard key/mouse bindings. No more CTRL key for zooming
        (too small zooms are rejecteds, thresold at 10x10 pixels). Continuous move
        is enabled with SPACE+mouse.

  * ./coriolis/src/unicorn :
    - Reorganisation : Unicorn is now supplied as a separate library. Due to a limitation
        of cmake the binary can no longer be named "unicorn" as it conflicts with the
        library name. So it's been renamed into unimain (better candidates?)

 _____________________________________________________________________________


  * Merry Christmas & Fuck Numericable.
  * ./hurricane/src/hurricane :
    - New feature: Display support for Rubber, three modes of representation : centric,
        barycentric and (pseudo) steiner.
    - New feature: ability to generate pdf/ps snapshot using QPrinter. Can perform
        an exact snapshot or print a synthetic A4 (choice hard-wired for now).
    - Change: display styles reorganisation, recreation of the "Alliance Graal" look.
    - New feature: darkening managment at CellWidget level, to allow Extension to
        darken when unselecteds.
    - New feature: ExtentionGo are now managed by the selection redraw function.
    - New feature: Selector set is now sorted by object type, this allow to speedup
        the redraw function which will now perform only one loop.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Bug : Timer.h/.cpp, friend overload of the operator<<(ostream&) introduce
        a ostream<<() function in the Hurricane namespace which prevent the
        overload to resolve correctly under MacOS X (gcc 4.0).

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - New feature: support for breakpoints with a selectable stop level.
        See Breakpoint.h. Graphical popup automatically when Graphics is
        enabled.
          User can select what to do when a breakpoint is reached and valid
        through a callback mechanism.
          A disabled example is avalaible in GraphicKatabaticEngine.cpp.
    - Ergonomy : reverse the zooming direction of the mouse weel (some said
        it's like in MS Word...).
    - Bug: accept zoom when bottom right is below lower left (absolute value).

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: redraw the palette layer samples whenever the style changes. Uses a
        new, more clear model to transmit signals. A star model where the
        CellWidget is the center, signals propagate a void pointer which tells
        the emitter to avoid looping. First a slave emit the signal to the
        CellWidget. When the CellWidget receive the signal it's transmitted to
        all slave widgets.
    - New feature: ExceptionWidget (derived from QDialog) to display properly
        catched exceptions. The Abort button of the Dialog forces the program
        to core-dump with a SIGSEGV. The "Try to Continue" resumes the program,
        which is higtly to crash anyway...
    - New feature: a HApplication in replacement of the QApplication to catch
        exceptions in the notify() function, that is exceptions that could be
        throwed inside event handlers.

  * ./coriolis/src/unicorn :
    - New feature: making uses of HApplication.

 _____________________________________________________________________________


  * ./coriolis/src/crlcore :
    - New feature: users can select it's preferred display style through the
        environment.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: BreakpointWidget is no longer modal, need to replace the ::exec()
        by a custom made one.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Supress the last remnants of Nimbus (used to build the GCell grid),
        now read the grid cut lines from Katabatic.

  * ./coriolis/src/unicorn :
    - No more linking with Nimbus library.

 _____________________________________________________________________________


   * ./coriolis/src/katabatic :
    - Bug: correctly build the GCell grid from Knik.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: make ExceptionWidget & BreakpointWidget non-resizables.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: do not redraw the grid with each paintEvent(). This is a terrific
        cpu eater. Grid is now drawn into the same plane as the layers.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Optimization: rework the display speed and display policies. Now redraw
        requests no longer interrupt themselves, provoking a lagging effect but
        a more fluid display (Events interruption is working nonetheless).
          Small rework on RedrawManger: more meaningful attributes names and
        code simplification.
          The previous behavior can be re-enabled with the ALLOW_REQUEST_INTERRUPT
        define.
          Try to reduce to the min the number of pixmap copy, less calls to
        DrawingPlanes & repaint.
          The hurricaneAMS transview so regain it's previous fluidity when
        parameters are changed.
    - Change: the _stripWidth can now be adjusted.
    - Note on profiling: sysprof, or rusage do not take account for operations
        outside the processus, so for example, when a pixmap copy is done, it
        doesn't show any cost in the processus but it's paid in Xorg.
          The operation seems to be fast while it's slower instead.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - New feature: CellWidget now store it's internal state in a separate
        nested object CellWidgetState. The State is work in progress, currently
        is store the Cell*, showSelection, cumulativeSelection, selection
        criterions and showBoundaries. showBoundaries may evolve to be stored
        as part of the Palette's state.
    - Change: implement the "start" propagation model signal/slot for
        showSelection, cumulativeSelection & showBoundaries. The main concern
        is to avoid signals loop. See SelectionWidget::setShowSelection(bool)
        for an example.
    - Change: supress the minimumSize of the SelectionWidget (200 pixels is a
        waste of space when the Path is empty).

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: simpler implementation of the occurence selection mechanims
        between SelectionPopup, SelectCommand, SelectionWidget & CellWidget.
        Consistent (identical) names of signal/slots : selectionToggled() and
        toggleSelection().
    - Change: disable QApplication::processEvent() has it seems to slow down
        display refreshment on Mac OS. This may be a side effect of another
        problem not yet diagnosed.
    - New feature: CellWidget internal state enhancement : now manage an
        history of scales (through 'u' & 'd').
    - New feature: hierarchical exploration through 'CTRL+u' & 'CTRL+d'.
        On second though, what a bad key mapping. To be corrected soon...


  * ./coriolis/src/* :
    - Bug: for Mac OS, event when building a shared library we need to
        supply the complete list of dependency libraries. Affect almost
        all tools.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: correction of the bad keyPress event handling in InspectorWidget
        (had to press twice the key for the action to be transmitted).
          Uses an eventFilter() at InspectorWidget instead of a keyPressEvent()
        overload. The keyPress event is first received by the QTableView then
        transmitted to the upper level. The eventFilter allows the InspectorWidget
        to catch the event *before* it gets to QTableView (but let pass thoses
        it don't want).
    - Bug: idem for SeletionWidget.
    - Change: do not draw the rectangular area of AreaCommand until it is bigger
        than a given threshold (programmable). Affect ZoomCommand and
        SelectCommand. ZoomCommand no longer issue a warning when the zoom is
        to small.
    - New feature: fit to net in the NetlistWidget. Uses simple contextual menu,
        another way to avoid overloading keyPressEvent().
    - Change: in Query, the filter has now it's own subtype: Query::Mask.
    - Change: enhancement for the "start" model of signal propagation, used to
        re-implement the DisplayFilterWidget.
    - Change: more clear policy for signal emission: a signal must be emitted
        by any "setter" method (setStartLevel(), setStopLevel(), ...). Has to
        be enforced for all setter (work in progress).
    - Change: re-implemenation of the delayed refresh mechanism. No more flags
        propaged througout the functions calls but a session mechanism instead.
        See CellWidget::openRefreshSession() & CellWidget::closeRefreshSession().
        Nothing is actually drawn until the last session is closed.
          Session mechanism can be invoked by signals/slots, see NetlistWidget.
    - Change: less dangerous key mapping:
        'z'          : zoom in.
        'm'          : zoom out.
        'CTRL+z'     : previous zoom level.
        'CTRL+m'     : next zoom level.
        'CTRL+Up'    : back in hierarchy.
        'CTRL+Down'  : go down in hierarchy.
        'SHIFT+Up'   : back in hierarchy stack.
        'SHIFT+Down' : go down in hierarchy stack.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: modifie GraphicsWidget, PaletteWidget, NetlistWidget &
        SelectionWidget to comply to the "star" model.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: in CellViewer::setCell(), do not try to get the name of the cell if
        it's a NULL pointer... Solve the cyclop "empty cell" coredump problem.
    - New feature : dbo_destroy<> a shared_ptr<> that calls the destroy method
        of an object, specially tailored for DBo. Application in Cyclop.

 _____________________________________________________________________________


  * ./coriolis/src/crlcore :
    - Bug: make Cyclop "COpenCellDialog" non-resizable.

  * ./coriolis/src/unicorn :
    - Change: rename the binary from "unimain" to "cgt", shorter to type and
        with a good memorization potential. cgt stands for "Coriolis Graphical
        Tool".
    - Change: uses dbo_ptr<> in CgtMain.cpp.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Feature: ability to hide/show layer of the palette from the code, needs
        the CellWidget to be bound to a palette to work.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: corrected memory leak in RedrawManager, events weren't freed.
    - Bug: various attributes reordering in constructors.

 _____________________________________________________________________________


  * ./coriolis/src/crlcore :
    - Rename: in RoutingLayerGauge, "Index" have been wrongly substituted by
        "Depth", restoring the orignal name (ie: getTrackIndex()).

 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Lots of (small) adjustments needed to match kite requirements.


 _____________________________________________________________________________


  * ./coriolis/src/unicorn :
    - Change: switching from Katabatic to Kite. Note that as Kite is a derived
        class of Katabatic, both tools musn't coexist on the same Cell.

 _____________________________________________________________________________


  * ./coriolis/src/crlcore :
    - New feature: Ability to get the value of an options through an accessor
        and not only an implicit conversion.

 _____________________________________________________________________________


  * ./coriolis/src/knik :
    - Small modification: ability to get the size of the grid. Print this
        size in verbose mode for automatic benches.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Bug: Due to the simplication of the decorator model, AutoContact are
        no longer derived objects from Contact. So we must replace all the
        dynamic_cast<> by lookup functions.
    - Change: starts renaming "getContact()" accessor of AutoContact by
        the generic "base()" accessor.

 _____________________________________________________________________________


  * ./coriolis/src/kite :
    Bug: incoherency control in Session::addMoveEvent(), Session::addSortEvent().
    Change: small verbosity level changes.

 _____________________________________________________________________________


  * ./coriolis/src/unicorn :
    - New feature: text mode in "cgt" for running benches.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Ported documentation from coriolis 1. Important remark: the documentation
        related to symbols in local anonymous namespaces cannot be put in a separate
        ".dox" file, as doxygen cannot understand that the ".dox" and ".cpp" files
        are associated. So we move the doc directly into the ".cpp" file. Too bad.

 _____________________________________________________________________________


  * ./hurricane :
    - Bug: destructor of Technology was destroying some Layers twice. Destruction
        of Layer was done by a loop over a multimap<> that could contains more
        than one entry of a Layer... Now using a loop over the IntrusiveMap.
    - Change: Reorganization of NetExternalComponents property, all functions
        are now static functions members as the property name.

  * ./coriolis/src/crlcore :
    - Bug: in Catalog destructor StateProperty must be removed from Cells as the
        associated State is deleted.
    - Bug: in ToolEngineRelation add a flag to tell if the ToolEngine is being
        destroyed by the way of the Cell or by the way of itself. Avoid looping 
        in destructors.
    - Bug: correct darkening factor for Alliance styles in display.xml.

  * ./coriolis/src/katabatic :
    - Bug: bad topology building for _GCell_1G_1L3(), now it's made as a dedicated
        topology.
    - Bug: in _GCell_xG_1L1_1L2(), horizontal local segment instead of vertical.
    - Bug: topology 3G 1L2 was not managed, uses xG_xL2 now.
    - Change: local function "autoContactFromRP()" of LoadGrByNet is now moved
        as a static function member of AutoContact : AutoContact::fromRp().
    - Change: new getLayer() decorator accessor in AutoContact.
    - Bug: in LayerAssign::splitAutoContact(), take into account the case when
        a global wire is directly anchored on a RoutingPad (VIA12). In this case
        we must create a complete HV access through M2/M3 (M4) as the original
        global wire is moved to M4/M5.
    - Bug: in KatabaticEngine::_saveNet(Net*) when deleting a zero-length segment,
        ensure that the source is not anchored on a RoutingPad (swap with target)
        as this is the to be deleted contact. If both source & target are anchored
        and the segment has NULL length, pospone destruction with an Error message.

  * ./coriolis/src/kite :
    - Bug: supress the "double penalty", UNIMPLEMENTED warning then BUG warning.
        After analyse it's definitively unimplemented and not a bug.
    - Change: rename "closeRouting" into "finalize".
    - Change: now ToolEngines can safely remains hooked into the Cell rigth to
        the DataBase deletion, no longer remove Knik (Kite will be removed).

  * ./coriolis/src/unicorn :
    - Change: adapt to the latest API of Knik.
    - Change: sets routing edge capacity to 0.9 in order to proceed the shifter
        bench.

 _____________________________________________________________________________


  * ./hurricane :
    - Change: in CellWidget::DrawingPlane, complete replacement of hard-coded
        numeric indexes by the PlaneId enum values.
    - Change: in SelectionWidget, filter on the Occurrence name instead of the
        path name. Todo: add a radio button to select on witch column we sort.
    - Bug: in SelectionWidget, when the filter is active, remap the index
        of the toggled occurrence through the filter.

  * ./coriolis/src/crlcore :
    - Bug: while pre-destruction ToolEngineRelation, looping over a Collection
        set while deleting it. Replace by a "delete first element 'till it's
        empty".

  * ./hurricane,
    ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: documentation building with doxygen is now optional and disabled
        by default. To enable documentation generation run cmake with the
        following argument :
          -D "BUILD_DOC:STRING=ON"
        Or edit the cmake cache variable "BUILD_DOC".

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: replace the simple _engineDelete boolean flag by a full fledged
        _state variable telling exactly at which point we are.
    - Change/Bug: reorganization of the save/delete procedure. Now there's a
        separate function to revert to the pure Hurricane layout :
            finalizeLayout() [virtual]
          In addition introduce "_gutKatabatic()" & "_gutKite()" which are
        in charge of deleting cleanly all internal structures but allowing
        the ToolEngine to remain consistant (albeit empty). The "_gut()"
        are not virtual and are to be called in two contextes: from the
        _preDestroy() and from finalizeLayout(). They must manage two cases,
        whether the structure is still intact or has already been cleared
        due to a former call to finalizeLayout().
          The two possible sequences calls :
        1. - Layout not finalized :
             => runNegociate()
             => destroy()
                => _preDestroy()   // _state: drived.
                   => _gutKite()
        2. - Layout not finalized :
	             => runNegociate()
             => finalizeLayout()   // _state: Driving.
                => _gutKite()
             => destroy()          // _state: Drived.
                => _preDestroy()
                   => _gutKite()

  * ./coriolis/src/kite :
    - Bug: in GCellRoutingSet, inversion of the min/max density bounds for the
        set expansion. The practical results was that the set was only agglomerating
        of the exact same density.
    - Bug: when loading AutoSegments into the Kite GCell/GCellSet, the order number
        has to be incremented once by GCellRoutingSet and *not* for each GCell of
        the set.

 _____________________________________________________________________________


  * ./hurricane :
    - Cleanup debug messages.
    - New: in NetExternalComponents, adds a static method "isExternal(Component*)",
        used in AP driver.

  * ./coriolis/src/crlcore :
    - Bug in ApDriver :
      1. - Use DbU translation function to get right lambda coordinates,
           SCALE_X is now systematically sets to 100 instead of deduced
           from the DB.
      2. - No longer generate lines with "UNTRANSLATED" layer. If needed
           we should issue a warning, but not a corrupted ap file.
      3. - Correct translation of vectorised name elements :
             "b(3)" -->  "b 3"
    - Cleanup debug messages.

  * ./coriolis/src/katabatic :
    - Change: GCell densities are now computed on a per layer basis.
        The densities are stored as unsigned char, with "1.0" equivalent
        to 64. This is we can only describe up to a 4.0 overload, but this
        should suffice.
    - New: add a "desaturate()" method on the GCell which "push up"
        overcell global segments till density is acceptable.
    - New: controlable desaturation threshold for GCells.
    - Bug: In _saveNet(Net*), some AutoSegments are removed, we must
        keep the LUT in sync at this point, as the LUT is used to
        remove AutoSegments in DestroyAutoSegment.
    - Bug: bad states managment in _gutKatabatic() & _gutKite() and
        _preDestroy().

  * ./coriolis/src/kite :
    - Bug: In RoutingEvent, when the interval is too narrow and contains no
        Track, do not issue a bug but an "UNIMPLEMENTED" (less stressing for
        myself).

  * ./coriolis/src/unicorn :
    - New: add a "save" option (only valid for Kite in text mode), finalize
        the layout before saving...

 _____________________________________________________________________________

 
  * ./coriolis/src/katabatic :
    - New: makePowerRails() : a simple trans-hierarchic method of KatabaticEngine
        to build-up and unify power rails.
    - Bug: use of freed memory, loop over a deleted AutoSegment in _saveNet().
    - Bug: memory leak in GCell, delete density table.

  * ./coriolis/src/kite :
    - New: build power rails.

  * ./coriolis/src/unicorn :
    - New: build power rails in kite text mode.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: more ergonomic selection mode commands. Now clicking on "nothing"
        automatically switch off selection displaying.

 _____________________________________________________________________________


  * ./coriolis/src/kite :
    - Bug: In AutoContact, the _getString() function was setting V alignate
        flag using H alignate member... resulting in nonsensical error messages.
          Also correct vertical disconnected components which was telling that
        horizontals weren't connecteds.
          Messages were nonsensicals, but error were reals.
     - Bug: In RoutingEvent::_setAside() when a set aside request fails, do not
        not reschedule a RoutingEvent for the currently routed segment as it
        will fail again (until the ripup limit is reached). Now _setAside()
        returns a boolean indincating success or failure.
    - Bug: In RoutingEvent::_setAside() when iterating over the collapseds
        perpandiculars of a pushed segment (to transmit constraints), we can
        encouter more than one perpandicular associated to the same canonical,
        in this case we must schedule only one RoutingEvent. To do so we keep
        track of already processeds canonicals in a set<>.
    - Bug: (temporary) when an event is unimplemented, to not try to reschedule
        it when _setAsides() requests are emitted, will gradually diseapear as
        unimplemented cases are implementeds...
    - Bug: remove duplicated UNIMPLEMENTED warnings, to get accurate statistics
        about what work is remaining. Introduce an "unimplemented" flag in the
        RoutingEvent. 
    - Bug: In LayerAssign, the AutoContact splitter fails for some tricky
        configurations. As those configurations are poor routing, correct thoses
        to make the bug deseapear, but it's still lurking :-(
          Introduce a AutoSegment::changeDepth() method which change layer of
        an AutoSegment AND the local non-terminal connected AutoSegments at
        the same time.
    - Bug: in LayerAssign, after splitting an AutoContact, connexity hypothesis
        could be broken. Add post treatement that look if any horizontal/vertical
        alignement constraints must be sets on both splitted AutoContacts.
          The mechanism itself is implemented inside the AutoContact::computeAlignate()
        method, itself created from JunctionBox::checkTopology().
          Have to verify is the connexity constraints could be enforced by
        construction (have to re-understand the splitting code...).
    - Bug: In TrackSegment/Session, the invalidate/revalidate mechanism of The
         TrackSegment was completly missing. Now sets up a callback on
         AutoSegment which is responsible for revalidating the associated TrackSegment.
           Note: to revalidate the TrackSegment we have to look for the canonical
         AutoSegment.
    - Bug: In RoutingEvent, when forked update the TrackSegment/Data event pointer.
         Suppress annoying duplicated UNIMPLEMENTED events.
    - Bug: In AutoContact, invalidate all AutoSegments connecteds, not only those
         for wich the extension is updated. 
    - Bug: imbroglio with virtual methods & _getString() in RoutingEvent and
        InsertRoutingEvent preventing getString() to work on InsertRoutingEvent.
        Declare insepector pointer support for InsertRoutingEvent.
    - Change: in RoutingEvent, the comparison operator now also sort over
        signal names in case of equality. This a try to be more reproductible.
        Do not forget to remove it when benching as it's a slow down.
    - Change: in TrackSegmentCost/DataNegociate, the ripup count is moved from
        DataNegociate to TrackSegmentCost as it's now used in the TrackCost
        calculation. Proxy setter/getter are kept in DataNegociate.
    - Change: In Session :
        a. New lookup function to get Kite::GCell from Katabatic::GCell.
        b. Kept a cached copy of the NegociateWindow order.
        c. New access function to the current NegociateWindow.
        d. New access function to the KiteEngine ripup cost threshold.
    - Change: order, event queue & event history are now attribute of NegociateWindow
        instead of simple variable of _negociate().
    - Change: rewrite of the AutoSegment load & TrackSegment load in the GCells.
        Mostly to simplicate the dog leg creation.
    - Change: in GCell, now GCell keep a reference of the owning grid, and offer
        neigborhing utilities (getRight(), getLeft(), getUp(), getDown()).
    - New: in GCell, static function looking for the lowest GCell under a
        TrackSegment. If the database is coherent, it should be the one owning
        that TrackSegment.
    - New: Collection & filter in TrackSegments to get canonical collapseds only
        once (and hide the Session::lookup() at the same time).
    - New: in Track::check(), now look for duplicated TrackSegment.
    - New: first support for dog leg creation in TrackSegment.
    - New: Ripup count is took in account in the TrackCost sort function (new
        attribute, the max from the underlying segments). The sort function
        places Track candidates whith lower ripup count in front, but only
        when a certain theshold is exceeded.
    - New: in KiteEngine :
        a. RipupCost threshold setter/getter (see above).
        b. ExpandRatio for the GCellRoutingSet setter/getter, allow to tune the
             ratio above which contiguous GCell with similar density are agglomerated.
        
 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Bug/Change: In AutoContact, no longer throw an Error in JunctionBox when
        we found an AutoContact anchored on another one (which IS a topological
        construction error). Just issue a warning and ignore it.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Bug: strange interraction between template, const Data and getString().
        Must const_cast<> to const datas before calling getString().

  * ./coriolis/src/crlcore :
    - Change: gmetalh, gmetalv & gcontact are now compliants with the Layer
        connexity mechanism. Also hard coded in the symbolic technology
        parser the gmetal & gcontact are now marked as "working".
        Note:
          Has to implement correctly the Layer working set selection in
        the parser & the xml file.
    - New: In ToolBox, add "deleteEmptyNets()" to remove empty Nets.

  * ./coriolis/src/knik :
    - Change: moved LoadSolution() from Ispd to Knik. Completly reworked
        segment/contact building.
    - Change: In GraphicKnikEngine, much more robustness of the slot functions
        regarding NULL cell or NULL viewer.

 _____________________________________________________________________________


  * All tools :
    - No longer catches Warning() as they shouldn't be thrown.

  * ./coriolis/src/crlcore :
    - Bug: In ToolBox, do not delete POWER, GROUND or CLOCK nets, even if they
        are empty.

  * ./coriolis/src/knik :
    - Bug: BoxRouter solution parser now support negative coordinates...

 _____________________________________________________________________________


  * ./hurricane/doc/hurricane :
    - Bug: In the various Property sub-types dox file the Hurricane namespace
        wasn't closed, resulting in the deseapearance of thoses classes in the
        documentation (painful to diagnose).
          Still, the doc for the derived Property mostly remains to be written.
    - Bug: clearing some remnants of a merge conflict in DataBase.dox.

 _____________________________________________________________________________


  * ./coriolis/srk/katabatic :
    - Change: New iterative policy for desaturating METALx (move segments,
        revalidate layout, re-compute true density & iterate).
    - Change: Second desaturation method, in "step by step" mode. Desaturate
        a GCell one segment at a time.
    - Change: In GCell, new density update policy. Invalidate flag and
        automatic revalidation if needed when the density is accessed.
    - Change: no longer separate build/constraint/optimal steps at Cell
        level. Any invalidated net automatically go through theses steps.
    - Bug: shrink of one Track GCell's bounding box to avoid sharing Tracks
        between adjacent GCell. This Track sharing is responsible for the
        ordering problems that showed up from time to time. The GCell do not
        own it's topmost & rightmost Track (follow the Knik convention).
          New static member "_topRightShrink" to shrink the bounding box
        from an arbitrary amount needed to make top & right track outside
        the GCell box.
    - Bug: classical interval vs. point problems, must add one to the
        side divided by the length.
    - Bug: in AutoContact::getLength() : the set of already proccessed
        AutoSegments is not local to this function but to the GCell for
        which we compute the wirelength. Make it a parameter...

  * ./coriolis/src/kite :
    - Change: threshold adjustements for saturation in global & local
        routing.

 _____________________________________________________________________________


  * ./hurricane :
    - Bug : In Timer.h, forgot to declare the specialized getString()
        template, thus preventing the timer to be correctly display in
        output streams.
    - Bug : In CellWidget::_redraw(), uses "paintersBegin()" instead of
        "painterBegin()" (whithout the "s"). The former open painters for
        both normal & selection planes which are subsequently accessed by
        "setPen()". The laters opens only the normal plane painter resulting
        in warnings for the selection plane painter (shows only from Qt 4.5).
    - New : In CellWidget, ability to support the physical grid (not only the
        symbolic grid). Added selection symbolic/real in the DisplayFilter.
    - Change : add to Technology and all the Layers sub-classes a
        "_onDbuChange(float)" method.
          This is due to the fact that the symbolic technology is loaded first
        into the DataBase (needed for defining the BasicLayer ordering) along with
        all the symbolic dimensions for the symbolic Layers. Only afterward, we
        load the real technology (hcmos9 for instance) which will sets the
        "grids per lambda" factor to it's true value, changing the meaning of
        the already loaded symbolic values. Then, it is necessary to scale those
        values so they are coherent with the new "GPL" factor, hence the
        "_onDbuChange()" function.
          NEVER USE THIS FUNCTION AFTER THE TECHNOLOGY HAS BEEN LOADED, it would
        render all symbolic coordinates false...

 _____________________________________________________________________________

        
  * ./coriolis/src/crlcore :
    - New : real technology parser now read the Grids per Lambda factor.

 _____________________________________________________________________________


  * ./hurricane/src/viewer :
    - Change: Consistent encapsulation of "_active" in Command and all it's derived
        classes.
    - New: support for Rulers. Start drawing by pressing Shift+L.Button, finish
        by pressing it again. To cancel a Ruler press Shift+R.Button.
          Drawing style support also added : "text.ruler". Rulers are always
        visibles (display threshold sets to zero), only the numbers of graduations
        displayeds changes (at least 5 pixels between two graduations).

  * ./coriolis/src/crlcore :
    - New: In display.xml, entry for "text.ruler" (to display Rulers).

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Rewrite file header to reinstate the BULL copyright and the LGPL license.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - New: In PaletteWidget: allow to select the number of rows of the grid
        widget (up to "infinite", meaning one column). Allow to hide entire
        groups in the widget.

  * ./unicorn :
    - New: In CgtMain, uses the GtkStyle to read the graphic look from the current
        Gtk theme ensuring a much homogenous look. Activated only under Linux.
        Done in two lines of code. As they says in Microsoft: Waahhouuu.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic :
    - Change: In GCell, Top/Right shrink is now 1u instead of 4 lambdas (see
        the Tracks_Spiral bug in kite).
    - Bug: Stable canonisation. Two subsequent runs of "_canonize()" must
        choose the same canonical AutoSegment from an aligned set.
        Initially, we choose the "lowest" AutoSegment from an aligned set to
        be the canonical. But the topology manipulation algorithm may reorder
        the aligned set so the canonical is no longer the lowest, the stable
        canonization first look for the previous canonical and preserve it if
        it could.
          The canonization must be stable because Kite associate a
        TrackSegment for each canonical AutoSegment. And when a Net is
        re-canonized, such as after creating a dogleg, a sets of aligned
        AutoSegment must keep the same canonical.
    - Bug: In Session, when revalidating a Net, do not apply the "_toOptimals()"
        because when Kite is running it has already displaced AutoSegments and
        we do not want them to be moved (without informing Kite).
          In fact, after initialization, AutoSegments must only be moved through
        TrackSegment (i.e. Kite) and not Katabatic.
    - Afterthough: The name "Collapseds" for the collection is misleading,
        should have been "Aligneds" instead. May change someday...

  * ./coriolis/src/kite :
    - Bug: In Tracks_Spiral collection, when the start track, that is, the Track
        nearest to the center of the optimal interval is greater than the constraint
        interval iself, it is not excluded to the collection. The opposite case,
        when the start Track was lesser than the constraint interval was correctly
        handled.
          This bug explains why I have to set the TopRightShrink of GCells to 4
        lambdas (i.e. greater than 2.5 lambda, the current rounding factor for
        the "nearest" Track).
          On the other hand, has we still have to exclude Top/Right Track so we
        must keep the Top/Right shrink mechanism. The Tracks_Spiral include the
        bounds of interval [min:max], so either we shrink all the Contacts
        bounding boxes or only the one of the GCell.
     - Bug: Create new TrackSegments in GCell only after net canonization, we
        must create TrackSegment only for canonical AutoSegments, they must
        be correctly sets.
     - New: Atomic dogleg creation is working.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Bug: In GCell::CompareByDensity(), must be a "strictly inferior" instead of
        "inferior or equal", which lead the std::sort() template to fails on vector<>.
    - Change/Bug : Invert the canonization creation mode. By default, AutoSegment
        are created in non-canonical mode, then canonize the whole net. This ensure
        that during canonization we never encounter two canonicals on the same set
        of aligneds AutoSegments. Also ensure canonization stability.
    - Change/Bug : Net canonization no longer moves AutoSegments into optimal
        position (call to "_toOptimal()"). This is needed because, when creating
        dog legs, re-canonisation musn't displace already Track inserteds AutoSegments
        thus creating incoherency between the AutoSegment and the cached TrackSegment.
    - Change : For the TrackSegment revalidation mechanism to work, invalidation of
        an AutoSegment now invalidate the whole sets of aligned AutoSegments.
    - Change : Adds a "destroy mode" to the AutoSegments. Used to suppress the
        AutoSegment invalidation mechanism during the "finalize" steps
        (the Collapsed Collection used in _invalidate cannot work at this time).
    - Change : Reorganize the whole revalidation system.
        1. - Suppress the revalidation callback of AutoSegments, now revalidation
               takes place in Sessions.
        2. - AutoSegments are revalidateds in Katabatic::Session() and then stored
               in "_revalidateds".
        3. - In Kite::Session() revalidate TrackSegments. To be revalidateds
               TrackSegments are deduced from the _revalidateds vector (i.e. canonicals).
    - Change: Inverse the meaning of "_valid" flag on TrackSegments, now it is
        sets to true *after* an effective revalidation. It avoid multiple
        revalidate in Session. The flags are resets to false at each Session
        closure.
    - Change: Renamed "autoInvalidates()" in "invalidate()" / "revalidate()".
    - Change: Harmonisation of check functions now all overloads of "_check()".
    - Change: Disable the "Assign Layer by Length" steps in layer assignment.
        Leads to better results in the desaturate steps.
    - New: Dog leg creation is now working.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Bug: In CellWidget, the drawRulers was copying an enlarged redrawArea into
        the Selection Plane causing the selection to deseapear gradually when
        slowly shifting.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Bug: In Katabatic::GCell::removeHSegment(), detach the right number of
        TrackSegments.
    - Bug: In BaseGrid::Axis::getGraduationNumber(), when the point in exactly
        on a graduation, returns the index above, and not below as done by
        lower_bound(). This was causing incorrect GCell geometrical selection.
    - Bug: In LoadGrByNet::getSegmentHookType(), inversion between north & south
        segment type (source means north and target means south).
    - Change: Introduce fixed AutoContact & AutoSegment, specially designed to
        handle "big" terminals in M2 or above. Terminals are covered by an
        overlapping AutoSegment of fixed type.
          Fixed AutoSegments are always canonicals and should never have aligneds
        on them. Alignment constraint is carried throught the supporting fixed
        AutoContact which have a "punctual" constraint box.
          New checks on setAxis & makeDogLeg() so that fixed segments cannot be
        used on them.
    - Change: In LoadGrByNet, new _GCell_rp_AutoContact() to automatically build
        the terminal protection & attach the right kind of AutoContact given the
        metal, size and access direction of the RoutingPad.
    - Change: In GCell, when loading routing, directly put fixed TrackSegments
        into track. And exclude them from routing events.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - New: Utility functions to manage float rounding errors.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: Hook the Data-Base full checking mode to "CHECK_DATABASE" #define
        instead of "NDEBUG" to allow compiling in debug mode without too much
        slow down. "CHECK_DATABASE" slows down by more than a 15x factor the
        runtime... (reminder for myself: builCoriolis.sh has a new switch,
        "--check-db|-D" to activate this compilation option).
    - Bug: AutoSegment are now truly created in non-canonical state, the canonical
        parameter being removed from all the creation/constructors functions calls.
        Look for discussion about canonization state in earlier commits.
    - Bug: After making an AutoSegment dogleg, must re-canonize the Net before
        the new TrackSegments are built.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    Making the detailed routing fully deterministic. This was becoming a necessity
      as the remaining bugs were becoming more and more elusives and unreproductibles
      between "release" & "debug" versions. No noticeable slow down.
    - Change: In Gcell, the various density are float numbers, but, due to non-
        reproductibles hook ordering their computations are not made in the same
        order, resulting in rounding errors. Those rounding errors, in turns made
        the sorting functions over (density,index) to sort *only* on faulty density
        generating aleatory order between "same density" GCell.
          Now after all float computation, we round them trough "floatRound()" to
        nearest 1/1000. 
    - Bug: In SortRpByX() / SortRpByY() to perform a meaningful sort, must uses
        "rp->getCenter().getX()" instead of "rp->getX()" on the RoutingPads.
    - Bug: In _GCell_xG_xL2(), in the case of a fully horizontal global configuration,
        the North/East and South/West global AutoContacts were not correctly choosen.
    - Bug: In getTerminalInterval(), when exploring the routing wires in search of
        a RoutingPad discart global routing segments, which have been handled in a
        previous treatment.
          Note: we assume that we are on leaf branches of the routing tree so there's
        at most one RoutingPad to found.
    - Change: The concept of canonical AutoSegment should only be used by tools using
        Katabatic not Katabatic itself.
          As a consequence we now manage sets of aligneds AutoSegments whithout having
        a canonical representant so we needs to introduce a set of processed segments.
        Hence the supplemental parameter in setAxis(), computeOptimal(), toConstraintAxis(),
        toOptimalAxis().
          The second consequence is the splitting of the Net revalidate() function in
        Session's. First stage do constraint & optimal computation and the second
        performs the canonization.
    - Change: Delayed canonization, making Katabatic free of the canonical concept we
        can postpone the canonization stage of a Net until all AutoSegments have been
        correctly placed (after constraint computation, optimal placement & revalidate).
          This reduce drastically the likeliness of complete AutoSegment equality (in the
        sense of CompareCanonical()), thus supressing aleatory choice for the canonical
        representant (this case was encountered in the MIPS micro-programmed).
    - Change: To generate a trace suited to compare the determinism of two run a new
        define is introduced : CHECK_DETERMISM (the definition itself enables the
        trace).

  * ./coriolis/src/unicorn :
    - Change: moving the list of Nets to trace into CgtMain.cpp to have the same trace
        in graphical & command line modes.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - New: Adds a nice cartouche on printed snapshots.

  * ./coriolis/src/kite :
    - Forgotten: Re-enable layer assignment & routing in graphical Kite.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: Small size adjustments on the cartouche.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: In RoutingEvent, moves flavors "relax()" & "ripup()" from members
        functions to local module functions.
    - Bug: In TrackSegment::makeDogLeg(), when making a dog leg, as the original
        segment may be unmovable (placed by a more prioritar GCellRoutingSet) it
        will never be riped up. So, the dog leg (perpandicular) axis must be sets
        on the edge of the GCell (left or right according to where the orignal
        cames from). This make the Track in the GCell completly free and the
        insertion of the segment requesting the dogleg could be done without
        creating any overlap.
    - Bug: In TrackCost, in the comparison operator<(), the ripup gap count was
        miscalculated (inverted) concentrating ripup on one Track instead of
        trying to scatters them evenly over all candidtates Track.
    - Change: No more InsertRoutingEvent subclass of RoutingEvent. Now there's only
        one class RoutingEvent holding all the computation (suppress the needs
        for virtual functions).
    - Change: In RoutingEvent::Compare(), add criterion over the Layer depth for
        various ordering tests.
    - New: In TrackSegment, mechanism to fine-control the recursive dog leg creation.
    - Change: In RoutingEvent::_setAside(), more fine tuned operations. Mixes pushes
        and ripups. Pushes TrackSegments that can be simply shrinkeds (and keep them
        in Track), ripups thoses which hard-overlaps.
    - Change: In RoutingEvent::_setRightBound() & RoutingEvent::_setLeftBound().
    - Change: new Ripup function.
    - Change: Ability to stop the algorithm on the first database incoherency to
        examinates what's wrong. Works only in CHECK_DATABASE mode.
    - New: In KiteEngine, add a "printCompletion()" methods to display the completion
        state of the design after running negociation. More accurate than grepping
        the trace file.
    - Change: In RoutingEvent, no longer uses the complex Tracks_Spiral collection as
        the Tracks are sorted according to overlap costs afterwards. Revert to the
        simple Tracks_Range collection (linear).
    - Bug: In TrackCost, the comparison operator<() was sorting in the wrong direction,
         thus concentrating on saturated tracks!
    - Change/Bug: In Katabatic::Session, separate the canonization step of a Net from
        the alignment step. This way canonization no longer result in AutoSegment
        invalidation through alignment which was causing problem to the Session
        revalidation mechanism.
    - Change: To solve more transparently (but sligtly more slowly) the TrackSegment
        revalidation problem, when going through invalidated AutoSegment, search for
        the canonical one to do the proper lookup.
          This allows to suppress calls to TrackSegment::invalidate() in the code.
    - New: In AutoSegment, method "_checkConstraints()" which verify that the constraints
        form source & target are identical as they must be *after* the constraints
        propagation stage.
    - Change: In AutoSegment, integrated checker function "_check()" which verify
        invalidation, shadow extentions values and AutoSegment constraints from
        both AutoContact source & target.
    - Change: In Katabatic, "check()" became "_check()" and is now virtual and
        returning a coherency flag.
    - Bug: In NetConstraints, propagateConstraintFromRp() was applying constraints
        only to source AutoSegment. But when an ending AutoSegment is reached,
        constraints must also be applied to the target if the AutoSegment is in
        the direction of the constraint.
    - Bug: In NetConstraints, _computeNetConstraints(Net*) must restore native
        AutoContact constraints trhough all the Net before applying anew those
        coming from the RoutingPad. This function must be called *only* after a
        topological change.
    - Bug: In RoutingEvent, whenever a Net's topology changes (when a dog-leg is
        created for instance) constraints shadowed from the AutoSegment must be
        updateds. This done trough the GCell::addTrackSegment() which is called
        systematically after a dogleg is created for each createds and modificateds
        AutoSegments.
    - Bug: In AutoVertical/AutoHorizontal, create the dogLeg layer according to
        the current one.
    - Change: In TrackSegment/AutoHorizontal/AutoVertical : the axis of the dogleg
        perpandicular segment is sets as close as possible to the saturated area
        directly in AutoHorizontal/AutoVertical, no longer in TrackSegment.
    - Change: In Katabatic::Session, now returns the set of Nets that have been
        topologically modificateds.
    - Bug/Change : After a dogleg creation the RoutingEvents must re-read constraints
        from the TrackSegment/AutoSegment. And this update must be done *after* the
        Session has been revalidated (mainly after the Net has been re-canonized).
          This update mecanism is hidden in the Kite::Session::revalidate method,
        which for each TrackSegment part of a modificated Net (in the topological
        sense) sends through the DataNegociate object a full invalidation request
        to the RoutingEvent (if any).
    - Change: Moves GCell registration of AutoSegments from the AutoSegment::create()
        static method to the dynamic "_postCreate()" of AutoHorizontal & AutoVertical.
        More clean & integrated, and avoid AutoSegments unregistereds into GCells.
    - Change: In RoutingEvent, do not ripup perpandicular segment to the inserted if
        the Insertor has worked (it should have cleaned the target Track).
    - Change: In LoadGrByNet, protect punctual M1 terminal by a fixed M2 TrackSegment,
        as for M2 terminals. Not very optimal since we create two AutoContacts,
        an AutoContact and a TrackSegment were a special subtype of TrackSegment
        could do the trick.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Bug: In RoutingEvent::process(), when a TrackSegment is being relaxed
        because the best candidate is hard overlapping, do not forget to reschedule
        the original (broken) TrackSegment. Others created TrackSegment are taken
        care of by GCell::addTrackSegment().
    - Bug: In RoutingEvent, in Insertor::insert() when ripping up a portion of
        Track, do not ripup the fixeds TrackSegments.
    - Bug: In NegociateWindow, the NegociateOverlapCost callback must account
        fixed segments as hard obstacles (thus setting the "infinite" cost flag).
    - Change: In TrackSegment::makeDogLeg(), reset the ripup count of the broken
        TrackSegment.
    - Change: Much more simple attractor computation in TrackSegmentCost.
        Update the TrackSegmentCost systematically before processing the RoutingEvent.
        Todo: a transparent invalidation/revalidation mechanism.
    - New: Separate RoutingEvent process into multiple stages. One "Negociation"
        stage during which ripup is enabled and one "Packing" stage to see if an
        unrouted Segment could, in fact be inserted (due to the ripup of other
        competitors).
    - Bug: A RoutingEvent must be forked only once at a time. Meaning that there
        can be only one active RoutingEvent (in the queue) at a time. To check,
        from a processed RoutingEvent if there is no already active fork, get
        the active RoutingEvent through the TrackSegment DataNegociate attribute.
    - Change: A side effect of the dogLeg is that the "original" part of a
        TrackSegment must be re-affected to the "lowest" (most congested) of it's
        remaining GCells. But this lower could be outside of current RoutingSet
        (not routed yet). This leads to a TrackSegment already routed when
        processing the RoutingSet of which the new owner is part of.
          Change the Bug message into an Info one, as it's not a bug, it's a
        feature...
    - New: Implementation of all the features neededs to "move Up" a TrackSegment
        during the negociation stage. This include :
        1. - TrackSegment::canMoveUp() -> proxy to AutoSegment::canMoveUp(true).
        2. - TrackSegment::moveUp().
        3. - AutoSegment::canMoveUp(bool propagate)
        4. - AutoSegment::moveUp(bool propagate)
        5. - AutoSegment::changeDepth(unsigned int depth,bool propagate).
        6. - AutoSegment::_changeDepth(unsigned int depth).
        7. - GCell::hasFreeTrack(unsigned int depth).
           The "propagate" flag tells if the "move Up" must be applied to all the
        aligneds AutoSegments or only to the current one. "changeDepth()" is splitted
        into two function, the overall one (that may do the loop over all aligneds)
        and the atomic one that do the work on one AutoSegment.
    - Bug: In LayerAssign, when an AutoSegment is moved up, invalidate it.
    - Change: In LayerAssign, when creating new AutoSegment to fill the layers gaps,
        put them in reasonable initial positions (guesseds from the AutoSegment
        original extremities).
    - Bug: In AutoHorizontal & AutoVertical, for dog leg creation, when the broken
        AutoSegment is Local, do not put it on the GCell side opposite to the break
        but in the middle of the original AutoSegment.
    - Change : in RoutingEvent::modifyTopology(), first try to move up a Segment and
        break it only in second choice.
    - New: Special case configuration post-processing. Make preventive dog leg when
        a fixed METAL2 terminal is connected to a global perpandicular with little
        slack. That is, a tight alignment of METAL2 terminals.
    - Bug: In TrackSegmentCost, in the attractor computation again, one step backward,
        we need to distinguish between left and right attractors, if there is exactly
        the same number of attractors in each direction then do not take it into
        account.
    - Bug: In AutoSegment::changeDepth(), invalidate the AutoSegment *before* changing
        the layer (apply to the AutoSegment iself and any of it's changed perpandicular).
        Re-canonize immediatly, as for the dogleg creation, so the newly created
        TrackSegment can be attached to the right canonical. This is due to the fact
        that TrackSegments are created *before* the Session is revalidated.
          The correct sequence for Net's topoligical modification is :
        1. - Invalidate whatever segment is about to be modificated, along with any
             neighboring ones.
        2. - Do the modification.
        3. - Re-canonize all invalidateds segments.
        4. - Do any additionnal processing.
        5. - Revalidate/close the session.
    - Bug: In TrackSegmentCost::update(), clear the previous attractor vector before
        computing a new one.
    - Change: In RoutingEvent::process() Track cost computation, call consolidate()
        which enable the perpandicular overlap cost to be taken into account.
    - New: In RoutingEvent, the optimalAxis interval to sets the reference calculation
        for axis weight. Currently used only by the selfRelax feature to limit the
        displacement of the dogleg inside the original track segment span.

 _____________________________________________________________________________

        
  * ./coriolis/src/unicorn :
    - Change: Do not uses QGtkStyle if Qt version is below 4.5.0.

 _____________________________________________________________________________


  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: In NetConstraints, changed constraints propagation mechanism, as a
        drawback was put into evidence by the "desalignate()" procedure.
    - Bug: In RoutingEvent::getAxisWeight(), inversion in the weight computation,
        when the left weight is greater compute distance to interval min bound,
        and when the right weight is greater calculate distance to interval max bound.
    - Bug: In RoutingEvent, the local "relax(TrackSegment*,Track,begin,end,...) was
        not returning false in failure cases.
    - Bug: In RoutingEvent relax() local function take account of the correct left/right
        axis weight (double bug syndrom).
    - New: In RoutingEvent::modifyTopology() More smart ripup history exploration,
        explore the history until 3 dislodgers have been found or 300 events have been
        searcheds.
    - Change: In GCell::addTrackSegment(), separate the RoutingEvent rescheduling
        part and put it in a TrackSegment::reschedule() method. Allows a more
        flexible case handling (notably in dog legs creation).
    - Change: In all ::makeDogLeg() methods, suppress the "from source or target"
        detachment option. As we do not know on which side is the associated canonical
        AutoSegment, we cannot guarantee that the original TrackSegment will be
        on the wanted side. Now always detach the target AutoContact.
    - Bug: In GCell::addTrackSegment(), when re-computing the owning GCell of an
        already created TrackSegment, the lowest GCell may change even if the order
        doesn't. Keep the original GCell in case of unchanged order (avoid faulty
        swapTrack() in makeDogLeg()).
    - New: Implementation of the "double dogleg case" in the RoutingEvent::relax()
        local function.
    - Change: Now only one dogleg at a time is supported. Must be reset between
        two doglegs during the same session.
    - Change: In Session & KiteEngine, Segment* lookup now try to find the canonical
        the Segment* is not associated to a canonical AutoSegment*. New convenience
        function to lookup from an AutoSegment* (not only the base Hurricane::Segment*).
    - Change: Suppress the HollowTrackSegment subtype. It was used only to performs
        calls to lower_bound, but we can trick the lower_bound template to directly
        uses the "position" value (trough a modification of the comparison functor).
          As a consequence, TrackSegment no longer have devived classes so we can
        remove all virtuals functions.
    - New: In Track, in parallel to the TrackSegments, we introduces TrackMarkers.
        For now, there only one kind of TrackMarker : those signaling the presence
        of a potential RoutingPad access point. Note that we create exactly one
        marker by RoutingPad, and it's hooked in all the Tracks accessible from
        the RoutingPad. The Markers are took into account in the Track cost function.
           Un-virtualisze all Track methods, as this class do not have any derived.
    - Bug: Add a "slackened" state flag to prevent infinite slakening recursions.
    - Bug: Prevent local TrackSegment to be "dog-legged" more than once, either by
        source or by target (because of local segment's ability to reverse source
        and target, the flags are not meaningful).
    - Bug: Always perform a "canDogLegAt()" before actually calling "makeDogLeg()".

 _____________________________________________________________________________


  * ./hurricane/src/hurricane :
    - Change: In Technology::getViaBetween(Layer*,Layer*) if the two layers
        are identicals, return the layer instead of NULL (mostly for mono-
        metallic VIAs).
  * ./hurricane/src/hviewer :
    - Bug: In CellWidget::redrawSelection(), correct calculation of the
        selected Instances abutment box. We must apply the occurrence path
        transformation to the instance transformation and not the other way
        around.
    - Bug: In SelectorLess(), Instance must be *inferior* to Components as
        they are drawed after in CellWidget::redrawSelection().

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Important: this version passes the n°2 test circuit "AMD 2901 16 bits".
        Svn version: 827.
    - Change: Complete rewrite of the RoutingEvent::process() mechanic. See
        The Kite documentation for a complete description of this extensive
        change (30% less source code).
    - Change: in TrackSegment::canDogLeg(), when creating a dogleg on a local
        TrackSegment attached to exactly one Terminal AutoContact, sets the
        dogleg directly above the AutoContact. We assumes that if a dogleg is
        needed near a terminal is must "go up" as quickly as possible.
    - Bug: In Track::SegmentCompare() : compare according to "canonical"
        positions (i.e. the whole agglomerated meta-segment) instead of only
        the canonical representant.
    - Bug: In RoutingEvent::modifyTopology() : completly wrong dislodger
        computation (big mess with duplicated & obsoleted code).
    - Bug: In RoutingEvent.State::relax(), when a double dogleg is created,
        TrackSegment inserteds in Track could be swapped meanwhile the two
        original bits have to be inserteds in the original Track. The Track
        insertion must occurs only after source & target doglegs have been
        createds. The criterion being that the TrackSegment owning GCell is
        lower than the current (Session) and the Track is not sets.
    - What? : In TrackSegment, the lock seems to be unused.
    - Bug: In Session::_addRemoveEvent(), forgot to place a sorting event
        on the impacted Track. This was leading to index incoherency inside
        a Track.
          May explain why kite core dump while compiled with gcc of version
        above 4.1.x.
    - Bug: In AutoHorizontal::_canSlacken() and it's AutoVertical counterpart,
        the lengthes of the constraints interval where shrunk by the GCell's
        "_topRightShrink" thus never reaching the total of 10 free tracks.
          This was leading to unnededs slackening, generating "strange non-
        optimal shapes".
          This bug is duplicated in the AutoHorizontal::_slacken() method.
    - Bug: In AutoHorizontal::makeDogLeg() and it's AutoVertical counterpart,
        when breaking a global AutoSegment on either it's source or target
        GCell, one fragment changes from "Global" to "Local" which may cause
        problems for source/target AutoContact topologies. In that case, force
        H/V alignement on AutoContact which becames connecteds to a Local
        AutoSegment.
    - Change: Sets two different ripup limits, one for global AutoSegments and
        the other for local AutoSegments.
    - Change: In RoutingEvent, split the State class in two. A new class is
        created: Manipulator which holds all the methods needed to insert, ripup
        or topologically modify a TrackSegment.
    - Bug: In Track::checkOverlap, when multiple segments of a same Net are
        contiguous, the overlap with the next (of another Net) was not checked
        correctly.
    - Change/Bug: In RoutingEvent, the State::addAction() is now called only from
        inside State or Manipulator (better encapsulation), and ensure correct
        TrackSegment re-ordering after a ripup.
    - Bug: In KatabaticEngine::_saveNet(), bad computation of the Layer of the
        shrinked VIA remaining after a zero-length AutoSegment deletion.
          The layer set connected to a zero-length AutoSegment is now handled
        by a separate local function "isTopAndBottomConnected()".
          The zero-length deletion is now progessive (re-check after each
        deletion).
          Don't forget to account for anchors on Contact.

 _____________________________________________________________________________


  * In All top level CMakeList :
    - Adds a CMAKE_POLICY CMP0003 has we've upgraded to cmake 2.6.

  * ./hurricane/src/hurricane :
    - Bug: In Interval, the merge method wasn't working if the "other"
        Interval was empty (doing merge) instead of nothing. This was
        a non-symetrical behavior.

  * ./hurricane/src/hviewer :
    - New: In CellViewer, adds an accessor to the ControlerWidget widget.
    - Bug: In CellViewer::imageDisplay(), when using GtkStyle the file
        dialog seems to core dump if the directory is not specified.
        Now systematically starts with the current working directory.

  * ./coriolis/src/crlcore :
    - New: In RoutingGauge, add a convenience function getLayerDirection(const Layer*).

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - New: In RoutingEvent, new RoutingEvent event level managment. The level
        is now always equal to zero, that is the initial ordering is never
        changed. This the concept of "static ordering". The only exception
        beeing that in some cases we want to re-schedule "immediately" a
        RoutingEvent (to grab the previously freed space) in that case, we
        temporarily sets the event level to one.
    - Bug: In Manipulator::relax() when the original TrackSegment goes into
        a non-already routed GCell set, disable the associated RoutingEvent
        as we cannot delete it (referenced through pointer in the stack and
        the history).
    - New: In AutoContact, add restoreHConnexity() & restoreVConnexity() to
        that can split an AutoContact if a disconnected configuration has
        appeared (implementation in JunctionBox). That case was occuring
        on the local part of newly created dogleg.
    - Change: In RoutingEvent::State::manageMaximumRipup(), try to desalignate
        the segment before doing anything else.
    - Bug: In AutoHorizontal::makeDogLeg() & AutoVertical::makeDogLeg(),
        when a *local* AutoSegment is splitted, both resulting fragments
        remains locals.
    - Change: In AutoContact, restoreVConnexity() & restoreHConnexity() where
        "splitting" global AutoSegments to avoid creation of too strong
        constraints and the "merge effect" (two independ AutoSegments
        fusionning).
          Now it can also maintain local AutoSegments separateds (on demand).
    - New: In AutoContact, restoreConnexity() a front-end to the H/V functions
        that ensure that the connexity is kept.
    - Change: In LayerAssign, ::splitAutoContact is now using the
        restoreXConnexity() functions instead of it's own local implementation.
    - Change: In LoadGrByNet, _GCell_1G_xL1() in GLOBAL_VERTICAL_END case the
        global vertical AutoSegment is now put at the "center" of all horizontal
        connecting to terminals instead of the "west", with all terminals
        chaineds together on the "east".
    - New: In AutoSegment, new way of making dog leg in local AutoSegments,
        taking in account aligneds and an Interval from which to move out.
    - Change: In TrackSegment, common post-treatment after a dog leg creation
        has been moved into a "_postDogLeg()" method. Creates new TrackSegments
        and update GCell ownership.
    - Change: In RoutingEvent, the Manipulator::relax() method now uses the
        new dogleg creation for local TrackSegments.
    - Change: In RoutingEvent, Manipulator::insertInTrack() when riping up
        "others perpandicular" for shrinkage, check if their intrinsic
        priority is superior to the one of the to be inserted segment so
        they are to be re-inserted before it. If not, temporarily increase
        their event level.
    - Bug: In Track, the getIBound() method was not finding the right lower
        bound index. The criterion is not only the beginning position, but
        also the first of segment of an overlapping set of the same net.
    - New: In AutoSegment::JunctionBox(), complete re-implementation of
        the former LayerAssign::splitAutoContact(). Put into the right place
        (that is JunctionBox) and full reimplenent as the JunctionBox::split()
        method. Comes with a thorough documentation.
          Along with some adjutments in H/V alignate, seems to solve all remaining 
        bugs that where showing in the shifter.
    - Bug: In JunctionBox::canVDesalignate() & canHDesalignate() we cannot
        desalignate H/V contact, even if they have a global stem in the right
        direction if they have more than 2 segments in the perpandicular
        direction to the desalignment (makes a "four side box").

 _____________________________________________________________________________


  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - *VERY IMPORTANT MILESTONE*: this version is correctly routing the three
        first routing benches: addacu, amd2901 & shifter. There still are
        non-deterministic effects sometimes leading to failure.
          The main configuration parameters are:
        - Knik Edge Capacity Percent: 65%
        - Kite Saturate Ratio:        75%
        - Kite Expand Ratio:          70%
        - Kite Ripup Cost:            3
        - Kite Ripup Limits:          10 / 10
    - Change: In GCellConfiguration::_GCell_1G_xL1, in vertical cases, no
        longer forces horizontal alignment on the horizontal terminal wires.
    - Bug: In RoutingEvent, State::manageMaximumRipup(), the event was not
        reschecheduled if the first desalignate was successful.
    - Change: Implementation of the "go outside GCell" mechanism. Allowed
        for local only for now (still respect the global routing).
        Currently it will lead to innacuracy in GCell's density.
    - Bug: In NetConstraints::propagateConstraints(), do not propagate
        restriction on target AutoContact that are *not* alignated in the
        propagating direction.
    - Bug:  In NetConstraints::propagateConstraints(), apply the constraints
        on source AutoContact if it's alignated in the propagation direction.
    - New: In AutoSegment/TrackSegment adds a new flag "allowOutsideGCell"
        allowing the Segment to go outside it's constraint box, thus preventing
        AutoSegment::toConstraintAxis() displacing a segment and creating
        incoherencies at Kite level.
    - Bug: In AutoHorizontal/AutoVertical <>::slacken(), forgot to restore
        connexity of the AutoContact from which the Segment is slackened.
    - Change: In AutoSegment::desalignate(), desalignate all Contacts not only
        the "inners" ones (thoses who are both source & target).
    - Bug: In RoutingEvent, the _hasAxisHint was not set up when an axis hint
        was positionned, disabling the uses of the hint.
    - Change: In Katabatic::Session, the canonization and Contact splitting
        is now integrated inside the Session and should be managed much more
        transparently. A new "intermediary" Session function has been added:
        Session::revalidateTopology() when canonization/splitting is needed
        before/without doing a full revalidate (mostly for Kite Session
        aware functions wrapped around AutoSegment manipulation methods).
          There is potential for optimization here, and maybe some tricky
        bugs still lurking around.
    - Bug: In AutoContact::JunctionBox::split(), must transmit H/V alignement
        constraint from the original Contact to the "secondary" (newly created
        split part).
    - Bug: In RoutingEvent::revalidate(), when trying to go outside GCell we
        should compensate for the _topLeftShrink of the GCell otherwise we
        will never expand to the "right". In fact it's the constraints which
        is actually shrinked, not the GCell (for a later investigation).
    - Bug: In KiteEngine::_link(), rejecting NULL TrackSegment registration
        attempts. Display a Bug message.        
    - Change: In AutoSegment::getCanonical(), as supporting AutoContact could
        go outside their GCell, we can have "inversion" of position on
        global AutoSegment. Now check for min/max inversion.
    - Change: In Manipulator::makeDogLeg(Interval), activate the axis hint not
        only on the dogleg but also on the parallel one (stick close to the
        original axis).
    - Bug: In AutoHorizontal/AutoVertical::makeDogLeg() activate the split
        on the source/target restoreUConnexity() to avoid bad canonization.
    - Change: In TrackSegment::makeDogLeg() now calls _postDogLeg() to have
        an uniform behavior.
    - Bug: In TrackSegment::_postDogLeg(), propagate the slacken flag to
        the created TrackSegment. To avoid loops of slacken/dogleg/slacken.
    - New: In AutoHorizontal, adds a new local function "slacken(AutoContact*)"
        for slackening Segments anchoreds on VIA12, that is METAL1 terminals.
        In that case separate completly the AutoContact instead of just making
        a dogleg. No needs to implement it's AutoVertical conterpart as METAL3
        Segment are never anchoreds on VIA12.
    - Change: In RoutingEvent::getAxisWeight(), always uses the axis hint when
        the weights are equals. Make the segment stick close to it's initial
        position.
    - Change: In Manipulator::insertInTrack(), if the insertion is successful
        move the Segment on the target track (but do not insert it).
          May be very *DANGEROUS*. Have to check if it's compatible with the
        algorithm general assumption. For now, now error can be seen which is
        a good hint that it's compatible.
    - Change: In AutoSegment::canGoOutsideGCell(), be much less restrictive,
        allow all local to go outside. Still strictly comply with the global
        routing.
    - Bug/Change: In Manipulator::relax(), the target dogleg point was not
        correctly found (or not found at all). Also change of policy: break
        at closest point enclosing the conflict interval instead of in the
        GCell of the lowest density.
          The source dogleg point was also faulty.
    - Bug: In AutoSegment::canGoOutsideGCell(), do not allow terminal segment
        to go outside their GCell, they may disconnect from their terminals.
    - Bug: In Manipulator::goOutsideGCell(), do not return true if the event
        has already been flagged as "can go outside GCell". Return "true"
        only when the states changes: it's truly a topological modification.
    - Change: In State::manageMaximumRipup(), replace the linear exploration
        of track [min:max] by a spiral exploration starting with the current
        position of the segment.
    - Bug: In Manipulator::shrinkToTrack(), bounding perpandiculars segments
        where systematically pushed to the left. Now they are attracted by
        the center of the minimal span interval.
    - Bug: In Manipulator::relax(Interval), when setting the axis of the newly
        created perpandicular segment (the dogleg), if the dogleg is on the
        source/target GCell don't go outside of the Segment extension.
          When the breaking GCell is not an extremity, the axis is forced
        to the more suited side of the GCell.
          This bug was causing overlaps.
    - Change: In Manipulator::relax(), complete rewrite of the loop detecting
        the conflict area, due to too many bugs found in the older one.
    - Bug: In JunctionBox::split(), call splitTerminal() on anchored contacts
        only if the layer span is greater than 1 (more than 2 layers).
        Otherwise: infinite loop...
    - Bug/Change: In RoutingEvent::_processNegociate() & State::doActions(),
        separate the perpandicular ripup state so we can check if it has been
        successful. If not, do not try to insert the segment, go straight to
        maximum ripup instead. As a consequence, State::doActions() should be
        made usable more than once (implement a flushing procedure).
    - Bug/Change: In TrackSegment::makeDogLeg() / Manipulator::relax(Interval),
        As we no longer expand the Interval in relax() of "one track on each
        side" (5 lambdas), we have to do it in TrackSegment::makeDogLeg() so
        the dogleg have a suitable starting position. The Algorithm is very
        sensible about that initial position.
    - Bug: In TrackSegment::makeDogLeg(), when making a double dogleg force
        track insertion of the new parallel segment. As the two ends are the
        remains of the original segment they must be inserteds.
    - Change: In TrackSegment, new mechanism allowing one dog leg by RoutingSet
        on global segment. This theoretically allow one dog leg on each density
        borderline between two area of differing densities.

 _____________________________________________________________________________


  * ./coriolis/src/unicorn :
    - Change: In CgtMain::main(), adds a new options to specify the Global
        router edge dnsity percentage (65% per default).
    - Change: In CgtMain::main(), when running in text mode/single tool run,
        return 0 if the tool was successful and 1 otherwise (abide by the
        standard shell return code).

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Bug: In the various "canDogLeg()" methods, return false when applied to
        a Fixed Segment.
    - Bug: In the various Manipulator segment changing methods, always reject
        fixed segments.
    - Bug: As a double security, also disable ripping of fixed segments in
        SegmentAction::doAction().
    - Bug: In AutoContact::getNativeConstraintBox(), when the AutoContact was
        fixed, we were returning box from the center of the current position.
          This is completly wrong (don't event remember why do that). Now,
        perform a full computation if it's anchored or the GCell bounding box
        otherwise.
    - Bug: In TrackSegment::canDogLegAt(GCell*), compare with the right source/
        target GCell. Do not uses the AutoSegment base as if there are more than
        one collapsed the source/target won't be correct and allow dogleg where
        there shouldn't.
    - Bug: In TrackSegment::slacken(), more selective triggering of the "slackened"
        flag. Only raising it on segments newly created, not all invalidateds.
    - Bug: In AutoSegment::slacken(), in propagate mode, must gather the collapseds
        before any slackening happens because it breaks alignments.
    - Bug: In JunctionBox::canGoOutside(), return false when the contact *is*
        anchored. Not the other way around. Was causing severe restriction.
    - Bug: In AutoHorizontal/AutoVertical::makeDogLeg(), when breaking a terminal
        segment the "terminal" flag was not correctly migrated to either source or
        target segment.
    - Change: In State::manageMaximumRipup(), when reaching a Reset Ripup Count
        of 5, no longer search for a conflict but try to move up the segment.
    - Bug: In Manipulator::relax(), and once again! In the "two dogleg" case,
        the attraction and axis of the doglegs where inverteds, making it hard
        to solve for the router.
    - Bug: In Manipulator::relax(), grrr. When the dogleg count is zero, return
        false, and *not* true. This was causing overlaps to appears.
    - Bug: In JunctionBox::restoreVConnexity() / restoreHConnexity(), if there is
        only one global in the to be restored direction, do nothing (instead of
        forcing perpandicular alignment). Example: for restoreVConnexity(), if
        there is only one global vertical, do nothing instead of forcing horizontal
        alignment.
          This was causing overlap and incoherency in the TrackSegment LUT by
        fusionning two TrackSegment on one Segment.
    - Change: Big rework of the GCellRoutingSet expand mechanism to avoid creating
        artificial break in area of same density. Work now partly "globally" and
        partly "by layer" density comparison.
          The size & number of the GCellRoutingSets have a great influence on the
        runtime (x3) and size (x1.5). So there should be further analysis.
          I noted a strange effect with the floatDifference() function. When it's
        used directly in a return instruction, the behavior is wrong. I must pass
        by an intermediate int variable to get a correct result (?).
    - Change: In Manipulator::relax(Interval), adjustments in the policy finding
        the minimal & maximal GCell containing the dog leg point.
        1. - Pushing the break points as far as possible, gives worst result.
        2. - We just displace of one GCell if the break point is exactly on the
             GCell side (to avoid the "unplaceable dogleg" problem).
    - Change: In GCellRoutingSet::expand(), agglomerate a ring of cells around
        the routing set, regardless of their density.
    - Change: In Manipulator::minimize(), the computation of the segment minimal
        size was faulty. Now treat correctly case where the segment could be
        punctual.
    - Change: In TrackSegment::makeDogLeg() various flavors, instead of "going up"
        for the dogleg metal "go down", except for METAL2.
    - In TrackSegment::canDogLegAt(GCell*), adds one more verification: that the
        requested dogleg GCell is inside the span for that segment. As perpandiculars
        segments are allowed to go outside their Cell range, one segment can also
        grow outside and so be requested to be broken at that point. Now we forbid
        this. One effect was allowing multiple breaks in at source/target points.
    - Change: In TrackSegment::_postDogLeg(), systematically allow dogleg segments
        to go outside the GCell.
    - Change: In KiteEngine, adds a "ToolSuccess" flag that return true on tool
        successfullness.
    - Change: To attenuate the GCellRoutingSet border effect change the aggregation
        method to a fixed delta threshold of 0.2.
          IMPORTANT: Increasing the thresold increase the area of a GCellRoutingSet
        which in turn increase the number of TrackSegments to handle at a time.
        And due to the fact that they are put in a continuously sorted vector, this
        induce a noticeable slowdown. Have to switch to a set<>.
    - Bug/Change: Disable the "go outside GCell" mechanism. It was not done according
        to the data-base coherency rules and was generating random overlaps.
          Nevertheless, this possibility was clearly a factor of convergence, so
        it will be reimplemented, but this time the AutoContacts/AutoSegments will
        be changed of GCells to keep the coherency (but much complicated :-(( ).

 _____________________________________________________________________________

   
  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: In RoutingEvent/RoutingEventQueue, replace the vector based event
        queue by a set based event queue. This implies that the sorting keys do
        not changes during set operations. To ensure that, we create a cached
        key inside the RoutingEvent which is modified only when the RoutingEvent
        is outside the set. Another point is that as key can be equal for different
        events, as a last resort we uses pointer comparison.
          Note: In the GNU STL implementation of the set<>, if a key already
        exits when inserting, the element is *not* inserted. The previous one
        remains in the set.
          This set<> based implementation leads to a 41% time reduction.
    - Change: In KiteEngine, more explicit API to set/access the various ripup
        limits (global & local).
          Note: ripup limits greater than 10 do not seems to affect the quality
        of the resulting solution (nor the runtime either). Settings differents
        limits has no visible effect either.

 _____________________________________________________________________________

   
  * ./hurricane/src/hurricane :
    - New: In DbU, create a "onCustomGrid(point,step,round)" method to place
        a point on an arbitrary grid. That different from the real or symbolic
        ones.
    - Bug: In DbU, all the snap function where bugged when passed negatives
        coordinates.
    - New: In DbU, new conversion function, DbU::getPhysical() to translate into
        physical (metric) system.
    - New: In CellWidget, separate the "Snap Grid" (real or symbolic) from the
        cursor position. The cursor position will now be displayed in half-lambda
        (symbolic mode) or founder grid unit (real mode).
          That can be changed trough the CellWidget::setCursorStep(DbU::Unit)
        method.
    - New: In CellViewer/ControllerWidget, the CTRL+I keys toggle the visibility
        of the Controller instead of systematically showing it.
    - Bug: In DbU, do not multiply by _physicalPerGrid in getGrid(), was causing
        all coordinates to appear as zero...
    - Change: In CellWidget & Command, rewrite of the active command mechanism.
        Now a command is associated to one CellWidget exactly, the active flag
        was shared among all CellWidget which was an error (do not show unless
        we start to multithread).
    - Bug: Correct event passing through all registered commands.
    - New: In SelectCommand/SelectionPopup/SelectionPopupModel now there are three
        selection mode:
          Mode 0: Select all Component under point.
          Mode 1: Select whole nets whose at least one component is under point.
          Mode 2: Same as 1, but hide all cluttering "*nymous*" nets.
          Rotation through the mode is done by pressing repeadedly the 'N' key.
          The various select modes are implemented through "sub" Collections.
    - New: In Occurrence, new method getBoundingBox(const BasicLayer*). Returns
        a different value from getBoundingBox() only if the Entity is a Component.
          Long awaited by the Solstice extractor.
    - Change: In ExtensionSlice, keep track of the created ExtensionSlice by name
        to avoid consuming a new bit each time an ExtensionGo slice is deallocated/
        re-allocated (happens often in Solstice/Equinox).
    - Backtrack: In SelectCommand, do not uses boost::regex as their library have
        not been compiled for 32 bits support under OSX Snow Leopard.
    - Bug: In Command.h, include and uses std::string has in some rare case no one
        has done it before.
    - Change: In RulerCommand, allow the ruler to be on the cursor grid, not the
        snap grid (usesul for the real mode where the snap grid is much bigger
        than the cursor grid).


  * ./coriolis/src/knik :
    - Bug: In SaveSolution, forgotten close() on file stream resulting in truncated
        ".kgr" file, whose in turn makes the final router to fail (incomplete rings).
    - Change: In Graph, augment the FLUTE_LIMIT to 1000 to fit the new Flute
        capabilities.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - New: Ability to change an AutoSegment/TrackSegment of GCell, that is
        changing the global routing.
    - Bug: In RoutingEventQueue::repushInvalidateds(), we where always pushing
        the element of index "1" instead of index "i", this bug was very gross,
        yet not showing until late.
    - Change: In RoutingEvent, slight modification in the priority computation.
        Honor the (L+1)*(H+1) heuristic. The H is the static span, not evolving
        while tracks are useds.
    - Change: In Manipulator::minimize(), if the hole is bigger (on one bound)
        than the span, restrict to the span.
    - Bug: In State::manageMaximumRipup(), the successfulness of "minimize()" was
        ignored, thus making the next topological modification anyway.
    - Change/Bug: In Track::getOverlapCost(), do not account terminal markers from
        the same net.
    - Bug: In Track::getOverlapCost(), compute the markers cost, even if the
        insert interval is *after* the last inserted TrackSegment of the Track.
    - Change: In RoutingEvent::process(), the mode is no longer a global state
        supplied by the NegociateWindow but instead a member of each RoutingEvent.
        (the mode).
          Must distinguish between two packing modes, packing during negociation
        and packing as post process. The difference being that if the packing
        fail during negociation, the event is rescheduled.
    - Bug: In Manipulator::shrinkToTrack(), miscalculation of the mimimun span
        interval of the segment (shrunkFree). We were using the perpandicular
        constraints instead of the parallels!
          Need to introduce a new method AutoSegment::getMinSpanU() to compute
        the minimum span.
    - Bug: In Manipulator::relax(), not only sets the dogleg segment axis, but
        also the associated event axis hint. This is because the hint is
        initialised from the axis of the dogleg before it has been put in
        proper position.
    - Change: In TrackCost::consolidate(), if no hard overlap, substract the
        "same net sharing" cost from the delta cost to promote more segment
        sharing.
    - Change: In RoutingEvent::getAxisWeight(), disable the left/right weight,
        uses only the axis hint.
    - Cleanup: In RoutingEvent, removing deprecated "Go Outside GCell" and
        "Insert State" features.
    - Change: In TrackCost::operator<(), make the ripup count criterion superior
        to the hard/soft overlap criterion. Infinite still the more prioritary.
    - Bug: In Manipulator::insertInTrack(), the axis hints for shrink right
        and shrink left were inverted.
    - Change: In RoutingEvent::_processNegociate(), revert to the simple
        policy of only trying to insert in the best candidate Track.
    - Change: In NegociateWindow::_negociate(), disable the post packing
        stage. No more needed now as the routing quality as increased.
    - Change: In TrackSegment & RoutingEvent, adds a "isSlackenDogLeg" 
        accessor tell if the TrackSegment is one created for slackening.
        That is, the perpandicular part of the dogleg. It's true when
        the slacken flag is true and the dogleg level greater than zero.
          Being a slacken dog leg will prevent the axis hint to change. The
        dogleg must stay close to it's initial position.
    - Change: In RoutingEvent/Manipulator::makeDogLeg(Interval), when
        making a dogleg on a terminal connected TrackSegment, for the
        dogleg to stay on the Terminal AutoContact. This a way of "Escaping
        constraints as soon as possible". Uses the "forceToHint" flag.
          This is somewhat redundant with the previous change. Should have to
        rethink thoses two as a whole.
    - Bug: In TrackSegment::swapTrack(), not only swap Tracks but also
        Events, if any. The consequence was to render unroutable some of
        the exchanged TrackSegment: they were lacking an associated event.
    - Bug: In AutoSegment::canMoveUp(), allow global segment to be moved
        up regardless of the source/target AutoContact topologies.
    - New: In RoutingEvent/GraphicKiteEngine, add support for a callback
        to call periodically to in order to implement weak multi-threading.
          Used to allow progressive refresh of the CellWidget and router
        interrupt through CTRL+C.
    - Change: In TrackSegment, prevent move up of local Segment that are
        part of a dogleg. Moving up local dogleg could lead to infinite/
        recursive breaking.
    - Change: In Manipulator::relax(Interval), do not relax if the Interval
        contains a terminal (segment is M2 and contains M1 terminal).
    - Change: In RoutingEvent, adds a counter of proccesseds events.
    - New: In TrackSegment/AutoSegment add a new "canPivotUp()" method,
        slightly different from "canMoveUp()". The difference being that
        "pivoting up" do not need the creation of any intermediary segment.
          For example a M2 connected to M3's can pivot up to M4. But a M3
        connected to M2's cannot pivot up to M4 (needs to create intermediary
        M3).
    - Change: In AutoContact, SegmentEnd sort the global & local ends with
        SegmentCanonical() in order to restoreHConnexity() to separate the
        segments in the same order and stay deterministic.
    - New: In AutoSegment, to finally solve the determinism problem add an
        unique index (the "Id") to all AutoSegment. Makes all sort functor
        to uses it as a last resort criterion.
          AutoSegment are created in deterministic order from the global
        routing :
          1. - Sort Nets by name.
          2. - For each name, find the lowest index GCell containing a
               starting stem.
          3. - From the starting stem, explore all the Net's GCell. GCells
               are stacked in the fork list in order EAST, WEST, NORTH, SOUTH.
          4. - Each GCell is build deterministically.
          In TrackSegment, CompareByPosition now uses Id instead of net name
        for fastest access.
    - Change: Switch from "floatRound()" & "ceil()" to "rintf()" to perform
        rounding. The rounding was having problems (that I don't clearly
        understand before).
    - Change: In LoadGrByNet::singleGCell(), ensure that there is exactly two
        RoutingPad in the GCell.

 _____________________________________________________________________________


  * ./hurricane/src/hviewer :
    - Change: In RulerCommand, key & mouse now mimic Cadence behavior.

 _____________________________________________________________________________


  * IT IS FUCKING WORKING! At least on a MIPS pipeline at 55% density.
  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: In RoutingEvent, fusion of Manipulator::modifyTopology() and
        State::manageMaximumRipup() into one State::slackenTopology().
          Replace the resetRipupCount (stored in the TrackSegment) by a succession
        of defined states (stored in DataNegociate), each state associated
        to an increased step of slackening. State changes occurs when the
        maximum ripup count is reached for a TrackSegment.
          Global & Local TrackSegments have a sligthly differend way of
        slackening, showing in the succession of states.
          States for local segments :
            a. - Desalignate
            b. - Minimize
            c. - DogLeg
            d. - Slacken
            e. - ConflictSolve2
            f. - MoveUp
            g. - MaximumSlack
            h. - Unimplemented
          States for global segments :
            a. - Desalignate
            b. - Slacken
            c. - ConflictSolve1
            d. - MoveUp
            e. - MaximumSlack
            f. - Unimplemented
          The state is the *next* slackening state. To not pass directly from
        "MoveUp" to "Unimplemented", which would stop the exploration, there
        is an intermediate state "MaximumSlack".
          If a sate "transition" fails, calls the "ripupPerpandiculars" manipulator
        (until the Unimplemeted stage is reached). That calls seems to induce a
        neat slowdow. Has to investigate more thorougly.
    - Change: In all files, start to remove printing of the base() segment
        pointer, the Id is now sufficent to serve as marker through the log/
        debug files.
    - Bug: In Manipulator::relax(Interval), when there is 2 dogleg to make,
        do not create a Session::insertEvent if the original framgment of
        the first dogleg is outside the active GCell routing set.
          That was causing TrackSegment to be routed/inserted too early.
    - Change: In GCellConfiguration::construct(), globals segments that happens
        to be diretcly anchoreds on terminal contacts are now flagged as
        terminals. In other words a TrackSegment can be *both* Global and
        Terminal.
          Has to modify various TrackSegment slackening methods to take this
        change into account.
    - Change/Bug: In JunctionBox::split(), when separating from a Terminal
        AutoContact, we must update the Z Span to withdraw the layer of that
        Terminal. To simplify, we make a recursive call on the detached
        AutoContact.
    - Bug: In AutoHorizontal/AutoVertical::slacken() method, correctly slacken
        from Terminals that are *not* in METAL1 (side effect of the Global+
        Terminal change).
    - New: Ability to stop the router after a given number of event. Useful
        to automatically stop when there is an undetected loop.
    - Bug: In AutoSegment::canPivotUp(), bad depth computation allowing non-
        pivotable segments to go up. This was causing event loops.
    - Change: In RoutingEvent, remove support for left/right axis weight.
        The axis hint method is definitely giving better results.
    - Change: In DataNegociate/TrackSegmentCost, remove the resetRipupCount
        support, now more clearly handled through the DataNegociate
        SlackState (there's a loose matching between the SlackState enum
        values and the resetRipupCount).
    - Change/Bug: In RoutingEvent::revalidate, always re-compute pure constraints
        from the TrackSegment (no noticeable slowdown).
          When reverting to pure constraints, still took into account the
        perpandiculars constraints from TrackSegments of previous order,
        as they cannot be modified (riped up). This was causing overlaps
        when occuring in conjunstion with the "boundary problem".
          Disable the ripup of perpandiculars in this function if the
        constraint interval is too narrow. Instead make that functionality
        a Manipulator by itself: Manipulator::ripupPerpandiculars() then
        call it each time a slackenTopology transition fails.
    - New: In GCellRoutingSet/GCell, finally introduce a "border" capacity
        to solve the problem of the "left/right neighbor terminal unreachability".
    - New: In GCellRoutingSet::expand() adds a de-notching step to avoid almost
        enclosed GCell of lower order or thin strip of lower order GCell between
        higher order. Always the same "border smothing problem".
    - New: In Track, add the ability to ignore TrackSegment with an order greater
        or equal to the Session when finding free space. Used in conjunction with
        the "ignorePerpandiculars" mechanism.
    - Change/Bug: In RoutingEvent, new implementation of the "ignore perpandicular
        constraints" mechanism. New Manipulator::ripupOnPerpandiculars() which
        ripup TrackSegments from other Nets that are overlaping with the
        perpandiculars from the current Net that are still in Track (which is to
        say that they are from a lower order an must not be ripped off).
    - Change: In RoutingEvent/DataNegociate, allow more than one "SolveConflict1"
        state occur on a same TrackSegment. Currently we allow 2 of these.
          Need to introduce a "same state" counter in DataNegociate, accessible
        through getStateCount().
    - Change: In RoutingEvent/TrackCost, when computing costs of a global
        TrackSegment, avoid candidate Tracks that contains local TrackSegment in
        state LocalVsGlobals.
    - Bug: In AutoHorizontal/AutoVertical/::slacken(), coordinate inversion when
        calling restoreVConnexity/restoreHConnexity. It was corrected later by
        the toConstraintsAxis, but the initial position was non-optimal which was
        in turn leading the algorithm into dead-ends.
    - Change: In Manipulator::relax(Interval),  when relaxing a TrackSegment from
        a more prioritary order, "expand" the relaxing interval as much as possible.
        (put the break point nearest to the order borderline).
          For TrackSegment of current (or greater) order, still do a minimal
        break.
          Overriden by the full rewrite (see below).
    - Change: In TrackCost::operator<(), the hard overlap cost now takes precedence
        over the ripup count, avoid uneeded hard overlap ripup.
    - Change: In Manipulator::relax(Interval), once again a full and clean rewrite
        to manage all the new cases. Expansion policy changed, the the break part
        is extended to enclose as much as possible of the segment while staying
        *exactly* in the same order. Then choose the breaking GCell at the lowest
        density point.
          Allowing to create the break point in higher (less saturated) orders may
        lead to pseudo-unsolvable cases. That is when the parpandiculars are all
        routed and cannot be removed for two adjancent doglegs of different Nets.
          Solved later by the introduction of Manipulator::ripple().
    - Change: In Manipulator::insertInTrack(), when ripping up perpandicular of
        conflicting parallels (i.e. "segment3") remove only those whose constraints
        intersect the conflict zone.
    - Change: In State::slackenTopology(), now uses explictly named flags instead
        of booleans to configure the method. Add a new mode in which failure to
        modify do not cause a state transition. Needed by conflictSolve1 in case
        of failure.
    - New: In Manipulator::moveUp(), when a moveUp takes place force the ripup of
        all local in the former layer occupied by the segment. This ensure that
        the locals will make uses of the freed space (packing).
    - New: In AutoContact, as for the AutoSegment, introduce Ids. Needed for a very
        tricky debug.
    - Change: In RoutingEvent/State/Manipulator, unification & simplification of
        the various ripup perpandiculars methods. Suppression of the "ignore
        perpandicular".
    - Change: In Manipulator::insertInTrack(), new specific managment for the
        intrication problem. Intrication occurs when two segment are cross
        blocking themselves because there is only two perpandiculars free tracks
        left and we must swap those perpandiculars.
          Enhanced Manipulator::shrinkToTrack to take account thoses new cases.
    - Bug/Change: In GCell, getDensity()/hasFreeTrack() where not correctly
        computed leading to systematic allowance of "canMoveUp" and therefore
        saturation of the higher routing levels.
          Add support for extra penalty in density computation when a segment
        ends into a GCell instead of going through it (a way of taking fragmen-
        tation into account).
    - Change: In RoutingEvent, in State constructor, introduce a limit on the
        number of tracks than can be locked by local segment, blocking uses
        by global segment (and forcing them to go up). There is a limit for
        each layer, decreasing as we go up (the higher we are, the likely we
        wants globals segment to uses the tracks).
    - Change: In LoadGrByNet, systematically uses _GCell_rp_Access() to create
        AutoContacts attacheds to RoutingPad as it automtically create the
        appropriate fixed AutoSegment protection. This will be somewhat
        redundant with obstacle managment in the future.
          Makes all utilitarian methods of GCellConfiguration static, to use
        in SingleGCell.
    - Change: In GCell, increase the border width to 2 pitches to be coherent
        with the Manipulator::relax breaking theshold (2 pitches also).
    - New: In RoutingEvent/TrackSegment, Manipulator::ripple() specific manipulator
        to solve the problem of H/V constraints on dogleg of which perpandiculars
        are from lower order (cannot be ripped up) wich prevent the normal
        "ripupPerpandicular" mechanism to be effective.
          This manipulator ripup all parallels to the currently processed
        TrackSegment with axis hints shifted to left or right, this should free
        at least one track if it's possible at all.
          This mechanic is very crude and should be replaced later with something
        truly manganging the H/V graph constraint.
    - Bug: In Track::expandUsedInterval(), try to expand until we changes of Net's
        owner. If we stop at the first hole, we may discard a longer segment
        encompassing the hole between two smaller ones.
          This was affecting the Track::getOverlapCost() method and generating
        overlaps.
    - Change: In TrackSegment/AutoSegment, displace the "slackened" flag from
        TrackSegment into AutoSegment. This will allow a more fine tuning of
        the attribute. Previously, all invalidated AutoSegment after a slacken
        transformation where marked as slackened which is a bit too much.
          This lack of selectiveness was causing slackening to fail in some
        cases.
    - Change: In AutoHorizontal/AutoVertical::_makeDogLeg(), dogleg segment are
        marked as slackened.
    - Change: In AutoSegment::AutoSegment(), automatically setup the "Terminal"
        flag when creating the AutoSegment. Based on the "Terminal" flag of the
        AutoContact.
    - Change: In RoutingEvent/State::conflictSolve1(), rewrite of the procedure
        to allow full sweep of the candidates track then examination of the
        best candidates. Currently manage up to two other TrackSegment/Net
        overlap, that is, only one breakpoint. May be more if needed.
    - Change: In TrackSegment::moveUp(), if a TrackSegment is moved up reset
        it's state so it can be broken through conflictSolve1 again.
    - Change: In NegociateWindow::NeogociateOverlapCost(), change in the overlap
        calculation. If the obstacle fully enclose the insert interval, count
        the *whole* length of the obstacle. If it only intersect, count only
        the overlaping length. This allow to discriminate between long
        overlaping TrackSegment (generally global) and choose the shortest one.
    - Change: In RoutingEvent::processNegociate(), when a segment can no longer
        be ripped up, still check if there is a fully free track were it can be
        inserted before trying to slacken it.
    - Change: In RoutingEvent/TrackSegmentCost, the ripup count is an inapropriate
        name/conception. In fact we do not count the ripups but the number of times
        we have tried to negociate a TrackSegment (calls of _processNegociate).
          The "ripup count" thus is a measurement of how hard it is to insert a
        TrackSegment (more accurate as it leads to better results). It must be
        the times we call _processNegociate and not *only* when we actually have
        to negociate (that is, there's not a free space) for the "ripup count".
        ripple mechanism to take effect. That is, when a track has been to much
        ripped up, try another one, avoiding being trapped in local minimas.
    - New: In AutoSegment/TrackSegment/RoutingEvent, add a new kind of Segment,
        the "Strap" segment. Strap segment are small ones that cannot be broken
        or moved. Have their own state machine in slackenTopology().
          They have been introduced to prevent the "over-breaking" pathological
        behavior, when the routers break small Segment, making more small Segment
        and thus congesting event more the area.
    - New: In AutoSegment/TrackSegment/PreProcess, adds a new step to compute
        and propagate caging constraints to perpandicular Segment so they will
        never try Tracks that could never be reached.
          To handle extra/user constraints restriction on Segment, introduce
        a "user constraint" in AutoSegment. It's a general purpose mechanism.
    - Bug: In RoutingEvent::Key, when updating the key, also update the Segment
        Id. It may change (not often though) when RoutingEvent are swapped in
        a Track ownership swap (see TrackSegment::swap).
    - Bug: In PreProcess::propagateCagedConstraints(), incomplete propagation on
        perpandiculars (forgotten source or target contact) leading to dead-ends.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane:
    - In Common.h, disable floatCompare(), floatDifference() & floatRound() as
        they triggers g++ warnings in optimized mode. Replace with roundfp().

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - In GCellRoutingSet::expand(), denotching step now uses a queue instead of
        performing a simple loop on the already agglomerated GCells.
    - Change: Uses roundf() instead of rintf() to truly do rounding toward the
        nearest integer.
    - Change: In Manipulator::moveUp(), disable the "ripup of locals before a
        moveUp". On MIPS pipeline, leads to a drop from 92k events to 87k events,
        with no impact on routage quality.
    - Change: In Kite/Katabatic, configurable options are now put into separates
        objects "Configuration". There is one Configuration in Katabatic and
        another in Kite, and they follow the Decorator design pattern:
        Kite::Configuration is a decoration of Katabatic::Configuration.
          They can be both accesseds through the Session.
    - Change: In LayerAssign/LoadGrByNet, suppress the __config local variable
        by calls to Session::getRoutingLayer or Session::getContactLayer.
    - Change/Bug: In AutoSegment/AutoHorizontal/AutoVertical, adds a recomputation
        function for the "terminal" flag. The correct recomputation *after* a
        topological modification (in Session::revalidate()) suppress lots of
        annoying warning messages.
    - Change/Bug: In Manipulator::relax(Interval), do not allow break in the
        first GCell if it's the only one.
    - New: Standalone text-only binary for kite. First step toward a full
        static binary.

  * ./coriolis/crlcore/src/cyclop,
    ./coriolis/crlcore/src/x2y,
    ./coriolis/src/unicorn,
    ./coriolis/src/ispd :
    - Change: In CgtMain, command line parsing in now done with Boost.
        The old COption built in crlcore will be removed and should no longer
        be used.

 _____________________________________________________________________________


  * ./coriolis/src/crlcore :
    - Bug: In Utilities, inversed condition for core-dumping.
    - Bug: In technology.symbolic.xml, due to a typo BLOCKAGE weren't given the
        correct extention cap, leading to overlaps in Kite.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - New: Support for blockages. A Query is used to build trans-hierarchically
        the blockages in all layers. We now need to insert heterogeneous objects
        into a Track, so we create the base class <TrackElement> and two derived
        <TrackSegment> and <TrackBlockage> (more to come). One drawback beeing
        that we changes inlined function into virtual ones. The measurement show
        no sign of slowdow.
          A first problem to treat is the overlap between fixed segments, inserted
        to protect access to M3 and blockages. For now, whenever such overlap
        occurs we *delete* the AutoSegment instead of creating a TrackSegment
        inserted into a Track. Less objects and no special overlap cases to
        manage in the _check() functions.
    - Bug: In _GCell_rp_AutoContacts(), when protecting M3 terminals, two
        AutoSegments are createds, one in M3 which AutoContacts are useds to build
        the topology and one M2 to protect the access when M3 is punctual.
          Instead of hooking on the M3 we were hooking on the M2 protector which
        was later removed because overlaping with a M2 blockage, causing core dumps
        or hole in the topology...
    - Change: Sessionned mechanism for AutoSegment/AutoContacts deletion. That is,
        deletion occurs *only* after revalidation (used to track down the previous
        bug).
    - Change: In slackenTopology(), ripple if ripupPerpandiculars() fails, instead
        of choosing between the two. Also if ripup perpandiculars is called while
        no perpandicular is placed, schedules the perpandiculars at EventLevel2.
        The overlap is in fact parallel on fixed segments.
    - Change: In Manipulator::relax(), reject breakup when there's only one dogleg
        and it's in the last GCell. Cut down 4k events on the MIPS pipeline with
        no degradation of the routing completion.
    - Change: In RoutingEvent::compare(), TrackSegment taggeds as "ripple" must be
        routed first. "ripple" TrackSegment are dogleg created in GCells of lower
        orders and the parallel part of the dogleg cannot be ripped up when the
        GCell is finally reached. This can lead to overconstraints which are solved
        by propagating a "ripple", but in order for the ripple to work, TrackSegments
        subject of the rippling must be already inserted in Tracks, hence the new
        ordering.
    - Bug: In GCellRoutingSet::loadBorder(), do not add twice a border segment.
        No bad effect otherwise a displeasing bug message.
    - Change/Bug: Avoid core-dumping when the tool is still active at exit.
        The Hurricane data-base is partly destroyed *before* the ToolEngine itself
        is. So in that case we must not try to access decorated Contacts & Segments.
    - Bug: In RoutingEvent, cloned RoutingEvent weren't accounted but it was not
        showing because they were also forgotten to push into the history. Thoses
        two bugs were combining to make an invisible memory leak.
          Now we uses "create()", "clone()" & "destroy()" to manipulate allocates
        or free RoutingEvents.
          The lead to this problem was given by a side effect on "border" segments
        who weren't routed due to a non-deleted RoutingEvent.
    - Change: In RoutingEvent, remove the obsoleted "_refCount".

 _____________________________________________________________________________


  * ./hurricane/src/hviewer:
    - Change: In CellWidget/Ruler, rulers are now unidirectionals (as in Cadence).
    - New: In CellWidget, support for drawing components names. Includes correction
        of badly computed coordinates in drawDisplayText.
          Components names are drawed only for the top level of hierarchy and only
        if the bounding box is large enought (currently hard-coded to 50x50 pixels).
    - New: In Net, "Automatic" attributes to distinguish automatically generated
        net names without string pattern matching. "Automatic" Net's names are not
        drawn by the CellWidget to much cluttering the display. And testing a boolean
        is way faster than a pattern matching on a hard-coded name.
    - Change: In CellWidget, when loading a terminal Cell, draw it's internals.


  * ./coriolis/src/crlcore:
    - New: In ApParser, make uses of the new Net attribute "Automatic".

 _____________________________________________________________________________


  * ./hurricane/src/hurricane:
    - New: In DbU, extend the StringMode/getValueString() to support the physical
        unit in addition of lambda & foundry grid. "setStringMode()" has now a
        second parameter "UnitPower", only used when the mode is DbU::Physical.

  * ./hurricane/src/hviewer:
    - New: In CellWidget, the fitToContents now adds a margin of 5% to get border
        clear of the bounding box.
    - New: In CellWidget, ability to display lengths in nanometers & micrometers
        in complement of symbolic and foundry grid. DisplayFilterWidget modificated
        accordingly. New members:
          void           setPhysicalMode ( DbU::UnitPower );
          bool           physicalMode    () const;
          DbU::UnitPower getUnitPower    () const;
        In addition to:
          bool           gridMode        () const;
          bool           symbolicMode    () const;
          void           setGridMode     ();
          void           setSymbolicMode ();

 _____________________________________________________________________________


  * ./hurricane/src/hurricane:
    - Bug: In DbU, "micro" symbol is "u", not "m".
    - Change: In DbU, uses different precisions on differents units.

  * ./hurricane/src/hviewer:
    - Change: In CellWidget, when drawing a Ruler, display the current Unit
        mode on first & last tick.

  * ./hurricane/src/hurricane,
    ./hurricane/src/hviewer:
    - Change: In DbU/CellWidget, some more small adjustments on the ruler.

 _____________________________________________________________________________


  * ./io/openChams:
    - Typo: Newlines at end of file, case sensitiveness. Shows only under Linux,
        not Mac OSX/Xcode.

  * ./coriolis/src/knik:
    - Bug: In saveSolution(), do not drives nets that have not been routed,
        that is, POWER, GROUND and maybe CLOCK. The visible effect was an
        extraneous gmetalh segment over all the power rails.

  * ./coriolis/src/crlcore:
    - Bug: In AllianceFramework constructor, the SxLib routing gauge was faulty.
        The layers gauges in METAL4 & METAL5 where having the depth of the
        METAL1...

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Change: In Session, more simple coding of the static access functions,
        allowing to put most of them inline.
    - New: Support for power rails. A Query is used to build trans-hierarchically
        the power rails in all layers. New <TrackFixedSegment> class derived from
        <TrackElement>, the supporting Hurricane Segment can be shared between
        any number of TrackFixedSegment and the deletion of the TrackFixedSegment
        *do not* delete the Hurricane Segment.

 _____________________________________________________________________________


  * ./hurricane/src/hurricane:
    - Bug: In DebugSession, bad stacking/unstacking of debug levels (unapaired),
        and wrong value stacked sometimes.

  * ./coriolis/src/knik:
    - In Graph::createHEdge/createVEdge, compute a correct capacity according to
        the SxLib gauge. This is an ambiguity with the getTrackNumber() when tracks
        are exaclty on the interval bound they should be considered as "shared".
          Needs a complete code inspection of Knik & Kite to choose a coherent
        model for Track counting.

  * ./coriolis/src/katabatic,
    ./coriolis/src/kite :
    - Clean: In Katabatic::Configuration, move "saturate ratio" & "global threshold"
        configuration parameters from KiteEngine to Configuration.
    - Change: In KiteEngine, to be able to annotate the global graph (edge capacity)
        Kite kinda "swallow" knik, that is, Knik is now to be run from the inside
        of Kite.
          This new organisation is needed by the taking into account of power rails
        and obtacles wich can decrease significantly the edges capacities.
          Remark: We no longer "grab" the Knik ToolEngine into cgt as we don't want
        it to be run in stand-alone mode.
    - Bug: In AutoContact, in JunctionBox::split(), when there is no horizontal or
        vertical (AutoContact anchoreds on terminals) the position of the broke
        point was not correct (sets to *zero*). The consequence was that the strap
        segments where puts in a bad position: the bound of the constraint interval,
        generating hard to solve configurations.
    - Change: In RoutingEvent, migrate EventLevel 1 & 2 to 3 & 4. Uses new 1 & 2
        levels to order TrackSegments coming from a dog leg topological modification.
          When making dogleg, the parallel parts must be routed *before* the
        perpandicular part. This assume that the axis of the perpandicular Segment
        is put at the reasonnable position. Being routed *after* the broken parallels
        ensure that it do not go in a bad position preventing the dogleg effectiveness.
    - New: In GCell/TrackSegment, add the "stiffness" measurement. The stiffness is,
        for each GCell, the ratio between placed TrackSegment (from hihgher orders)
        and the total number of TrackSegments attacheds to that GCell.
          Obvioulsy for routed GCell, that ratio must be equal to 1.0. But for
        unrouted GCells, we can detect thoses who, although in lesser satured areas,
        are becoming overconstrained due to a large number of placed TrackSegments.
    - New: In GCell, ability to change the order after beeing incorporated into
        a GCellRoutingSet. To allow pre-emptive routing of critically stiff GCells.
    - Disable: All stiffness mechanism. The stiffness measurement is not significative
        enought to control pre-emptive GCell routing.
    - New: The "Ring" features. It's a mechanism similar to the "border" feature.
        When new perpandiculars are createds and they are at the end of TrackSegment
        in the process of routing they are added to the "Ring". As such, they will be
        routed along with the order. A TrackSegment exits the "Ring" when it's
        "native" order is reached. "Border" and "Ring" are mutually exclusives, with
        priority to the "Ring".
          The "Ring" feature intend to solve the problem of incompatibles constraints
        in GCell less saturateds generated by GCells higly saturated.
     - New: On METAL3 terminals, when connecting with horizontal Segments,
         the horizontal must be in METAL4, not default METAL2.
     - New: On border/ring segment, when a slackenTopology() is resquested on them,
         do not apply it on them but on their perpandicular which is truly part of
         the GCellRoutingSet.
     - Bug: In RoutingEvent::State::slackenTopology(), infinite loop on ripup of
         ring/border Segment. If thoses kind of Segments reaches their ripup limit,
         they musn't be rescheduled in the events stack...
     - Change: In RoutingEvent::State::localVsGlobal(), refine the way the global
         to dislodge is selected. Choose the global with the less terminals *in the
         GCell* and longuest otherwhise. New Track::getOverlapWeight() method.
     - Change: In LoadGrByNet, manage 4G+2L1 with 4G+xL1 (first appearance in
         eFPGA 4x4).
     - Change: In Configuration, sets the merging threshold to 0.3 which allows to
         successfully process eFPGA matrixes (4x4, 4x8, 8x8).

   * All Hurricane/Coriolis tools:
     - Change: Simplify the CMakeLists, 

 _____________________________________________________________________________


   * ./hurricane/src/hviewer,
     ./coriolis/src/crlcore,
     ./coriolis/src/knik,
     ./coriolis/src/katabatic,
     ./coriolis/src/kite,
     ./coriolis/src/equinox,
     ./coriolis/src/solstice,
     ./coriolis/src/ispd:
     - SVN MOVE: Source tree simplification & uniformisation. Now all tools
         are at the same level, directly under the root of the repository.
         No more "coriolis/src".

   * All tools:
     - Change: Adaptation to cmake 2.8. No more "add_subdirectory()" when
         the sub directory doesn't hold a CMakeList.txt.
           For "add_definition()", set policy 00005 to NEW.
     - Change: Integrate IO extenal libraries.
     - Change: Small compatibilities between "size_t" and "unsigned int"
         under 64 bits.
     - Change: Temporarily disable Equinox/Solstice in unicorn.

 _____________________________________________________________________________


   * ./crlcore:
     - Change: In ApParser, do not stop the parser whenever an external
         component is found on an internal Net. Instead, display a warning,
         sets the Net external and continue.

 _____________________________________________________________________________


   * All Tools:
     - Change: New structure for the installation & CMake system.
         * Tools are now grouped in "projects". There are three projects:
           1. - IO: Standalones parsers/drivers (IO_USER_TOP, IO_TOP).
           2. - Coriolis: Base & digital tools (CORIOLIS_USER_TOP, CORIOLIS_TOP).
           3. - Chams: Analogic tools (CHAMS_USER_TOP, CHAMS_TOP).
           Each *project* has a two "TOP" environement variables, for
         example: IO_TOP and IO_USER_TOP. Thoses variables are the only
         ones useds to locate the tool (CMake modules, headers & libraries).
           The local path always takes precedence over the global one.
           The localisation process occurs in each tool top CMakeLists.txt
         where the macro SETUP_PROJECT_PATH is to be defined. There is no
         way to put it in a shared includes file as it's the macro precisely
         used to locates the includes... You have to call the macro once for
         each project you wants to uses:
             SETUP_PROJECT_PATHS(IO)
             SETUP_PROJECT_PATHS(CORIOLIS)
         * In FindTOOL.cmake, supress the <TOOL>_DIR_SEARCH and uses the
         <PROJECT>_DIR_SEARCH instead (example: CORIOLIS_DIR_SEARCH).
         * buildCoriolis.py modificated according to the new "TOP" scheme.

   * All Tools:
     - Change: <PROJECT>_SEARCH_PATH are put back into the *first* tool of
         a project.
     - Bug: In HURRICANE_CHECK_MACRO(), the quiet flag was not correctly
         implemented. User ARGV instead of argv (case sensitivity!).

 _____________________________________________________________________________


   * ./goodies :
     - Change: In builCoriolis.py, expand the '~' in the root path if needed.
     - Bug: Do not stop if the "--no-cache" option is given but the
         CMakeCache doesn't exists.

 _____________________________________________________________________________


  * ./goodies:
    - Bug: In buildCoriolis.py, io tool was both declared as belonging to io
        and hurricane project. Removed from Hurricane.
    - Bug: In buildCoriolis.py, exctract correctly the return status of a
        command to return it to the parent process. See Python documentation
        about os.wait() & os.waitpid().

  * ./katabatic :
    - Change: Uses a map instead of a sorted vector in the layer assignment
        steps. It was used to order GCells by density, and causing terrific
        slowdown on big examples. Namely the eFPGA 16x16 took 1h20, now it's
        down to  21 seconds...
          Devellop a new object <DyKeyQueue> to handle map with elements
        whose key *can* change. Next step is to normalize the key caching
        mechanism and to templatize.
    - Change: In LayerAssign, account the number of globals AutoSegments
        moved up.

  * ./hurricane/src/viewer:
    - Bug: In NetlistWidget/NetlistModel, suppress the "forceRowHeight()"
        method which was terribly slowing down the table display. Instead
        uses the "setDefaultSectionSize()" of the vertical header to setup
        the row height (much more compact display).
    - Bug: In NetlistModel, strangely, although we have a "data()" and a 
        "headerData()" method, the "data()" is also called for the headers
        potentially erasing any previous setting done with "headerData()".
          This was occuring for the fonts settings. Don't known if it is
        a bug or a feature of Qt...
    - Thoses changes has to be ported to the others widgets some times...

  * ./hurricane/src/viewer:
    - Change: In Cyclop, now uses the GtkStyle when not under OSX and Qt is
        newer or equal to Qt 4.5.0.
    - Change: In the various Qt Model Table, do the rowHeigh bug correction.
    - Bug: In InspectorWidget/NetlistModel, when browsing through the records
        tree, the records were generated twice at each slot change. This
        was due to the History ComboBox sending a index change signal then
        the InspectorWidget setting the slot *again*.
          When trying to explore a Slot, but this Slot is empty (like an
        empty vector, for instance) do not gut the RecordModel. Because
        as we find out that the new Slot is empty we go back and restore
        the previous contents. Potentially slow if we comes from a Slot
        with lots of records. Now we dump the contents only if there is
        something to explore.

  * ./hurricane/src/hurricane:
    - Bug: In Record, the slots where stored in a list container, which was
        making indexed accesses very very slow. This slowdown was also
        affecting the destructor of Record (this is the explanation why
        the RecordWidget was slow, even when *leaving* the net IntrusiveSet).
          Now implemented in term of STL vector.
    - Bug: In Slot/Common, still some adjustements to make the Inspection
        mechanism work with all types. Correct the "IntrusiveMap<>" not
        working with the NetMap. Related to templates not using the same
        constness.
    - Change: In Entity/DBo/Cell, Some more adjustements on Slot/Records.

  * ./kite:
    - Cleanup: In GCell, remove the DyKeyQueue support as it's been moved
        to Katabatic level.
    - Change: In NegociateWidow, increase the event stop thresold to 4M events
        to be able to process the eFPGA matrix 16x16 (150K gates).

 _____________________________________________________________________________

  * ./goodies:
    - Bug: In buildCoriolis.py, when multiple projects where given on the command
        line, only the latest was processed. Now all projects are processeds.
        (in the order given on the command line so watch out!)

  * ./hurricane/src/hurricane:
    - New: In Query, add support for Markers, although they are Go's, are stored
        in a separate QuadTree directly at Cell level. In a very similar fashion
        to the ExtensionGos. Sometimes should look if thoses mecanism could be
        unified.

  * ./hurricane/src/viewer:
    - New: In CellWidget, add support for displaying References. Uses the Marker
        Query. For now labels are displayed centered on the reference point,
        making that point hard to see. That behavior may be changed later if
        needs to be.
    - Bug: In InspectorWidget, the History::push() wasn't updating the ComboBox
        index. The line was strangely commented out (?).

 _____________________________________________________________________________

  * ./goodies:
    - Change: In buildCoriolis.py, now manage correctly any combination of
        projects/tools/standalone tools. Standalones tools are always processeds
        last.

  * ./crlcore:
    - Change: In ToolEngine, adds a static method "destroyAll()" that must be
        called *before* the Hurricane database destruction. This is to avoid
        a mis-oredering in destruction.
          ToolEngines are stored in a property, property are part of the DBo
        base object so are destroyed *after* the Cell derived object has been.
        Thus ToolEngine are deleted *after* the Cell components and if they
        still refers to it, we are doomed.
     - Change: In display.xml, color support for displaying references.

  * ./katabatic:
    - New: In GCell & LayerAssign, adds a supplemental desaturation steps when
        a GCell containts too many (more than 7) RoutingPads in M1. This is
        especially useful for the eFPGA matrix with it's custom made cells.

  * ./kite:
    - Change: In TrackSegment, _postDogLeg() & _postModify(), add segments to
        "Ring" if they are directly connected to a RoutingPad. To maintain the
        "border effect" after a topological slackening.
    - Change: In GraphicKiteEngine, in the global routing relateds menus, suppress
        the mention of "solution" as it might be unclear for an average user.
        (just "Save Global Routing" or "Load Global Routing").
    - Change: In RoutingEvent, conflictSolve1() tries to move up "other" blocking
        segment before trying to break "self".
    - Bug: In TrackSegment::reschedule(), remove from Track segments that are
        now in a greater order than the current one. This bug was shown in the
        TrackSegment::_postModify() method after a desalignate.
          It was causing overlaps and/or routing completion false reports.

 * ./unicorn:
   - Change: Uses the specific ToolEngine destroy, to avoid disgracious
       core dumps in cases of early exits...

 _____________________________________________________________________________

  * ./hurricane:
    - New: In Reference, adds a type to differentiate between "Labels" and
        "Position". Labels are strings that we wants to display, and position
        are specific points with a name attached to it.
    - New: In CellWidget, specific display for the two kind of references
        (Label & Display).

  * ./crlcore:
    - New: The Measure extension (on any DBo) that allows to save measurement
        and print them later into a file. Mainly to supply gnuplot with datas.
          Obsoletes the "statsExtract.py" script from statistics, and much
        more reliable.

  * ./katabatic:
    - Bug: In GCell, bad cast between <size_t> and <unsigned int>, showed only
        under 64 bits.
    - New: In KatabaticEngine::printMeasures(), adds a support for measurments,
        both time and memory size in Mb are stored for each tag.
    - New: Adds measurements "Gates", "GCells", "load" & "assign".

  * ./kite:
    - Bug: In RoutingEvent::Manipulator::forceToTrack(), wrong return code,
        was always return true, blocking the explorations of least good
        Track.
    - Bug: In RoutingEvent::_processNegociate(), must reset the "insert state"
        while looping on candidate. This bug was having the same effect as
        (and masking) the previous one!
    - Bug: In TrackSegment::moveUp(), reset the ripup count after the move
        up...
    - Change: At various DebugSession opening points, sets the debug level to
        200 to avoid extraneous debugging output.
    - New: KiteEngine::dumpMeasures() to create a data file for later uses
        by gnuplot. In interactive mode, this function is called in the
        "finalize layout" stage.
    - New: Adds measurments "algo", "fin" & "Segs".

  * ./unicorn:
    - New: Adds a call to dumpMeasures().

 _____________________________________________________________________________

  * ./crlcore:
    - New: In AllianceFramework, getInstancesCount() to count the number of
        instances in a Cell. The count can be recursive or not or ignore or
        not feed cells. This could be viewed as a very simple query, and has
        to be implemented here because we only new Feed Cell from the CATAL
        of the Alliance Framework.

  * ./knik:
    - Bug: In MatrixVertex::getLineIndex() and getColumnIndex(), in regular
        mode, when the Y/X coordinate is exactly on the upper right angle,
        return the inferior index (instead of superior which is out of bounds).
    - Change: In MatrixVertex, RoutingGrid & KnikEngine, replace the _lowerLeftX &
        _lowerLeftY by a complete copy of the Cell's abutment box. Makes
        easier for getLineIndex() to find out of bound coordinates.
    - Change: In KnikEngine & LoadSolution add a time/memory measurement,
        for Kite statistics.

  * ./katabatic:
    - Change: In Grid/BaseGrid, add an Abutment Box attribute (to facilitate
        segment truncation in Kite::TrackFixedSegment.
    - Change: In Grid/BaseGrid::Axis, when computing a row/column index using
        the graduation table, if the coordinate is exactly on the last
        graduation, return the last GCell instead of "out of bound".
    - Change: In GCell::hasFreeTrack(), AutoSegment::canMoveUp() &
        AutoSegment::canPivotUp() adds a "reserve" parameter to modify the
        amount of wirelength to remains free after the insertion.

  * ./kite:
    - Change: In TrackFixedSegment, when the source/target coordinates of the
        fixed segment are outside the grid (i.e. the Cell Abutment Box) truncate
        them.
    - Change: In GCell::addTrackSegment, when looking for overlap between the
        to be inserted TrackSegment and Blockage segment, shrink the Blockage
        span by one DbU to avoid false overlap when they are just edges connexes.
    - Bug: In RoutingEvent::slackenTopology, in the local segment FSM, looping
        on the MaximumSlack state. Now also checks the state count.
    - Change: In TrackSegment::canMoveUp() & canPivotUp() adds the "reserve"
        parameter and uses it in RoutingEvent to prevent over saturated GCells.
    - Change: In Configuration, parameters adjustements: expandStep increased to
        0.40. Makes RoutingSets biggers but no noticeable slow down.

  * ./unicorn:
    - New: In CgtMain, add supports for iteration limit.

 _____________________________________________________________________________

  * ./hurricane:
    - Bug: In PaletteWidget, do not derive from QScrollArea. Instead uses it
        as a child widget. This solves the refreshing problem of the Palette.
        As a rule now: never derives from anything other than QWidget.
    - New: GotoWidget, not having this feature finally unverved me enough for
        beeing implemented. You can specify an (x,y) on which the view will
        be centered and an aperture which gives the size of the view smallest
        side. It's a way of specifying the zoom level (as the zoom is not
        meaningful for users). An aperture of "zero" disable that feature,
        that is, zoom remains unchanged. The coordinates are integer which
        are implicitly expressed in the current mode used by the viewer
        (Symbolic, Grid, or Physical in micro-meters).
    - Change: Big rewrite of how the Symbolic/Grid/Physical modes are sets
        to/from the CellWidget. Impacted widgets are CellWidget &
        DisplayFilterWidget.
          Main changes are that there is no more "individual" setter/getter for
        modes (setSymbolic(), setGrid(), setPhysical(DbU::UnitPower)) but one
        with two arguments:
              setDbuMode(int mode,DbU::UnitPower)
          Signals & slots of the widgets also evolves into:
              dbuModeChanged(int mode,DbU::UnitPower)
              changeDbuMode (int mode,DbU::UnitPower)

 _____________________________________________________________________________

  * Most of tools:
    - Bug: In top CMakeLists.txt the SETUP_PROJECT_PATHS was not inserting
        X_USER_TOP *before* X_TOP, thus potentially allowing an obsolete
        system-wide configuration to shadow an up-to-date local one.

  * ./goodies:
    - New: In buildCoriolis.py, adds a "--rm-build" option which removes the
        tool's build directory before building it. A very crude way to ensure
        that nothing obsolete form a previous build will gets in the way...

  * ./crlcore:
    - New: In Utilities, The Dots class which allow nice pretty printing on
        a terminal (like lines of books summaries).
        
  * ./hurricane:
    - Bug: In CellWidget, correct the slightly off position of Labels references.
    - New: In ControllerWidget, new TabSettings tab to hold the configuration
        settings of the various Coriolis tools. The TabSettings is a tab itself.

  * ./katabatic:
    - Change: In Configuration/KatabaticEngine, introduce a static Configuration
        object (singleton) to handle the default configuration. Configuration are
        now created only through cloning operations. In KatabaticEngine, the
        _configuration becomes a pointer (previoulsy an value).
          Confifuration becames a singleton and a decorator.
          Also adds a print method to nicely display configurations values on
        the terminal.

  * ./kite:
    - Change: In Configuration/KiteEngine, propagate changes in Configuration
        in Kite. Note that a *second* singleton is created at Kite level.
    - New: KiteEngine::printConfiguration() method to allow quick checks of
        the router's main parameters.
    - New: ConfigurationWidget to display/sets all the revelant Katabatic/
        Kite configuration parameters. To be used with the TabSettings from
        the ControllerWidget.
          The ConfigurationWidget is bound to the default (static) Kite
        configuration, as once it has been run you obviously cannot change the
        router's settings.

  * ./unicorn:
    - New: "--show-conf" options to dump the current configuration.

 _____________________________________________________________________________

  * ./katabatic:
    - Bug: In KatabaticEnginge::_desaturate() (part of LayerAssign), reset
        the moved up Segment pointer between iterations. Suppress the warning
        about the GCell's DyKeyQueue beeing not revalidated on deletion.
    - Change: In LoadGrByNet, manage the 4G+3L1 configuration with the generic
        _GCell_xG_xL1_xL3(). Needed for "dct_lvl2".

  * ./kite:
    - Change: In TrackCost, the ripup cost is now computed from a mix between
        the number of ripup *and* the data state. Restore a correct balance
        of the ripping up between segments.
    - New: In RoutingEvent::State::conflictSolve1(), when a very long Segment
        enters in conflictSolve1(), still prefers to move it up in one piece,
        but if it's not possible, it is unlikely that it will overlap with
        only one or two other Segment. In that cases, blindy break it up in
        the middle.
    - New: In RoutingEvent::Manipulator, another overload of makeDogLeg to
        allow break up at one precise point.
    - Change/Bug: In RoutingEvent::Manipulator::Relax(), reset the state of
        the non-overlapping Segment fragments instead of inheriting blindly
        of the state of the breaked up one. Gives some supplemental slack
        that allows to converge.
    - Note: Now the strategy is to disable the uses of GCellRoutingSet by
        setting the expand step to 0.99. This induces only a slight slow
        dow and memory increase and passes all the tests...
    - Mark: This revision passes all the benches except for idct, vld &
        ieee_division.

 _____________________________________________________________________________

  * ./hurricane:
    - Bug: In Net.h, force expansion of SlotTemplate<Net*> with the line:
        const SlotTemplate<Net*> dummyNetSlot ( string("dummyNetSlot"), NULL );
          I've no satisfactory explanation, but in the cyclop Inspector the
        Cell's NetMap is correctly created and in the cgt Inspector, Nets
        entries of the NetMap appears as "unsupported", meaning that the
        SlotTemplate<> has not been generated for Net. This correct the
        problem.

  * ./knik:
    - Change: In KnikEngine::initGlobalRouting(), increase the maximal degree
        of net to be routed (1000 -> 13000). This to allow the clock to be
        routed of the "vld" circuit.

  * ./katabatic:
    - Change: In KatabaticEngine, the containers used to store the "nets to
        route" is changed from a vector<> to a set<> sorted by the Nets names.
        Uses more memory but allows much faster Net deletion.
    - New: In _loadNetGlobalRouting(Net*), detect non-routed Nets. A Net is
        considered as unrouted if it's 10 first RoutingPads have no slave
        Segment. The Net is withdrawn from the set of Nets to route.
    - Bug: In GCellConfiguration::_GCell_1G_1L1(), correctly compute the
        access flag passed to _GCell_rp_Access().
    - Change: In AutoContact::restrictConstraintBox() adds "warnOnError"
        parameter to shut down warnings.
    - New: KatabaticEngine::_computeNetConstraints() now also returns a set<>
        of segments on which constraints are incompatibles. All the NetConstraints
        related functions are modificateds accordingly.
    - Change: In KatabaticEngine::_loadNetGlobalRouting(), create dogleg
        on overconstrained Segments computed by a call to _computeNetConstraints().
          Overconstraineds Segments can occurs when a global is directly
        connecting two punctual RoutingPads (see "ieee_division").
          As a side effect, and to avoid looping each Net is revalidated
        *before* making any dogleg. So Nets are revalidated one by one instead
        of alltogether.
    - Change: In AutoSegment::_toConstraintAxis(), do nothing if constraint
        interval is empty.

  * ./kite:
    - Change: In Configuration, sets the default expandStep parameter to
        0.99 (gives better results).
    - Change: In KiteEngine::_computeCagedConstraints(), detect and build
        a list of segments on which caged constraints are incompatibles
        (tearing effect shown in ieee_division). All caged constraints
        functions are modificated accordingly.
    - Change: In Session::_revalidate(), makes doglegs on Segment with
        incompatible caged constraints.
    - Mark: vld & ieee_division works.

  * ./unicorn:
    - Change: Sets the default "expand-step" parameter to 0.99, as in Kite.

 _____________________________________________________________________________

  * ./crlcore:
    - Cleanup: No longer import the std namespace in headers.
    - Bug: In Measures.h, incoherent prototyping of getMeasure() template.
    - Change: In Environment, SearchPath & the XML format, slight change to
        allow overwriting of Alliance library pathes. Instead of having an
        attribute on the <system> node that applies to all libraries, we
        have a "mode" attribute in each <library> node.
          "mode" can takes three values:
            1. - "append" : the library path is added in tail of the list.
            2. - "prepend" : the library path is added in head of the list.
            3. - "replace" : if the library already exists in the pathes,
                    this ones replaces it, whitout modifiying the order.
                    If it doesn't exists, it simply appended.
          The "replace" mode is the one to be used if a users wants to shadow
        system libraries by his own versions (sets in ~/.environment.alliance.xml).

  * ./knik:
    - New: KnikEngine::computeSymbolicWireLength(), which adds to the measurments
        1. - The sum of global wire length (in lambdas).
        2. - The abutment box area of the design (in square lambdas).
        3. - The saturation ratio of the design: wire length divided by area and
               normalized by a "fully routed GCell".

  * ./katabatic:
    - New: In LoadGrByNet, display the design saturation (informative).

  * ./kite:
    - New: In KiteEngine, export GWL, Area & Sat measurements.

 _____________________________________________________________________________

  * ./hurricane:
    - Cleanup: In Slot.h, comment out print for debug.
    - New: In CellViewer, adds a renameCell() method to "rename" the currently
        loaded Cell "in place". Utility function for SaveCellDialog (see below).

  * ./crlcore:
    - Change: In Cyclop, rename COpenCellDialog in OpenCellDialog.

  * ./unicorn:
    - Change: Rename COpenCellDialog in OpenCellDialog.
    - Change: In CgtMain, now the save parameter must be supplied with a design
        name. The same should be different from the input one to avoid overwrites.
    - New: SaveCellDialog to write back the Cell. Currently only writes the
        layout view.

 _____________________________________________________________________________

  * All tools:
    - Change: In the CMakeLists.txt, in all the install commands remove all
        the leading "/" as they prevents the CMAKE_INSTALL_PREFIX to be took
        into account. It was nevertheless working because buildCoriolis.py was
        using DESTDIR which is prepended anyway.
  * ./goodies:
    - Change: In buildCoriolis.py, no longer uses the DESTDIR but instead
        CMAKE_INSTALL_PREFIX.
	
 _____________________________________________________________________________

  * ./goodies:
    - New: In buildCoriolis.py, support to build rpm packages (in user's "rpm"
        directory).
    - Added: coriolis2.spec.in for rpm building. Install under /opt/coriolis2.
        This spec files has the particularity to also buildup a binary tarball
        of the compiled & installed files, this avoid a second complete build
        stage. The tarball is put into "rpm/SOURCES".

  * All tools:
    - Change: Correction to suppress all g++ warnings. Except thoses comming
        from bad Python system includes...

 _____________________________________________________________________________

  * All tools:
    - Change: adopt a tree layout compliant with the UNIX FHS.
        * includes under      TOP/include/coriolis2.
        * shared datas under  TOP/shared/coriolis2.
        * docs under          TOP/share/doc/coriolis2.
        * configuration under TOP/etc/coriolis2

  * ./crlcore:
    - Change: In Environment, comply to the new tree layout, search configuration
        files under TOP/etc/coriolis2/.

  * ./knik:
    - Change: In flute, comply to the new tree layout, get the "POW*.dat" files
        from TOP/share/coriolis2/flute-2.4.

 _____________________________________________________________________________

  * ./io:
    - Change: Revert back to the state in which "io" must be included into
        the path for #include.

 _____________________________________________________________________________

  * All tools:
    - Change: Adds ${LIB_SUFFIX} to all library search paths.

 _____________________________________________________________________________

  * ./crlcore:
    - New: Adds a README.tex describing the essentials features of Coriolis2.
    - New: Support for LaTeX in CMake through the macros supplieds by Sandia.
    - Change: Adds support for installation of config file in system-wide
        /etc.

  * ./goodies:
    - Change: In coriolis2.spec.in, now do a install "in system", that is
        under /usr witch configuration in /etc. Create a patch file to
        sets up accordingly the pathes in configurations files.
    - Change: More accurate detection of the qt version based on distribution
        recognition (%{rhel} & %{fedora}).

  * ./goodies:
    - New: In buildCoriolis.py, support for the distribution patch.
        The distribution patch do some customizations needed for the distribution.
    - Change: In coriolis2.spec.in, support for patch, include starter
        documentation. Do not prepend %{buildroot} to CORIOLIS_TOP environment
        variables.

  * ./goodies:
    - Bug: In coriolis2.spec.in, needs to add the CMAKE_MODULE_PATH component
        pointing into the %{buildroot} for tools to find their ".cmake".

  * ./hurricane:
    - Change: In FindHURRICANE.cmake, prepend ${DESTDIR} to the search pathes
        components (for use by packagers).

  * ./crlcore:
    - Change: In top CMakeLists.txt, prepend ${DESTDIR} to CMAKE_MODULE_PATH
        components (for use by packagers).

  * ./vlsisapd:
    - Change: New cmake to find the python site packages directory. Install
        python modules in that library.

  * ./goodies:
    - Bug: In coriolis2.spec.in, split the build in two steps so the documentation
        can be installed in the right docdir.

  * ./goodies:
    - Bug: In coriolis2.spec.in, just remove the installed doc then install them
        from build with the %doc directive.

  * ./vlsisapd:
    - Change: Conditional compilation of DTR & OpenChams. They are compiled only if
        their directory is present (see buildCoriolis.doRpm()).

  * ./goodies:
    - Change: In buildCoriolis.py, adds "dvi" & "safepdf" targets on "crlcore" tool.
        Not very clean because it's hard-coded.

  * ./crlcore:
    - Change: Conditionnal compilation of "doc".

  * ./unicorn:
    - Change: More consistants text-mode arguments.

  * ./crlcore:
    - Bug: In AllianceFramework, do not try to build SxLib gauge if the layers are
        not presents. Prevent cgt to miserably fails if the environment is not
        found.
    - Change: In src/ccore/CMakeLists.txt, try to guess the CORIOLIS_TOP from the
        compilation environment and pass back to sources.
    - Change: Rename hcmos9 into cmos130 in configuration files.

  * ./katabatic:
    - New: Adds support to restrict the number of routing layers.

  * ./kite:
    - New: Adds support to restrict the number of routing layers. Not enabled yet
        because the router needs some more tweak if using only two routing layers.

  * ./crlcore:
    - Change: In the to CMakeLists.txt checks for CMake version to see what policy
        to apply.

  * ./knik:
    - Change: In KnikEngine, adds a credits for FLUTE in the ::create() methods.
        Printed every time Knik is run (whatever the verbose level).

  * ./unicorn:
    - Cleanup: In CgtMain, remove obsoleted help function.

  * ./unicorn:
    - License: In CgtMain, adds banner for FLUTE credits (always displayed).

  * ./hurricane:
    - Change: When static linking is required, also switch Boost libraries in static
        mode. Automatically done is modules using FindHURRICANE through
        SET_LIB_LINK_MODE(). Note: FindBoost must be called *after* SET_LIB_LINK_MODE().

  * ./goodies:
    - New: In coriolis2.spec.in, adds switch to generate package with static libraries.

  * ./crlcore:
    - Change: In Banner, use a wider cartouche.
    - Change: In README, small adjustments.
    - Packaging: Second try, svn 1470.

  * ./unicorn:
    - Change: In CgtMain, add a more complete credits cartouche	.

  * ./goodies:
    - Bug: In coriolis2.spec.in, typos in static libraries commands.

  * ./kite:
    - Bug: In RoutingEvent, Cs1Candidate::getConflicts() uses of out of bound index.
        Strangely shows only under recent distributions (Fedora 13).

  * ./crlcore:
    - Change: Makes all e-mail references to points to <alliance-users@asim.lip6.fr>.
    - Packaging: Second try, svn 1472.

  * ./crlcore:
    - Change: Rename doc files that differs only by the case, to comply with OSX.
    - Packaging: Fourth try, svn 1475.

  * ./crlcore:
    - Change: In README, last adjustements for release 1475. They belongs to this
        release even if they are tagged 1476.

  * ./nimbus:
    - New: And rising from the dead, here comes Nimbus.
    - Change: Rename Nimbus into NimbusEngine for coherency with other tools.

 _____________________________________________________________________________

  * ./goodies:
    - New: Added Nimbus & Mauka tools.

  * ./hurricane:
    - Change: In Instance & Cell, do *not* materialize unplaced instances.
        This is to avoid overloading the QuadTree at point (0,0) and besides
        has no senses. Uses the PlacementStatus state.
    - Bug: In Viewer CMakeLists.txt, put tool include directories first.

  * ./crlcore:
    - Bug: In CMakeLists.txt, local include directories *first*.
    - New: In Utilities, Dots::asBool() & Dots::asLambda().
    - New: In display.xml, new <drawingstyle> for Mauka Containers.

  * ./nimbus:
    - New: Adds a standard Configuration mechanism.
    - New: Allow the user to specify the aspect ratio in addition to the
        margin.

  * ./mauka:
    - New: Initial port from Coriolis 1. Needs to re-introduce Nimbus :-(.
        Modificated to provide Configuration & standard ConfigurationWidget.

  * ./katabatic:
    - Change: In LoadGrByNet, no longer display each net name in cmess2.

  * ./kite:
    - Bug: In CMakeLists.txt, local include directories *first*.
    - Change: In Configuration::setRipupLimit(), swap the two parameters,
        more natural ordering.
    - New: In ConfigurationWidget, adds an "apply" button to register the
        new parameters values.

  * ./unicorn:
    - Bug: In CMakeLists.txt, local include directories *first*.
    - New: Register the Mauka tool (placer).

 _____________________________________________________________________________

  * ./crlcore:
    - New: "linefill" class which allows to print filled lines and automatically
        go to the next line whenever the line is full (more than 80 characters).
    - New: In ToolBox, getInstancesCount() recursively counts leaf cell instances.
    - New: In CellGauge, added getClone() method (for Configuration).
    - Change: It seems that the changes to match the new VLSISAPD weren't commited
        by Damien...

  * ./nimbus:
    - New: Now options are handleds by the standard "Configuration". Especially
        suppress the need to specify a Library when creating the tool. Now the
        Configuration directly supplies the CellGauge & RoutingGauge.

  * ./metis:
    - New: Initial port from Coriolis 1.

  * ./mauka:
    - New: In ConfigurationWidget, add support for hMETIS partitionner.
    - New: Static method doQuadriPart() to perform recursive quadri-partionning
        of the circuit. Down to the instanceStopCriterion and with metis/nimbus.
        Ported from pycoriolis.
    - New: MaukaEngine::regroupOverloadedGCells() also imported from pycoriolis.
    - New: hMETIS support.
    - Change: In Configuration, now CellGauge characteristics are supplied only
        through Configuration.
    - Change: In SubRow, change the way bin widths are computed.
    - Bug: In Surface & MaukaEngine, lengthes that are "proportional" to areas
        are now coded with double instead of DbU::Unit, because of capacity
        overflow.

  * ./unicorn:
    - New: Integrates support for Metis, more command line options related to
        the placement step, "--margin" & "--partition-size-stop".

 _____________________________________________________________________________

  * ./vlsisapd:
    - New: Generic XML configuration parser "Configuration", comes with a
        little editor "vlsisapd-conf-editor" (temporary name).

  * ./hurricane/src/viewer:
    - Change: The tab settings of the controller now refers to the XML
        configuration widget.

  * ./crlcore:
    - In /etc, supplies a default XML configuration file for all tools:
        tools.configuration.xml.

  * ./nimbus,
    ./metis,
    ./mauka,
    ./katabatic,
    ./kite :
    - Change: switch toward the XML configuration system. Suppress the need
        of a default static configuration (now built on demand from the XML
        database).
          In Mauka and Kite, suppress the ConfigurationWidget, wich are
        obsoleted by the generic XML configuration widget.

  * ./unicorn:
    - Change: Adapted to the XML configuration system.
2010-06-18 14:04:42 +00:00
Jean-Paul Chaput 2332fe6ca6 * ./unicorn:
- New: Integrates support for Metis, more command line options related to
        the placement step, "--margin" & "--partition-size-stop".
2010-06-13 20:51:38 +00:00
Jean-Paul Chaput c471423b23 * ./unicorn:
- Bug: In CMakeLists.txt, local include directories *first*.
    - New: Register the Mauka tool (placer).
2010-06-08 12:03:38 +00:00
Jean-Paul Chaput 491c536ea7 * ./hurricane:
- Change: When static linking is required, also switch Boost libraries in static
        mode. Automatically done is modules using FindHURRICANE through
        SET_LIB_LINK_MODE(). Note: FindBoost must be called *after* SET_LIB_LINK_MODE().
2010-05-31 12:29:24 +00:00
Jean-Paul Chaput 29a2cba501 Prepend DESTDIR to CMAKE_MODULE_PATH 2010-05-22 14:14:37 +00:00
Jean-Paul Chaput f44c39bafe * All tools:
- Change: take account of the renaming "io" -> "vlsisapd".
2010-05-18 15:04:46 +00:00
Jean-Paul Chaput 6bddddc325 * All tools:
- Change: adopt a tree layout compliant with the UNIX FHS.
        * includes under      TOP/include/coriolis2.
        * shared datas under  TOP/shared/coriolis2.
        * docs under          TOP/share/doc/coriolis2.
        * configuration under TOP/etc/coriolis2

  * ./crlcore:
    - Change: In Environment, comply to the new tree layout, search configuration
        files under TOP/etc/coriolis2/.

  * ./knik:
    - Change: In flute, comply to the new tree layout, get the "POW*.dat" files
        from TOP/share/coriolis2/flute-2.4.
2010-05-18 12:53:16 +00:00
The Coriolis Project b1aae7ae77 Correct pathes detection. 2010-04-28 21:55:06 +00:00
Jean-Paul Chaput 936998cff2 * Most of tools:
- Bug: In top CMakeLists.txt the SETUP_PROJECT_PATHS was not inserting
        X_USER_TOP *before* X_TOP, thus potentially allowing an obsolete
        system-wide configuration to shadow an up-to-date local one.

  * ./unicorn:
    - New: "--show-conf" options to dump the current configuration.
2010-04-28 15:46:31 +00:00
Jean-Paul Chaput b5c3c0a00e * All Tools:
- Change: <PROJECT>_SEARCH_PATH are put back into the *first* tool of
         a project.
     - Bug: In HURRICANE_CHECK_MACRO(), the quiet flag was not correctly
         implemented. User ARGV instead of argv (case sensitivity!).
2010-03-19 14:22:39 +00:00
Jean-Paul Chaput c9d2844e37 * All Tools:
- Change: New structure for the installation & CMake system.
         * Tools are now grouped in "projects". There are three projects:
           1. - IO: Standalones parsers/drivers (IO_USER_TOP, IO_TOP).
           2. - Coriolis: Base & digital tools (CORIOLIS_USER_TOP, CORIOLIS_TOP).
           3. - Chams: Analogic tools (CHAMS_USER_TOP, CHAMS_TOP).
           Each *project* has a two "TOP" environement variables, for
         example: IO_TOP and IO_USER_TOP. Thoses variables are the only
         ones useds to locate the tool (CMake modules, headers & libraries).
           The local path always takes precedence over the global one.
           The localisation process occurs in each tool top CMakeLists.txt
         where the macro SETUP_PROJECT_PATH is to be defined. There is no
         way to put it in a shared includes file as it's the macro precisely
         used to locates the includes... You have to call the macro once for
         each project you wants to uses:
             SETUP_PROJECT_PATHS(IO)
             SETUP_PROJECT_PATHS(CORIOLIS)
         * In FindTOOL.cmake, supress the <TOOL>_DIR_SEARCH and uses the
         <PROJECT>_DIR_SEARCH instead (example: CORIOLIS_DIR_SEARCH).
         * buildCoriolis.py modificated according to the new "TOP" scheme.
2010-03-18 15:33:12 +00:00
Jean-Paul Chaput db8ebab4ea A reminder of how to setup a complex CMAKE_MODULE_PATH. 2010-03-15 15:53:57 +00:00
The Coriolis Project 6d651529b0 * All tools:
- Change: Adaptation to cmake 2.8. No more "add_subdirectory()" when
       the sub directory doesn't hold a CMakeList.txt.
         For "add_definition()", set policy 00005 to NEW.
   - Change: Integrate IO extenal libraries.
   - Change: Small compatibilities between "size_t" and "unsigned int"
       under 64 bits.
   - Change: Temporarily disable Equinox/Solstice in unicorn.
2010-03-11 16:01:21 +00:00
Jean-Paul Chaput 8ba0188821 * ./hurricane/src/hviewer,
./coriolis/src/crlcore,
     ./coriolis/src/knik,
     ./coriolis/src/katabatic,
     ./coriolis/src/kite,
     ./coriolis/src/equinox,
     ./coriolis/src/solstice,
     ./coriolis/src/ispd:
     - SVN MOVE: Source tree simplification & uniformisation. Now all tools
         are at the same level, directly under the root of the repository.
         No more "coriolis/src".
2010-03-09 15:26:22 +00:00