Joey:
  Does this change still work on old python version, such as Python 3.9? 

Thanks
Liming
> -----邮件原件-----
> 发件人: Joey Vagedes <joey.vage...@gmail.com>
> 发送时间: 2023年12月7日 4:27
> 收件人: devel@edk2.groups.io
> 抄送: Rebecca Cran <rebe...@bsdio.com>; Liming Gao
> <gaolim...@byosoft.com.cn>; Bob Feng <bob.c.f...@intel.com>; Yuwei Chen
> <yuwei.c...@intel.com>
> 主题: [PATCH v1 1/1] BaseTools: Resolve regex syntax warnings
> 
> Switches regex patterns to raw text to resolve python 3.12 syntax
> warnings in regards to invalid escape sequences, as is suggested by the
> re (regex) module in python.
> 
> Cc: Rebecca Cran <rebe...@bsdio.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> Cc: Bob Feng <bob.c.f...@intel.com>
> Cc: Yuwei Chen <yuwei.c...@intel.com>
> Signed-off-by: Joey Vagedes <joey.vage...@gmail.com>
> ---
>  BaseTools/Source/Python/AmlToC/AmlToC.py                     |  2
> +-
>  BaseTools/Source/Python/AutoGen/BuildEngine.py               |  2
> +-
>  BaseTools/Source/Python/AutoGen/GenDepex.py                  |
> 2 +-
>  BaseTools/Source/Python/AutoGen/GenMake.py                   |
> 2 +-
>  BaseTools/Source/Python/AutoGen/IdfClassObject.py            |  2 +-
>  BaseTools/Source/Python/AutoGen/ModuleAutoGen.py             |  4
> ++--
>  BaseTools/Source/Python/AutoGen/StrGather.py                 |  2
> +-
>  BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py          |  2
> +-
>  BaseTools/Source/Python/Common/Expression.py                 | 16
> ++++++-------
>  BaseTools/Source/Python/Common/GlobalData.py                 |
> 4 ++--
>  BaseTools/Source/Python/Common/Misc.py                       |
> 24 ++++++++++----------
>  BaseTools/Source/Python/Common/ToolDefClassObject.py         |  6
> ++---
>  BaseTools/Source/Python/GenFds/FdfParser.py                  | 10
> ++++----
>  BaseTools/Source/Python/GenFds/GenFds.py                     |  2
> +-
>  BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py | 12
> +++++-----
>  BaseTools/Source/Python/Trim/Trim.py                         | 18
> +++++++--------
>  BaseTools/Source/Python/Workspace/DscBuildData.py            |  8
> +++----
>  BaseTools/Source/Python/Workspace/MetaFileParser.py          |  2 +-
>  18 files changed, 60 insertions(+), 60 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/AmlToC/AmlToC.py
> b/BaseTools/Source/Python/AmlToC/AmlToC.py
> index 346de7159de7..63931c9720c9 100644
> --- a/BaseTools/Source/Python/AmlToC/AmlToC.py
> +++ b/BaseTools/Source/Python/AmlToC/AmlToC.py
> @@ -17,7 +17,7 @@ from Common.BuildToolError import *
>  import sys
> 
>  import os
> 
> 
> 
> -__description__ = """
> 
> +__description__ = r"""
> 
>  Convert an AML file to a .c file containing the AML bytecode stored in a
C
> 
>  array. By default, Tables\Dsdt.aml will generate Tables\Dsdt.c.
> 
>  Tables\Dsdt.c will contain a C array named "dsdt_aml_code" that contains
> 
> diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py
> b/BaseTools/Source/Python/AutoGen/BuildEngine.py
> index 752a1a1f6a86..45b39d7878d5 100644
> --- a/BaseTools/Source/Python/AutoGen/BuildEngine.py
> +++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py
> @@ -306,7 +306,7 @@ class BuildRule:
>      _SubSectionList = [_InputFile, _OutputFile, _Command]
> 
> 
> 
>      _PATH_SEP = "(+)"
> 
> -    _FileTypePattern = re.compile("^[_a-zA-Z][_\-0-9a-zA-Z]*$")
> 
> +    _FileTypePattern = re.compile(r"^[_a-zA-Z][_\-0-9a-zA-Z]*$")
> 
>      _BinaryFileRule = FileBuildRule(TAB_DEFAULT_BINARY_FILE, [],
> [os.path.join("$(OUTPUT_DIR)", "${s_name}")],
> 
>                                      ["$(CP) ${src} ${dst}"], [])
> 
> 
> 
> diff --git a/BaseTools/Source/Python/AutoGen/GenDepex.py
> b/BaseTools/Source/Python/AutoGen/GenDepex.py
> index f2f2e9d65b5f..b6db6645a4fb 100644
> --- a/BaseTools/Source/Python/AutoGen/GenDepex.py
> +++ b/BaseTools/Source/Python/AutoGen/GenDepex.py
> @@ -126,7 +126,7 @@ class DependencyExpression:
>      #
> 
>      # open and close brace must be taken as individual tokens
> 
>      #
> 
> -    TokenPattern = re.compile("(\(|\)|\{[^{}]+\{?[^{}]+\}?[ ]*\}|\w+)")
> 
> +    TokenPattern = re.compile(r"(\(|\)|\{[^{}]+\{?[^{}]+\}?[ ]*\}|\w+)")
> 
> 
> 
>      ## Constructor
> 
>      #
> 
> diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py
> b/BaseTools/Source/Python/AutoGen/GenMake.py
> index daec9c6d54b2..c416fe172fe5 100755
> --- a/BaseTools/Source/Python/AutoGen/GenMake.py
> +++ b/BaseTools/Source/Python/AutoGen/GenMake.py
> @@ -28,7 +28,7 @@ from Common.DataType import TAB_COMPILER_MSFT
>  gIncludePattern =
> re.compile(r"^[ \t]*[#%]?[ \t]*include(?:[ \t]*(?:\\(?:\r\n|\r|\n))*[
\t]*)*(?:\(
> ?[\"<]?[ \t]*)([-\w.\\/() \t]+)(?:[ \t]*[\">]?\)?)", re.MULTILINE |
re.UNICODE |
> re.IGNORECASE)
> 
> 
> 
>  ## Regular expression for matching macro used in header file inclusion
> 
> -gMacroPattern = re.compile("([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)",
re.UNICODE)
> 
> +gMacroPattern = re.compile(r"([_A-Z][_A-Z0-9]*)[ \t]*\((.+)\)",
re.UNICODE)
> 
> 
> 
>  gIsFileMap = {}
> 
> 
> 
> diff --git a/BaseTools/Source/Python/AutoGen/IdfClassObject.py
> b/BaseTools/Source/Python/AutoGen/IdfClassObject.py
> index a6b8123c2539..bb413c6a26e3 100644
> --- a/BaseTools/Source/Python/AutoGen/IdfClassObject.py
> +++ b/BaseTools/Source/Python/AutoGen/IdfClassObject.py
> @@ -18,7 +18,7 @@ import os
>  from Common.GlobalData import gIdentifierPattern
> 
>  from .UniClassObject import StripComments
> 
> 
> 
> -IMAGE_TOKEN = re.compile('IMAGE_TOKEN *\(([A-Z0-9_]+) *\)',
> re.MULTILINE | re.UNICODE)
> 
> +IMAGE_TOKEN = re.compile(r'IMAGE_TOKEN *\(([A-Z0-9_]+) *\)',
> re.MULTILINE | re.UNICODE)
> 
> 
> 
>  #
> 
>  # Value of different image information block types
> 
> diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> index d05410b32966..65a2176ca982 100755
> --- a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> +++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py
> @@ -51,12 +51,12 @@ gInfSpecVersion = "0x00010017"
>  #
> 
>  # Match name = variable
> 
>  #
> 
> -gEfiVarStoreNamePattern = re.compile("\s*name\s*=\s*(\w+)")
> 
> +gEfiVarStoreNamePattern = re.compile(r"\s*name\s*=\s*(\w+)")
> 
>  #
> 
>  # The format of guid in efivarstore statement likes following and must be
> correct:
> 
>  # guid = {0xA04A27f4, 0xDF00, 0x4D42, {0xB5, 0x52, 0x39, 0x51, 0x13,
0x02,
> 0x11, 0x3D}}
> 
>  #
> 
> -gEfiVarStoreGuidPattern = re.compile("\s*guid\s*=\s*({.*?{.*?}\s*})")
> 
> +gEfiVarStoreGuidPattern = re.compile(r"\s*guid\s*=\s*({.*?{.*?}\s*})")
> 
> 
> 
>  #
> 
>  # Template string to generic AsBuilt INF
> 
> diff --git a/BaseTools/Source/Python/AutoGen/StrGather.py
> b/BaseTools/Source/Python/AutoGen/StrGather.py
> index eed30388bea1..9789f50ba4db 100644
> --- a/BaseTools/Source/Python/AutoGen/StrGather.py
> +++ b/BaseTools/Source/Python/AutoGen/StrGather.py
> @@ -54,7 +54,7 @@ NOT_REFERENCED = 'not referenced'
>  COMMENT_NOT_REFERENCED = ' ' + COMMENT + NOT_REFERENCED
> 
>  CHAR_ARRAY_DEFIN = 'unsigned char'
> 
>  COMMON_FILE_NAME = 'Strings'
> 
> -STRING_TOKEN = re.compile('STRING_TOKEN *\(([A-Z0-9_]+) *\)',
> re.MULTILINE | re.UNICODE)
> 
> +STRING_TOKEN = re.compile(r'STRING_TOKEN *\(([A-Z0-9_]+) *\)',
> re.MULTILINE | re.UNICODE)
> 
> 
> 
>  EFI_HII_ARRAY_SIZE_LENGTH = 4
> 
>  EFI_HII_PACKAGE_HEADER_LENGTH = 4
> 
> diff --git a/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> b/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> index f86c749c08c3..160e3a3cd321 100644
> --- a/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> +++ b/BaseTools/Source/Python/AutoGen/WorkspaceAutoGen.py
> @@ -26,7 +26,7 @@ from Common.Misc import *
>  import json
> 
> 
> 
>  ## Regular expression for splitting Dependency Expression string into
tokens
> 
> -gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)")
> 
> +gDepexTokenPattern = re.compile(r"(\(|\)|\w+| \S+\.inf)")
> 
> 
> 
>  ## Regular expression for match: PCD(xxxx.yyy)
> 
>  gPCDAsGuidPattern = re.compile(r"^PCD\(.+\..+\)$")
> 
> diff --git a/BaseTools/Source/Python/Common/Expression.py
> b/BaseTools/Source/Python/Common/Expression.py
> index b62efe6f9be6..9d9cb0c92962 100644
> --- a/BaseTools/Source/Python/Common/Expression.py
> +++ b/BaseTools/Source/Python/Common/Expression.py
> @@ -41,8 +41,8 @@ ERR_EMPTY_EXPR          = 'Empty expression is
> not allowed.'
>  ERR_IN_OPERAND          = 'Macro after IN operator can only be:
> $(FAMILY), $(ARCH), $(TOOL_CHAIN_TAG) and $(TARGET).'
> 
> 
> 
>  __ValidString = re.compile(r'[_a-zA-Z][_0-9a-zA-Z]*$')
> 
> -_ReLabel = re.compile('LABEL\((\w+)\)')
> 
> -_ReOffset = re.compile('OFFSET_OF\((\w+)\)')
> 
> +_ReLabel = re.compile(r'LABEL\((\w+)\)')
> 
> +_ReOffset = re.compile(r'OFFSET_OF\((\w+)\)')
> 
>  PcdPattern =
> re.compile(r'^[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')
> 
> 
> 
>  ## SplitString
> 
> @@ -242,10 +242,10 @@ class ValueExpression(BaseExpression):
> 
> 
> 
> 
>      SymbolPattern = re.compile("("
> 
> -
> "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|"
> 
> -                                 "&&|\|\||!(?!=)|"
> 
> -
> "(?<=\W)AND(?=\W)|(?<=\W)OR(?=\W)|(?<=\W)NOT(?=\W)|(?<=\W)XOR(?=
> \W)|"
> 
> -
> "(?<=\W)EQ(?=\W)|(?<=\W)NE(?=\W)|(?<=\W)GT(?=\W)|(?<=\W)LT(?=\W)|(
> ?<=\W)GE(?=\W)|(?<=\W)LE(?=\W)"
> 
> +
> r"\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|"
> 
> +                                 r"&&|\|\||!(?!=)|"
> 
> +
> r"(?<=\W)AND(?=\W)|(?<=\W)OR(?=\W)|(?<=\W)NOT(?=\W)|(?<=\W)XOR(?
> =\W)|"
> 
> +
> r"(?<=\W)EQ(?=\W)|(?<=\W)NE(?=\W)|(?<=\W)GT(?=\W)|(?<=\W)LT(?=\W)|
> (?<=\W)GE(?=\W)|(?<=\W)LE(?=\W)"
> 
>                                 ")")
> 
> 
> 
>      @staticmethod
> 
> @@ -737,7 +737,7 @@ class ValueExpression(BaseExpression):
>              self._Token = "'" + UStr + "'"
> 
>              return self._Token
> 
>          elif Expr.startswith('UINT'):
> 
> -            Re = re.compile('(?:UINT8|UINT16|UINT32|UINT64)\((.+)\)')
> 
> +            Re =
> re.compile(r'(?:UINT8|UINT16|UINT32|UINT64)\((.+)\)')
> 
>              try:
> 
>                  RetValue = Re.search(Expr).group(1)
> 
>              except:
> 
> @@ -975,7 +975,7 @@ class ValueExpressionEx(ValueExpression):
>                                  TokenSpaceGuidName = ''
> 
>                                  if Item.startswith(TAB_GUID) and
> Item.endswith(')'):
> 
>                                      try:
> 
> -                                        TokenSpaceGuidName =
> re.search('GUID\((\w+)\)', Item).group(1)
> 
> +                                        TokenSpaceGuidName =
> re.search(r'GUID\((\w+)\)', Item).group(1)
> 
>                                      except:
> 
>                                          pass
> 
>                                      if TokenSpaceGuidName and
> TokenSpaceGuidName in self._Symb:
> 
> diff --git a/BaseTools/Source/Python/Common/GlobalData.py
> b/BaseTools/Source/Python/Common/GlobalData.py
> index 197bd8366682..11849e863f53 100755
> --- a/BaseTools/Source/Python/Common/GlobalData.py
> +++ b/BaseTools/Source/Python/Common/GlobalData.py
> @@ -33,10 +33,10 @@ gDefaultStores = []
>  gGuidDict = {}
> 
> 
> 
>  # definition for a MACRO name.  used to create regular expressions below.
> 
> -_MacroNamePattern = "[A-Z][A-Z0-9_]*"
> 
> +_MacroNamePattern = r"[A-Z][A-Z0-9_]*"
> 
> 
> 
>  ## Regular expression for matching macro used in DSC/DEC/INF file
inclusion
> 
> -gMacroRefPattern = re.compile("\$\(({})\)".format(_MacroNamePattern),
> re.UNICODE)
> 
> +gMacroRefPattern = re.compile(r"\$\(({})\)".format(_MacroNamePattern),
> re.UNICODE)
> 
>  gMacroDefPattern = re.compile("^(DEFINE|EDK_GLOBAL)[ \t]+")
> 
>  gMacroNamePattern = re.compile("^{}$".format(_MacroNamePattern))
> 
> 
> 
> diff --git a/BaseTools/Source/Python/Common/Misc.py
> b/BaseTools/Source/Python/Common/Misc.py
> index 4be7957138a5..f87d9dbdba39 100755
> --- a/BaseTools/Source/Python/Common/Misc.py
> +++ b/BaseTools/Source/Python/Common/Misc.py
> @@ -41,16 +41,16 @@ from CommonDataClass.Exceptions import
> BadExpression
>  from Common.caching import cached_property
> 
>  import struct
> 
> 
> 
> -ArrayIndex = re.compile("\[\s*[0-9a-fA-FxX]*\s*\]")
> 
> +ArrayIndex = re.compile(r"\[\s*[0-9a-fA-FxX]*\s*\]")
> 
>  ## Regular expression used to find out place holders in string template
> 
> -gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE |
> re.UNICODE)
> 
> +gPlaceholderPattern = re.compile(r"\$\{([^$()\s]+)\}", re.MULTILINE |
> re.UNICODE)
> 
> 
> 
>  ## regular expressions for map file processing
> 
> -startPatternGeneral = re.compile("^Start[' ']+Length[' ']+Name['
']+Class")
> 
> -addressPatternGeneral = re.compile("^Address[' ']+Publics by Value['
> ']+Rva\+Base")
> 
> -valuePatternGcc = re.compile('^([\w_\.]+) +([\da-fA-Fx]+)
+([\da-fA-Fx]+)$')
> 
> -pcdPatternGcc = re.compile('^([\da-fA-Fx]+) +([\da-fA-Fx]+)')
> 
> -secReGeneral = re.compile('^([\da-fA-F]+):([\da-fA-F]+)
+([\da-fA-F]+)[Hh]?
> +([.\w\$]+) +(\w+)', re.UNICODE)
> 
> +startPatternGeneral = re.compile(r"^Start[' ']+Length[' ']+Name['
']+Class")
> 
> +addressPatternGeneral = re.compile(r"^Address[' ']+Publics by Value['
> ']+Rva\+Base")
> 
> +valuePatternGcc = re.compile(r'^([\w_\.]+) +([\da-fA-Fx]+)
+([\da-fA-Fx]+)$')
> 
> +pcdPatternGcc = re.compile(r'^([\da-fA-Fx]+) +([\da-fA-Fx]+)')
> 
> +secReGeneral = re.compile(r'^([\da-fA-F]+):([\da-fA-F]+)
+([\da-fA-F]+)[Hh]?
> +([.\w\$]+) +(\w+)', re.UNICODE)
> 
> 
> 
>  StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*$')
> 
> 
> 
> @@ -82,7 +82,7 @@ def GetVariableOffset(mapfilepath, efifilepath,
> varnames):
> 
> 
>      if len(lines) == 0: return None
> 
>      firstline = lines[0].strip()
> 
> -    if re.match('^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$',
> firstline):
> 
> +    if re.match(r'^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$',
> firstline):
> 
>          return _parseForXcodeAndClang9(lines, efifilepath, varnames)
> 
>      if (firstline.startswith("Archive member included ") and
> 
>          firstline.endswith(" file (symbol)")):
> 
> @@ -96,7 +96,7 @@ def _parseForXcodeAndClang9(lines, efifilepath,
> varnames):
>      ret = []
> 
>      for line in lines:
> 
>          line = line.strip()
> 
> -        if status == 0 and
> (re.match('^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$', line) \
> 
> +        if status == 0 and
> (re.match(r'^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$', line) \
> 
>              or line == "# Symbols:"):
> 
>              status = 1
> 
>              continue
> 
> @@ -104,7 +104,7 @@ def _parseForXcodeAndClang9(lines, efifilepath,
> varnames):
>              for varname in varnames:
> 
>                  if varname in line:
> 
>                      # cannot pregenerate this RegEx since it uses
> varname from varnames.
> 
> -                    m = re.match('^([\da-fA-FxX]+)([\s\S]*)([_]*%s)$' %
> varname, line)
> 
> +                    m = re.match(r'^([\da-fA-FxX]+)([\s\S]*)([_]*%s)$' %
> varname, line)
> 
>                      if m is not None:
> 
>                          ret.append((varname, m.group(1)))
> 
>      return ret
> 
> @@ -170,7 +170,7 @@ def _parseGeneral(lines, efifilepath, varnames):
>      status = 0    #0 - beginning of file; 1 - PE section definition; 2 -
symbol
> table
> 
>      secs  = []    # key = section name
> 
>      varoffset = []
> 
> -    symRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+)
+([\.:\\\\\w\?@\$-]+)
> +([\da-fA-F]+)', re.UNICODE)
> 
> +    symRe = re.compile(r'^([\da-fA-F]+):([\da-fA-F]+)
+([\.:\\\\\w\?@\$-]+)
> +([\da-fA-F]+)', re.UNICODE)
> 
> 
> 
>      for line in lines:
> 
>          line = line.strip()
> 
> @@ -1926,4 +1926,4 @@ def CopyDict(ori_dict):
>  # Remove the c/c++ comments: // and /* */
> 
>  #
> 
>  def RemoveCComments(ctext):
> 
> -    return re.sub('//.*?\n|/\*.*?\*/', '\n', ctext, flags=re.S)
> 
> +    return re.sub(r'//.*?\n|/\*.*?\*/', '\n', ctext, flags=re.S)
> 
> diff --git a/BaseTools/Source/Python/Common/ToolDefClassObject.py
> b/BaseTools/Source/Python/Common/ToolDefClassObject.py
> index 2b4b23849196..afc20a3c1719 100644
> --- a/BaseTools/Source/Python/Common/ToolDefClassObject.py
> +++ b/BaseTools/Source/Python/Common/ToolDefClassObject.py
> @@ -30,9 +30,9 @@ from .DataType import TAB_TOD_DEFINES_TARGET,
> TAB_TOD_DEFINES_TOOL_CHAIN_TAG,\
>  ##
> 
>  # Static variables used for pattern
> 
>  #
> 
> -gMacroRefPattern = re.compile('(DEF\([^\(\)]+\))')
> 
> -gEnvRefPattern = re.compile('(ENV\([^\(\)]+\))')
> 
> -gMacroDefPattern = re.compile("DEFINE\s+([^\s]+)")
> 
> +gMacroRefPattern = re.compile(r'(DEF\([^\(\)]+\))')
> 
> +gEnvRefPattern = re.compile(r'(ENV\([^\(\)]+\))')
> 
> +gMacroDefPattern = re.compile(r"DEFINE\s+([^\s]+)")
> 
>  gDefaultToolsDefFile = "tools_def.txt"
> 
> 
> 
>  ## ToolDefClassObject
> 
> diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
> b/BaseTools/Source/Python/GenFds/FdfParser.py
> index a9a14ca2bb33..feb4c727794f 100644
> --- a/BaseTools/Source/Python/GenFds/FdfParser.py
> +++ b/BaseTools/Source/Python/GenFds/FdfParser.py
> @@ -65,11 +65,11 @@ ALIGNMENTS = {"Auto", "8", "16", "32", "64", "128",
> "512", "1K", "4K", "32K", "6
>  ALIGNMENT_NOAUTO = ALIGNMENTS - {"Auto"}
> 
>  CR_LB_SET = {T_CHAR_CR, TAB_LINE_BREAK}
> 
> 
> 
> -RegionSizePattern =
>
compile("\s*(?P<base>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<size>(?:0x|0X)?[a-f
> A-F0-9]+)\s*")
> 
> -RegionSizeGuidPattern =
> compile("\s*(?P<base>\w+\.\w+[\.\w\[\]]*)\s*\|\s*(?P<size>\w+\.\w+[\.\w
> \[\]]*)\s*")
> 
> -RegionOffsetPcdPattern = compile("\s*(?P<base>\w+\.\w+[\.\w\[\]]*)\s*$")
> 
> -ShortcutPcdPattern =
> compile("\s*\w+\s*=\s*(?P<value>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<name
> >\w+\.\w+)\s*")
> 
> -BaseAddrValuePattern = compile('^0[xX][0-9a-fA-F]+')
> 
> +RegionSizePattern =
> compile(r"\s*(?P<base>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<size>(?:0x|0X)?[a
> -fA-F0-9]+)\s*")
> 
> +RegionSizeGuidPattern =
> compile(r"\s*(?P<base>\w+\.\w+[\.\w\[\]]*)\s*\|\s*(?P<size>\w+\.\w+[\.\w
> \[\]]*)\s*")
> 
> +RegionOffsetPcdPattern =
> compile(r"\s*(?P<base>\w+\.\w+[\.\w\[\]]*)\s*$")
> 
> +ShortcutPcdPattern =
> compile(r"\s*\w+\s*=\s*(?P<value>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<name
> >\w+\.\w+)\s*")
> 
> +BaseAddrValuePattern = compile(r'^0[xX][0-9a-fA-F]+')
> 
>  FileExtensionPattern = compile(r'([a-zA-Z][a-zA-Z0-9]*)')
> 
>  TokenFindPattern =
> compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAI
> N_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')
> 
>  AllIncludeFileList = []
> 
> diff --git a/BaseTools/Source/Python/GenFds/GenFds.py
> b/BaseTools/Source/Python/GenFds/GenFds.py
> index 17b71b7cd347..b48fe761e051 100644
> --- a/BaseTools/Source/Python/GenFds/GenFds.py
> +++ b/BaseTools/Source/Python/GenFds/GenFds.py
> @@ -733,7 +733,7 @@ class GenFds(object):
>                          if not os.path.exists(FfsPath[0]):
> 
>                              continue
> 
>                          MatchDict = {}
> 
> -                        ReFileEnds =
>
compile('\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.te.txt)$|\S+(.pic.t
xt)$
> |\S+(.raw.txt)$|\S+(.ffs.txt)$')
> 
> +                        ReFileEnds =
>
compile(r'\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.te.txt)$|\S+(.pic.
txt)$
> |\S+(.raw.txt)$|\S+(.ffs.txt)$')
> 
>                          FileList = os.listdir(FfsPath[0])
> 
>                          for File in FileList:
> 
>                              Match = ReFileEnds.search(File)
> 
> diff --git
> a/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
> b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
> index d962ab0adda7..8750db998ffc 100644
> --- a/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
> +++ b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
> @@ -31,7 +31,7 @@ __copyright__ = "Copyright (c) 2008 - 2018, Intel
> Corporation. All rights reserv
>  #======================================  Internal Libraries
> ========================================
> 
> 
> 
>  #============================================== Code
> ===============================================
> 
> -symRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\.\-:\\\\\w\?@\$<>]+)
> +([\da-fA-F]+)', re.UNICODE)
> 
> +symRe = re.compile(r'^([\da-fA-F]+):([\da-fA-F]+)
+([\.\-:\\\\\w\?@\$<>]+)
> +([\da-fA-F]+)', re.UNICODE)
> 
> 
> 
>  def parsePcdInfoFromMapFile(mapfilepath, efifilepath):
> 
>      """ Parse map file to get binary patch pcd information
> 
> @@ -49,7 +49,7 @@ def parsePcdInfoFromMapFile(mapfilepath, efifilepath):
> 
> 
>      if len(lines) == 0: return None
> 
>      firstline = lines[0].strip()
> 
> -    if re.match('^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$',
> firstline):
> 
> +    if re.match(r'^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$',
> firstline):
> 
>          return _parseForXcodeAndClang9(lines, efifilepath)
> 
>      if (firstline.startswith("Archive member included ") and
> 
>          firstline.endswith(" file (symbol)")):
> 
> @@ -59,12 +59,12 @@ def parsePcdInfoFromMapFile(mapfilepath,
> efifilepath):
>      return _parseGeneral(lines, efifilepath)
> 
> 
> 
>  def _parseForXcodeAndClang9(lines, efifilepath):
> 
> -    valuePattern =
> re.compile('^([\da-fA-FxX]+)([\s\S]*)([_]*_gPcd_BinaryPatch_([\w]+))')
> 
> +    valuePattern =
> re.compile(r'^([\da-fA-FxX]+)([\s\S]*)([_]*_gPcd_BinaryPatch_([\w]+))')
> 
>      status = 0
> 
>      pcds = []
> 
>      for line in lines:
> 
>          line = line.strip()
> 
> -        if status == 0 and
> (re.match('^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$', line) \
> 
> +        if status == 0 and
> (re.match(r'^\s*Address\s*Size\s*Align\s*Out\s*In\s*Symbol\s*$', line) \
> 
>              or line == "# Symbols:"):
> 
>              status = 1
> 
>              continue
> 
> @@ -77,7 +77,7 @@ def _parseForXcodeAndClang9(lines, efifilepath):
> 
> 
>  def _parseForGCC(lines, efifilepath):
> 
>      """ Parse map file generated by GCC linker """
> 
> -    dataPattern = re.compile('^.data._gPcd_BinaryPatch_([\w_\d]+)$')
> 
> +    dataPattern = re.compile(r'^.data._gPcd_BinaryPatch_([\w_\d]+)$')
> 
>      status = 0
> 
>      imageBase = -1
> 
>      sections = []
> 
> @@ -136,7 +136,7 @@ def _parseGeneral(lines, efifilepath):
>      status = 0    #0 - beginning of file; 1 - PE section definition; 2 -
symbol
> table
> 
>      secs = []    # key = section name
> 
>      bPcds = []
> 
> -    symPattern = re.compile('^[_]+gPcd_BinaryPatch_([\w]+)')
> 
> +    symPattern = re.compile(r'^[_]+gPcd_BinaryPatch_([\w]+)')
> 
> 
> 
>      for line in lines:
> 
>          line = line.strip()
> 
> diff --git a/BaseTools/Source/Python/Trim/Trim.py
> b/BaseTools/Source/Python/Trim/Trim.py
> index 416935df5e90..6d7bc0551026 100644
> --- a/BaseTools/Source/Python/Trim/Trim.py
> +++ b/BaseTools/Source/Python/Trim/Trim.py
> @@ -28,15 +28,15 @@ __version__ = "%prog Version " +
> __version_number__
>  __copyright__ = "Copyright (c) 2007-2018, Intel Corporation. All rights
> reserved."
> 
> 
> 
>  ## Regular expression for matching Line Control directive like "#line
xxx"
> 
> -gLineControlDirective =
re.compile('^\s*#(?:line)?\s+([0-9]+)\s+"*([^"]*)"')
> 
> +gLineControlDirective =
re.compile(r'^\s*#(?:line)?\s+([0-9]+)\s+"*([^"]*)"')
> 
>  ## Regular expression for matching "typedef struct"
> 
> -gTypedefPattern = re.compile("^\s*typedef\s+struct(\s+\w+)?\s*[{]*$",
> re.MULTILINE)
> 
> +gTypedefPattern = re.compile(r"^\s*typedef\s+struct(\s+\w+)?\s*[{]*$",
> re.MULTILINE)
> 
>  ## Regular expression for matching "#pragma pack"
> 
> -gPragmaPattern = re.compile("^\s*#pragma\s+pack", re.MULTILINE)
> 
> +gPragmaPattern = re.compile(r"^\s*#pragma\s+pack", re.MULTILINE)
> 
>  ## Regular expression for matching "typedef"
> 
> -gTypedef_SinglePattern = re.compile("^\s*typedef", re.MULTILINE)
> 
> +gTypedef_SinglePattern = re.compile(r"^\s*typedef", re.MULTILINE)
> 
>  ## Regular expression for matching "typedef struct, typedef union,
struct,
> union"
> 
> -gTypedef_MulPattern =
> re.compile("^\s*(typedef)?\s+(struct|union)(\s+\w+)?\s*[{]*$",
> re.MULTILINE)
> 
> +gTypedef_MulPattern =
> re.compile(r"^\s*(typedef)?\s+(struct|union)(\s+\w+)?\s*[{]*$",
> re.MULTILINE)
> 
> 
> 
>  #
> 
>  # The following number pattern match will only match if following
criteria is
> met:
> 
> @@ -44,14 +44,14 @@ gTypedef_MulPattern =
> re.compile("^\s*(typedef)?\s+(struct|union)(\s+\w+)?\s*[{]
>  # as the pattern is greedily match, so it is ok for the gDecNumberPattern
or
> gHexNumberPattern to grab the maximum match
> 
>  #
> 
>  ## Regular expression for matching HEX number
> 
> -gHexNumberPattern =
>
re.compile("(?<=[^a-zA-Z0-9_])(0[xX])([0-9a-fA-F]+)(U(?=$|[^a-zA-Z0-9_]))?")
> 
> +gHexNumberPattern =
>
re.compile(r"(?<=[^a-zA-Z0-9_])(0[xX])([0-9a-fA-F]+)(U(?=$|[^a-zA-Z0-9_]))?"
> )
> 
>  ## Regular expression for matching decimal number with 'U' postfix
> 
> -gDecNumberPattern =
> re.compile("(?<=[^a-zA-Z0-9_])([0-9]+)U(?=$|[^a-zA-Z0-9_])")
> 
> +gDecNumberPattern =
> re.compile(r"(?<=[^a-zA-Z0-9_])([0-9]+)U(?=$|[^a-zA-Z0-9_])")
> 
>  ## Regular expression for matching constant with 'ULL' 'LL' postfix
> 
> -gLongNumberPattern =
> re.compile("(?<=[^a-zA-Z0-9_])(0[xX][0-9a-fA-F]+|[0-9]+)U?LL(?=$|[^a-zA-Z0
> -9_])")
> 
> +gLongNumberPattern =
> re.compile(r"(?<=[^a-zA-Z0-9_])(0[xX][0-9a-fA-F]+|[0-9]+)U?LL(?=$|[^a-zA-Z
> 0-9_])")
> 
> 
> 
>  ## Regular expression for matching "Include ()" in asl file
> 
> -gAslIncludePattern =
re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)",
> re.MULTILINE)
> 
> +gAslIncludePattern =
re.compile(r"^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)",
> re.MULTILINE)
> 
>  ## Regular expression for matching C style #include "XXX.asl" in asl file
> 
>  gAslCIncludePattern =
> re.compile(r'^(\s*)#include\s*[<"]\s*([-\\/\w.]+)\s*([>"])', re.MULTILINE)
> 
>  ## Patterns used to convert EDK conventions to EDK2 ECP conventions
> 
> diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py
> b/BaseTools/Source/Python/Workspace/DscBuildData.py
> index 8fd949dc50b6..817cdbe5f19c 100644
> --- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> @@ -90,7 +90,7 @@ PcdMakefileHeader = '''
> 
> 
>  WindowsCFLAGS = 'CFLAGS = $(CFLAGS) /wd4200 /wd4034 /wd4101 '
> 
>  LinuxCFLAGS = 'CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable '
> 
> -PcdMakefileEnd = '''
> 
> +PcdMakefileEnd = r'''
> 
>  !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.common
> 
>  !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app
> 
>  '''
> 
> @@ -110,7 +110,7 @@ LIBS = -lCommon
>  variablePattern = re.compile(r'[\t\s]*0[xX][a-fA-F0-9]+$')
> 
>  SkuIdPattern = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*$')
> 
>  ## regular expressions for finding decimal and hex numbers
> 
> -Pattern = re.compile('^[1-9]\d*|0$')
> 
> +Pattern = re.compile(r'^[1-9]\d*|0$')
> 
>  HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')
> 
>  ## Regular expression for finding header file inclusions
> 
>  from AutoGen.GenMake import gIncludePattern
> 
> @@ -2840,7 +2840,7 @@ class DscBuildData(PlatformBuildClassObject):
>          # start generating makefile
> 
>          MakeApp = PcdMakefileHeader
> 
>          if sys.platform == "win32":
> 
> -            MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' %
> (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' %
> (PcdValueInitName) + 'OBJECTS = %s\%s.obj %s.obj\n' % (self.OutputPath,
> PcdValueInitName, os.path.join(self.OutputPath, PcdValueCommonName)) +
> 'INC = '
> 
> +            MakeApp = MakeApp + r'APPFILE = %s\%s.exe\n' %
> (self.OutputPath, PcdValueInitName) + r'APPNAME = %s\n' %
> (PcdValueInitName) + r'OBJECTS = %s\%s.obj %s.obj\n' % (self.OutputPath,
> PcdValueInitName, os.path.join(self.OutputPath, PcdValueCommonName)) +
> 'INC = '
> 
>          else:
> 
>              MakeApp = MakeApp + PcdGccMakefile
> 
>              MakeApp = MakeApp + 'APPFILE = %s/%s\n' %
> (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' %
> (PcdValueInitName) + 'OBJECTS = %s/%s.o %s.o\n' % (self.OutputPath,
> PcdValueInitName, os.path.join(self.OutputPath, PcdValueCommonName)) + \
> 
> @@ -2950,7 +2950,7 @@ class DscBuildData(PlatformBuildClassObject):
>              MakeApp += "$(OBJECTS) : %s\n" % include_file
> 
>          if sys.platform == "win32":
> 
>              PcdValueCommonPath =
> os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"],
> "Source\C\Common\PcdValueCommon.c"))
> 
> -            MakeApp = MakeApp + '%s\PcdValueCommon.c : %s\n' %
> (self.OutputPath, PcdValueCommonPath)
> 
> +            MakeApp = MakeApp + r'%s\PcdValueCommon.c : %s\n' %
> (self.OutputPath, PcdValueCommonPath)
> 
>              MakeApp = MakeApp + '\tcopy /y %s $@\n' %
> (PcdValueCommonPath)
> 
>          else:
> 
>              PcdValueCommonPath =
> os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"],
> "Source/C/Common/PcdValueCommon.c"))
> 
> diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py
> b/BaseTools/Source/Python/Workspace/MetaFileParser.py
> index 3508591b281e..73a1654edb30 100644
> --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py
> +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py
> @@ -1897,7 +1897,7 @@ class DecParser(MetaFileParser):
>          self._SectionType = []
> 
>          ArchList = set()
> 
>          PrivateList = set()
> 
> -        Line = re.sub(',[\s]*', TAB_COMMA_SPLIT, self._CurrentLine)
> 
> +        Line = re.sub(r',[\s]*', TAB_COMMA_SPLIT, self._CurrentLine)
> 
>          for Item in Line[1:-1].split(TAB_COMMA_SPLIT):
> 
>              if Item == '':
> 
>                  EdkLogger.error("Parser", FORMAT_UNKNOWN_ERROR,
> 
> --
> 2.43.0.windows.1





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112346): https://edk2.groups.io/g/devel/message/112346
Mute This Topic: https://groups.io/mt/103121314/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to