X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=bin%2Fsmesh_setenv.py;h=6826ab0cefa898fac93585d5a9ce1ef53dfffd9b;hp=b58c8e4125783d4f50d86750433ab1ef3e92704a;hb=6472eab132825fec572beda8276947593f85ffa1;hpb=5d68554076bbca0e1e95fb0db215a6c2b84b6c54 diff --git a/bin/smesh_setenv.py b/bin/smesh_setenv.py index b58c8e412..6826ab0ce 100644 --- a/bin/smesh_setenv.py +++ b/bin/smesh_setenv.py @@ -1,6 +1,5 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +#!/usr/bin/env python3 +# Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,65 +18,64 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -import os, sys +""" +Set-up additional environment needed for SMESH module and meshing plugins. +""" + +import os +import os.path as osp +import sys +from xml.dom.minidom import parse from setenv import add_path, get_lib_dir, salome_subdir # ----------------------------------------------------------------------------- def set_env(args): - """Add to the PATH-variables modules specific paths""" - psep = os.pathsep - python_version="python%d.%d" % sys.version_info[0:2] + """Set-up additional environment needed for SMESH module and plugins""" + py_version = 'python{}.{}'.format(*sys.version_info[:2]) + + # search and set-up meshing plugins + plugins = [] + resource_dirs = [] + for var in [i for i in os.environ if i.endswith('_ROOT_DIR') and os.environ[i]]: + plugin_root = os.environ[var] + plugin_name = var[:-9] # plugin name as extracted from environment variable + plugin_lname = plugin_name.lower() # plugin name in lowercase + # look for NAMEOFPlugin.xml file among resource files + # resource dir must be /share/salome/resources/ + resource_dir = osp.join(plugin_root, 'share', salome_subdir, 'resources', plugin_lname) + if not os.access(resource_dir, os.F_OK): + continue # directory does not exist or isn't accessible - if not os.environ.has_key("SALOME_StdMeshersResources"): - os.environ["SALOME_StdMeshersResources"] \ - = os.path.join(os.environ["SMESH_ROOT_DIR"],"share",salome_subdir,"resources","smesh") - pass + for resource_file in [i for i in os.listdir(resource_dir) \ + if osp.isfile(os.path.join(resource_dir, i))]: + # look for resource file (XML) to extract valid plugin name + if resource_file.lower() == f'{plugin_lname}.xml': + try: + # get plugin name from 'resources' attribute of 'meshers-group' xml node + # as name extracted from environment variable can be in wrong case + xml_doc = parse(osp.join(resource_dir, resource_file)) + plugin_name = xml_doc.getElementsByTagName('meshers-group')[0].getAttribute('resources') - # find plugins - plugin_list = ["StdMeshers"] - resource_path_list = [] - for env_var in os.environ.keys(): - value = os.environ[env_var] - if env_var[-9:] == "_ROOT_DIR" and value: - plugin_root = value - plugin = env_var[:-9] # plugin name may have wrong case + # add plugin to the list of available meshing plugins + plugins.append(plugin_name) + resource_dirs.append(resource_dir) - # look for NAMEOFPlugin.xml file among resource files - resource_dir = os.path.join(plugin_root,"share",salome_subdir,"resources",plugin.lower()) - if not os.access( resource_dir, os.F_OK ): continue - for resource_file in os.listdir( resource_dir ): - if not resource_file.endswith( ".xml") or \ - resource_file.lower() != plugin.lower() + ".xml": - continue - # use "resources" attribute of "meshers-group" as name of plugin in a right case - from xml.dom.minidom import parse - xml_doc = parse( os.path.join( resource_dir, resource_file )) - meshers_nodes = xml_doc.getElementsByTagName("meshers-group") - if not meshers_nodes or not meshers_nodes[0].hasAttribute("resources"): continue - plugin = meshers_nodes[0].getAttribute("resources") - if plugin in plugin_list: continue + # setup environment needed for plugin + add_path(osp.join(plugin_root, 'bin', salome_subdir), 'PATH') + add_path(osp.join(plugin_root, get_lib_dir(), salome_subdir), 'PATH' \ + if sys.platform == 'win32' else 'LD_LIBRARY_PATH') + add_path(osp.join(plugin_root, 'bin', salome_subdir), 'PYTHONPATH') + add_path(osp.join(plugin_root, get_lib_dir(), salome_subdir), 'PYTHONPATH') + add_path(osp.join(plugin_root, get_lib_dir(), py_version, 'site-packages', + salome_subdir), 'PYTHONPATH') - # add paths of plugin - plugin_list.append(plugin) - if not os.environ.has_key("SALOME_"+plugin+"Resources"): - resource_path = os.path.join(plugin_root,"share",salome_subdir,"resources",plugin.lower()) - os.environ["SALOME_"+plugin+"Resources"] = resource_path - resource_path_list.append( resource_path ) - add_path(os.path.join(plugin_root,get_lib_dir(),python_version, "site-packages",salome_subdir), "PYTHONPATH") - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PYTHONPATH") - - if sys.platform == "win32": - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PYTHONPATH") - else: - add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "LD_LIBRARY_PATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PYTHONPATH") - add_path(os.path.join(plugin_root,"bin",salome_subdir), "PATH") - pass - pass - break - os.environ["SMESH_MeshersList"] = ":".join(plugin_list) - os.environ["SalomeAppConfig"] = os.environ["SalomeAppConfig"] + psep + psep.join(resource_path_list) + break # one resource file is enough! + except: + continue # invalid resource valid + # full list of known meshers + os.environ['SMESH_MeshersList'] = os.pathsep.join(['StdMeshers'] + plugins) + # access to resources + os.environ['SalomeAppConfig'] = os.pathsep.join(os.environ['SalomeAppConfig'].split(os.pathsep) + resource_dirs)