Salome HOME
Fix subdir duplicates in CTestTestfile
[modules/kernel.git] / bin / runSalome.py
index 63652278c9a33a36031b3595c40e01dcdacc5867..29b915751dfa32e5d115a7d85257bd4fce55de32 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2015  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
@@ -33,6 +33,7 @@ from launchConfigureParser import verbose
 from server import process_id, Server
 import json
 import subprocess
+from salomeContextUtils import ScriptAndArgsObjectEncoder
 
 # -----------------------------------------------------------------------------
 
@@ -139,29 +140,6 @@ def get_cata_path(list_modules,modules_root_dir):
 
     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
@@ -222,10 +200,8 @@ class LoggerServer(Server):
     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,
@@ -282,12 +258,9 @@ class SessionServer(Server):
                 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'])
+                    msg = json.dumps(self.args['pyscript'], cls=ScriptAndArgsObjectEncoder)
                     self.SCMD2+=['--pyscript=%s'%(msg)]
                     pass
                 pass
@@ -393,21 +366,6 @@ class LauncherServer(Server):
             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',
-                  ]
-
 #
 # -----------------------------------------------------------------------------
 
@@ -500,21 +458,6 @@ def startSalome(args, modules_list, modules_root_dir):
         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()
-
-    # set siman python path before the session server launching to import scripts inside python console
-    if simanStudyName(args):
-        # MPV: use os.environ here because session server is launched in separated process and sys.path is missed in this case
-        os.environ["PYTHONPATH"] = "/tmp/SimanSalome/" + args['siman_study'] + "/" + \
-                                   args['siman_scenario'] + "/" + args['siman_user'] + os.pathsep + os.environ["PYTHONPATH"];
-
     # Launch  Session Server (to show splash ASAP)
     #
 
@@ -663,27 +606,6 @@ def startSalome(args, modules_list, modules_root_dir):
         except ImportError:
             pass
 
-    # siman session paramenters and checkout processing
-    if simanStudyName(args):
-        print '**********************************************'
-        print "Siman study name= '" + simanStudyName(args) + "'"
-        import SALOMEDS
-        obj = clt.Resolve('myStudyManager')
-        myStudyManager = obj._narrow(SALOMEDS.StudyManager)
-        aNewStudy = myStudyManager.NewStudy(simanStudyName(args))
-        aSimS = myStudyManager.GetSimanStudy()
-        aSimS._set_StudyId(args['siman_study'])
-        aSimS._set_ScenarioId(args['siman_scenario'])
-        aSimS._set_UserId(args['siman_user'])
-        aSimS.CheckOut(aNewStudy)
-        # if session server is enabled, activate the created study
-        if args["gui"]:
-            print "Activate the SIMAN study in the SALOME GUI"
-            obj = clt.Resolve('/Kernel/Session')
-            mySession = obj._narrow(SALOME.Session)
-            mySession.emitMessage("simanCheckoutDone " + simanStudyName(args))
-        print '**********************************************'
-
     return clt
 
 # -----------------------------------------------------------------------------
@@ -749,21 +671,28 @@ def useSalome(args, modules_list, modules_root_dir):
                         import killSalomeWithPort
                         self.killSalomeWithPort = killSalomeWithPort
                         return
-                    def delete(self):
+                    def __del__(self):
                         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:
@@ -776,7 +705,7 @@ def useSalome(args, modules_list, modules_root_dir):
 
 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]
 
@@ -787,12 +716,10 @@ def registerEnv(args, modules_list, modules_root_dir):
     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)
@@ -811,11 +738,6 @@ def no_main():
     from searchFreePort import searchFreePort
     searchFreePort(args, 0)
     clt = useSalome(args, modules_list, modules_root_dir)
-
-    if args.has_key('shutdown_servers') :
-        var = args['shutdown_servers']
-        if hasattr(var, 'delete') and callable(getattr(var, 'delete')) :
-            var.delete()
     return clt
 
 # -----------------------------------------------------------------------------
@@ -943,11 +865,6 @@ def runSalome():
     if test:
         foreGround(clt, args)
         pass
-    # --
-    if args.has_key('shutdown_servers') :
-        var = args['shutdown_servers']
-        if hasattr(var, 'delete') and callable(getattr(var, 'delete')) :
-            var.delete()
     pass
 #