Salome HOME
New command sait init. USER.workdir is replaced by LOCAL.workdir. Idem for USER.base...
[tools/sat.git] / commands / make.py
index a64ec11411b318883bf319bc51c7f1d3408c8154..45b3155faa48e4185497a402e85b19e55f499114 100644 (file)
@@ -24,10 +24,10 @@ import src
 # Define all possible option for the make command :  sat make <options>
 parser = src.options.Options()
 parser.add_option('p', 'products', 'list2', 'products',
-    _('products to configure. This option can be'
+    _('Optional: products to configure. This option can be'
     ' passed several time to configure several products.'))
 parser.add_option('o', 'option', 'string', 'option',
-    _('Option to add to the make command.'), "")
+    _('Optional: Option to add to the make command.'), "")
 
 def get_products_list(options, cfg, logger):
     '''method that gives the product list with their informations from 
@@ -36,7 +36,8 @@ def get_products_list(options, cfg, logger):
     :param options Options: The Options instance that stores the commands 
                             arguments
     :param cfg Config: The global configuration
-    :param logger Logger: The logger instance to use for the display and logging
+    :param logger Logger: The logger instance to use for the display and 
+                          logging
     :return: The list of (product name, product_informations).
     :rtype: List
     '''
@@ -58,7 +59,9 @@ def get_products_list(options, cfg, logger):
     # the products name and their definition
     products_infos = src.product.get_products_infos(products, cfg)
     
-    products_infos = [pi for pi in products_infos if not(src.product.product_is_native(pi[1]) or src.product.product_is_fixed(pi[1]))]
+    products_infos = [pi for pi in products_infos if not(
+                                     src.product.product_is_native(pi[1]) or 
+                                     src.product.product_is_fixed(pi[1]))]
     
     return products_infos
 
@@ -118,7 +121,14 @@ def make_product(p_name_info, make_option, config, logger):
     logger.write(header, 3)
     logger.write("\n", 4, False)
     logger.flush()
-    
+
+    # Do nothing if he product is not compilable
+    if ("properties" in p_info and "compilation" in p_info.properties and 
+                                        p_info.properties.compilation == "no"):
+        log_step(logger, header, "ignored")
+        logger.write("\n", 3, False)
+        return 0
+
     # Instantiate the class that manages all the construction commands
     # like cmake, make, make install, make test, environment management, etc...
     builder = src.compilation.Builder(config, logger, p_info)
@@ -130,23 +140,25 @@ def make_product(p_name_info, make_option, config, logger):
     
     # Execute buildconfigure, configure if the product is autotools
     # Execute cmake if the product is cmake
-    res = 0
-    if not src.product.product_has_script(p_info):
-        nb_proc, make_opt_without_j = get_nb_proc(p_info, config, make_option)
-        log_step(logger, header, "MAKE -j" + str(nb_proc))
-        res_m = builder.make(nb_proc, make_opt_without_j)
-        log_res_step(logger, res_m)
-        res += res_m
+    len_end_line = 20
+
+    nb_proc, make_opt_without_j = get_nb_proc(p_info, config, make_option)
+    log_step(logger, header, "MAKE -j" + str(nb_proc))
+    if src.architecture.is_windows():
+        res = builder.wmake(nb_proc, make_opt_without_j)
+    else:
+        res = builder.make(nb_proc, make_opt_without_j)
+    log_res_step(logger, res)
     
     # Log the result
     if res > 0:
-        logger.write("\r%s%s" % (header, " " * 20), 3)
+        logger.write("\r%s%s" % (header, " " * len_end_line), 3)
         logger.write("\r" + header + src.printcolors.printcError("KO"))
         logger.write("==== %(KO)s in make of %(name)s \n" %
             { "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4)
         logger.flush()
     else:
-        logger.write("\r%s%s" % (header, " " * 20), 3)
+        logger.write("\r%s%s" % (header, " " * len_end_line), 3)
         logger.write("\r" + header + src.printcolors.printcSuccess("OK"))
         logger.write("==== %s \n" % src.printcolors.printcInfo("OK"), 4)
         logger.write("==== Make of %(name)s %(OK)s \n" %
@@ -190,7 +202,8 @@ def description():
     :rtype: str
     '''
     return _("The make command executes the \"make\" command in"
-             " the build directory")
+             " the build directory.\nexample:\nsat make SALOME-master "
+             "--products Python,KERNEL,GUI")
   
 def run(args, runner, logger):
     '''method that is called when salomeTools is called with make parameter.
@@ -202,11 +215,12 @@ def run(args, runner, logger):
     # check that the command has been called with an application
     src.check_config_has_application( runner.cfg )
 
-    # Get the list of products to threat
+    # Get the list of products to treat
     products_infos = get_products_list(options, runner.cfg, logger)
     
     # Print some informations
-    logger.write(_('Executing the make command in the build directories of the application %s\n') % 
+    logger.write(_('Executing the make command in the build '
+                                'directories of the application %s\n') % 
                 src.printcolors.printcLabel(runner.cfg.VARS.application), 1)
     
     info = [(_("BUILD directory"),
@@ -215,6 +229,8 @@ def run(args, runner, logger):
     
     # Call the function that will loop over all the products and execute
     # the right command(s)
+    if options.option is None:
+        options.option = ""
     res = make_all_products(runner.cfg, products_infos, options.option, logger)
     
     # Print the final state