## @file
#  EFI_REGULAR_EXPRESSION_PROTOCOL Implementation
#
#  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
#
#  This program and the accompanying materials are licensed and made available
#  under the terms and conditions of the BSD License that accompanies this
#  distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php.
#
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
#  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
##

[Defines]
  INF_VERSION     = 0x00010018
  BASE_NAME       = RegularExpressionDxe
  FILE_GUID       = 3E197E9C-D8DC-42D3-89CE-B04FA9833756
  MODULE_TYPE     = UEFI_DRIVER
  VERSION_STRING  = 1.0
  ENTRY_POINT     = RegularExpressionDxeEntry

[Sources]
  RegularExpressionDxe.c
  RegularExpressionDxe.h
  Oniguruma/OnigurumaUefiPort.h
  Oniguruma/OnigurumaUefiPort.c
  Oniguruma/OnigurumaIntrinsics.c | MSFT

# Upstream Oniguruma code
  Oniguruma/oniguruma.h
  Oniguruma/regcomp.c
  Oniguruma/regenc.c
  Oniguruma/regenc.h
  Oniguruma/regerror.c
  Oniguruma/regexec.c
  Oniguruma/oniggnu.h
  Oniguruma/reggnu.c
  Oniguruma/regint.h
  Oniguruma/regparse.c
  Oniguruma/regparse.h
  Oniguruma/regposerr.c
  Oniguruma/onigposix.h
  Oniguruma/regposix.c
  Oniguruma/regsyntax.c
  Oniguruma/regtrav.c
  Oniguruma/regversion.c
  Oniguruma/st.c
  Oniguruma/st.h

# Supported Character Encodings
  Oniguruma/enc/ascii.c
  Oniguruma/enc/unicode.c
  Oniguruma/enc/utf16_le.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  MemoryAllocationLib
  BaseMemoryLib
  DebugLib
  PrintLib

[Guids]
  gEfiRegexSyntaxTypePosixExtendedGuid    ## CONSUMES  ## GUID
  gEfiRegexSyntaxTypePerlGuid             ## CONSUMES  ## GUID

[Protocols]
  gEfiRegularExpressionProtocolGuid       ## PRODUCES  

[BuildOptions]
  # Override MSFT build option to remove /Oi and /GL
  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm 
  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF 
  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X 
  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X 
  MSFT:DEBUG_*_IPF_CC_FLAGS    == /nologo /c /WX /GS- /W4 /EHs-c- /GR- /Gy /Os /FIAutoGen.h /QIPF_fr32 /Zi /X 
  MSFT:RELEASE_*_IPF_CC_FLAGS  == /nologo /c /WX /GS- /W4 /EHs-c- /GR- /Gy /Os /FIAutoGen.h /QIPF_fr32 /X 
  INTEL:*_*_*_CC_FLAGS         =  /Oi-

  # Oniguruma: potentially uninitialized local variable used
  MSFT:*_*_*_CC_FLAGS = /wd4701

  # Oniguruma: intrinsic function not declared
  MSFT:*_*_*_CC_FLAGS = /wd4164

  # Oniguruma: old style declaration in st.c
  MSFT:*_*_*_CC_FLAGS = /wd4131

  # Oniguruma: 'type cast' : truncation from 'OnigUChar *' to 'unsigned int' 
  MSFT:*_*_*_CC_FLAGS = /wd4305 /wd4306

