##  @file
#  Provides shell level 1 functions
#
#  Copyright (c) 2009-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                    = 0x00010006
  BASE_NAME                      = UefiShellLevel1CommandsLib
  FILE_GUID                      = 50cb6037-1102-47af-b2dd-9944b6eb1abe
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = NULL|UEFI_APPLICATION UEFI_DRIVER
  CONSTRUCTOR                    = ShellLevel1CommandsLibConstructor
  DESTRUCTOR                     = ShellLevel1CommandsLibDestructor

[Sources.common]
  UefiShellLevel1CommandsLib.c
  UefiShellLevel1CommandsLib.h
  UefiShellLevel1CommandsLib.uni
  Exit.c
  Goto.c
  If.c
  For.c
  Shift.c
  Stall.c

[Packages]
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  MemoryAllocationLib
  BaseLib
  BaseMemoryLib
  DebugLib
  ShellCommandLib
  ShellLib
  UefiLib
  UefiRuntimeServicesTableLib
  UefiBootServicesTableLib
  SortLib
  PrintLib

[Pcd.common]
  gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel ## CONSUMES

[Guids]
  gShellLevel1HiiGuid       ## SOMETIMES_CONSUMES ## HII
