Salome HOME
ajout option d'impression des graphes de dépendance
[tools/sat.git] / commands / generate.py
index d0e3cf4668af7d54cf00e73b41f31c665b707c4d..a190b5d172030ecb34b4b0e4734ccaa965909189 100644 (file)
@@ -23,14 +23,15 @@ import imp
 import subprocess
 
 import src
+import src.debug as DBG
 
 parser = src.options.Options()
 parser.add_option('p', 'products', 'list2', 'products',
-                  _("the list of products to generate"))
+                  _("Optional: the list of products to generate"))
 parser.add_option('', 'yacsgen', 'string', 'yacsgen',
-                  _("path to YACSGEN's module_generator package"))
+                  _("Optional: path to YACSGEN's module_generator package"))
 
-def generate_component_list(config, product_info, context, logger):
+def generate_component_list(config, product_name, product_info, context, logger):
     res = "?"
     logger.write("\n", 3)
     for compo in src.product.get_product_components(product_info):
@@ -38,6 +39,7 @@ def generate_component_list(config, product_info, context, logger):
                                "." * (20 - len(compo)))
         res = generate_component(config,
                                  compo,
+                                 product_name,
                                  product_info,
                                  context,
                                  header,
@@ -48,9 +50,16 @@ def generate_component_list(config, product_info, context, logger):
         logger.write("\n", 3, False)
     return res
 
-def generate_component(config, compo, product_info, context, header, logger):
-    hxxfile = compo + ".hxx"
-    cpplib = "lib" + compo + "CXX.so"
+def generate_component(config, compo, product_name, product_info, context, header, logger):
+#   get from config include file name and librairy name, or take default value
+    if "hxxfile" in product_info:
+        hxxfile = product_info.hxxfile
+    else:
+        hxxfile = compo + ".hxx"
+    if "cpplib" in product_info:
+        cpplib = product_info.cpplib
+    else:
+        cpplib = "lib" + compo + "CXX.so"
     cpp_path = product_info.install_dir
 
     logger.write("%s\n" % header, 4, False)
@@ -75,11 +84,11 @@ def generate_component(config, compo, product_info, context, header, logger):
     config.PRODUCTS.addMapping(compo, src.pyconf.Mapping(config), "")
     config.PRODUCTS[compo].default = compo_info
 
-    builder = src.compilation.Builder(config, logger, compo_info, check_src=False)
+    builder = src.compilation.Builder(config, logger, product_name, compo_info, check_src=False)
     builder.header = header
 
     # generate the component
-    # create GENERETE dir if necessary
+    # create GENERATE dir if necessary
     if not os.path.exists(generate_dir):
         os.mkdir(generate_dir)
 
@@ -135,7 +144,10 @@ def generate_component(config, compo, product_info, context, header, logger):
 
         if src.product.product_has_salome_gui(product_info):
             # get files to build a template GUI
-            gui_files = salome_compo.getGUIfilesTemplate()
+            try: # try new yacsgen api
+                gui_files = salome_compo.getGUIfilesTemplate(compo)
+            except:  # use old yacsgen api
+                gui_files = salome_compo.getGUIfilesTemplate()
         else:
             gui_files = None
 
@@ -260,7 +272,7 @@ def check_yacsgen(config, directory, logger):
         yacsgen_info = src.product.get_product_config(config, 'YACSGEN')
         yacsgen_dir = yacsgen_info.install_dir
         yacs_src = _("Using YACSGEN from application")
-    elif os.environ.has_key("YACSGEN_ROOT_DIR"):
+    elif "YACSGEN_ROOT_DIR" in os.environ:
         yacsgen_dir = os.getenv("YACSGEN_ROOT_DIR")
         yacs_src = _("Using YACSGEN from environment")
 
@@ -301,7 +313,8 @@ def description():
     :rtype: str
     '''
     return _("The generate command generates SALOME modules from 'pure cpp' "
-             "products.\nWARNING this command NEEDS YACSGEN to run!")
+             "products.\nWARNING this command NEEDS YACSGEN to run!\n\nexample:"
+             "\nsat generate SALOME-master --products FLICACPP")
 
 
 def run(args, runner, logger):
@@ -357,9 +370,19 @@ def run(args, runner, logger):
             logger.write(_("not a generated product\n"), 3, False)
             continue
 
+        logger.write(_("\nCleaning generated directories\n"), 3, False)
+        # clean source, build and install directories of the generated product
+        # no verbosity to avoid warning at the first generation, for which dirs don't exist
+        runner.clean(runner.cfg.VARS.application + 
+                  " --products " + pi.name + 
+                  " --generated",
+                  batch=True,
+                  verbose=0,
+                  logger_add_link = logger)
         nbgen += 1
         try:
             result = generate_component_list(runner.cfg,
+                                             product,
                                              pi,
                                              context,
                                              logger)