Пример #1
0
    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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
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()
Пример #5
0
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:
Пример #6
0
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
Пример #7
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

#---------------------------------------------------------#
Пример #8
0
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
Пример #9
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')
Пример #10
0
 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)
Пример #11
0
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 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)
Пример #13
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()
Пример #14
0
        # 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)