From 6daf45b3a166cc041202118378399da387387a3e Mon Sep 17 00:00:00 2001 From: Pascal Obry Date: Tue, 5 Jan 2021 09:57:06 +0100 Subject: [PATCH] Add new starter script salome_mesa. This scripts enable mesa layer to ensure proper rendering of GUI element on some computers. For #22374. --- bin/appli_gen.py | 25 ++++++++------- bin/appliskel/CMakeLists.txt | 1 + bin/appliskel/salome_mesa | 61 ++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 bin/appliskel/salome_mesa diff --git a/bin/appli_gen.py b/bin/appli_gen.py index deee9464c..245e25dae 100755 --- a/bin/appli_gen.py +++ b/bin/appli_gen.py @@ -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"), diff --git a/bin/appliskel/CMakeLists.txt b/bin/appliskel/CMakeLists.txt index 82d293832..0d61b14b6 100644 --- a/bin/appliskel/CMakeLists.txt +++ b/bin/appliskel/CMakeLists.txt @@ -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 index 000000000..9a176bd61 --- /dev/null +++ b/bin/appliskel/salome_mesa @@ -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:]) -- 2.39.2