From 8501bb0c05ad9dd7ef6504803678866b1d23f6ab Mon Sep 17 00:00:00 2001 From: "Chen, Christine" Date: Tue, 24 Nov 2020 16:40:23 +0800 Subject: BaseTools: Collect full Header files for struct finding. Currently, only parts of the Header files can be collected which caused some struct definition can not be found. To solve this issue, Header files full collection has been added in this file to support the struct finding. Cc: Bob Feng Cc: Liming Gao Signed-off-by: Yuwei Chen Reviewed-by: Bob Feng --- BaseTools/Scripts/ConvertFceToStructurePcd.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'BaseTools/Scripts/ConvertFceToStructurePcd.py') diff --git a/BaseTools/Scripts/ConvertFceToStructurePcd.py b/BaseTools/Scripts/ConvertFceToStructurePcd.py index 89e6a727a2..aeda3ff26d 100644 --- a/BaseTools/Scripts/ConvertFceToStructurePcd.py +++ b/BaseTools/Scripts/ConvertFceToStructurePcd.py @@ -370,7 +370,7 @@ class PATH(object): def __init__(self,path): self.path=path self.rootdir=self.get_root_dir() - self.usefuldir=[] + self.usefuldir=set() self.lstinf = {} for path in self.rootdir: for o_root, o_dir, o_file in os.walk(os.path.join(path, "OUTPUT"), topdown=True, followlinks=False): @@ -381,7 +381,7 @@ class PATH(object): for LST in l_file: if os.path.splitext(LST)[1] == '.lst': self.lstinf[os.path.join(l_root, LST)] = os.path.join(o_root, INF) - self.usefuldir.append(path) + self.usefuldir.add(path) def get_root_dir(self): rootdir=[] @@ -410,7 +410,7 @@ class PATH(object): def header(self,struct): header={} - head_re = re.compile('typedef.*} %s;[\n]+(.*?)(?:typedef|formset)'%struct,re.M|re.S) + head_re = re.compile('typedef.*} %s;[\n]+(.*)(?:typedef|formset)'%struct,re.M|re.S) head_re2 = re.compile(r'#line[\s\d]+"(\S+h)"') for i in list(self.lstinf.keys()): with open(i,'r') as lst: @@ -421,9 +421,21 @@ class PATH(object): if head: format = head[0].replace('\\\\','/').replace('\\','/') name =format.split('/')[-1] - head = self.makefile(name).replace('\\','/') - header[struct] = head + head = self.headerfileset.get(name) + if head: + head = head.replace('\\','/') + header[struct] = head return header + @property + def headerfileset(self): + headerset = dict() + for root,dirs,files in os.walk(self.path): + for file in files: + if os.path.basename(file) == 'deps.txt': + with open(os.path.join(root,file),"r") as fr: + for line in fr.readlines(): + headerset[os.path.basename(line).strip()] = line.strip() + return headerset def makefile(self,filename): re_format = re.compile(r'DEBUG_DIR.*(?:\S+Pkg)\\(.*\\%s)'%filename) @@ -433,6 +445,7 @@ class PATH(object): dir = re_format.findall(read) if dir: return dir[0] + return None class mainprocess(object): @@ -479,7 +492,7 @@ class mainprocess(object): WARNING.append("Warning: No for struct %s"%struct) title2 = '%s%s|{0}|%s|0xFCD00000{\n \n %s\n \n%s\n}\n' % (PCD_NAME, c_name, struct, '', self.LST.package()[self.lst_dict[lstfile]]) header_list.append(title2) - else: + elif struct not in lst._ignore: struct_dict ={} print("ERROR: Struct %s can't found in lst file" %struct) ERRORMSG.append("ERROR: Struct %s can't found in lst file" %struct) -- cgit v1.2.3