: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"
def value_filter(self, value):
res=value
- # on windows platform, replace / by \
- if src.architecture.is_windows():
- res = value.replace("/","\\")
return res
:param key str: the environment variable to set
:param value str: the value
"""
- #print "CNC TclFileEnviron set ", key, " to ", value
self.output.write('setenv %s "%s"\n' % (key, value))
self.environ.set(key, value)
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=" "
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))
"""
self.output.write('# "WARNING %s"\n' % warning)
- def append_value(self, key, value, sep=":"):
+ def append_value(self, key, value, sep=os.pathsep):
"""append value to key using sep,
if value contains ":" or ";" then raise error
- :param key str: the environment variable to append
- :param value str: the value to append to key
+ :param key str: the environment variable to prepend
+ :param value str: the value to prepend to key
:param sep str: the separator string
"""
- # append is not defined in context api
- self.prepend_value(key, value)
+ # check that value so no contain the system separator
+ separator=os.pathsep
+ msg="LauncherFileEnviron append key '%s' value '%s' contains forbidden character '%s'"
+ if separator in value:
+ raise Exception(msg % (key, value, separator))
+
+ if (self.init_path and (not self.environ.is_defined(key))):
+ # 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.set(key, value)
+ return
+
+ # in all other cases we use append (except if value is already the key
+ do_append=True
+ if self.environ.is_defined(key):
+ 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 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'
+ % (key, self.value_filter(value), sep))
def append(self, key, value, sep=":"):
"""Same as append_value but the value argument can be a list
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+
"#"+
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
# 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:
# 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:
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:]
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:]