220 lines
9.8 KiB
Python
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
|