## @file
#  This module produces Boot Manager Policy protocol.
#  
#  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which 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                    = 0x00010005
  BASE_NAME                      = BootManagerPolicyDxe
  MODULE_UNI_FILE                = BootManagerPolicyDxe.uni
  FILE_GUID                      = E622443C-284E-4b47-A984-FD66B482DAC0
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0 
  ENTRY_POINT                    = BootManagerPolicyInitialize

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  BootManagerPolicyDxe.c


[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  BaseMemoryLib
  MemoryAllocationLib
  UefiLib
  DevicePathLib
  DebugLib
  UefiDriverEntryPoint
  UefiBootServicesTableLib
  UefiRuntimeServicesTableLib
  UefiBootManagerLib

[Guids]
  gEfiBootManagerPolicyConnectAllGuid           ## CONSUMES ## GUID
  gEfiBootManagerPolicyNetworkGuid              ## CONSUMES ## GUID
  gEfiBootManagerPolicyConsoleGuid              ## CONSUMES ## GUID

[Protocols]
  gEfiManagedNetworkServiceBindingProtocolGuid  ## CONSUMES
  gEfiBootManagerPolicyProtocolGuid             ## PRODUCES

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  BootManagerPolicyDxeExtra.uni
