Salome HOME
Add new starter script salome_mesa.
authorPascal Obry <pascal.obry@edf.fr>
Tue, 5 Jan 2021 08:57:06 +0000 (09:57 +0100)
committerPascal Obry <pascal.obry@edf.fr>
Mon, 11 Jan 2021 15:26:10 +0000 (16:26 +0100)
This scripts enable mesa layer to ensure proper rendering of
GUI element on some computers.

For #22374.

bin/appli_gen.py
bin/appliskel/CMakeLists.txt
bin/appliskel/salome_mesa [new file with mode: 0644]

index deee9464c0dd11e4d8f1ec9c4cd1817d01c5cf31..245e25daee936bbadd24e14d7ec8c4f2d0373f2a 100755 (executable)
@@ -286,18 +286,19 @@ def install(prefix, config_file, verbose=0):
         pass
 
 
-    # Copy salome script
-    salome_script = open(os.path.join(appliskel_dir, "salome")).read()
-    salome_file = os.path.join(home_dir, "salome")
-    try:
-        os.remove(salome_file)
-    except:
-        pass
-    env_modules = _config.get('env_modules', [])
-    with open(salome_file, 'w') as fd:
-        fd.write(salome_script.replace('MODULES = []', 'MODULES = {}'.format(env_modules)))
-    os.chmod(salome_file, 0o755)
-
+    # Copy salome / salome_mesa scripts:
+
+    for scripts in ('salome', 'salome_mesa'):
+        salome_script = open(os.path.join(appliskel_dir, scripts)).read()
+        salome_file = os.path.join(home_dir, scripts)
+        try:
+            os.remove(salome_file)
+        except:
+            pass
+        env_modules = _config.get('env_modules', [])
+        with open(salome_file, 'w') as fd:
+            fd.write(salome_script.replace('MODULES = []', 'MODULES = {}'.format(env_modules)))
+            os.chmod(salome_file, 0o755)
 
     # Add .salome-completion.sh file
     shutil.copyfile(os.path.join(appliskel_dir, ".salome-completion.sh"),
index 82d293832ac620e02dd36e8a3cb9420f39e6d6ad..0d61b14b687ee2b8c5e54dba19407ff1e099919d 100644 (file)
@@ -34,6 +34,7 @@ SET(SCRIPTS
   kill_remote_containers.py
   .salome_run # this is the Python launcher (without .py extension to avoid conflicts when importing salome python package)
   salome # this is the Python wrapper (without .py extension to avoid conflicts when importing salome python package)
+  salome_mesa # this is the Python wrapper using MESA (work around display issue)
   salome_starter.py
   .salome-completion.sh
 )
diff --git a/bin/appliskel/salome_mesa b/bin/appliskel/salome_mesa
new file mode 100644 (file)
index 0000000..9a176bd
--- /dev/null
@@ -0,0 +1,61 @@
+#! /usr/bin/env python3
+# Copyright (C) 2021  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+#######
+# NOTE:
+#
+# This script is designed to work around bug/limitatiion on some machines like
+# scibian9 light machine and/or VMs.
+# The issue is that some GUI element in smesh are not displayed. For a full
+# discussion of the issue, EDF Redmine issue #22374.
+#
+
+import os
+import subprocess
+import sys
+
+MODULES = []
+
+
+def main(args):
+    ''' Load modules then launch salome
+    '''
+    if MODULES:
+        env_modules = MODULES[:]
+        env_modules_option = "--with-env-modules="
+        env_modules_l = [x for x in args if x.startswith(env_modules_option)]
+        if env_modules_l:
+            env_modules += env_modules_l[-1][len(env_modules_option):].split(',')
+            args = [x for x in args if not x.startswith(env_modules_option)]
+        env_modules_option += "%s" % ','.join(env_modules)
+        args.append(env_modules_option)
+
+    # Activate MESA rendering (see ...)
+    os.environ["XLIB_SKIP_ARGB_VISUALS"]=1
+    os.environ["MESA_GL_VERSION_OVERRIDE"]=4.5
+
+    appliPath = os.path.dirname(os.path.realpath(__file__))
+    os.environ["ROOT_SALOME_INSTALL"]=appliPath
+    proc = subprocess.Popen([os.path.join(appliPath, '.salome_run')] + args, close_fds=True)
+    out, err = proc.communicate()
+    sys.exit(proc.returncode)
+
+if __name__ == "__main__":
+    main(sys.argv[1:])