• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## @file
2# This file is used to define class objects of INF file [Depex] section.
3# It will consumed by InfParser.
4#
5# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
6#
7# This program and the accompanying materials are licensed and made available
8# under the terms and conditions of the BSD License which accompanies this
9# distribution. The full text of the license may be found at
10# http://opensource.org/licenses/bsd-license.php
11#
12# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15'''
16InfDepexObject
17'''
18
19from Library import DataType as DT
20from Library import GlobalData
21import Logger.Log as Logger
22from Logger import ToolError
23from Logger import StringTable as ST
24
25from Object.Parser.InfCommonObject import InfSectionCommonDef
26from Library.ParserValidate import IsValidArch
27
28class InfDepexContentItem():
29    def __init__(self):
30        self.SectionType = ''
31        self.SectionString = ''
32
33    def SetSectionType(self, SectionType):
34        self.SectionType = SectionType
35    def GetSectionType(self):
36        return self.SectionType
37
38    def SetSectionString(self, SectionString):
39        self.SectionString = SectionString
40    def GetSectionString(self):
41        return self.SectionString
42
43
44class InfDepexItem():
45    def __init__(self):
46        self.DepexContent = ''
47        self.ModuleType = ''
48        self.SupArch = ''
49        self.HelpString = ''
50        self.FeatureFlagExp = ''
51        self.InfDepexContentItemList = []
52
53    def SetFeatureFlagExp(self, FeatureFlagExp):
54        self.FeatureFlagExp = FeatureFlagExp
55    def GetFeatureFlagExp(self):
56        return self.FeatureFlagExp
57
58    def SetSupArch(self, Arch):
59        self.SupArch = Arch
60    def GetSupArch(self):
61        return self.SupArch
62
63    def SetHelpString(self, HelpString):
64        self.HelpString = HelpString
65    def GetHelpString(self):
66        return self.HelpString
67
68    def SetModuleType(self, Type):
69        self.ModuleType = Type
70    def GetModuleType(self):
71        return self.ModuleType
72
73    def SetDepexConent(self, Content):
74        self.DepexContent = Content
75    def GetDepexContent(self):
76        return self.DepexContent
77
78    def SetInfDepexContentItemList(self, InfDepexContentItemList):
79        self.InfDepexContentItemList = InfDepexContentItemList
80    def GetInfDepexContentItemList(self):
81        return self.InfDepexContentItemList
82
83## InfDepexObject
84#
85#
86#
87class InfDepexObject(InfSectionCommonDef):
88    def __init__(self):
89        self.Depex = []
90        self.AllContent = ''
91        self.SectionContent = ''
92        InfSectionCommonDef.__init__(self)
93
94    def SetDepex(self, DepexContent, KeyList=None, CommentList=None):
95        for KeyItem in KeyList:
96            Arch = KeyItem[0]
97            ModuleType = KeyItem[1]
98            InfDepexItemIns = InfDepexItem()
99
100            #
101            # Validate Arch
102            #
103            if IsValidArch(Arch.strip().upper()):
104                InfDepexItemIns.SetSupArch(Arch)
105            else:
106                Logger.Error("InfParser",
107                             ToolError.FORMAT_INVALID,
108                             ST.ERR_INF_PARSER_DEFINE_NAME_INVALID % (Arch),
109                             File=GlobalData.gINF_MODULE_NAME,
110                             Line=KeyItem[2])
111
112            #
113            # Validate Module Type
114            #
115            if ModuleType and ModuleType != 'COMMON':
116                if ModuleType in DT.VALID_DEPEX_MODULE_TYPE_LIST:
117                    InfDepexItemIns.SetModuleType(ModuleType)
118                else:
119                    Logger.Error("InfParser",
120                                 ToolError.FORMAT_INVALID,
121                                 ST.ERR_INF_PARSER_DEPEX_SECTION_MODULE_TYPE_ERROR % (ModuleType),
122                                 File=GlobalData.gINF_MODULE_NAME,
123                                 Line=KeyItem[2])
124
125            #
126            # Parser content in [Depex] section.
127            #
128            DepexString = ''
129            HelpString = ''
130            #
131            # Get Depex Expression
132            #
133            for Line in DepexContent:
134                LineContent = Line[0].strip()
135                if LineContent.find(DT.TAB_COMMENT_SPLIT) > -1:
136                    LineContent = LineContent[:LineContent.find(DT.TAB_COMMENT_SPLIT)]
137                if LineContent:
138                    DepexString = DepexString + LineContent + DT.END_OF_LINE
139                continue
140
141            if DepexString.endswith(DT.END_OF_LINE):
142                DepexString = DepexString[:-1]
143
144            if not DepexString.strip():
145                continue
146
147            #
148            # Get Help Text
149            #
150            for HelpLine in CommentList:
151                HelpString = HelpString + HelpLine + DT.END_OF_LINE
152            if HelpString.endswith(DT.END_OF_LINE):
153                HelpString = HelpString[:-1]
154
155            InfDepexItemIns.SetDepexConent(DepexString)
156            InfDepexItemIns.SetHelpString(HelpString)
157
158            self.Depex.append(InfDepexItemIns)
159
160        return True
161
162    def GetDepex(self):
163        return self.Depex
164
165    def GetAllContent(self):
166        return self.AllContent
167