##  @file
# Provides shell driver1 profile functions
#
# Copyright (c) 2010 - 2011, 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                    = 0x00010006
  BASE_NAME                      = UefiShellDriver1CommandsLib
  FILE_GUID                      = 313D3674-3ED4-48fd-BF97-7DB35D4190D1
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = NULL|UEFI_APPLICATION UEFI_DRIVER
  CONSTRUCTOR                    = UefiShellDriver1CommandsLibConstructor
  DESTRUCTOR                     = UefiShellDriver1CommandsLibDestructor

[Sources]
  Connect.c
  Devices.c
  OpenInfo.c
  Disconnect.c
  Reconnect.c
  Unload.c
  DrvDiag.c
  Dh.c
  Drivers.c
  DevTree.c
  DrvCfg.c
  UefiShellDriver1CommandsLib.c
  UefiShellDriver1CommandsLib.h
  UefiShellDriver1CommandsLib.uni

[Packages]
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  MemoryAllocationLib
  BaseLib
  BaseMemoryLib
  DebugLib
  ShellCommandLib
  ShellLib
  UefiLib
  UefiRuntimeServicesTableLib
  UefiBootServicesTableLib
  SortLib
  PrintLib
  PeCoffGetEntryPointLib

[Pcd]
  gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask  # ALWAYS_CONSUMED

[Protocols]
  gEfiDriverHealthProtocolGuid                    # ALWAYS_CONSUMED
  gEfiDriverFamilyOverrideProtocolGuid            # ALWAYS_CONSUMED
  gEfiHiiConfigAccessProtocolGuid                 # ALWAYS_CONSUMED
  gEfiHiiDatabaseProtocolGuid                     # ALWAYS_CONSUMED

[Guids]
  gEfiGlobalVariableGuid                          # ALWAYS_CONSUMED
  gEfiConsoleInDeviceGuid                         # ALWAYS_CONSUMED
  gEfiConsoleOutDeviceGuid                        # ALWAYS_CONSUMED
  gShellDriver1HiiGuid                            ## PRODUCES
