Salome HOME
Fixed problem with dump study and small optimization:
[modules/kernel.git] / bin / appliskel / salome
index 7cedb7d40ae4be78c0363417c224015bcbfb1af0..90d5e1028a1ad5c8a8222d2aa086dac4406aadb2 100755 (executable)
 #! /usr/bin/env python
 
-import os
-import sys
-import glob
-
-# Preliminary work to initialize path to SALOME Python modules
-def __initialize():
-  currentPath = os.path.dirname(__file__)
-  homePath = os.path.realpath(os.path.expanduser('~'))
-  appliPath = os.path.relpath(currentPath, homePath)
-
-  pattern = "/bin/salome/appliskel"
-  if appliPath.endswith(pattern):
-    appliPath = appliPath[:-len(pattern)]
-
-  absoluteAppliPath = os.path.join(homePath, appliPath)
-  os.environ['APPLI'] = appliPath # needed to convert .sh environment files
-  os.environ['ABSOLUTE_APPLI_PATH'] = absoluteAppliPath
-
-  # define folder to store omniorb config (initially in virtual application folder)
-  #omniorbUserPath = os.path.join(homePath, ".salomeConfig/USERS")
-  omniorbUserPath = os.path.join(homePath, appliPath, "USERS")
-  os.environ['OMNIORB_USER_PATH'] = omniorbUserPath
-  if not os.path.exists(omniorbUserPath):
-    os.makedirs(omniorbUserPath)
-
-  sys.path[:0] = [absoluteAppliPath+'/bin/salome']
-# End of preliminary work
-
-def __listDirectory(path):
-  allFiles = []
-  for root, dirs, files in os.walk(path):
-    configFileNames = glob.glob(os.path.join(root,'*.cfg')) + glob.glob(os.path.join(root,'*.sh'))
-    allFiles += configFileNames
-  return allFiles
+# Copyright (C) 2013-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
-
-def __getConfigFileNamesDefault():
-  absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
-  envdDir = absoluteAppliPath + '/env.d'
-  if os.path.isdir(envdDir):
-    configFileNames = __listDirectory(envdDir)
-  else:
-    configFileNames = []
-
-  return configFileNames
+# 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, 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
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-def __getConfigFileNames(args):
-  # special case: configuration files are provided by user
-  # Search for command-line argument(s) --config=file1,file2,..., filen
-  # Search for command-line argument(s) --config=dir1,dir2,..., dirn
-  configOptionPrefix = "--config="
-  configArgs = [ str(x) for x in args if str(x).startswith(configOptionPrefix) ]
-
-  if len(configArgs) == 0:
-    return __getConfigFileNamesDefault(), args
-
-  args = [ x for x in args if not x.startswith(configOptionPrefix) ]
-  allLists = [ x.replace(configOptionPrefix, '') for x in configArgs ]
-
-  configFileNames = []
-  for currentList in allLists:
-    elements = currentList.split(',')
-    for elt in elements:
-      elt = os.path.realpath(os.path.expanduser(elt))
-      if os.path.isdir(elt):
-        configFileNames += __listDirectory(elt)
-      else:
-        configFileNames += [elt]
+import os
+import sys
 
-  return configFileNames, args
-#
+def main(args):
+  # Identify application path then locate configuration files
+  currentPath = os.path.realpath(os.path.dirname(os.path.abspath(__file__)))
+  launcherFile = os.path.basename(__file__)
+  from salome_starter import initialize
+  initialize(currentPath, launcherFile)
 
+  if len(args) == 1 and args[0] in ['--help', 'help', '-h', '--h']:
+    from salomeContext import usage
+    usage()
+    sys.exit(0)
 
-if __name__ == "__main__":
-  args = sys.argv[1:]
+  from salomeContextUtils import getConfigFileNames
+  configFileNames, extraEnv, args, unexisting = getConfigFileNames(args, checkExistence=True)
 
-  # Identify application path then locate configuration files
-  __initialize()
-  configFileNames, args = __getConfigFileNames(args)
+  if len(unexisting) > 0:
+    print "ERROR: unexisting configuration/environment file(s): " + ', '.join(unexisting)
+    sys.exit(1)
 
-  # Create a SalomeRunner which parses configFileNames to initialize environment
-  from salomeRunner import SalomeRunner, SalomeRunnerException
+  # Create a SalomeContext which parses configFileNames to initialize environment
+  from salomeContextUtils import SalomeContextException
   try:
-    runner = SalomeRunner(configFileNames)
+    from salomeContext import SalomeContext
+    context = SalomeContext(configFileNames)
 
     # Here set specific variables, if needed
-    # runner.addToPath('mypath')
-    # runner.addToLdLibraryPath('myldlibrarypath')
-    # runner.addToPythonPath('mypythonpath')
-    # runner.setEnviron('myvarname', 'value')
+    # context.addToPath('mypath')
+    # context.addToLdLibraryPath('myldlibrarypath')
+    # context.addToPythonPath('mypythonpath')
+    # context.setVariable('myvarname', 'value')
 
+    if extraEnv:
+      for key,val in extraEnv.items():
+        context.addToVariable(key,val)
 
     # Start SALOME, parsing command line arguments
-    runner.go(args)
-    print 'Thank you for using SALOME!'
-
-  except SalomeRunnerException, e:
+    out, err, returncode = context.runSalome(args)
+    if out:
+      sys.stdout.write(out)
+    if err:
+      sys.stderr.write(err)
+    #print 'Thank you for using SALOME!'
+    sys.exit(returncode)
+  except SalomeContextException, e:
     import logging
     logging.getLogger("salome").error(e)
     sys.exit(1)
 #
+
+if __name__ == "__main__":
+  args = sys.argv[1:]
+  main(args)
+#