def getMetainfo(self, meta_build_path): """ Returns meta_info object (or in the case of python3 a MetaInfo instance) from meta build's meta_lib module. In the case of python3 we return a MetaInfo instance, which invokes a shim layer to deal with running the python2 code required to import meta_lib :param str meta_build_path: meta build path :returns: meta_info object :rtype: class instance """ sys.path += [c_path.join(meta_build_path, path) for path in META_LIB_PATH_REL] try: import meta_lib except SyntaxError as e: # SyntaxError on import of meta_lib expected to occur when importing # the python2 meta_lib when running sectools in python3. In this case we # return the shimmed version on meta_info. return MetaInfo(meta_build_path) try: meta_info = meta_lib.meta_info(meta_dir=meta_build_path) except Exception: meta_info = meta_lib.meta_info() return meta_info
def get_meta_info(cls, meta_build_path): sys.path += [c_path.join(meta_build_path, path) for path in cls.META_LIB_PATH_REL] import meta_lib try: meta_info = meta_lib.meta_info(meta_dir = meta_build_path) except Exception: meta_info = meta_lib.meta_info() return meta_info
def get_meta_info(cls, meta_build_path): sys.path.append(c_path.join(meta_build_path, cls.META_LIB_PATH_REL)) import meta_lib try: meta_info = meta_lib.meta_info(meta_dir=meta_build_path) except Exception: meta_info = meta_lib.meta_info() return meta_info
def create_cmm(targ_root, temp_file, paths_only): dst_path = os.path.dirname(temp_file) if (dst_path != '' and # '' implies current directory, and is allowed not os.path.isdir(dst_path)): print "Can't find destination directory:", dst_path print __doc__ sys.exit(1) print "Platform is:" + sys.platform print "Python Version is:" + sys.version print "Current directory is:" + os.getcwd() print "Args are:" + str(sys.argv) cmm_script_header = '' cmm_tag_template = '''GLOBAL &%s &%s="%s"\n ''' cmm_script_trailer = '''\nENDDO''' exception = False if not targ_root.endswith('/') and not targ_root.endswith('\\'): targ_root += '/' mi = ml.meta_info() cmm_script = open(temp_file, 'w') cmm_script.write(cmm_script_header) # lg.log("Processing meta info") print "Processing meta info" if paths_only: print "Calling function to create cmm with root paths." writepathsonly(cmm_script, mi, cmm_tag_template) else: print "Calling function to create cmm with relative paths." write_cmm_var(cmm_script, mi) cmm_script.write(cmm_script_trailer) print "Saving cmm script." cmm_script.close() if os.path.exists(os.path.join(os.path.dirname(temp_file), 'EXCEPTION.txt')) and exception == True: exception_FILE.close() else: # Create a file TEMP_SUCCESS.txt to indicate the successful completion of TEMP.cmm success_txt = os.path.join(os.path.dirname(temp_file), 'SUCCESS.txt') success_FILE = open(success_txt, 'w') success_FILE.close()
lg.log("Python Version is:" + sys.version) lg.log("Current directory is:" + os.getcwd()) lg.log("Args are:" + str(sys.argv)) cmm_script_header = "" cmm_tag_template = """GLOBAL &%s &%s="%s" """ cmm_script_trailer = """ENDDO""" exception = False sys.path.append(os.path.dirname(__file__)) import meta_lib as ml if not targ_root.endswith("/") and not targ_root.endswith("\\"): targ_root += "/" mi = ml.meta_info(logger=lg) cmm_script = open(temp_file, "w") cmm_script.write(cmm_script_header) lg.log("Processing meta info") # Look for generic cmm_var attributes var_values = mi.get_var_values("cmm_var") for var in var_values: cmm_script.write(cmm_tag_template % (var, var, var_values[var])) flavors_list = mi.get_product_flavors() if flavors_list: default_flavor = flavors_list[0] else:
def update_meta (lg_obj, pairs,fb_nearest = False): #---------------------------------------------------------# # Print some diagnostic info to the log # #---------------------------------------------------------# import meta_lib as ml lg_obj.log("update_meta.py: Platform is " + sys.platform) lg_obj.log("update_meta.py: Python Version is " + sys.version) lg_obj.log("update_meta.py: Current directory is " + os.getcwd()) lg_obj.log("update_meta.py: Parameters are ") for pair in pairs: lg_obj.log("update_meta.py: " + " " + pair.strip()) #---------------------------------------------------------# # Update/Create the Meta-Info file # #---------------------------------------------------------# mi = ml.meta_info(logger = lg_obj,fb_nearest = fb_nearest ) lg_obj.log_highlight("UPDATE META - Processing Parameters") lg_obj.log("update_meta.py: Updating/Creating Meta-Info file") builds = [] # Save this info for later cleanallvars = False for p in pairs: lg_obj.log("update_meta.py: Processing " + p) if ('=' in p): var, val = p.strip().split('=') if "--flavors" in var: # Flavor Filtering selected_pf_list = val.strip().split(',') mi.filter_product_flavors(selected_pf_list) elif "--wflow_filter" in var: # Workflow Filters selected_steps_list = val.strip().split(',') mi.remove_workflow_steps(selected_steps_list) elif "--cleanallvars" in var: # Check content vars need to be clean-up if val.lower() == 'true' : cleanallvars = True else: # Var:Value Pairs mi.update_var_values(var, val) elif (':' in p): tag, loc = p.strip().split(':',1) if tag_not_there(tag, mi): # Unconfigured build 'tag' lg_obj.log_error('Tag "' + tag + '" not found') return 2 # EC 2 builds.append(tag) # Save valid build tags for later if mi.update_build_info(tag, loc): # Invalid build ID/loc lg_obj.log_error('Build "' + loc + '" not found') return 3 # EC 3 if tag == 'common' : lg_obj.log("update_meta.py: Updating ProductLine using "+ p + " build info") mi.update_pl_from_buildid(loc) else: lg_obj.log_error('Please rerun with the format: modem:M8960AAAAAGAAM0000 var=value') return 1 # EC 1 if cleanallvars : mi.clean_content_vars() mi.save() #---------------------------------------------------------# # Create goto scripts # #---------------------------------------------------------# lg_obj.log_highlight("UPDATE META - Creating goto scripts") # Define template for goto scripts goto_template = '''#! /usr/bin/python import sys import os import subprocess sys.path.append(os.path.join(os.path.dirname(__file__), 'common/build/lib')) import meta_lib as ml mi = ml.meta_info() path = mi.get_build_path('%s') on_linux = sys.platform.startswith('linux') if on_linux: if path is not None: try: subprocess.Popen(['gnome-open', path]).wait() except: try: subprocess.Popen(['xdg-open', path]).wait() except: ErrorMessageBox("Command not supported by Linux. Only Gnome/xdg are supported") else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') else: if path is not None: subprocess.Popen(['start', path], shell=True).wait() else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') ''' for tag in mi.get_build_list(): # Don't process the current build if tag != 'common': path = mi.get_build_path(tag) image_dir = mi.get_image_dir(tag) # Don't process builds that don't have image directories # (This tests for builds that haven't been updated) lg_obj.log("update_meta.py: goto " + tag); if path and image_dir and os.path.exists(os.path.join(path,image_dir)): goto_script = open(os.path.join(os.path.dirname(__file__), '../../../goto_' + tag + '.py'), 'w') goto_script.write(goto_template % (tag, tag, tag, tag, tag)) goto_script.close() lg_obj.log_highlight("UPDATE META COMPLETE") return 0
elif len(sys.argv) >= 2 : meta_path = sys.argv[1] elif len(sys.argv) >= 3 : dest_path = sys.argv[2] else: dest_path = os.path.dirname(os.path.abspath(__file__)) meta_path = raw_input('Enter Meta path ') #---------------------------------------------------------# # Load the Meta-Info file # #---------------------------------------------------------# lib_path = os.path.join(meta_path, 'common/tools/meta') sys.path.insert(1, lib_path) import meta_lib as ml print "flash_meta.py: Loading Meta-Info file from Meta location" mi = ml.meta_info() #---------------------------------------------------------# # Find Apps build. # #---------------------------------------------------------# print "flash_meta.py: Finding Apps paths" apps_path = mi.get_build_path('apps') la_path = os.path.join(apps_path, 'LINUX/android') if os.path.exists(la_path): apps_path = la_path la_path = os.path.join(apps_path,'out/target/product/msm8974') if os.path.exists(la_path): apps_path = la_path #---------------------------------------------------------#
def update_meta(lg_obj, pairs, fb_nearest=False): #---------------------------------------------------------# # Print some diagnostic info to the log # #---------------------------------------------------------# import meta_lib as ml lg_obj.log("update_meta.py: Platform is " + sys.platform) lg_obj.log("update_meta.py: Python Version is " + sys.version) lg_obj.log("update_meta.py: Current directory is " + os.getcwd()) lg_obj.log("update_meta.py: Parameters are ") for pair in pairs: lg_obj.log("update_meta.py: " + " " + pair.strip()) #---------------------------------------------------------# # Update/Create the Meta-Info file # #---------------------------------------------------------# mi = ml.meta_info(logger=lg_obj, fb_nearest=fb_nearest) lg_obj.log_highlight("UPDATE META - Processing Parameters") lg_obj.log("update_meta.py: Updating/Creating Meta-Info file") builds = [] # Save this info for later cleanallvars = False for p in pairs: lg_obj.log("update_meta.py: Processing " + p) if ('=' in p): var, val = p.strip().split('=') if "--flavors" in var: # Flavor Filtering selected_pf_list = val.strip().split(',') mi.filter_product_flavors(selected_pf_list) elif "--wflow_filter" in var: # Workflow Filters selected_steps_list = val.strip().split(',') mi.remove_workflow_steps(selected_steps_list) elif "--remove_images" in var: # Workflow Filters remove_image_list = val.strip().split(',') mi.remove_images(remove_image_list) elif "--cleanallvars" in var: # Check content vars need to be clean-up if val.lower() == 'true': cleanallvars = True else: # Var:Value Pairs mi.update_var_values(var, val) elif (':' in p): tag, loc = p.strip().split(':', 1) if tag_not_there(tag, mi): # Unconfigured build 'tag' lg_obj.log_error('Tag "' + tag + '" not found') return 2 # EC 2 builds.append(tag) # Save valid build tags for later if mi.update_build_info(tag, loc): # Invalid build ID/loc lg_obj.log_error('Build "' + loc + '" not found') return 3 # EC 3 if tag == 'common': lg_obj.log("update_meta.py: Updating ProductLine using " + p + " build info") mi.update_pl_from_buildid(loc) else: lg_obj.log_error( 'Please rerun with the format: modem:M8960AAAAAGAAM0000 var=value' ) return 1 # EC 1 if cleanallvars: mi.clean_content_vars() mi.save() #---------------------------------------------------------# # Create goto scripts # #---------------------------------------------------------# lg_obj.log_highlight("UPDATE META - Creating goto scripts") # Define template for goto scripts goto_template = '''#! /usr/bin/python import sys import os import subprocess sys.path.append(os.path.join(os.path.dirname(__file__), 'common/build/lib')) import meta_lib as ml mi = ml.meta_info() path = mi.get_build_path('%s') on_linux = sys.platform.startswith('linux') if on_linux: if path is not None: try: subprocess.Popen(['gnome-open', path]).wait() except: try: subprocess.Popen(['xdg-open', path]).wait() except: ErrorMessageBox("Command not supported by Linux. Only Gnome/xdg are supported") else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') else: if path is not None: subprocess.Popen(['start', path], shell=True).wait() else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') ''' for tag in mi.get_build_list(): # Don't process the current build if tag != 'common': path = mi.get_build_path(tag) image_dir = mi.get_image_dir(tag) # Don't process builds that don't have image directories # (This tests for builds that haven't been updated) lg_obj.log("update_meta.py: goto " + tag) if path and image_dir and os.path.exists( os.path.join(path, image_dir)): goto_script = open( os.path.join(os.path.dirname(__file__), '../../../goto_' + tag + '.py'), 'w') goto_script.write(goto_template % (tag, tag, tag, tag, tag)) goto_script.close() lg_obj.log_highlight("UPDATE META COMPLETE") return 0
lg.log("Platform is:" + sys.platform) lg.log("Python Version is:" + sys.version) lg.log("Current directory is:" + os.getcwd()) lg.log("Args are:" + str(sys.argv)) cmm_script_header = '' cmm_tag_template = '''GLOBAL &%s &%s="%s" ''' cmm_script_trailer = '''ENDDO''' exception = False sys.path.append(os.path.dirname(__file__)) import meta_lib as ml mi = ml.meta_info(logger=lg) product_flavors = mi.get_product_flavors() if product_flavor and product_flavor not in mi.get_product_flavors(): lg.log("Error: " + product_flavor + " is not a valid Product Flavor. Valid Product Flavors are:\n" + str(product_flavors) + "\n") #create an exception file to indicate exception exception_FILE = open(exception_file_path, 'w') exception_str = "Exception: " + product_flavor + " is not a valid product flavor." exception_FILE.write(exception_str) exception_FILE.close() raise RuntimeError('Invalid Flavor')
def get_meta_info(cls, meta_build_path): sys.path.append(c_path.join(meta_build_path, cls.META_LIB_PATH_REL)) import meta_lib return meta_lib.meta_info(meta_build_path)
def update_meta (lg_obj, pairs): #---------------------------------------------------------# # Print some diagnostic info to the log # #---------------------------------------------------------# import meta_lib as ml lg_obj.log("update_meta.py:Platform is:" + sys.platform) lg_obj.log("update_meta.py:Python Version is:" + sys.version) lg_obj.log("update_meta.py:Current directory is:" + os.getcwd()) lg_obj.log("update_meta.py:Parameters:") for pair in pairs: lg_obj.log("update_meta.py:" + " " + pair.strip()) #---------------------------------------------------------# # Update/Create the Meta-Info file # #---------------------------------------------------------# mi = ml.meta_info(logger = lg_obj ) lg_obj.log("update_meta.py:==============UPDATE META LOGGING===============") lg_obj.log("update_meta.py:Updating/Creating Meta-Info file") builds = [] # Save this info for later for p in pairs: lg_obj.log("update_meta.py:Processing " + ' ' + p) if p.count('='): var, val = p.strip().split('=') mi.update_var_values(var, val) elif not p.count(':'): lg_obj.log('\n\nError:\nPlease rerun with the format: modem:M8960AAAAAGAAM0000 var=value') return 1 else: tag, loc = p.strip().split(':',1) if tag_not_there(tag, mi): lg_obj.log('\n\nError:\nTag "'+tag+'" not found') return 2 builds.append(tag) # Save this info for later if mi.update_build_info(tag, loc): lg_obj.log('\n\nError:\nBuild '+loc+' not found') return 3 if tag == 'common' : if mi.get_product_name(): lg_obj.log("update_meta.py:ProductLine Found") else: lg_obj.log("update_meta.py:Updating ProductLine using", p, "build info") mi.update_pl_from_buildid(loc) mi.save() #---------------------------------------------------------# # Create goto scripts # #---------------------------------------------------------# lg_obj.log("update_meta.py:Creating goto scripts") # Define template for goto scripts goto_template = '''#! /usr/bin/python import sys import os import subprocess sys.path.append(os.path.join(os.path.dirname(__file__), 'common/tools/meta')) import meta_lib as ml mi = ml.meta_info() path = mi.get_build_path('%s') on_linux = sys.platform.startswith('linux') if on_linux: if path is not None: try: subprocess.Popen(['gnome-open', path]).wait() except: try: subprocess.Popen(['xdg-open', path]).wait() except: ErrorMessageBox("Command not supported by Linux. Only Gnome/xdg are supported") else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') else: if path is not None: subprocess.Popen(['start', path], shell=True).wait() else: ErrorMessageBox('goto_%s.py', 'Cannot find path for %s.') ''' for tag in mi.get_build_list(): # Don't process the current build if tag != 'common': path = mi.get_build_path(tag) image_dir = mi.get_image_dir(tag) # Don't process builds that don't have image directories # (This tests for builds that haven't been updated) if path and image_dir and os.path.exists(path + image_dir): goto_script = open(os.path.join(os.path.dirname(__file__), '../../../goto_' + tag + '.py'), 'w') goto_script.write(goto_template % (tag, tag, tag, tag, tag)) goto_script.close() lg_obj.log("update_meta.py:====UPDATE_META COMPLETE=========") return 0
def main(): parse_args_and_validate(sys.argv[1:]) print "gensecimageconfig starts" print "gensecimage = " + GENSECIMAGE_PY meta_lib_dir = metabuild_dir + meta_lib_relative_path sys.path.append(meta_lib_dir) import meta_lib as ml mi = ml.meta_info() #import pdb;pdb.set_trace() if (basictemplate_to_read != ''): outputfile = open(basic_out_cfg,'w') template_file = open(basictemplate_to_read) #Read content.xml to get bid contents_xml = open(os.path.join(metabuild_dir, "contents.xml"), 'rt') contents_xml_data = contents_xml.read() # Get file path using cmm_file_var in contents.xml file_vars = mi.get_file_vars( file_types=['download_file', 'file_ref'], attr='cmm_file_var') for line in template_file: for var_name in file_vars: if line.find("%" + var_name + "%")>=0: file_list = file_vars[var_name] print "var_name=%s list length = %d" % (var_name, len(file_list)) line = line.replace("%" + var_name + "%", file_list[0]) print line idx1 = line.find("%ROOTPATH_") if (idx1 >= 0): idx2 = line.find("%", idx1+1) root_path_name = line[idx1+10:idx2] print "root_path_name = " + root_path_name root_path = mi.get_build_path(root_path_name) line = line.replace("%ROOTPATH_" + root_path_name + "%", root_path) print line idx1 = line.find("%METAPATH%") if (idx1 >= 0): line = line.replace("%METAPATH%", metabuild_dir) print line idx1 = line.find("%BID_") if (idx1 >= 0): idx2 = line.find("%", idx1+1) bid_name = line[idx1+5:idx2] print "bid_name = " + bid_name bid_key = '${%s_bid:' % bid_name bid_idx1 = contents_xml_data.find(bid_key) if (bid_idx1 >=0 ): bid_idx2 = contents_xml_data.find("}", bid_idx1+1) bid = contents_xml_data[bid_idx1+len(bid_key):bid_idx2] print "bid = " + bid line = line.replace("%BID_" + bid_name + "%", bid) print line outputfile.write(line) outputfile.close() template_file.close() contents_xml.close() if (postsigntemplate_to_read != ''): config = ConfigParser.SafeConfigParser() config.read(postsigntemplate_to_read) default_config_dict = config.defaults() if META_BUILD_DIR_OPTION in default_config_dict.keys(): config.set('DEFAULT', META_BUILD_DIR_OPTION, metabuild_dir) i = 1 while True: build_dir_name = BUILD_DIR_NAME_OPTION + str(i) if build_dir_name in default_config_dict.keys(): build_path = mi.get_build_path(default_config_dict[build_dir_name]) print 'Set ' + default_config_dict[build_dir_name] + ' build dir: ' + build_path config.set('DEFAULT', BUILD_DIR_OPTION + str(i), build_path) i = i + 1 else: break outputfile = open(postsign_out_cfg, "wb") config.write(outputfile) outputfile.close()
# current working directory should be <root>/common/build/app/<folder> sys.path.append( os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), '../../lib'))) contents_xml_rel_path = '../../../../contents.xml' else: print >> sys.stderr, "Failed locating contents.xml" sys.exit(0) import meta_lib as ml import meta_log as lg # Create log and meta interface lg = lg.Logger(log_to_stdout=options.debug_msg, save_old_log_file=False) mi = ml.meta_info(file_pfn=os.path.join(os.path.dirname(sys.argv[0]), contents_xml_rel_path), logger=lg, fb_nearest=options.fb_nearest) if options.debug_msg: lg.log("meta_cli : meta_info object created with " + contents_xml_rel_path) if len(sys.argv[1:]) < 1: parser.error("invalid usage. \nFor help , please try: \nmeta_cli.py -h") if options.print_doc: input_string.remove('--doc') if options.print_dir: input_string.remove('--dir') print_dir(ml, mi) sys.exit(0)