]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Trim/Trim.py
BaseTools:Update mailing list address in BaseTools error messages
[mirror_edk2.git] / BaseTools / Source / Python / Trim / Trim.py
index 428bf0d681bf86ffd32e4cb849c14b135937172f..43119bd7ff8cf4d210f03623ba9ed42efbfcc000 100644 (file)
@@ -2,13 +2,7 @@
 # Trim files preprocessed by compiler\r
 #\r
 # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
 \r
 ##\r
@@ -18,7 +12,7 @@ import Common.LongFilePathOs as os
 import sys\r
 import re\r
 from io import BytesIO\r
-\r
+import codecs\r
 from optparse import OptionParser\r
 from optparse import make_option\r
 from Common.BuildToolError import *\r
@@ -61,70 +55,6 @@ gAslIncludePattern = re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)", re.M
 ## Regular expression for matching C style #include "XXX.asl" in asl file\r
 gAslCIncludePattern = re.compile(r'^(\s*)#include\s*[<"]\s*([-\\/\w.]+)\s*([>"])', re.MULTILINE)\r
 ## Patterns used to convert EDK conventions to EDK2 ECP conventions\r
-gImportCodePatterns = [\r
-    [\r
-        re.compile('^(\s*)\(\*\*PeiServices\)\.PciCfg\s*=\s*([^;\s]+);', re.MULTILINE),\r
-        '''\\1{\r
-\\1  STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-\\1    (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-\\1    &gEcpPeiPciCfgPpiGuid,\r
-\\1    \\2\r
-\\1  };\r
-\\1  (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-\\1}'''\r
-    ],\r
-\r
-    [\r
-        re.compile('^(\s*)\(\*PeiServices\)->PciCfg\s*=\s*([^;\s]+);', re.MULTILINE),\r
-        '''\\1{\r
-\\1  STATIC EFI_PEI_PPI_DESCRIPTOR gEcpPeiPciCfgPpiList = {\r
-\\1    (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
-\\1    &gEcpPeiPciCfgPpiGuid,\r
-\\1    \\2\r
-\\1  };\r
-\\1  (**PeiServices).InstallPpi (PeiServices, &gEcpPeiPciCfgPpiList);\r
-\\1}'''\r
-    ],\r
-\r
-    [\r
-        re.compile("(\s*).+->Modify[\s\n]*\(", re.MULTILINE),\r
-        '\\1PeiLibPciCfgModify ('\r
-    ],\r
-\r
-    [\r
-        re.compile("(\W*)gRT->ReportStatusCode[\s\n]*\(", re.MULTILINE),\r
-        '\\1EfiLibReportStatusCode ('\r
-    ],\r
-\r
-    [\r
-        re.compile('#include\s+EFI_GUID_DEFINITION\s*\(FirmwareFileSystem\)', re.MULTILINE),\r
-        '#include EFI_GUID_DEFINITION (FirmwareFileSystem)\n#include EFI_GUID_DEFINITION (FirmwareFileSystem2)'\r
-    ],\r
-\r
-    [\r
-        re.compile('gEfiFirmwareFileSystemGuid', re.MULTILINE),\r
-        'gEfiFirmwareFileSystem2Guid'\r
-    ],\r
-\r
-    [\r
-        re.compile('EFI_FVH_REVISION', re.MULTILINE),\r
-        'EFI_FVH_PI_REVISION'\r
-    ],\r
-\r
-    [\r
-        re.compile("(\s*)\S*CreateEvent\s*\([\s\n]*EFI_EVENT_SIGNAL_READY_TO_BOOT[^,]*,((?:[^;]+\n)+)(\s*\));", re.MULTILINE),\r
-        '\\1EfiCreateEventReadyToBoot (\\2\\3;'\r
-    ],\r
-\r
-    [\r
-        re.compile("(\s*)\S*CreateEvent\s*\([\s\n]*EFI_EVENT_SIGNAL_LEGACY_BOOT[^,]*,((?:[^;]+\n)+)(\s*\));", re.MULTILINE),\r
-        '\\1EfiCreateEventLegacyBoot (\\2\\3;'\r
-    ],\r
-#    [\r
-#        re.compile("(\W)(PEI_PCI_CFG_PPI)(\W)", re.MULTILINE),\r
-#        '\\1ECP_\\2\\3'\r
-#    ]\r
-]\r
 \r
 ## file cache to avoid circular include in ASL file\r
 gIncludedAslFile = []\r
@@ -141,14 +71,11 @@ gIncludedAslFile = []
 def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):\r
     CreateDirectory(os.path.dirname(Target))\r
     try:\r
-        f = open (Source, 'r')\r
+        with open(Source, "r") as File:\r
+            Lines = File.readlines()\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
 \r
-    # read whole file\r
-    Lines = f.readlines()\r
-    f.close()\r
-\r
     PreprocessedFile = ""\r
     InjectedFile = ""\r
     LineIndexOfOriginalFile = None\r
@@ -168,7 +95,7 @@ def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):
                 InjectedFile = MatchList[1]\r
                 InjectedFile = os.path.normpath(InjectedFile)\r
                 InjectedFile = os.path.normcase(InjectedFile)\r
-                # The first injetcted file must be the preprocessed file itself\r
+                # The first injected file must be the preprocessed file itself\r
                 if PreprocessedFile == "":\r
                     PreprocessedFile = InjectedFile\r
             LineControlDirectiveFound = True\r
@@ -245,11 +172,10 @@ def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):
 \r
     # save to file\r
     try:\r
-        f = open (Target, 'w')\r
+        with open(Target, 'w') as File:\r
+            File.writelines(NewLines)\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
-    f.writelines(NewLines)\r
-    f.close()\r
 \r
 ## Trim preprocessed VFR file\r
 #\r
@@ -263,12 +189,11 @@ def TrimPreprocessedVfr(Source, Target):
     CreateDirectory(os.path.dirname(Target))\r
 \r
     try:\r
-        f = open (Source, 'r')\r
+        with open(Source, "r") as File:\r
+            Lines = File.readlines()\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
     # read whole file\r
-    Lines = f.readlines()\r
-    f.close()\r
 \r
     FoundTypedef = False\r
     Brace = 0\r
@@ -312,11 +237,10 @@ def TrimPreprocessedVfr(Source, Target):
 \r
     # save all lines trimmed\r
     try:\r
-        f = open (Target, 'w')\r
+        with open(Target, 'w') as File:\r
+            File.writelines(Lines)\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
-    f.writelines(Lines)\r
-    f.close()\r
 \r
 ## Read the content  ASL file, including ASL included, recursively\r
 #\r
@@ -342,7 +266,12 @@ def DoInclude(Source, Indent='', IncludePathList=[], LocalSearchPath=None):
         for IncludePath in SearchPathList:\r
             IncludeFile = os.path.join(IncludePath, Source)\r
             if os.path.isfile(IncludeFile):\r
-                F = open(IncludeFile, "r")\r
+                try:\r
+                    with open(IncludeFile, "r") as File:\r
+                        F = File.readlines()\r
+                except:\r
+                    with codecs.open(IncludeFile, "r", encoding='utf-8') as File:\r
+                        F = File.readlines()\r
                 break\r
         else:\r
             EdkLogger.error("Trim", "Failed to find include file %s" % Source)\r
@@ -377,7 +306,6 @@ def DoInclude(Source, Indent='', IncludePathList=[], LocalSearchPath=None):
         NewFileContent.append("\n")\r
 \r
     gIncludedAslFile.pop()\r
-    F.close()\r
 \r
     return NewFileContent\r
 \r
@@ -409,7 +337,9 @@ def TrimAslFile(Source, Target, IncludePathFile):
     if IncludePathFile:\r
         try:\r
             LineNum = 0\r
-            for Line in open(IncludePathFile, 'r'):\r
+            with open(IncludePathFile, 'r') as File:\r
+                FileLines = File.readlines()\r
+            for Line in FileLines:\r
                 LineNum += 1\r
                 if Line.startswith("/I") or Line.startswith ("-I"):\r
                     IncludePathList.append(Line[2:].strip())\r
@@ -427,13 +357,11 @@ def TrimAslFile(Source, Target, IncludePathFile):
 \r
     # save all lines trimmed\r
     try:\r
-        f = open (Target, 'w')\r
+        with open(Target, 'w') as File:\r
+            File.writelines(Lines)\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
 \r
-    f.writelines(Lines)\r
-    f.close()\r
-\r
 def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):\r
     VfrNameList = []\r
     if os.path.isdir(DebugDir):\r
@@ -453,7 +381,7 @@ def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):
         return\r
 \r
     try:\r
-        fInputfile = open(OutputFile, "wb+", 0)\r
+        fInputfile = open(OutputFile, "wb+")\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, "File open failed for %s" %OutputFile, None)\r
 \r
@@ -494,97 +422,6 @@ def GenerateVfrBinSec(ModuleName, DebugDir, OutputFile):
     fStringIO.close ()\r
     fInputfile.close ()\r
 \r
-## 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, 'r')\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, 'w')\r
-    except:\r
-        EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
-    f.write(NewLines)\r
-    f.close()\r
-\r
 \r
 ## Parse command line options\r
 #\r
@@ -603,9 +440,6 @@ def Options():
                           help="The input file is EFI image"),\r
         make_option("-a", "--asl-file", dest="FileType", const="Asl", action="store_const",\r
                           help="The input file is ASL file"),\r
-        make_option("-8", "--Edk-source-code", dest="FileType", const="EdkSourceCode", action="store_const",\r
-                          help="The input file is source code for Edk to be trimmed for ECP"),\r
-\r
         make_option("-c", "--convert-hex", dest="ConvertHex", action="store_true",\r
                           help="Convert standard hex format (0xabcd) to MASM format (abcdh)"),\r
 \r
@@ -680,8 +514,6 @@ def Main():
             if CommandOptions.OutputFile is None:\r
                 CommandOptions.OutputFile = os.path.splitext(InputFile)[0] + '.iii'\r
             TrimAslFile(InputFile, CommandOptions.OutputFile, CommandOptions.IncludePathFile)\r
-        elif CommandOptions.FileType == "EdkSourceCode":\r
-            TrimEdkSources(InputFile, CommandOptions.OutputFile)\r
         elif CommandOptions.FileType == "VfrOffsetBin":\r
             GenerateVfrBinSec(CommandOptions.ModuleName, CommandOptions.DebugDir, CommandOptions.OutputFile)\r
         else :\r
@@ -701,7 +533,7 @@ def Main():
                     "\nTrim",\r
                     CODE_ERROR,\r
                     "Unknown fatal error when trimming [%s]" % InputFile,\r
-                    ExtraData="\n(Please send email to edk2-devel@lists.01.org for help, attaching following call stack trace!)\n",\r
+                    ExtraData="\n(Please send email to %s for help, attaching following call stack trace!)\n" % MSG_EDKII_MAIL_ADDR,\r
                     RaiseError=False\r
                     )\r
         EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc())\r