Salome HOME
f8f88f0c29ddd5f668e6e71c0a02a55aec8ad853
[modules/geom.git] / bin / geom_setenv.py
1 #! /usr/bin/env python3
2 # Copyright (C) 2007-2023  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import os, sys, string
22 from salome_utils import getLogDir, generateFileName, uniteFiles
23 from setenv import add_path, get_lib_dir, salome_subdir
24
25 # -----------------------------------------------------------------------------
26
27 def set_env( args ):
28     """Add to the PATH-variables modules specific paths"""
29     psep = os.pathsep
30     python_version="python%d.%d" % sys.version_info[0:2]
31
32     tmp_dir = getLogDir()
33     env_dir = generateFileName( tmp_dir, prefix="env", with_port=True )
34     res_dir = os.path.join( os.getenv( "GEOM_ROOT_DIR" ), "share", salome_subdir, "resources", "geom" )
35
36     csf_list = ["Plugin", "GEOMDS_Resources", "ShHealing"]
37
38     for csf in csf_list:
39         uniteFiles( os.path.join( res_dir, csf ), os.path.join( env_dir, csf ) )
40         csf_var = "CSF_%sDefaults" % csf
41         if not os.getenv( csf_var ):
42             os.environ[ csf_var ] = env_dir
43             pass
44         pass
45
46     # collect plugins
47     plugin_list = []
48     resource_path_list = []
49
50     # standard plugins
51     plugin_list.append("BREPPlugin")
52     plugin_list.append("STEPPlugin")
53     plugin_list.append("IGESPlugin")
54     plugin_list.append("STLPlugin")
55     plugin_list.append("XAOPlugin")
56     plugin_list.append("VTKPlugin")
57     plugin_list.append("AdvancedGEOM")
58
59     # find additional plugins
60     for env_var in os.environ:
61         value = os.environ[env_var]
62         if env_var[-9:] == "_ROOT_DIR" and value:
63             plugin_root = value
64             plugin = env_var[:-9] # plugin name may have wrong case
65
66             # look for NAMEOFPlugin.xml file among resource files
67             resource_dir = os.path.join(plugin_root, "share", salome_subdir, "resources", plugin.lower())
68             if not os.access(resource_dir, os.F_OK): continue
69
70             for resource_file in os.listdir(resource_dir):
71                 if resource_file.endswith(".xml") and \
72                    resource_file.lower() == plugin.lower() + ".xml":
73                     # use "name" attribute of "geom-plugin" as name of plugin in a right case
74                     try:
75                         from xml.dom.minidom import parse
76                         xml_doc = parse(os.path.join(resource_dir, resource_file))
77                         plugin_nodes = xml_doc.getElementsByTagName("geom-plugin")
78                         if not plugin_nodes or not plugin_nodes[0].hasAttribute("name"): continue
79
80                         plugin = plugin_nodes[0].getAttribute("name")
81                         if plugin in plugin_list: continue
82
83                         plugin_list.append(plugin)
84
85                         # add paths of plugin
86                         if "SALOME_"+plugin+"Resources" not in os.environ:
87                             resource_path = os.path.join(plugin_root, "share", salome_subdir, "resources", plugin.lower())
88                             os.environ["SALOME_"+plugin+"Resources"] = resource_path
89                             resource_path_list.append(resource_path)
90                             add_path(os.path.join(plugin_root, get_lib_dir(), python_version, "site-packages", salome_subdir), "PYTHONPATH")
91                             add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "PYTHONPATH")
92                             if sys.platform == "win32":
93                                 add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "PATH")
94                                 add_path(os.path.join(plugin_root, "bin", salome_subdir), "PYTHONPATH")
95                             else:
96                                 add_path(os.path.join(plugin_root, get_lib_dir(), salome_subdir), "LD_LIBRARY_PATH")
97                                 add_path(os.path.join(plugin_root, "bin", salome_subdir), "PYTHONPATH")
98                                 add_path(os.path.join(plugin_root, "bin", salome_subdir), "PATH")
99                                 pass
100                             pass
101                         pass
102                     except:
103                         continue
104                     pass
105                 pass
106             pass
107         pass
108
109     os.environ["GEOM_PluginsList"] = ":".join(plugin_list)
110     os.environ["SalomeAppConfig"] = os.environ["SalomeAppConfig"] + psep + psep.join(resource_path_list)
111     pass