Salome HOME
document --keep-paths option
[tools/sat.git] / src / fileEnviron.py
index 5afc9e76124cff524c1a78bc82f175d44c069ec8..d2dffd2f954623e2cc0295e9c9cc9b1117284c37 100644 (file)
@@ -489,7 +489,6 @@ class LauncherFileEnviron(FileEnviron):
         if not self.environ.is_defined("PATH"):
             self.environ.set("PATH","")
 
-
     def add_echo(self, text):
         """Add a comment
         
@@ -518,30 +517,35 @@ class LauncherFileEnviron(FileEnviron):
         if separator in value:
             raise Exception(msg % (key, value, separator))
 
-        if (self.init_path and (not self.environ.is_defined(key))):
+        is_key_defined=self.environ.is_defined(key)
+        conditional_reinit=False
+        if (self.init_path and (not is_key_defined)):
             # reinitialisation mode set to true (the default)
             # for the first occurrence of key, we set it.
             # therefore key will not be inherited from environment
+            self.output.write(self.indent+'if reinitialise_paths:\n'+self.indent)
             self.set(key, value)
-            return
+            self.output.write(self.indent+'else:\n'+self.indent)
+            conditional_reinit=True # in this case do not register value in self.environ a second time
 
         # in all other cases we use append (except if value is already the key
         do_append=True
-        if self.environ.is_defined(key):
+        if is_key_defined:
             value_list = self.environ.get(key).split(sep)
             # rem : value cannot be expanded (unlike bash/bat case) - but it doesn't matter.
             if value in value_list:
                 do_append=False  # value is already in key path : we don't append it again
             
         if do_append:
-            self.environ.append_value(key, value,sep) # register value in self.environ
+            if not conditional_reinit:
+                self.environ.append_value(key, value,sep) # register value in self.environ
             if key in self.specialKeys.keys():
                 #for these special keys we use the specific salomeContext function
                 self.output.write(self.begin+'addTo%s(r"%s")\n' % 
                                   (self.specialKeys[key], self.value_filter(value)))
             else:
                 # else we use the general salomeContext addToVariable function
-                self.output.write(self.indent+'appendPath(r"%s", r"%s",separator="%s")\n' 
+                self.output.write(self.begin+'appendVariable(r"%s", r"%s",separator="%s")\n'
                                   % (key, self.value_filter(value), sep))
 
     def append(self, key, value, sep=":"):
@@ -571,22 +575,28 @@ class LauncherFileEnviron(FileEnviron):
         if separator in value:
             raise Exception(msg % (key, value, separator))
 
-        if (self.init_path and (not self.environ.is_defined(key))):
+        is_key_defined=self.environ.is_defined(key)
+        conditional_reinit=False
+        if (self.init_path and (not is_key_defined)):
             # reinitialisation mode set to true (the default)
             # for the first occurrence of key, we set it.
             # therefore key will not be inherited from environment
+            self.output.write(self.indent+'if reinitialise_paths:\n'+self.indent)
             self.set(key, value)
-            return
+            self.output.write(self.indent+'else:\n'+self.indent)
+            conditional_reinit=True # in this case do not register value in self.environ a second time
+
         # in all other cases we use append (except if value is already the key
         do_append=True
-        if self.environ.is_defined(key):
+        if is_key_defined:
             value_list = self.environ.get(key).split(sep)
             # rem : value cannot be expanded (unlike bash/bat case) - but it doesn't matter.
             if value in value_list:
                 do_append=False  # value is already in key path : we don't append it again
             
         if do_append:
-            self.environ.append_value(key, value,sep) # register value in self.environ
+            if not conditional_reinit:
+                self.environ.append_value(key, value,sep) # register value in self.environ
             if key in self.specialKeys.keys():
                 #for these special keys we use the specific salomeContext function
                 self.output.write(self.begin+'addTo%s(r"%s")\n' % 
@@ -734,9 +744,10 @@ then
   # check that the user is not using another shell
   echo
   echo "Warning! SALOME environment not initialized"
-  echo "You must run this script in a bash shell."
+  echo "You must run this script in a BASH shell."
   echo "As you are using another shell. Please first run: bash"
   echo
+  exit 1
 fi
 ##########################################################################
 #
@@ -805,15 +816,40 @@ def main(args):
 
   if args == ['--help']:
     from salomeContext import usage
-    usage()
+    appended_opt_doc = \"""
+--keep-paths
+============
+    With this option the environment variables PATH, PYTHONPATH and LD_LIBRARY_PATH defined into the starting shell are kept.
+    Without this option all values set before starting SALOME are simply ignored.
+\"""
+    usage(appended_opt_doc=appended_opt_doc)
     sys.exit(0)
 
+  reinitialise_paths=True
+  if '--keep-paths' in args:
+    reinitialise_paths=False
+    args.remove('--keep-paths')
+
 
   # Create a SalomeContext which parses configFileNames to initialize environment
   try:
     from salomeContext import SalomeContext, SalomeContextException
+    if 'appendVariable' not in dir(SalomeContext):
+      # check whether the appendVariable method is implemented
+      def appendVariable(self, name, value, separator=os.pathsep):
+        if value == '':
+          return
+        value = os.path.expandvars(value) # expand environment variables
+        env = os.getenv(name, None)
+        if env is None:
+          os.environ[name] = value
+        else:
+          os.environ[name] = env + separator + value
+        return
+      SalomeContext.appendVariable = appendVariable
+
     context = SalomeContext(None)
-    
+
     # Here set specific variables, if needed
     # context.addToPath('mypath')
     # context.addToLdLibraryPath('myldlibrarypath')
@@ -877,11 +913,22 @@ def main(args):
   # Identify application path then locate configuration files
   __initialize()
 
-  if args == ['--help']:
+  if '--help' in args:
     from salomeContext import usage
-    usage()
+    appended_opt_doc = \"""
+--keep-paths
+============
+    With this option the environment variables PATH, PYTHONPATH and LD_LIBRARY_PATH defined into the starting shell are kept.
+    Without this option all values set before starting SALOME are simply ignored.
+\"""
+    usage(appended_opt_doc=appended_opt_doc)
     sys.exit(0)
 
+  reinitialise_paths=True
+  if '--keep-paths' in args:
+    reinitialise_paths=False
+    args.remove('--keep-paths')
+
   #from salomeContextUtils import getConfigFileNames
   #configFileNames, args, unexisting = getConfigFileNames( args, checkExistence=True )
   #if len(unexisting) > 0:
@@ -891,8 +938,21 @@ def main(args):
   # Create a SalomeContext which parses configFileNames to initialize environment
   try:
     from salomeContext import SalomeContext, SalomeContextException
+    if 'appendVariable' not in dir(SalomeContext):
+      # check whether the appendVariable method is implemented
+      def appendVariable(self, name, value, separator=os.pathsep):
+        if value == '':
+          return
+        value = os.path.expandvars(value) # expand environment variables
+        env = os.getenv(name, None)
+        if env is None:
+          os.environ[name] = value
+        else:
+          os.environ[name] = env + separator + value
+        return
+      SalomeContext.appendVariable = appendVariable
+
     context = SalomeContext(None)
-    
     # Here set specific variables, if needed
     # context.addToPath('mypath')
     # context.addToLdLibraryPath('myldlibrarypath')
@@ -937,19 +997,6 @@ launcher_tail_py2="""\
     import logging
     logging.getLogger("salome").error(e)
     sys.exit(1)
-#
-# salomeContext only prepend variables, we use our own appendPath when required
-def appendPath(name, value, separator=os.pathsep):
-    if value == '':
-      return
-
-    value = os.path.expandvars(value) # expand environment variables
-    env = os.getenv(name, None)
-    if env is None:
-      os.environ[name] = value
-    else:
-      os.environ[name] = env + separator + value
-
 
 if __name__ == "__main__":
   args = sys.argv[1:]
@@ -965,7 +1012,8 @@ launcher_tail_py3="""\
     extradir=out_dir_Path + r"/extra.env.d"
 
     if os.path.exists(extradir):
-        import imp
+        import importlib
+        import importlib.util
         sys.path.insert(0, os.path.join(os.getcwd(), extradir))
         for filename in sorted(
             filter(lambda x: os.path.isfile(os.path.join(extradir, x)),
@@ -974,10 +1022,10 @@ launcher_tail_py3="""\
             if filename.endswith(".py"):
                 f = os.path.join(extradir, filename)
                 module_name = os.path.splitext(os.path.basename(f))[0]
-                fp, path, desc = imp.find_module(module_name)
-                module = imp.load_module(module_name, fp, path, desc)
-                module.init(context, out_dir_Path)
-
+                _specs = importlib.util.find_spec(module_name)
+                _module = importlib.util.module_from_spec(_specs)
+                _specs.loader.exec_module(_module)
+                _module.init(context, out_dir_Path)
     #[manage salome doc command]
     if len(args) >1 and args[0]=='doc':
         _showDoc(args[1:])
@@ -992,18 +1040,6 @@ launcher_tail_py3="""\
     logging.getLogger("salome").error(e)
     sys.exit(1)
  
-# salomeContext only prepend variables, we use our own appendPath when required
-def appendPath(name, value, separator=os.pathsep):
-    if value == '':
-      return
-
-    value = os.path.expandvars(value) # expand environment variables
-    env = os.getenv(name, None)
-    if env is None:
-      os.environ[name] = value
-    else:
-      os.environ[name] = env + separator + value
-
 
 if __name__ == "__main__":
   args = sys.argv[1:]