X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=commands%2Fcompile.py;h=9b51a87a56dd1e509874736f264133dbcb82eb10;hb=11c99a29802614c1c09c32e7c803959bfcc3c721;hp=8a73d32b435ee6558fe8329ed90148486e109625;hpb=6084d39d3241559023782ed1903222f68d1c6406;p=tools%2Fsat.git diff --git a/commands/compile.py b/commands/compile.py index 8a73d32..9b51a87 100644 --- a/commands/compile.py +++ b/commands/compile.py @@ -19,6 +19,7 @@ import os import src +import src.debug as DBG # Compatibility python 2/3 for input function # input stays input for python 3 and input = raw_input for python 2 @@ -30,8 +31,8 @@ except NameError: # Define all possible option for the compile command : sat compile parser = src.options.Options() parser.add_option('p', 'products', 'list2', 'products', - _('Optional: products to configure. This option can be' - ' passed several time to configure several products.')) + _('Optional: products to compile. This option can be' + ' passed several time to compile several products.')) parser.add_option('', 'with_fathers', 'boolean', 'fathers', _("Optional: build all necessary products to the given product (KERNEL is " "build before building GUI)."), False) @@ -51,6 +52,11 @@ parser.add_option('', 'show', 'boolean', 'no_compile', parser.add_option('', 'stop_first_fail', 'boolean', 'stop_first_fail', _( "Optional: Stops the command at first product compilation" " fail."), False) +parser.add_option('', 'check', 'boolean', 'check', _( + "Optional: execute the unit tests after compilation"), False) + +parser.add_option('', 'clean_build_after', 'boolean', 'clean_build_after', + _('Optional: remove the build directory after successful compilation'), False) def get_products_list(options, cfg, logger): '''method that gives the product list with their informations from @@ -293,8 +299,10 @@ def compile_all_products(sat, config, options, products_infos, logger): logger.flush() # Do nothing if the product is not compilable - if ("properties" in p_info and "compilation" in p_info.properties and - p_info.properties.compilation == "no"): + 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) continue @@ -308,7 +316,7 @@ def compile_all_products(sat, config, options, products_infos, logger): # Clean the build and the install directories # if the corresponding options was called if options.clean_all: - log_step(logger, header, "CLEAN BUILD AND INSTALL") + log_step(logger, header, "CLEAN BUILD AND INSTALL ") sat.clean(config.VARS.application + " --products " + p_name + " --build --install", @@ -319,7 +327,7 @@ def compile_all_products(sat, config, options, products_infos, logger): # Clean the the install directory # if the corresponding option was called if options.clean_install and not options.clean_all: - log_step(logger, header, "CLEAN INSTALL") + log_step(logger, header, "CLEAN INSTALL ") sat.clean(config.VARS.application + " --products " + p_name + " --install", @@ -327,6 +335,41 @@ def compile_all_products(sat, config, options, products_infos, logger): verbose=0, logger_add_link = logger) + # Recompute the product information to get the right install_dir + # (it could change if there is a clean of the install directory) + p_info = src.product.get_product_config(config, p_name) + + # Check if sources was already successfully installed + check_source = src.product.check_source(p_info) + if not check_source: + logger.write(_("Sources of product not found (try 'sat -h prepare') \n")) + res += 1 #BUG + continue + + if src.product.product_is_salome(p_info): + # For salome modules, we check if the sources of configuration modules are present + # configuration modules have the property "configure_dependency" + + # get the list of all modules in application + all_products_infos = src.product.get_products_infos(config.APPLICATION.products, + config) + check_source = True + # for configuration modules, check if sources are present + for product_name, product_info in all_products_infos: + if ("properties" in product_info and + "configure_dependency" in product_info.properties and + product_info.properties.configure_dependency == "yes"): + check_source = check_source and src.product.check_source(product_info) + if not check_source: + logger.write(_("\nERROR : SOURCES of %s not found! It is required for" + " the configuration\n" % product_name)) + logger.write(_(" Get it with the command : sat prepare %s -p %s \n" % + (config.APPLICATION.name, product_name))) + if not check_source: + # if at least one configuration module is not present, we stop compilation + res += 1 + continue + # Check if it was already successfully installed if src.product.check_installation(p_info): logger.write(_("Already installed\n")) @@ -349,32 +392,43 @@ def compile_all_products(sat, config, options, products_infos, logger): continue # Call the function to compile the product - res_prod, len_end_line, error_step = compile_product(sat, - p_name_info, - config, - options, - logger, - header, - len_end_line) + res_prod, len_end_line, error_step = compile_product( + sat, p_name_info, config, options, logger, header, len_end_line) if res_prod != 0: - # Clean the install directory if there is any - logger.write(_("Cleaning the install directory if there is any\n"), - 5) - sat.clean(config.VARS.application + - " --products " + p_name + - " --install", - batch=True, - verbose=0, - logger_add_link = logger) res += 1 + if error_step != "CHECK": + # Clean the install directory if there is any + logger.write(_( + "Cleaning the install directory if there is any\n"), + 5) + sat.clean(config.VARS.application + + " --products " + p_name + + " --install", + batch=True, + verbose=0, + logger_add_link = logger) + else: + # Clean the build directory if the compilation and tests succeed + if options.clean_build_after: + log_step(logger, header, "CLEAN BUILD") + sat.clean(config.VARS.application + + " --products " + p_name + + " --build", + batch=True, + verbose=0, + logger_add_link = logger) + # Log the result if res_prod > 0: logger.write("\r%s%s" % (header, " " * len_end_line), 3) logger.write("\r" + header + src.printcolors.printcError("KO ") + error_step) logger.write("\n==== %(KO)s in compile of %(name)s \n" % { "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4) + if error_step == "CHECK": + logger.write(_("\nINSTALL directory = %s" % + src.printcolors.printcInfo(p_info.install_dir)), 3) logger.flush() else: logger.write("\r%s%s" % (header, " " * len_end_line), 3) @@ -407,7 +461,7 @@ def compile_product(sat, p_name_info, config, options, logger, header, len_end): :rtype: int ''' - __, p_info = p_name_info + p_name, p_info = p_name_info # Get the build procedure from the product configuration. # It can be : @@ -441,12 +495,25 @@ def compile_product(sat, p_name_info, config, options, logger, header, len_end): " no install directory was found !") logger.write(src.printcolors.printcError(msg), 4) logger.write("\n", 4) + return res, len_end, error_step # Add the config file corresponding to the dependencies/versions of the # product that have been successfully compiled if res==0: logger.write(_("Add the config file in installation directory\n"), 5) add_compile_config_file(p_info, config) + + if options.check: + # Do the unit tests (call the check command) + log_step(logger, header, "CHECK") + res_check = sat.check( + config.VARS.application + " --products " + p_name, + verbose = 0, + logger_add_link = logger) + if res_check != 0: + error_step = "CHECK" + + res += res_check return res, len_end_line, error_step @@ -597,7 +664,7 @@ def description(): def run(args, runner, logger): '''method that is called when salomeTools is called with compile parameter. ''' - + # DBG.write("compile runner.cfg", runner.cfg, True) # Parse the options (options, args) = parser.parse_args(args) @@ -662,4 +729,4 @@ def run(args, runner, logger): code = res if code != 0: code = 1 - return code \ No newline at end of file + return code