X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FfileEnviron.py;h=dbf0938545537fbe2e056f8434032a343a34c19e;hb=56c74d69fd4fd80a99154c700eed7db01a8a387d;hp=3c173e26ef8a9556e46732fcfde610e4f39a205d;hpb=4945e5dd869a6b0c5d6a1b6018a7956c9e8bd2de;p=tools%2Fsat.git diff --git a/src/fileEnviron.py b/src/fileEnviron.py index 3c173e2..dbf0938 100644 --- a/src/fileEnviron.py +++ b/src/fileEnviron.py @@ -210,7 +210,10 @@ class FileEnviron(object): :param key str: the environment variable """ - return '${%s}' % key + if src.architecture.is_windows(): + return '%' + key + '%' + else: + return '${%s}' % key def get_value(self, key): """Get the real value of the environment variable "key" @@ -237,9 +240,6 @@ class FileEnviron(object): def value_filter(self, value): res=value - # on windows platform, replace / by \ - if src.architecture.is_windows(): - res = value.replace("/","\\") return res @@ -458,7 +458,6 @@ class LauncherFileEnviron(FileEnviron): self._do_init(output, environ) self.python_version=self.environ.get("sat_python_version") self.bin_kernel_root_dir=self.environ.get("sat_bin_kernel_install_dir") - self.app_root_dir=self.environ.get("sat_app_root_dir") # four whitespaces for first indentation in a python script self.indent=" " @@ -473,6 +472,9 @@ class LauncherFileEnviron(FileEnviron): launcher_header=launcher_header2 else: launcher_header=launcher_header3 + # in case of Windows OS, Python scripts are not executable. PyExe ? + if src.architecture.is_windows(): + launcher_header = launcher_header.replace("#! /usr/bin/env python3",'') self.output.write(launcher_header\ .replace("BIN_KERNEL_INSTALL_DIR", self.bin_kernel_root_dir)) @@ -487,6 +489,10 @@ class LauncherFileEnviron(FileEnviron): if not self.environ.is_defined("PATH"): self.environ.set("PATH","") + if self.init_path: + self.output.write('\n'+self.indent) + self.add_echo("Modifier cette variable pour ne pas réinitialiser les PATHS") + self.output.write(self.indent+'reinitialise_paths=True\n\n') def add_echo(self, text): """Add a comment @@ -516,23 +522,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' % @@ -569,22 +580,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' % @@ -622,7 +639,7 @@ class LauncherFileEnviron(FileEnviron): def add_comment(self, comment): - # Special comment in case of the distène licence + # Special comment in case of the DISTENE licence if comment=="DISTENE license": self.output.write(self.indent+ "#"+ @@ -727,6 +744,15 @@ tcl_header="""\ bash_header="""\ #!/bin/bash +if [ "$BASH" = "" ] +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 "As you are using another shell. Please first run: bash" + echo +fi ########################################################################## # # This line is used only in case of a sat package @@ -750,7 +776,7 @@ launcher_header2="""\ import os import sys import subprocess - +import os.path # Add the pwdPath to able to run the launcher after unpacking a package # Used only in case of a salomeTools package @@ -759,7 +785,7 @@ out_dir_Path=os.path.dirname(os.path.realpath(__file__)) # Preliminary work to initialize path to SALOME Python modules def __initialize(): - sys.path[:0] = [ 'BIN_KERNEL_INSTALL_DIR' ] # to get salomeContext + sys.path[:0] = [ r'BIN_KERNEL_INSTALL_DIR' ] # to get salomeContext # define folder to store omniorb config (initially in virtual application folder) try: @@ -824,7 +850,7 @@ launcher_header3="""\ import os import sys import subprocess - +import os.path # Add the pwdPath to able to run the launcher after unpacking a package # Used only in case of a salomeTools package @@ -833,7 +859,7 @@ out_dir_Path=os.path.dirname(os.path.realpath(__file__)) # Preliminary work to initialize path to SALOME Python modules def __initialize(): - sys.path[:0] = [ 'BIN_KERNEL_INSTALL_DIR' ] + sys.path[:0] = [ r'BIN_KERNEL_INSTALL_DIR' ] # define folder to store omniorb config (initially in virtual application folder) try: @@ -893,6 +919,27 @@ def main(args): """ launcher_tail_py2="""\ + #[hook to integrate in launcher additionnal user modules] + + # Load all files extra.env.d/*.py and call the module's init routine] + + extradir=out_dir_Path + r"/extra.env.d" + + if os.path.exists(extradir): + import imp + 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)), + os.listdir(extradir))): + + 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) + + #[manage salome doc command] if len(args) >1 and args[0]=='doc': _showDoc(args[1:]) return @@ -906,6 +953,18 @@ launcher_tail_py2="""\ 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:] @@ -914,6 +973,27 @@ if __name__ == "__main__": """ launcher_tail_py3="""\ + #[hook to integrate in launcher additionnal user modules] + + # Load all files extra.env.d/*.py and call the module's init routine] + + extradir=out_dir_Path + r"/extra.env.d" + + if os.path.exists(extradir): + import imp + 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)), + os.listdir(extradir))): + + 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) + + #[manage salome doc command] if len(args) >1 and args[0]=='doc': _showDoc(args[1:]) return