logger.write("\r" + header + src.printcolors.printcError("KO"))
logger.write("==== %(KO)s in make install of %(name)s \n" %
{ "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4)
+ logger.write("\n", 3, False)
logger.flush()
- else:
- logger.write("\r%s%s" % (header, " " * 20), 3)
- logger.write("\r" + header + src.printcolors.printcSuccess("OK"))
- logger.write("==== %s \n" % src.printcolors.printcInfo("OK"), 4)
- logger.write("==== Make install of %(name)s %(OK)s \n" %
- { "name" : p_name , "OK" : src.printcolors.printcInfo("OK")}, 4)
- logger.flush()
+ return res
+
+ if src.product.product_has_post_script(p_info):
+ # the product has a post install script we run
+ res = builder.do_script_build(p_info.post_script)
+ if res > 0:
+ logger.write("\r%s%s" % (header, " " * len_end_line), 3)
+ logger.write("\r" + header + src.printcolors.printcError("KO"))
+ logger.write("==== %(KO)s in post script execution of %(name)s \n" %
+ { "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4)
+ logger.write("\n", 3, False)
+ logger.flush()
+ return res
+
+ logger.write("\r%s%s" % (header, " " * 20), 3)
+ logger.write("\r" + header + src.printcolors.printcSuccess("OK"))
+ logger.write("==== %s \n" % src.printcolors.printcInfo("OK"), 4)
+ logger.write("==== Make install of %(name)s %(OK)s \n" %
+ { "name" : p_name , "OK" : src.printcolors.printcInfo("OK")}, 4)
+ logger.flush()
logger.write("\n", 3, False)
return res
logger.write("\r" + header + src.printcolors.printcError("KO"))
logger.write("==== %(KO)s in script execution of %(name)s \n" %
{ "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4)
+ logger.write("\n", 3, False)
logger.flush()
- else:
- 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("==== Script execution of %(name)s %(OK)s \n" %
- { "name" : p_name , "OK" : src.printcolors.printcInfo("OK")}, 4)
- logger.flush()
+ return res
+
+ if src.product.product_has_post_script(p_info):
+ # the product has a post install script we run
+ #script_path_display = src.printcolors.printcLabel(p_info.p_info.post_script)
+ #log_step(logger, header, "POST SCRIPT " + script_path_display)
+ res = builder.do_script_build(p_info.post_script)
+ #log_res_step(logger, res)
+ if res > 0:
+ logger.write("\r%s%s" % (header, " " * len_end_line), 3)
+ logger.write("\r" + header + src.printcolors.printcError("KO"))
+ logger.write("==== %(KO)s in post script execution of %(name)s \n" %
+ { "name" : p_name , "KO" : src.printcolors.printcInfo("ERROR")}, 4)
+ logger.write("\n", 3, False)
+ logger.flush()
+ return res
+
+ 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("==== Script execution of %(name)s %(OK)s \n" %
+ { "name" : p_name , "OK" : src.printcolors.printcInfo("OK")}, 4)
logger.write("\n", 3, False)
+ logger.flush()
return res
* **name** : the name of the product
* **build_source** : the method to use when getting the sources, possible choices are script/cmake/autotools. If "script" is chosen, a compilation script should be provided with compil_script key
* **compil_script** : to specify a compilation script (in conjunction with build_source set to "script"). The programming language is bash under linux, and bat under windows.
+* **post_script** : to specify a post installation script (use it as a hook to do extra wokr after installation).
* **get_source** : the mode to get the sources, possible choices are archive/git/svn/cvs
* **depend** : to give SAT the dependencies of the product
* **patches** : provides a list of patches, if required
if os.path.exists(prod_info.compil_script) and not os.access(prod_info.compil_script, os.X_OK):
DBG.tofix("Compilation script file is not in 'execute mode'", prod_info.compil_script, True)
+ # If the product has a post install script, check the script existence
+ # and if it is executable
+ if product_has_post_script(prod_info):
+ # Check the compil_script key existence
+
+ # Get the path of the script file
+ # if windows supposed '.bat', if linux supposed '.sh'
+ # but user set extension script file in his pyconf as he wants, no obligation.
+ script = prod_info.post_script
+ script_name = os.path.basename(script)
+ if script == script_name:
+ # Only a name is given. Search in the default directory
+ script_path = src.find_file_in_lpath(script_name, config.PATHS.PRODUCTPATH, "post_scripts")
+ if not script_path:
+ msg = _("Post install script %s not found in") % script_name
+ DBG.tofix(msg, config.PATHS.PRODUCTPATH, True) # say where searched
+ script_path = "%s_(Not_Found_by_Sat!!)" % script_name
+ prod_info.post_script = script_path
+
+
+ # Check that the script is executable
+ if os.path.exists(prod_info.post_script) and not os.access(prod_info.post_script, os.X_OK):
+ DBG.tofix("Post install script file is not in 'execute mode'", prod_info.post_script, True)
+
# Get the full paths of all the patches
if product_has_patches(prod_info):
patches = []
res = ( "patches" in product_info and len(product_info.patches) > 0 )
return res
+def product_has_post_script(product_info):
+ """Know if a product has a post install script
+
+ :param product_info Config: The configuration specific to
+ the product
+ :return: True if the product has one or more patches
+ :rtype: boolean
+ """
+ res = ( "post_script" in product_info and len(product_info.post_script) > 0 )
+ return res
+
def product_has_logo(product_info):
"""Know if a product has a logo (YACSGEN generate)