
#
#  Copyright (C) 2017 Codethink Limited
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2 of the License, or (at your option) any later version.
#
#  This library is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public
#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
#
#  Authors:
#        Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>

import os
from .optionenum import OptionEnum


# OptionOS
#
class OptionOS(OptionEnum):

    OPTION_TYPE = 'os'

    def load(self, node):
        super(OptionOS, self).load(node, allow_default_definition=False)

    def load_default_value(self, node):
        return os.uname()[0]

    def resolve(self):

        # Validate that the default OS reported by uname() is explicitly
        # supported by the project, if not overridden by user config or cli.
        self.validate(self.value)
