Add a Python hook into Kite. Python support for DebugSession.

* New: In Isobar, export the DebugSession mechanism.
* New: In Kite, In KiteEngine, add the ability to run a Python script
    (hook) after the initialization of the KiteEngine.
This commit is contained in:
Jean-Paul Chaput 2014-07-05 18:02:51 +02:00
parent 9e3f9e4082
commit e29221274e
12 changed files with 330 additions and 119 deletions

View File

@ -1,7 +1,6 @@
// -*- C++ -*- // -*- C++ -*-
// //
// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved // Copyright (c) BULL S.A. 2000-2014, All Rights Reserved
// //
// This file is part of Hurricane. // This file is part of Hurricane.
// //
@ -19,12 +18,7 @@
// License along with Hurricane. If not, see // License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// //
// =================================================================== // +-----------------------------------------------------------------+
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | H U R R I C A N E | // | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e | // | V L S I B a c k e n d D a t a - B a s e |
// | | // | |
@ -32,25 +26,19 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr | // | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Header : "./hurricane/DebugSession.h" | // | C++ Header : "./hurricane/DebugSession.h" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#ifndef __HURRICANE_DEBUG_SESSION_H__ #ifndef HURRICANE_DEBUG_SESSION_H
#define __HURRICANE_DEBUG_SESSION_H__ #define HURRICANE_DEBUG_SESSION_H
#include <set> #include <set>
#include <stack> #include <stack>
#include "hurricane/Commons.h" #include "hurricane/Commons.h"
namespace Hurricane { namespace Hurricane {
class Name; class Name;
class Net; class Net;
class Cell; class Cell;
@ -62,7 +50,6 @@ namespace Hurricane {
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Class : "Hurricane::DebugSession". // Class : "Hurricane::DebugSession".
class DebugSession { class DebugSession {
public: public:
@ -104,7 +91,6 @@ namespace Hurricane {
// Inline Functions. // Inline Functions.
void DebugSession::open ( const void* symbol, unsigned int traceLevel ) void DebugSession::open ( const void* symbol, unsigned int traceLevel )
{ {
if ( _singleton->_isTraced(symbol) ) if ( _singleton->_isTraced(symbol) )
@ -136,10 +122,10 @@ namespace Hurricane {
} // End of Hurricane namespace. } // Hurricane namespace.
INSPECTOR_P_SUPPORT(Hurricane::DebugSession); INSPECTOR_P_SUPPORT(Hurricane::DebugSession);
#endif // __HURRICANE_DEBUG_SESSION__ #endif // HURRICANE_DEBUG_SESSION_H

View File

@ -65,6 +65,7 @@
PyOrientation.cpp PyOrientation.cpp
PyDbU.cpp PyDbU.cpp
PyUpdateSession.cpp PyUpdateSession.cpp
PyDebugSession.cpp
PyVertical.cpp PyVertical.cpp
PyQueryMask.cpp PyQueryMask.cpp
PyQuery.cpp PyQuery.cpp
@ -127,6 +128,7 @@
hurricane/isobar/PyOrientation.h hurricane/isobar/PyOrientation.h
hurricane/isobar/PyDbU.h hurricane/isobar/PyDbU.h
hurricane/isobar/PyUpdateSession.h hurricane/isobar/PyUpdateSession.h
hurricane/isobar/PyDebugSession.h
hurricane/isobar/PyVertical.h hurricane/isobar/PyVertical.h
hurricane/isobar/PyQueryMask.h hurricane/isobar/PyQueryMask.h
hurricane/isobar/PyQuery.h hurricane/isobar/PyQuery.h

View File

@ -0,0 +1,153 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2014-2014, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyDebugSession.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyDebugSession.h"
#include "hurricane/isobar/PyEntity.h"
#include "hurricane/isobar/PyCell.h"
namespace Isobar {
using namespace Hurricane;
extern "C" {
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(DebugSession,session,function)
// +=================================================================+
// | "PyDebugSession" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
static void* PyObject_AsHurricaneSymbol ( PyObject* object )
{
return (void*)EntityCast( object );
}
static void PyDebugSession_DeAlloc ( PyDebugSession* self )
{
trace << "PyDebugSession_DeAlloc(" << hex << self << ")" << endl;
}
static PyObject* PyDebugSession_open ( PyObject*, PyObject* args )
{
trace << "PyDebugSession_open()" << endl;
HTRY
PyObject* pySymbol = NULL;
unsigned int traceLevel = 10000;
if (PyArg_ParseTuple( args
, "OI:DebugSession.open"
, &pySymbol
, &traceLevel
)) {
void* symbol = PyObject_AsHurricaneSymbol( pySymbol );
if (not symbol) {
Py_RETURN_NONE;
}
DebugSession::open( symbol, traceLevel );
} else {
PyErr_SetString( ConstructorError, "Bad parameters given to DebugSession.open()." );
return NULL;
}
HCATCH
Py_RETURN_NONE;
}
static PyObject* PyDebugSession_close ( PyObject* )
{
trace << "PyDebugSession_close()" << endl;
HTRY
DebugSession::close ();
HCATCH
Py_RETURN_NONE;
}
static PyObject* PyDebugSession_addToTrace ( PyObject*, PyObject* args )
{
trace << "PyDebugSession_addToTrace()" << endl;
HTRY
PyObject* pySymbol = NULL;
char* netName = NULL;
if (PyArg_ParseTuple( args
, "O|s:DebugSession.addToTrace"
, &pySymbol
, &netName
)) {
if (netName) {
if (not IsPyCell(pySymbol)) Py_RETURN_NONE;
Cell* cell = PYCELL_O( pySymbol );
DebugSession::addToTrace( cell, netName );
} else {
void* symbol = PyObject_AsHurricaneSymbol( pySymbol );
if (not symbol) {
Py_RETURN_NONE;
}
DebugSession::addToTrace( symbol );
}
} else {
PyErr_SetString( ConstructorError, "Bad parameters given to DebugSession.addToTrace()." );
return NULL;
}
HCATCH
Py_RETURN_NONE;
}
PyMethodDef PyDebugSession_Methods[] =
{ { "open" , (PyCFunction)PyDebugSession_open , METH_VARARGS|METH_CLASS
, "Opens a new Debug Session, tracing the given symbol." }
, { "close" , (PyCFunction)PyDebugSession_close , METH_NOARGS|METH_CLASS
, "Closes an Update Session." }
, { "addToTrace", (PyCFunction)PyDebugSession_addToTrace, METH_VARARGS|METH_CLASS
, "Adds a new object to be traced." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
PyTypeObjectLinkPyTypeWithoutObject(DebugSession,DebugSession)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyDebugSession" Shared Library Code Part |
// +=================================================================+
PyTypeObjectDefinitions(DebugSession)
# endif // Shared Library Code Part.
} // extern "C".
} // Isobar namespace.

View File

@ -1,8 +1,9 @@
// -*- C++ -*-
// //
// $Id: PyEntity.cpp,v 1.8 2007/04/26 13:38:47 d2 Exp $ // This file is part of the Coriolis Software.
// Copyright (c) UPMC 2010-2014, All Rights Reserved
// //
// x-----------------------------------------------------------------x // +-----------------------------------------------------------------+
// | |
// | C O R I O L I S | // | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface | // | I s o b a r - Hurricane / Python Interface |
// | | // | |
@ -10,10 +11,8 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Module : "./PyEntity.cpp" | // | C++ Module : "./PyEntity.cpp" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include "hurricane/isobar/PyNet.h" #include "hurricane/isobar/PyNet.h"
#include "hurricane/isobar/PyLayer.h" #include "hurricane/isobar/PyLayer.h"
@ -34,25 +33,24 @@
namespace Isobar { namespace Isobar {
using namespace Hurricane; using namespace Hurricane;
extern "C" { extern "C" {
// x=================================================================x // +=================================================================+
// | "PyEntity" Python Module Code Part | // | "PyEntity" Python Module Code Part |
// x=================================================================x // +=================================================================+
#if defined(__PYTHON_MODULE__) #if defined(__PYTHON_MODULE__)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Entity,entity,function) #define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Entity,entity,function)
// x-------------------------------------------------------------x // +-------------------------------------------------------------+
// | "PyEntity" Attribute Methods | // | "PyEntity" Attribute Methods |
// x-------------------------------------------------------------x // +-------------------------------------------------------------+
// Standart destroy (Attribute). // Standart destroy (Attribute).
DBoDestroyAttribute(PyEntity_destroy ,PyEntity) DBoDestroyAttribute(PyEntity_destroy ,PyEntity)
@ -74,8 +72,6 @@ extern "C" {
} }
// --------------------------------------------------------------- // ---------------------------------------------------------------
// PyEntity Attribute Method table. // PyEntity Attribute Method table.
@ -87,11 +83,9 @@ extern "C" {
}; };
// +-------------------------------------------------------------+
// x-------------------------------------------------------------x
// | "PyEntity" Object Methods | // | "PyEntity" Object Methods |
// x-------------------------------------------------------------x // +-------------------------------------------------------------+
DBoDeleteMethod(Entity) DBoDeleteMethod(Entity)
PyTypeObjectLinkPyType(Entity) PyTypeObjectLinkPyType(Entity)
@ -100,9 +94,9 @@ extern "C" {
#else // End of Python Module Code Part. #else // End of Python Module Code Part.
// x=================================================================x // +=================================================================+
// | "PyEntity" Shared Library Code Part | // | "PyEntity" Shared Library Code Part |
// x=================================================================x // +=================================================================+
// --------------------------------------------------------------- // ---------------------------------------------------------------
@ -156,16 +150,19 @@ extern "C" {
PyTypeRootObjectDefinitions(Entity) PyTypeRootObjectDefinitions(Entity)
// --------------------------------------------------------------- // ---------------------------------------------------------------
// PyEntity Object Definitions. // PyEntity Object Definitions.
#endif // End of Shared Library Code Part. #endif // Shared Library Code Part.
} // extern "C".
} // End of extern "C".
// +=================================================================+
// | "PyEntity" Shared Library Code Part |
// +=================================================================+
# if !defined(__PYTHON_MODULE__) # if !defined(__PYTHON_MODULE__)
@ -187,5 +184,4 @@ Hurricane::Entity* EntityCast ( PyObject* derivedObject ) {
#endif #endif
} // Isobar namespace.
} // End of Isobar namespace.

View File

@ -16,6 +16,7 @@
#include "hurricane/isobar/PyHurricane.h" #include "hurricane/isobar/PyHurricane.h"
#include "hurricane/isobar/PyBreakpoint.h" #include "hurricane/isobar/PyBreakpoint.h"
#include "hurricane/isobar/PyDebugSession.h"
#include "hurricane/isobar/PyUpdateSession.h" #include "hurricane/isobar/PyUpdateSession.h"
#include "hurricane/isobar/PyDbU.h" #include "hurricane/isobar/PyDbU.h"
#include "hurricane/isobar/PyPoint.h" #include "hurricane/isobar/PyPoint.h"
@ -496,6 +497,7 @@ extern "C" {
DL_EXPORT(void) initHurricane () { DL_EXPORT(void) initHurricane () {
trace << "initHurricane()" << endl; trace << "initHurricane()" << endl;
PyDebugSession_LinkPyType ();
PyUpdateSession_LinkPyType (); PyUpdateSession_LinkPyType ();
PyDbU_LinkPyType (); PyDbU_LinkPyType ();
PyPoint_LinkPyType (); PyPoint_LinkPyType ();
@ -556,6 +558,7 @@ extern "C" {
PyQuery_LinkPyType (); PyQuery_LinkPyType ();
PyQueryMask_LinkPyType (); PyQueryMask_LinkPyType ();
PYTYPE_READY ( DebugSession )
PYTYPE_READY ( UpdateSession ) PYTYPE_READY ( UpdateSession )
PYTYPE_READY ( Point ) PYTYPE_READY ( Point )
PYTYPE_READY ( DbU ) PYTYPE_READY ( DbU )
@ -745,6 +748,8 @@ extern "C" {
PyModule_AddObject ( module, "ContactLayer" , (PyObject*)&PyTypeContactLayer ); PyModule_AddObject ( module, "ContactLayer" , (PyObject*)&PyTypeContactLayer );
Py_INCREF ( &PyTypeNetExternalComponents ); Py_INCREF ( &PyTypeNetExternalComponents );
PyModule_AddObject ( module, "NetExternalComponents", (PyObject*)&PyTypeNetExternalComponents ); PyModule_AddObject ( module, "NetExternalComponents", (PyObject*)&PyTypeNetExternalComponents );
Py_INCREF ( &PyTypeDebugSession );
PyModule_AddObject ( module, "DebugSession" , (PyObject*)&PyTypeDebugSession );
Py_INCREF ( &PyTypeUpdateSession ); Py_INCREF ( &PyTypeUpdateSession );
PyModule_AddObject ( module, "UpdateSession" , (PyObject*)&PyTypeUpdateSession ); PyModule_AddObject ( module, "UpdateSession" , (PyObject*)&PyTypeUpdateSession );
Py_INCREF ( &PyTypeBreakpoint ); Py_INCREF ( &PyTypeBreakpoint );

View File

@ -0,0 +1,54 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2014-2014, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Header : "./PyDebugSession.h" |
// +-----------------------------------------------------------------+
#ifndef ISOBAR_PY_DEBUG_SESSION_H
#define ISOBAR_PY_DEBUG_SESSION_H
#include "hurricane/isobar/PyHurricane.h"
#include "hurricane/DebugSession.h"
namespace Isobar {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyDebugSession".
typedef struct {
PyObject_HEAD
} PyDebugSession;
// -------------------------------------------------------------------
// Functions & Types exported to "PyHurricane.cpp".
extern PyTypeObject PyTypeDebugSession;
extern PyMethodDef PyDebugSession_Methods[];
extern void PyDebugSession_LinkPyType ();
#define IsPyDebugSession(v) ( (v)->ob_type == &PyTypeDebugSession )
#define PYUPDATESESSION(v) ( (PyDebugSession*)(v) )
#define PYUPDATESESSION_O(v) ( PY_UPDATE_SESSION(v)->_object )
} // extern "C".
} // Isobar namespace.
# endif

View File

@ -1,70 +1,28 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Project. // This file is part of the Coriolis Software.
// Copyright (C) Laboratoire LIP6 - Departement ASIM // Copyright (c) UPMC 2010-2014, All Rights Reserved
// Universite Pierre et Marie Curie
// //
// Main contributors : // +-----------------------------------------------------------------+
// Christophe Alexandre <Christophe.Alexandre@lip6.fr>
// Sophie Belloeil <Sophie.Belloeil@lip6.fr>
// Hugo Clément <Hugo.Clement@lip6.fr>
// Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>
// Damien Dupuis <Damien.Dupuis@lip6.fr>
// Christian Masson <Christian.Masson@lip6.fr>
// Marek Sroka <Marek.Sroka@lip6.fr>
//
// The Coriolis Project is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version.
//
// The Coriolis Project is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with the Coriolis Project; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
// License-Tag
// Authors-Tag
// ===================================================================
//
// $Id: PyEntity.h,v 1.3 2006/05/03 14:00:02 jpc Exp $
//
// x-----------------------------------------------------------------x
// | |
// | C O R I O L I S | // | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface | // | I s o b a r - Hurricane / Python Interface |
// | | // | |
// | Author : Sophie BELLOEIL | // | Author : Sophie BELLOEIL |
// | E-mail : Sophie.Belloeil@asim.lip6.fr | // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Header : "./PyEntity.h" | // | C++ Header : "./hurricane/isobar/PyEntity.h" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#ifndef ISOBAR_PY_ENTITY_H
#define ISOBAR_PY_ENTITY_H
#ifndef __PYENTITY__
#define __PYENTITY__
#include "hurricane/isobar/PyHurricane.h" #include "hurricane/isobar/PyHurricane.h"
#include "hurricane/Entity.h" #include "hurricane/Entity.h"
namespace Isobar { namespace Isobar {
extern "C" { extern "C" {
@ -77,12 +35,9 @@ extern "C" {
} PyEntity; } PyEntity;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Functions & Types exported to "PyHurricane.ccp". // Functions & Types exported to "PyHurricane.ccp".
extern PyObject* PyEntity_NEW ( Hurricane::Entity* entity ); extern PyObject* PyEntity_NEW ( Hurricane::Entity* entity );
extern void PyEntity_LinkPyType (); extern void PyEntity_LinkPyType ();
@ -95,17 +50,12 @@ extern "C" {
#define PYENTITY_O(v) ( PYENTITY(v)->_object ) #define PYENTITY_O(v) ( PYENTITY(v)->_object )
} // End of extern "C". } // extern "C".
Hurricane::Entity* EntityCast ( PyObject* derivedObject ); Hurricane::Entity* EntityCast ( PyObject* derivedObject );
} // Isobar namespace.
#endif // ISOBAR_PY_ENTITY_H
} // End of Isobar namespace.
#endif

View File

@ -114,4 +114,7 @@
install ( FILES ${includes} install ( FILES ${includes}
${mocIncludes} ${mocIncludes}
${pyIncludes} DESTINATION include/coriolis2/kite ) ${pyIncludes} DESTINATION include/coriolis2/kite )
install ( FILES init/kiteInit.py
DESTINATION ${PYTHON_SITE_PACKAGES}/kite )

View File

@ -14,9 +14,11 @@
// +-----------------------------------------------------------------+ // +-----------------------------------------------------------------+
#include <Python.h>
#include <sstream> #include <sstream>
#include <fstream> #include <fstream>
#include <iomanip> #include <iomanip>
#include "vlsisapd/utilities/Path.h"
#include "hurricane/DebugSession.h" #include "hurricane/DebugSession.h"
#include "hurricane/Bug.h" #include "hurricane/Bug.h"
#include "hurricane/Error.h" #include "hurricane/Error.h"
@ -30,6 +32,7 @@
#include "hurricane/Instance.h" #include "hurricane/Instance.h"
#include "hurricane/Vertical.h" #include "hurricane/Vertical.h"
#include "hurricane/Horizontal.h" #include "hurricane/Horizontal.h"
#include "hurricane/viewer/Script.h"
#include "crlcore/Measures.h" #include "crlcore/Measures.h"
#include "knik/Vertex.h" #include "knik/Vertex.h"
#include "knik/Edge.h" #include "knik/Edge.h"
@ -43,6 +46,7 @@
#include "kite/TrackSegment.h" #include "kite/TrackSegment.h"
#include "kite/NegociateWindow.h" #include "kite/NegociateWindow.h"
#include "kite/KiteEngine.h" #include "kite/KiteEngine.h"
#include "kite/PyKiteEngine.h"
namespace Kite { namespace Kite {
@ -58,6 +62,7 @@ namespace Kite {
using std::setprecision; using std::setprecision;
using std::vector; using std::vector;
using std::make_pair; using std::make_pair;
using Hurricane::dbo_ptr;
using Hurricane::DebugSession; using Hurricane::DebugSession;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::inltrace; using Hurricane::inltrace;
@ -72,6 +77,7 @@ namespace Kite {
using Hurricane::Torus; using Hurricane::Torus;
using Hurricane::Layer; using Hurricane::Layer;
using Hurricane::Cell; using Hurricane::Cell;
using CRL::System;
using CRL::addMeasure; using CRL::addMeasure;
using CRL::Measures; using CRL::Measures;
using CRL::MeasuresSet; using CRL::MeasuresSet;
@ -119,6 +125,27 @@ namespace Kite {
} }
void KiteEngine::_runKiteInit ()
{
Utilities::Path pythonSitePackages = System::getPath("pythonSitePackages");
Utilities::Path systemConfDir = pythonSitePackages / "kite";
Utilities::Path systemConfFile = systemConfDir / "kiteInit.py";
if (systemConfFile.exists()) {
Isobar::Script::addPath( systemConfDir.string() );
dbo_ptr<Isobar::Script> script = Isobar::Script::create( systemConfFile.stem().string() );
script->addKwArgument( "kite" , (PyObject*)PyKiteEngine_Link(this) );
script->runFunction ( "kiteHook", getCell() );
Isobar::Script::removePath( systemConfDir.string() );
} else {
cerr << Warning("Kite system configuration file:\n <%s> not found."
,systemConfFile.string().c_str()) << endl;
}
}
void KiteEngine::_initDataBase () void KiteEngine::_initDataBase ()
{ {
ltrace(90) << "KiteEngine::_initDataBase()" << endl; ltrace(90) << "KiteEngine::_initDataBase()" << endl;
@ -132,6 +159,7 @@ namespace Kite {
buildPowerRails(); buildPowerRails();
protectRoutingPads(); protectRoutingPads();
Session::close(); Session::close();
_runKiteInit();
ltraceout(90); ltraceout(90);
} }

33
kite/src/init/kiteInit.py Normal file
View File

@ -0,0 +1,33 @@
#!/usr/bin/env python
try:
import sys
import os.path
from helpers import ErrorMessage
from helpers import WarningMessage
import Viewer
except ImportError, e:
module = str(e).split()[-1]
print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module
print ' Please check the integrity of the <coriolis> package.'
sys.exit(1)
except Exception, e:
print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python'
print ' modules. Something may be wrong at Python/C API level.\n'
print ' %s' % e
sys.exit(2)
def kiteHook ( **kw ):
kite = None
if kw.has_key('kite'):
kite = kw['kite']
else:
print ErrorMessage( 3, 'kiteHook(): Must be run from a KiteEngine.' )
return
userInit = os.path.join( os.getcwd(), '.coriolis2.kite.py' )
if (os.path.exists(userInit)):
execfile( userInit )
return

View File

@ -110,6 +110,7 @@ namespace Kite {
void runGlobalRouter ( unsigned int mode ); void runGlobalRouter ( unsigned int mode );
virtual void loadGlobalRouting ( unsigned int method ); virtual void loadGlobalRouting ( unsigned int method );
virtual void finalizeLayout (); virtual void finalizeLayout ();
void _runKiteInit ();
void _gutKite (); void _gutKite ();
void _computeCagedConstraints (); void _computeCagedConstraints ();
TrackElement* _lookup ( Segment* ) const; TrackElement* _lookup ( Segment* ) const;

View File

@ -90,7 +90,7 @@ namespace Unicorn {
Isobar::Script::removePath( systemConfDir.string() ); Isobar::Script::removePath( systemConfDir.string() );
} else { } else {
cerr << Warning("System configuration file:\n <%s> not found." cerr << Warning("Unicorn system configuration file:\n <%s> not found."
,systemConfFile.string().c_str()) << endl; ,systemConfFile.string().c_str()) << endl;
} }
} }