-## Trim EDK source code file(s)\r
-#\r
-#\r
-# @param Source File or directory to be trimmed\r
-# @param Target File or directory to store the trimmed content\r
-#\r
-def TrimEdkSources(Source, Target):\r
- if os.path.isdir(Source):\r
- for CurrentDir, Dirs, Files in os.walk(Source):\r
- if '.svn' in Dirs:\r
- Dirs.remove('.svn')\r
- elif "CVS" in Dirs:\r
- Dirs.remove("CVS")\r
-\r
- for FileName in Files:\r
- Dummy, Ext = os.path.splitext(FileName)\r
- if Ext.upper() not in ['.C', '.H']: continue\r
- if Target is None or Target == '':\r
- TrimEdkSourceCode(\r
- os.path.join(CurrentDir, FileName),\r
- os.path.join(CurrentDir, FileName)\r
- )\r
- else:\r
- TrimEdkSourceCode(\r
- os.path.join(CurrentDir, FileName),\r
- os.path.join(Target, CurrentDir[len(Source)+1:], FileName)\r
- )\r
- else:\r
- TrimEdkSourceCode(Source, Target)\r
-\r
-## Trim one EDK source code file\r
-#\r
-# Do following replacement:\r
-#\r
-# (**PeiServices\).PciCfg = <*>;\r
-# => {\r
-# STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-# (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-# &gEcpPeiPciCfgPpiGuid,\r
-# <*>\r
-# };\r
-# (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-#\r
-# <*>Modify(<*>)\r
-# => PeiLibPciCfgModify (<*>)\r
-#\r
-# gRT->ReportStatusCode (<*>)\r
-# => EfiLibReportStatusCode (<*>)\r
-#\r
-# #include <LoadFile\.h>\r
-# => #include <FvLoadFile.h>\r
-#\r
-# CreateEvent (EFI_EVENT_SIGNAL_READY_TO_BOOT, <*>)\r
-# => EfiCreateEventReadyToBoot (<*>)\r
-#\r
-# CreateEvent (EFI_EVENT_SIGNAL_LEGACY_BOOT, <*>)\r
-# => EfiCreateEventLegacyBoot (<*>)\r
-#\r
-# @param Source File to be trimmed\r
-# @param Target File to store the trimmed content\r
-#\r
-def TrimEdkSourceCode(Source, Target):\r
- EdkLogger.verbose("\t%s -> %s" % (Source, Target))\r
- CreateDirectory(os.path.dirname(Target))\r
-\r
- try:\r
- f = open (Source,'rb')\r
- except:\r
- EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
- # read whole file\r
- Lines = f.read()\r
- f.close()\r
-\r
- NewLines = None\r
- for Re,Repl in gImportCodePatterns:\r
- if NewLines is None:\r
- NewLines = Re.sub(Repl, Lines)\r
- else:\r
- NewLines = Re.sub(Repl, NewLines)\r
-\r
- # save all lines if trimmed\r
- if Source == Target and NewLines == Lines:\r
- return\r
-\r
- try:\r
- f = open (Target,'wb')\r
- except:\r
- EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
- f.write(NewLines)\r
- f.close()\r
-\r