4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This file is used to define class objects of INF file [LibraryClasses] section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# It will consumed by InfParser.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This program and the accompanying materials are licensed and made available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# under the terms and conditions of the BSD License which accompanies this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInfLibraryClassesObject
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Object.Parser.InfCommonObject import CurrentLine
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfrom Library.ExpressionValidate import IsValidFeatureFlagExp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## GetArchModuleType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Get Arch List and ModuleType List
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def __init__(self, LibName='', FeatureFlagExp='', HelpString=None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # As Build related information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## INF LibraryClass Section
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Macro defined in this section should be only used in this section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ##SetLibraryClasses
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # @param HelpString: It can be a common comment or contain a recommend
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SetLibraryClasses(self, LibContent, KeyList=None):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate Arch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (__SupArchList, __SupModuleList) = GetArchModuleType(KeyList)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LibItemObj.CurrentLine.SetLineString(LibItem[2][0])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID % (LibItem[0]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Validate FFE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FeatureFlagRtv = IsValidFeatureFlagExp(LibItem[1].strip())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID % (FeatureFlagRtv[1]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Invalid strings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Determine Library class duplicate. Follow below rule:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # A library class keyword must not be duplicated within a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # [LibraryClasses] section. Library class keywords may appear in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # multiple architectural and module type [LibraryClasses] sections.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # A library class keyword listed in an architectural or module type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # [LibraryClasses] section must not be listed in the common
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # architectural or module type [LibraryClasses] section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # NOTE: This check will not report error now. But keep code for future enhancement.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# for Item in self.LibraryClasses:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# if Item.GetLibName() == LibItemObj.GetLibName():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# ItemSupArchList = Item.GetSupArchList()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# ItemSupModuleList = Item.GetSupModuleList()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# for ItemArch in ItemSupArchList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# for ItemModule in ItemSupModuleList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# for LibItemObjArch in __SupArchList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# for LibItemObjModule in __SupModuleList:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# if ItemArch == LibItemObjArch and LibItemObjModule == ItemModule:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# # ERR_INF_PARSER_ITEM_DUPLICATE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# if (ItemArch.upper() == 'COMMON' or LibItemObjArch.upper() == 'COMMON') \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# and LibItemObjModule == ItemModule:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# # ERR_INF_PARSER_ITEM_DUPLICATE_COMMON
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync # Assume the file GUID is well formatted.