14234283c3acb8c35014acc1546621fbc2621b095lgao## @file
24234283c3acb8c35014acc1546621fbc2621b095lgao# This file is used to define class objects of INF file [BuildOptions] section.
34234283c3acb8c35014acc1546621fbc2621b095lgao# It will consumed by InfParser.
44234283c3acb8c35014acc1546621fbc2621b095lgao#
5421ccda3079077dd613308526e02d797f5cc356aHess Chen# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
64234283c3acb8c35014acc1546621fbc2621b095lgao#
74234283c3acb8c35014acc1546621fbc2621b095lgao# This program and the accompanying materials are licensed and made available
84234283c3acb8c35014acc1546621fbc2621b095lgao# under the terms and conditions of the BSD License which accompanies this
94234283c3acb8c35014acc1546621fbc2621b095lgao# distribution. The full text of the license may be found at
104234283c3acb8c35014acc1546621fbc2621b095lgao# http://opensource.org/licenses/bsd-license.php
114234283c3acb8c35014acc1546621fbc2621b095lgao#
124234283c3acb8c35014acc1546621fbc2621b095lgao# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
134234283c3acb8c35014acc1546621fbc2621b095lgao# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
144234283c3acb8c35014acc1546621fbc2621b095lgao
154234283c3acb8c35014acc1546621fbc2621b095lgao'''
164234283c3acb8c35014acc1546621fbc2621b095lgaoInfBuildOptionObject
174234283c3acb8c35014acc1546621fbc2621b095lgao'''
184234283c3acb8c35014acc1546621fbc2621b095lgao
194234283c3acb8c35014acc1546621fbc2621b095lgaofrom Library import GlobalData
204234283c3acb8c35014acc1546621fbc2621b095lgao
214234283c3acb8c35014acc1546621fbc2621b095lgaofrom Object.Parser.InfCommonObject import InfSectionCommonDef
224234283c3acb8c35014acc1546621fbc2621b095lgao
234234283c3acb8c35014acc1546621fbc2621b095lgaoclass InfBuildOptionItem():
244234283c3acb8c35014acc1546621fbc2621b095lgao    def __init__(self):
254234283c3acb8c35014acc1546621fbc2621b095lgao        self.Content     = ''
264234283c3acb8c35014acc1546621fbc2621b095lgao        self.SupArchList = []
274234283c3acb8c35014acc1546621fbc2621b095lgao        self.AsBuildList = []
284234283c3acb8c35014acc1546621fbc2621b095lgao
294234283c3acb8c35014acc1546621fbc2621b095lgao    def SetContent(self, Content):
304234283c3acb8c35014acc1546621fbc2621b095lgao        self.Content = Content
314234283c3acb8c35014acc1546621fbc2621b095lgao    def GetContent(self):
324234283c3acb8c35014acc1546621fbc2621b095lgao        return self.Content
334234283c3acb8c35014acc1546621fbc2621b095lgao
344234283c3acb8c35014acc1546621fbc2621b095lgao    def SetSupArchList(self, SupArchList):
354234283c3acb8c35014acc1546621fbc2621b095lgao        self.SupArchList = SupArchList
364234283c3acb8c35014acc1546621fbc2621b095lgao    def GetSupArchList(self):
374234283c3acb8c35014acc1546621fbc2621b095lgao        return self.SupArchList
384234283c3acb8c35014acc1546621fbc2621b095lgao
394234283c3acb8c35014acc1546621fbc2621b095lgao    #
404234283c3acb8c35014acc1546621fbc2621b095lgao    # AsBuild Information
414234283c3acb8c35014acc1546621fbc2621b095lgao    #
424234283c3acb8c35014acc1546621fbc2621b095lgao    def SetAsBuildList(self, AsBuildList):
434234283c3acb8c35014acc1546621fbc2621b095lgao        self.AsBuildList = AsBuildList
444234283c3acb8c35014acc1546621fbc2621b095lgao    def GetAsBuildList(self):
454234283c3acb8c35014acc1546621fbc2621b095lgao        return self.AsBuildList
464234283c3acb8c35014acc1546621fbc2621b095lgao
474234283c3acb8c35014acc1546621fbc2621b095lgao
484234283c3acb8c35014acc1546621fbc2621b095lgao## INF BuildOption section
494234283c3acb8c35014acc1546621fbc2621b095lgao#  Macro define is not permitted for this section.
504234283c3acb8c35014acc1546621fbc2621b095lgao#
514234283c3acb8c35014acc1546621fbc2621b095lgao#
524234283c3acb8c35014acc1546621fbc2621b095lgaoclass InfBuildOptionsObject(InfSectionCommonDef):
534234283c3acb8c35014acc1546621fbc2621b095lgao    def __init__(self):
544234283c3acb8c35014acc1546621fbc2621b095lgao        self.BuildOptions = []
554234283c3acb8c35014acc1546621fbc2621b095lgao        InfSectionCommonDef.__init__(self)
564234283c3acb8c35014acc1546621fbc2621b095lgao    ## SetBuildOptions function
574234283c3acb8c35014acc1546621fbc2621b095lgao    #
584234283c3acb8c35014acc1546621fbc2621b095lgao    # For BuildOptionName, need to validate it's format
594234283c3acb8c35014acc1546621fbc2621b095lgao    # For BuildOptionValue, just ignore it.
604234283c3acb8c35014acc1546621fbc2621b095lgao    #
614234283c3acb8c35014acc1546621fbc2621b095lgao    # @param  Arch          Indicated which arch of build options belong to.
624234283c3acb8c35014acc1546621fbc2621b095lgao    # @param  BuildOptCont  A list contain BuildOption related information.
634234283c3acb8c35014acc1546621fbc2621b095lgao    #                       The element in the list contain 3 members.
644234283c3acb8c35014acc1546621fbc2621b095lgao    #                       BuildOptionName, BuildOptionValue and IsReplace
654234283c3acb8c35014acc1546621fbc2621b095lgao    #                       flag.
664234283c3acb8c35014acc1546621fbc2621b095lgao    #
674234283c3acb8c35014acc1546621fbc2621b095lgao    # @return True          Build options set/validate successfully
684234283c3acb8c35014acc1546621fbc2621b095lgao    # @return False         Build options set/validate failed
694234283c3acb8c35014acc1546621fbc2621b095lgao    #
704234283c3acb8c35014acc1546621fbc2621b095lgao    def SetBuildOptions(self, BuildOptCont, ArchList = None, SectionContent = ''):
714234283c3acb8c35014acc1546621fbc2621b095lgao
724234283c3acb8c35014acc1546621fbc2621b095lgao        if not GlobalData.gIS_BINARY_INF:
734234283c3acb8c35014acc1546621fbc2621b095lgao
744234283c3acb8c35014acc1546621fbc2621b095lgao            if SectionContent.strip() != '':
754234283c3acb8c35014acc1546621fbc2621b095lgao                InfBuildOptionItemObj = InfBuildOptionItem()
764234283c3acb8c35014acc1546621fbc2621b095lgao                InfBuildOptionItemObj.SetContent(SectionContent)
774234283c3acb8c35014acc1546621fbc2621b095lgao                InfBuildOptionItemObj.SetSupArchList(ArchList)
784234283c3acb8c35014acc1546621fbc2621b095lgao
794234283c3acb8c35014acc1546621fbc2621b095lgao                self.BuildOptions.append(InfBuildOptionItemObj)
804234283c3acb8c35014acc1546621fbc2621b095lgao        else:
814234283c3acb8c35014acc1546621fbc2621b095lgao            #
824234283c3acb8c35014acc1546621fbc2621b095lgao            # For AsBuild INF file
834234283c3acb8c35014acc1546621fbc2621b095lgao            #
844234283c3acb8c35014acc1546621fbc2621b095lgao            if len(BuildOptCont) >= 1:
854234283c3acb8c35014acc1546621fbc2621b095lgao                InfBuildOptionItemObj = InfBuildOptionItem()
864234283c3acb8c35014acc1546621fbc2621b095lgao                InfBuildOptionItemObj.SetAsBuildList(BuildOptCont)
87421ccda3079077dd613308526e02d797f5cc356aHess Chen                InfBuildOptionItemObj.SetSupArchList(ArchList)
884234283c3acb8c35014acc1546621fbc2621b095lgao                self.BuildOptions.append(InfBuildOptionItemObj)
894234283c3acb8c35014acc1546621fbc2621b095lgao
904234283c3acb8c35014acc1546621fbc2621b095lgao        return True
914234283c3acb8c35014acc1546621fbc2621b095lgao
924234283c3acb8c35014acc1546621fbc2621b095lgao    def GetBuildOptions(self):
934234283c3acb8c35014acc1546621fbc2621b095lgao        return self.BuildOptions