#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
#
# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
from launchConfigureParser import verbose
from server import process_id, Server
import json
-from salomeLauncherUtils import formatScriptsAndArgs
import subprocess
+from salomeContextUtils import ScriptAndArgsObjectEncoder
# -----------------------------------------------------------------------------
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:
+ if sys.platform == "win32":
self.CMD=['cmd', '/c', 'start cmd.exe', '/K', 'python']
+ elif sys.platform == "darwin":
+ env_ld_library_path=['env', 'DYLD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")]
+ self.CMD=['xterm', '-e'] + env_ld_library_path + ['python']
+ else:
+ env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")]
+ self.CMD=['xterm', '-e'] + env_ld_library_path + ['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)
+ import subprocess
+ pid = subprocess.Popen(command).pid
process_id[pid]=self.CMD
self.PID = pid
return cata_path
-
-
class CatalogServer(Server):
def __init__(self,args):
self.args=args
# ---
class ContainerCPPServer(Server):
- def __init__(self,args):
+ def __init__(self,args,with_gui=False):
self.args=args
self.initArgs()
self.CMD=['SALOME_Container','FactoryServer']
+ if not with_gui and self.args["valgrind_session"]:
+ l = ["valgrind"]
+ val = os.getenv("VALGRIND_OPTIONS")
+ if val:
+ l += val.split()
+ pass
+ self.CMD = l + self.CMD
+ pass
# ---
def __init__(self,args):
self.args=args
self.initArgs()
- from salome_utils import generateFileName
- if sys.platform == "win32": dirpath = os.environ["HOME"]
- else: dirpath = "/tmp"
- logfile = generateFileName( dirpath,
+ from salome_utils import generateFileName, getLogDir
+ logfile = generateFileName( getLogDir(),
prefix="logger",
extension="log",
with_username=True,
pass
pass
if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0:
- msg = json.dumps(self.args['pyscript'])
+ msg = json.dumps(self.args['pyscript'], cls=ScriptAndArgsObjectEncoder)
self.SCMD2+=['--pyscript=%s'%(msg)]
pass
pass
list_modules.reverse()
self.SCMD2+=['--modules (%s)' % ":".join(list_modules)]
pass
+ if self.args.has_key('language'):
+ self.SCMD2+=['--language=%s' % self.args['language']]
pass
def setpath(self,modules_list,modules_root_dir):
self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
else:
self.CMD=self.SCMD1 + self.SCMD2
-
-class NotifyServer(Server):
- def __init__(self,args,modules_root_dir):
- self.args=args
- self.initArgs()
- self.modules_root_dir=modules_root_dir
- myLogName = os.environ["LOGNAME"]
- self.CMD=['notifd','-c',
- self.modules_root_dir["KERNEL"] +'/share/salome/resources/kernel/channel.cfg',
- '-DFactoryIORFileName=/tmp/'+myLogName+'_rdifact.ior',
- '-DChannelIORFileName=/tmp/'+myLogName+'_rdichan.ior',
- '-DReportLogFile=/tmp/'+myLogName+'_notifd.report',
- '-DDebugLogFile=/tmp/'+myLogName+'_notifd.debug',
- ]
-
#
# -----------------------------------------------------------------------------
args["session_object"] = session
return clt
- # Save Naming service port name into
- # the file args["ns_port_log_file"]
- if args.has_key('ns_port_log_file'):
- omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
- file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"])
- f = open(file_name, "w")
- f.write(os.environ['NSPORT'])
- f.close()
-
# Launch Logger Server (optional)
# and wait until it is registered in naming service
#
myServer.run()
clt.waitLogger("Logger")
- # Notify Server launch
- #
-
- if sys.platform != "win32":
- if verbose(): print "Notify Server to launch"
-
- myServer=NotifyServer(args,modules_root_dir)
- myServer.run()
-
# Launch Session Server (to show splash ASAP)
#
#
if ('cppContainer' in args['standalone']) | (args["gui"] == 0) :
- myServer=ContainerCPPServer(args)
+ myServer=ContainerCPPServer(args, with_gui=args["gui"]!=0)
myServer.run()
if sys.platform == "win32":
clt.waitNS("/Containers/" + theComputer + "/FactoryServer")
else:
clt.waitNSPID("/Containers/" + theComputer + "/FactoryServer",myServer.PID)
- #
- # Launch local Python Container (FactoryServerPy),
- # and wait until it is registered in naming service
- #
-
if 'pyContainer' in args['standalone']:
raise Exception('Python containers no longer supported')
self.killSalomeWithPort.killMyPort(self.port)
return
pass
- args['shutdown_servers'] = __utils__(args['port'])
+ def func(s):
+ del s
+ import atexit
+ atexit.register(func, __utils__(args['port']))
pass
pass
# run python scripts, passed as command line arguments
toimport = []
- if args.has_key('pyscript'):
- if args.has_key('gui') and args.has_key('session_gui'):
- if not args['gui'] or not args['session_gui']:
+ if args.has_key('gui') and args.has_key('session_gui'):
+ if not args['gui'] or not args['session_gui']:
+ if args.has_key('study_hdf'):
+ toopen = args['study_hdf']
+ if toopen:
+ import salome
+ salome.salome_init(toopen)
+ if args.has_key('pyscript'):
toimport = args['pyscript']
-
+ from salomeContextUtils import formatScriptsAndArgs
command = formatScriptsAndArgs(toimport)
if command:
proc = subprocess.Popen(command, shell=True)
- proc.wait()
+ addToKillList(proc.pid, command, args['port'])
+ res = proc.wait()
+ if res: sys.exit(1) # if there's an error when executing script, we should explicitly exit
return clt
def execScript(script_path):
print 'executing', script_path
- sys.path.insert(0, os.path.dirname(script_path))
+ sys.path.insert(0, os.path.realpath(os.path.dirname(script_path)))
execfile(script_path,globals())
del sys.path[0]
Register args, modules_list, modules_root_dir in a file
for further use, when SALOME is launched embedded in an other application.
"""
- if sys.platform == "win32":
- fileEnv = os.getenv('TEMP')
- else:
- fileEnv = '/tmp/'
-
- fileEnv += os.getenv('USER') + "_" + str(args['port']) \
+ from salome_utils import getTmpDir
+ fileEnv = getTmpDir()
+ from salome_utils import getUserName
+ fileEnv += getUserName() + "_" + str(args['port']) \
+ '_' + args['appname'].upper() + '_env'
fenv=open(fileEnv,'w')
pickle.dump((args, modules_list, modules_root_dir),fenv)
# -----------------------------------------------------------------------------
-def main():
+def main(exeName=None):
"""Salome launch as a main application"""
- ### TEMP >>> ###
- if not os.getenv("OMNIORB_USER_PATH"):
- homePath = os.path.realpath(os.path.expanduser('~'))
- #defaultOmniorbUserPath = os.path.join(homePath, ".salomeConfig/USERS")
- defaultOmniorbUserPath = homePath
- if os.getenv("APPLI"):
- defaultOmniorbUserPath = os.path.join(homePath, os.getenv("APPLI"), "USERS")
- os.environ["OMNIORB_USER_PATH"] = defaultOmniorbUserPath
- pass
- ### <<< TEMP ###
+ # define folder to store omniorb config (initially in virtual application folder)
+ try:
+ from salomeContextUtils import setOmniOrbUserPath
+ setOmniOrbUserPath()
+ except Exception, e:
+ print e
+ sys.exit(1)
from salome_utils import getHostName
+ args, modules_list, modules_root_dir = setenv.get_config(exeName=exeName)
print "runSalome running on %s" % getHostName()
- args, modules_list, modules_root_dir = setenv.get_config()
kill_salome(args)
save_config = True
if test:
foreGround(clt, args)
pass
- # --
pass
#