- elif args['portkill']:
- givenPortKill(str(args['port']))
-
-# -----------------------------------------------------------------------------
-#
-# Class definitions to launch CORBA Servers
-#
-
-class InterpServer(Server):
- def __init__(self,args):
- self.args=args
- if sys.platform != "win32":
- env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")]
- self.CMD=['xterm', '-e']+ env_ld_library_path + ['python']
- else:
- self.CMD=['cmd', '/c', 'start cmd.exe', '/K', 'python']
-
- def run(self):
- global process_id
- command = self.CMD
- print "INTERPSERVER::command = ", command
- if sys.platform == "win32":
- import win32pm
- pid = win32pm.spawnpid( string.join(command, " "),'-nc' )
- else:
- pid = os.spawnvp(os.P_NOWAIT, command[0], command)
- process_id[pid]=self.CMD
- self.PID = pid
-
-# ---
-
-def get_cata_path(list_modules,modules_root_dir):
- """Build a list of catalog paths (cata_path) to initialize the ModuleCatalog server
- """
- modules_cata={}
- cata_path=[]
-
- for module in list_modules:
- if modules_root_dir.has_key(module):
- module_root_dir=modules_root_dir[module]
- module_cata=module+"Catalog.xml"
- cata_file=os.path.join(module_root_dir, "share",setenv.salome_subdir, "resources",module.lower(), module_cata)
-
- if os.path.exists(cata_file):
- cata_path.append(cata_file)
- modules_cata[module]=cata_file
- else:
- cata_file=os.path.join(module_root_dir, "share",setenv.salome_subdir, "resources", module_cata)
- if os.path.exists(cata_file):
- cata_path.append(cata_file)
- modules_cata[module]=cata_file
-
- for path in os.getenv("SALOME_CATALOGS_PATH","").split(os.pathsep):
- if os.path.exists(path):
- for cata_file in glob.glob(os.path.join(path,"*Catalog.xml")):
- module_name= os.path.basename(cata_file)[:-11]
- if not modules_cata.has_key(module_name):
- cata_path.append(cata_file)
- modules_cata[module_name]=cata_file
-
- return cata_path
-
-_siman_name = None
-def simanStudyName(args):
- global _siman_name
- if _siman_name is None:
- # siman session paramenters and checkout processing
- _siman_name = ""
- if 'siman' in args:
- siman_data = []
- for param in [ 'study', 'scenario', 'user']:
- siman_param = "siman_%s"%param
- if siman_param in args:
- siman_data.append(args[siman_param])
- else:
- print "SIMAN %s must be defined using parameter --siman-%s=XXX" % (siman_param, siman_param)
- pass
- pass
- if len(siman_data) == 3:
- _siman_name = "_".join(siman_data)
- pass
- pass
- pass
- return _siman_name
-
-class CatalogServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.SCMD1=['SALOME_ModuleCatalog_Server','-common']
- self.SCMD2=[]
- home_dir=os.getenv('HOME')
- if home_dir is not None:
- self.SCMD2=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')]
-
- def setpath(self,modules_list,modules_root_dir):
- list_modules = modules_list[:]
- list_modules.reverse()
- if self.args["gui"] :
- list_modules = ["KERNEL", "GUI"] + list_modules
- else :
- list_modules = ["KERNEL"] + list_modules
-
- cata_path=get_cata_path(list_modules,modules_root_dir)
-
- self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
-
-# ---
-
-class SalomeDSServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.CMD=['SALOMEDS_Server']
-
-# ---
-
-class ConnectionManagerServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.CMD=['SALOME_ConnectionManagerServer']
-
-# ---
-
-class RegistryServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.CMD=['SALOME_Registry_Server', '--salome_session','theSession']
-
-# ---
-
-class ContainerCPPServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.CMD=['SALOME_Container','FactoryServer']
-
-# ---
-
-class LoggerServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- from salome_utils import generateFileName, getLogDir
- logfile = generateFileName( getLogDir(),
- prefix="logger",
- extension="log",
- with_username=True,
- with_hostname=True,
- with_port=True)
- print "==========================================================="
- print "Logger server: put log to the file:"
- print logfile
- print "==========================================================="
- self.CMD=['SALOME_Logger_Server', logfile]
- pass
- pass # end of LoggerServer class
-
-# ---
-
-class SessionServer(Server):
- def __init__(self,args,modules_list,modules_root_dir):
- self.args = args.copy()
- # Bug 11512 (Problems with runSalome --xterm on Mandrake and Debian Sarge)
- #self.args['xterm']=0
- #
- self.initArgs()
- self.SCMD1=['SALOME_Session_Server']
- self.SCMD2=[]
- if 'registry' in self.args['embedded']:
- self.SCMD1+=['--with','Registry',
- '(','--salome_session','theSession',')']
- if 'moduleCatalog' in self.args['embedded']:
- self.SCMD1+=['--with','ModuleCatalog','(','-common']
- home_dir=os.getenv('HOME')
- if home_dir is not None:
- self.SCMD2+=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')]
- self.SCMD2+=[')']
- if 'study' in self.args['embedded']:
- self.SCMD2+=['--with','SALOMEDS','(',')']
- if 'cppContainer' in self.args['embedded']:
- self.SCMD2+=['--with','Container','(','FactoryServer',')']
- if 'SalomeAppEngine' in self.args['embedded']:
- self.SCMD2+=['--with','SalomeAppEngine','(',')']
-
- if 'cppContainer' in self.args['standalone'] or 'cppContainer' in self.args['embedded']:
- self.SCMD2+=['CPP']
- if 'pyContainer' in self.args['standalone'] or 'pyContainer' in self.args['embedded']:
- raise Exception('Python containers no longer supported')
- if self.args['gui']:
- session_gui = True
- if self.args.has_key('session_gui'):
- session_gui = self.args['session_gui']
- if session_gui:
- self.SCMD2+=['GUI']
- if self.args['splash']:
- self.SCMD2+=['SPLASH']
- pass
- if self.args['study_hdf'] is not None:
- self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']]
- pass
- if simanStudyName(self.args):
- self.SCMD2+=['--siman-study=%s'%simanStudyName(self.args)]
- pass
- pass
- if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0:
- msg = json.dumps(self.args['pyscript'], cls=ScriptAndArgsObjectEncoder)
- self.SCMD2+=['--pyscript=%s'%(msg)]
- pass
- pass
- pass
- if self.args['noexcepthandler']:
- self.SCMD2+=['noexcepthandler']
- if self.args.has_key('user_config'):
- self.SCMD2+=['--resources=%s'%self.args['user_config']]
- if self.args.has_key('modules'):
- list_modules = []
- #keep only modules with GUI
- for m in modules_list:
- if m not in modules_root_dir:
- list_modules.insert(0,m)
- else:
- fr1 = os.path.join(modules_root_dir[m],"share","salome","resources",m.lower(),"SalomeApp.xml")
- fr2 = os.path.join(modules_root_dir[m],"share","salome","resources","SalomeApp.xml")
- if os.path.exists(fr1) or os.path.exists(fr2):
- list_modules.insert(0,m)
- list_modules.reverse()
- self.SCMD2+=['--modules (%s)' % ":".join(list_modules)]
- pass
- pass
-
- def setpath(self,modules_list,modules_root_dir):
- list_modules = modules_list[:]
- list_modules.reverse()
- if self.args["gui"] :
- list_modules = ["KERNEL", "GUI"] + list_modules
- else :
- list_modules = ["KERNEL"] + list_modules
-
- cata_path=get_cata_path(list_modules,modules_root_dir)
-
- if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']):
- #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform
- self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
- else:
- self.CMD=self.SCMD1 + self.SCMD2
- if self.args.has_key('test'):
- self.CMD+=['-test'] + self.args['test']
- elif self.args.has_key('play'):
- self.CMD+=['-play'] + self.args['play']
-
- if self.args["gdb_session"] or self.args["ddd_session"]:
- f = open(".gdbinit4salome", "w")
- f.write("set args ")
- args = " ".join(self.CMD[1:])
- args = args.replace("(", "\(")
- args = args.replace(")", "\)")
- f.write(args)
- f.write("\n")
- f.close()
- if self.args["ddd_session"]:
- self.CMD = ["ddd", "--command=.gdbinit4salome", self.CMD[0]]
- elif self.args["gdb_session"]:
- self.CMD = ["xterm", "-e", "gdb", "--command=.gdbinit4salome", self.CMD[0]]
- pass
- pass
-
- if self.args["valgrind_session"]:
- l = ["valgrind"]
- val = os.getenv("VALGRIND_OPTIONS")
- if val:
- l += val.split()
- pass
- self.CMD = l + self.CMD
- pass
-
-# ---
-
-class LauncherServer(Server):
- def __init__(self,args):
- self.args=args
- self.initArgs()
- self.SCMD1=['SALOME_LauncherServer']
- self.SCMD2=[]
- if args["gui"] :
- if 'registry' in self.args['embedded']:
- self.SCMD1+=['--with','Registry',
- '(','--salome_session','theSession',')']
- if 'moduleCatalog' in self.args['embedded']:
- self.SCMD1+=['--with','ModuleCatalog','(','-common']
- self.SCMD2+=['-personal',
- '${HOME}/Salome/resources/CatalogModulePersonnel.xml',')']
- if 'study' in self.args['embedded']:
- self.SCMD2+=['--with','SALOMEDS','(',')']
- if 'cppContainer' in self.args['embedded']:
- self.SCMD2+=['--with','Container','(','FactoryServer',')']
-
- def setpath(self,modules_list,modules_root_dir):
- list_modules = modules_list[:]
- list_modules.reverse()
- if self.args["gui"] :
- list_modules = ["KERNEL", "GUI"] + list_modules
- else :
- list_modules = ["KERNEL"] + list_modules
-
- cata_path=get_cata_path(list_modules,modules_root_dir)
-
- if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']):
- #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform
- self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
- else:
- self.CMD=self.SCMD1 + self.SCMD2