coriolis/crlcore/python/coriolisInit.py

220 lines
9.8 KiB
Python

try:
import sys
import os
import os.path
import copy
import Cfg
import Hurricane
import Viewer
import CRL
from CRL import Environment
from CRL import RoutingLayerGauge
from helpers import Configuration
from helpers.io import ErrorMessage
from helpers.io import WarningMessage
#from helpers import Devices
from helpers.Configuration import TypeBool
from helpers.Configuration import TypeInt
from helpers.Configuration import TypeEnumerate
from helpers.Configuration import TypePercentage
from helpers.Configuration import TypeDouble
from helpers.Configuration import TypeString
from helpers.Configuration import TypeTab
from helpers.Configuration import TypeTitle
from helpers.Configuration import TypeSection
from helpers.Configuration import TypeRule
from helpers.Configuration import TypeOption
from helpers import Patterns
from helpers import Display
from helpers.Display import Style
from helpers.Display import Inherit
from helpers.Display import Darkening
from helpers.Display import Group
from helpers.Display import Drawing
from helpers import Alliance
from helpers import Technology
from helpers import AnalogTechno
from helpers import Devices
import helpers.Display
except ImportError, e:
serror = str(e)
if serror.startswith('No module named') \
or serror.startswith('cannot import name') :
module = serror.split()[-1]
print '[ERROR] The "%s" python module or symbol cannot be loaded.' % module
print ' Please check the integrity of the Coriolis package.'
if serror.find('cannot open shared object file') != -1:
library = serror.split(':')[0]
print '[ERROR] The "%s" shared library cannot be loaded.' % library
print ' Under RHEL 6, you must be under devtoolset-2.'
print ' (scl enable devtoolset-2 bash)'
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)
helpers.staticInitialization()
moduleGlobals = globals()
SystemFile = 0x0001
AllianceHelper = 0x0002
TechnologyHelper = 0x0004
PatternsHelper = 0x0010
DisplayHelper = 0x0020
ConfigurationHelper = 0x0040
KiteHelper = 0x0080
HelpersMask = AllianceHelper \
| TechnologyHelper \
| PatternsHelper \
| DisplayHelper \
| ConfigurationHelper \
| KiteHelper
SystemMandatory = 0x0100
def coriolisConfigure():
confHelpers = ( ('allianceConfig' , Alliance.loadAllianceConfig , SystemMandatory|AllianceHelper)
, ('routingGaugesTable' , Alliance.loadRoutingGaugesTable, SystemMandatory|KiteHelper)
, ('cellGaugesTable' , Alliance.loadCellGaugesTable , SystemMandatory|KiteHelper)
, ('realLayersTable' , Technology.loadRealLayers , SystemMandatory|TechnologyHelper)
, ('compositeLayersTable' , Technology.loadCompositeLayers , SystemMandatory|TechnologyHelper)
, ('symbolicLayersTable' , Technology.tagSymbolicLayers , SystemMandatory|TechnologyHelper)
, ('layersExtensionsTable', Technology.loadLayersExtensions, SystemMandatory|TechnologyHelper)
, ('gdsLayersTable' , Technology.loadGdsLayers , SystemMandatory|TechnologyHelper)
, ('patternsTable' , Patterns.loadPatterns , SystemMandatory|PatternsHelper)
, ('stylesTable' , Display.loadStyles , SystemMandatory|DisplayHelper)
, ('defaultStyle' , Display.loadDefaultStyle , SystemMandatory|DisplayHelper)
, ('parametersTable' , Configuration.loadParameters , ConfigurationHelper)
, ('layoutTable' , Configuration.loadLayout , ConfigurationHelper)
)
# ('technoConfig' , Technology.loadTechnoConfig , SystemMandatory|TechnologyHelper)
print ' o Running configuration hook: coriolisConfigure().'
#print ' - sysConfDir: <%s>' % helpers.sysConfDir
Cfg.Configuration.pushDefaultPriority ( Cfg.Parameter.Priority.ConfigurationFile )
confFiles = [ (helpers.technoDir+'/technology.conf', SystemFile|TechnologyHelper)
, (helpers.technoDir+'/alliance.conf' , SystemFile|AllianceHelper)
, (helpers.technoDir+'/patterns.conf' , SystemFile|PatternsHelper)
, (helpers.technoDir+'/display.conf' , SystemFile|DisplayHelper)
, (helpers.technoDir+'/misc.conf' , SystemFile|ConfigurationHelper)
, (helpers.technoDir+'/etesian.conf' , SystemFile|ConfigurationHelper)
, (helpers.technoDir+'/kite.conf' , SystemFile|ConfigurationHelper|KiteHelper)
, (helpers.technoDir+'/stratus1.conf' , SystemFile|ConfigurationHelper)
, (helpers.technoDir+'/plugins.conf' , SystemFile|ConfigurationHelper)
, (helpers.technoDir+'/analog.conf' , SystemFile|ConfigurationHelper)
]
if os.getenv('HOME'):
confFiles += [ (os.getenv('HOME')+'/.coriolis2/settings.py', 0) ]
else:
w = WarningMessage(['The "HOME" environment variable is not defined, this is most unusual.'
,'It prevents the loading of ${HOME}/.coriolis2/settings.py'])
print w
confFiles += [ (os.getcwd()+'/.coriolis2/settings.py', 0) ]
for confFile, confFlags in confFiles:
if confFile.endswith('settings.py'):
Cfg.Configuration.pushDefaultPriority ( Cfg.Parameter.Priority.UserFile )
try:
if not os.path.isfile(confFile):
if confFlags & SystemFile:
print '[ERROR] Missing mandatory Coriolis2 system file:'
print ' "%s"' % helpers.truncPath(confFile)
print ' Your installation may be broken. Trying to continue anyway...'
continue
print ' - Loading "%s".' % helpers.truncPath(confFile)
execfile(confFile,moduleGlobals)
except Exception, e:
helpers.showPythonTrace( confFile, e )
for symbol, loader, loaderFlags in confHelpers:
if moduleGlobals.has_key(symbol):
loader( moduleGlobals[symbol], confFile )
del moduleGlobals[symbol]
else:
if confFlags & loaderFlags & HelpersMask:
if confFlags & SystemFile and loaderFlags & SystemMandatory:
print '[ERROR] Mandatory symbol "%s" is missing in system configuration file:' % symbol
print ' "%s"' % helpers.truncPath(confFile)
print ' Trying to continue anyway...'
if confFile.endswith('settings.py'):
Cfg.Configuration.popDefaultPriority ()
Cfg.Configuration.popDefaultPriority ()
#sys.stdout.write(CRL.AllianceFramework.get().getEnvironment().getPrint())
if not Cfg.getParamString('stratus1.mappingName').asString():
vendorTech = helpers.techno.split('/')[-1]
mappingFile = os.path.join( helpers.technoDir, 'stratus.xml' )
if not os.path.isfile(mappingFile):
mappingFile = os.path.join( helpers.sysConfDir, 'stratus2sxlib.xml' )
parameter = Cfg.getParamString('stratus1.mappingName')
parameter.setString( mappingFile )
parameter.flags = Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist
confFile = None
if Cfg.hasParameter('analog.techno'):
confFile = Cfg.getParamString('analog.techno').asString()
if confFile == 'Analog_technology_has_not_been_set': confFile = None
if confFile == 'Analog_technology_is_disabled': return
if not confFile:
vendorTech = helpers.techno.split('/')[-1]
confFile = os.path.join( helpers.technoDir, 'dtr_%s.py'%vendorTech )
Cfg.getParamString('analog.techno').setString( confFile )
if not os.path.isfile(confFile):
print '[WARNING] Analog technology file (aka DTR) has not been found:'
print ' "%s"' % helpers.truncPath(confFile)
print ' Use of Coriolis analog is disabled.'
return
try:
if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile)
execfile(confFile,moduleGlobals)
except Exception, e:
showPythonTrace( confFile, e )
if moduleGlobals.has_key('analogTechnologyTable'):
AnalogTechno.loadAnalogTechno( moduleGlobals['analogTechnologyTable'], confFile )
del moduleGlobals['analogTechnologyTable']
else:
print '[ERROR] Mandatory symbol <%s> is missing in technology configuration file:' % 'analogTechnologyTable'
print ' "%s"' % helpers.truncPath(confFile)
sys.exit( 1 )
confFile = Cfg.getParamString('analog.devices').asString()
if not os.path.isfile(confFile):
print '[ERROR] Missing mandatory analog devices description file:'
print ' "%s"' % helpers.truncPath(confFile)
print ' Please look for the "analog.devices" parameter in configuration files.'
sys.exit( 1 )
try:
if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile)
execfile(confFile,moduleGlobals)
except Exception, e:
showPythonTrace( confFile, e )
if moduleGlobals.has_key('devicesTable'):
Devices.loadDevices( moduleGlobals['devicesTable'], confFile )
del moduleGlobals['devicesTable']
else:
print '[ERROR] Mandatory symbol "%s" is missing in technology configuration file:' % 'devicesTable'
print ' "%s"' % helpers.truncPath(confFile)
sys.exit( 1 )
return