##  @file
# Provides Shell 'tftp' command functions
#
# Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved. <BR>
# Copyright (c) 2015, ARM Ltd. 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                      = UefiShellTftpCommandLib
  FILE_GUID                      = D2B61A25-9835-4E5D-906A-15615E1FF668
  MODULE_TYPE                    = UEFI_APPLICATION
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = NULL|UEFI_APPLICATION UEFI_DRIVER
  CONSTRUCTOR                    = ShellTftpCommandLibConstructor
  DESTRUCTOR                     = ShellTftpCommandLibDestructor

[Sources.common]
  UefiShellTftpCommandLib.uni
  UefiShellTftpCommandLib.c
  UefiShellTftpCommandLib.h
  Tftp.c

[Packages]
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  MemoryAllocationLib
  BaseLib
  BaseMemoryLib
  DebugLib
  ShellCommandLib
  ShellLib
  UefiLib
  UefiRuntimeServicesTableLib
  UefiBootServicesTableLib
  PcdLib
  HiiLib
  FileHandleLib
  NetLib

[Pcd]
  gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask ## CONSUMES

[Protocols]
  gEfiManagedNetworkServiceBindingProtocolGuid   ## CONSUMES
  gEfiMtftp4ServiceBindingProtocolGuid           ## CONSUMES

[Guids]
  gShellTftpHiiGuid                              ## CONSUMES ## HII
