Salome HOME
add get_value method to Environ classes, to conform with the API of FileEnviron
[tools/sat.git] / commands / application.py
index 55d2d30d1153f226fe8799abbdac63cd47fd93db..9067b0a530ee2928d075e12f41030bfe3105aae7 100644 (file)
@@ -42,6 +42,9 @@ parser.add_option('', 'gencat', 'string', 'gencat',
 parser.add_option('m', 'module', 'list2', 'modules',
     _("Optional: the restricted list of module(s) to include in the "
       "application"))
+parser.add_option('', 'use_mesa', 'boolean', 'use_mesa',
+    _("Optional: Create a launcher that will use mesa products\n\t"
+      "It can be usefull whan salome is used on a remote machine through ssh"))
 
 ##
 # Creates an alias for runAppli.
@@ -69,7 +72,7 @@ def add_module_to_appli(out, module, has_gui, module_path, logger, flagline):
 
 ##
 # Creates the config file to create an application with the list of modules.
-def create_config_file(config, modules, env_file, logger):
+def create_config_file(config, modules, env_files, logger):
 
     samples = ""
     if 'SAMPLES' in config.APPLICATION.products:
@@ -79,16 +82,25 @@ def create_config_file(config, modules, env_file, logger):
     f = open(config_file, "w")
 
     f.write('<application>\n')
-    if env_file.endswith("cfg"):
-        f.write('<context path="%s"/>\n' % env_file)
-    else:   
-        f.write('<prerequisites path="%s"/>\n' % env_file)
+    for env_file in env_files:
+        if env_file.endswith("cfg"):
+            f.write('<context path="%s"/>\n' % env_file)
+        else:   
+            f.write('<prerequisites path="%s"/>\n' % env_file)
+
     f.write('<resources path="CatalogResources.xml"/>\n')
     f.write('<modules>\n')
 
     flagline = False
     for m in modules:
         mm = src.product.get_product_config(config, m)
+        # do not include in virtual application application module!
+        if src.get_property_in_product_cfg(mm, "is_salome_application") == "yes":
+            continue
+        # do not include products that do not compile
+        if not src.product.product_compiles(mm):
+            continue
+        #obsolete?
         if src.product.product_is_smesh_plugin(mm):
             continue
 
@@ -247,7 +259,7 @@ def get_SALOME_modules(config):
     l_modules = []
     for product in config.APPLICATION.products:
         product_info = src.product.get_product_config(config, product)
-        if (src.product.product_is_SALOME(product_info) or 
+        if (src.product.product_is_salome(product_info) or 
                src.product.product_is_generated(product_info)):
             l_modules.append(product)
     return l_modules
@@ -264,14 +276,16 @@ def generate_launch_file(config, appli_dir, catalog, logger, l_SALOME_modules):
     write_step(logger, _("Creating environment files"))
     status = src.KO_STATUS
 
+    # build the application (the name depends upon salome version
+    env_file = os.path.join(config.APPLICATION.workdir, "env_launch")
     VersionSalome = src.get_salome_version(config)
     if VersionSalome>=820:
         # for salome 8+ we use a salome context file for the virtual app
-        app_shell="cfg"
-        env_ext="cfg"
+        app_shell=["cfg", "bash"]
+        env_files=[env_file+".cfg", env_file+".sh"]
     else:
-        app_shell="bash"
-        env_ext="sh"
+        app_shell=["bash"]
+        env_files=[env_file+".sh"]
 
     try:
         import environ
@@ -280,17 +294,15 @@ def generate_launch_file(config, appli_dir, catalog, logger, l_SALOME_modules):
         # with the current system.
         environ.write_all_source_files(config,
                                        logger,
-                                       shells=[app_shell],
+                                       shells=app_shell,
                                        silent=True)
         status = src.OK_STATUS
     finally:
         logger.write(src.printcolors.printc(status) + "\n", 2, False)
 
-    # build the application (the name depends upon salome version
-    env_file = os.path.join(config.APPLICATION.workdir, "env_launch." + env_ext)
 
     write_step(logger, _("Building application"), level=2)
-    cf = create_config_file(config, l_SALOME_modules, env_file, logger)
+    cf = create_config_file(config, l_SALOME_modules, env_files, logger)
 
     # create the application directory
     os.makedirs(appli_dir)
@@ -416,6 +428,10 @@ def run(args, runner, logger):
     if options.modules:
         runner.cfg.APPLICATION.virtual_app['modules'] = options.modules
 
+    # activate mesa use in the generated application
+    if options.use_mesa:
+        src.activate_mesa_property(runner.cfg)
+
     # set name and application_name
     if options.name:
         runner.cfg.APPLICATION.virtual_app['name'] = options.name