Example #1
0
    def test_list_option(self):
        opt1 = ListOptionType(
            value_type=PathOptionType, description='Option 1', group="group1")

        self.assertEqual(opt1('abc'), 'abc')
        # self.assertEqual( opt1( '../abc/../123' ), '../123' )
        self.assertEqual(opt1('../abc/../123'), '../abc/../123')
        self.assertEqual(opt1([1, 2, 3, 4]), [1, 2, 3, 4])
        self.assertEqual(opt1(), [])
        self.assertEqual(opt1(NotImplemented), [])

        b = BoolOptionType(description='Test1', group="Debug",
                           style=("On", "Off"), true_values=["Yes", "enabled"],
                           false_values=["No", "disabled"])

        ob = ListOptionType(value_type=b, unique=True)

        self.assertEqual(ob('yes,no'), 'on,disabled')
        self.assertIn('yes', ob('yes,no'))

        self.assertEqual(
            ob.help_range(), ['On (or enabled, Yes)', 'Off (or disabled, No)'])

        on = ListOptionType(
            value_type=int, unique=True, range_help="List of integers")

        self.assertEqual(on('1,0,2,1,1,2,0'), [1, 0, 2])
        self.assertRaises(ErrorOptionTypeUnableConvertValue, on, [1, 'abc'])

        self.assertEqual(on.help_range(), ["List of integers"])

        on = ListOptionType(value_type=int)
        self.assertEqual(on.help_range(), [])
Example #2
0
    def test_options_update(self):
        options = Options()

        options.opt = RangeOptionType(min_value=1, max_value=100)
        options.warn_level = RangeOptionType(min_value=0, max_value=5)

        args = {'opt': 5, 'warn_level': 3, 'debug_on': True}
        options.update(args)
        self.assertEqual(options.opt, args['opt'])
        self.assertEqual(options.warn_level, args['warn_level'])
        self.assertIn('debug_on', options)

        options.update({})
        options.update(options)
        self.assertRaises(ErrorOptionsMergeNonOptions, options.merge, args)

        options2 = Options()
        options2.debug_on = BoolOptionType()
        options2.debug_on = False
        options2.bv = ListOptionType(value_type=str)
        options2.bv += 'debug,release,final'
        options2.build_variant = options2.bv
        self.assertTrue(options.debug_on.option_value.option_type.is_auto)
        options.merge(options2)
        self.assertEqual(options.debug_on.get(), options2.debug_on.get())
        self.assertEqual(options.bv, options2.bv)
        self.assertEqual(options.bv, options2.build_variant)
        self.assertEqual(options2.bv, options2.build_variant)
        self.assertIs(options.bv.option_value,
                      options.build_variant.option_value)

        options.merge(options2)
        self.assertEqual(options.debug_on, options2.debug_on)
        self.assertEqual(options2.bv, options2.build_variant)
Example #3
0
    def test_options(self):
        options = Options()

        opt_type1 = RangeOptionType(min_value=0, max_value=5)

        options.warn_level = opt_type1
        options.warning_level = options.warn_level

        self.assertEqual(options.warn_level, options.warning_level)

        options.warning_level = 1

        self.assertEqual(options.warn_level, options.warning_level)

        options.warning_level += 1

        self.assertEqual(options.warn_level, 2)

        options.warning_level -= 2

        self.assertEqual(options.warn_level, 0)

        opt_type2 = BoolOptionType()
        options.debug_on = opt_type2
        options.debug_on = True
        self.assertEqual(options.debug_on, 'true')

        over_opts = options.override()
        self.assertEqual(over_opts.debug_on, 'true')
        options.debug_on = False
        self.assertEqual(over_opts.debug_on, 'false')
        options.debug_on = True
        self.assertEqual(over_opts.debug_on, 'true')

        over_opts.debug_on = False

        self.assertEqual(options.debug_on, 'true')
        self.assertEqual(over_opts.debug_on, 'false')
        self.assertEqual(over_opts.warn_level, 0)

        options.warning_level = 3
        self.assertEqual(over_opts.warn_level, 3)
        self.assertEqual(over_opts.warning_level, 3)
        over_opts.warn_level.set(1)
        self.assertEqual(options.warning_level, 3)
        self.assertEqual(options.warn_level, 3)
        self.assertEqual(over_opts.warning_level, 1)
        self.assertEqual(over_opts.warn_level, 1)

        over_opts = over_opts.copy()
        options.warning_level = 2
        self.assertEqual(options.warn_level, 2)
        self.assertEqual(over_opts.warn_level, 1)
        self.assertEqual(over_opts.warning_level, 1)

        over_opts.warn_level = 4
        self.assertEqual(over_opts.warn_level, 4)
        self.assertEqual(over_opts.warning_level, 4)
Example #4
0
def _compiler_options(options):

    options.language = EnumOptionType(values=[('c++', 'cpp'), 'c'],
                                      default='c++',
                                      description='Current language',
                                      is_hidden=True)

    options.pic = BoolOptionType(
        description="Generate position-independent code.", default=True)

    options.objsuffix = StrOptionType(
        description="Object file suffix.", is_hidden=True)

    options.cxxflags = ListOptionType(
        description="C++ compiler flags", separators=None)

    options.cflags = ListOptionType(
        description="C++ compiler flags", separators=None)

    options.ccflags = ListOptionType(
        description="Common C/C++ compiler flags", separators=None)

    options.occflags = ListOptionType(
        description="Common C/C++ compiler optimization flags",
        separators=None)

    options.cc = AbsPathOptionType(description="C/C++ compiler program")

    options.cc_name = StrOptionType(is_tool_key=True,
                                    ignore_case=True,
                                    description="C/C++ compiler name")

    options.cc_ver = VersionOptionType(is_tool_key=True,
                                       description="C/C++ compiler version")

    options.cc_cmd = ListOptionType(separators=None,
                                    description="C/C++ compiler full command",
                                    is_hidden=True)

    options.cc_cmd = options.cc
    options.If().language.eq('c++').cc_cmd += options.cxxflags
    options.If().language.eq('c').cc_cmd += options.cflags
    options.cc_cmd += options.ccflags + options.occflags + \
        options.cppdefines_flags + options.cpppath_flags

    options.cxxstd = EnumOptionType(values=['default',
                                            ('c++98', 'c++03'),
                                            ('c++11', 'c++0x'),
                                            ('c++14', 'c++1y')],
                                    default='default',
                                    description='C++ language standard.')
Example #5
0
    def test_options_dict(self):
        options = Options()

        options.cxx = PathOptionType()
        options.debug_on = BoolOptionType()

        options.defines = DictOptionType(key_type=str, value_type=str)
        options.env = DictOptionType(key_type=UpperCaseString)
        options.env['PATH'] = ListOptionType(value_type=FilePath,
                                             separators=os.pathsep)
        options.env['PATH'] = []
        options.env['Include'] = list

        options.env['HOME'] = FilePath()
        options.env['Path'] = '/work/bin'
        options.env['Include'] = '/work/bin'

        self.assertEqual(options.env['path'].get(), '/work/bin')
        self.assertEqual(options.env['Include'].get(), '/work/bin')

        options.env['Path'] = options.env['Path'] + ['/usr/bin']

        options.env['path'] += ['/usr/local/bin', '/home/user/bin']
        options.env['Home'] = '/home/user'
        options.env['path'] += options.env['Home']
        options.env['path'] += options.cxx
        options.cxx = '/mingw/bin/g++'
        options.If().debug_on.eq(False).defines['DEBUG'] = 'FALSE'
        options.If().debug_on.eq(True).defines['DEBUG'] = 'TRUE'
        options.defines['OPTS'] = ''
        options.If().defines['DEBUG'].eq(
            'TRUE').defines['OPTS'] += options.defines['DEBUG']

        path = list(
            map(FilePath, [
                '/work/bin', '/usr/bin', '/usr/local/bin', '/home/user/bin',
                '/home/user', '/mingw/bin/g++'
            ]))

        value = options.env
        self.assertEqual(value['path'].get(), path)

        self.assertEqual(options.defines['OPTS'], '')
        options.debug_on = True
        self.assertEqual(options.defines['OPTS'], 'TRUE')
Example #6
0
    def test_bm_skip_nodes_by_option(self):
        with Tempdir() as tmp_dir:
            options = builtin_options()
            options.build_dir = tmp_dir

            bm = BuildManager()
            self.built_nodes = 0

            cond_node = Node(CondBuilder(options), False)

            options.has_openmp = BoolOptionType(default=True)
            options.has_openmp = cond_node

            node = Node(ValueBuilder(options), None)
            bm.add([node])

            bm.build_if(options.has_openmp, node)
            bm.depends(node, [cond_node])

            _build(bm, jobs=4)
            self.assertEqual(self.built_nodes, 1)
Example #7
0
    def test_options_wiki_examples(self):
        options = Options()

        options.debug_symbols = BoolOptionType(
            description='Include debug symbols')

        options.build_variant = EnumOptionType(
            values=['debug', 'release'],
            default='debug',
            description="Current build variant")

        options.If().build_variant.eq('debug').debug_symbols = True

        print(options.debug_symbols)

        options.build_variant = 'release'

        print(options.debug_symbols)

        options.build_variant = 'debug'

        print(options.debug_symbols)
Example #8
0
    def test_bool_option(self):
        debug_symbols = BoolOptionType(description='Include debug symbols',
                                       group="Debug", style=(True, False))

        true_values = ['tRUe', 't', '1', 'Yes', 'ENABled',
                       'On', 'y', 1, 2, 3, -1, True]

        false_values = ['FAlsE', 'F', '0', 'No', 'disabled',
                        'oFF', 'N', 0, None, False]

        for t in true_values:
            v = debug_symbols(t)
            self.assertTrue(v)
            self.assertEqual(str(v), str(True))

        for t in false_values:
            v = debug_symbols(t)
            self.assertFalse(v)
            self.assertEqual(str(v), str(False))

        debug_symbols = BoolOptionType(description='Include debug symbols',
                                       group="Debug", style=('ON', 'OFF'))

        v = debug_symbols('TRUE')
        self.assertTrue(v)
        self.assertEqual(debug_symbols.to_str(v), 'ON')

        v = debug_symbols(0)
        self.assertFalse(v)
        self.assertEqual(debug_symbols.to_str(v), 'OFF')

        opt_type = BoolOptionType(
            style=('Yes', 'No'), true_values=[], false_values=[])

        self.assertEqual(opt_type.help_range(), ['Yes', 'No'])

        opt_type.add_values('Y', 'N')
        opt_type.add_values('y', 'n')
        self.assertEqual(opt_type.help_range(), ['Yes (or Y)', 'No (or N)'])

        opt_type.add_values('1', '0')

        v = opt_type('1')
        v |= opt_type(3)
        v = opt_type(v)
        self.assertEqual(v, opt_type('y'))
        v &= opt_type(100)
        v = opt_type(v)
        self.assertEqual(v, opt_type(1))
        v = v & opt_type(0)
        v = opt_type(v)
        self.assertEqual(v, 0)
        v = v | opt_type(5)
        v = opt_type(v)
        self.assertEqual(v, 1)
        v ^= opt_type(2)
        v = opt_type(v)
        self.assertEqual(v, 0)
        v = v ^ opt_type(2)
        v = opt_type(v)
        self.assertEqual(v, 1)

        self.assertNotEqual(opt_type('1'), 0)
        self.assertLess(opt_type('0'), 1)
        self.assertLessEqual(opt_type('0'), 1)
        self.assertLessEqual(opt_type('1'), 1)
        self.assertGreater(opt_type('1'), 0)
        self.assertGreaterEqual(opt_type('1'), 1)
        self.assertGreaterEqual(opt_type('1'), 0)

        bt = OptionType(value_type=bool)

        self.assertEqual(bt('1'), 1)
        self.assertNotEqual(bt('1'), 0)
        self.assertNotEqual(bt('0'), 0)
        self.assertEqual(bt(1), True)
        self.assertEqual(bt(0), False)

        self.assertEqual(str(bt(1)), str(True))
        self.assertEqual(str(bt(0)), str(False))

        bt = BoolOptionType()
        self.assertEqual(str(bt(1)), 'True')
        self.assertEqual(str(bt('disabled')), 'False')
Example #9
0
    def test_bool_option(self):
        debug_symbols = BoolOptionType(description='Include debug symbols',
                                       group="Debug", style=(True, False))

        true_values = ['tRUe', 't', '1', 'Yes', 'ENABled',
                       'On', 'y', 1, 2, 3, -1, True]

        false_values = ['FAlsE', 'F', '0', 'No', 'disabled',
                        'oFF', 'N', 0, None, False]

        for t in true_values:
            v = debug_symbols(t)
            self.assertTrue(v)
            self.assertEqual(str(v), str(True))

        for t in false_values:
            v = debug_symbols(t)
            self.assertFalse(v)
            self.assertEqual(str(v), str(False))

        debug_symbols = BoolOptionType(description='Include debug symbols',
                                       group="Debug", style=('ON', 'OFF'))

        v = debug_symbols('TRUE')
        self.assertTrue(v)
        self.assertEqual(debug_symbols.to_str(v), 'ON')

        v = debug_symbols(0)
        self.assertFalse(v)
        self.assertEqual(debug_symbols.to_str(v), 'OFF')

        opt_type = BoolOptionType(
            style=('Yes', 'No'), true_values=[], false_values=[])

        self.assertEqual(opt_type.help_range(), ['Yes', 'No'])

        opt_type.add_values('Y', 'N')
        opt_type.add_values('y', 'n')
        self.assertEqual(opt_type.help_range(), ['Yes (or Y)', 'No (or N)'])

        opt_type.add_values('1', '0')

        v = opt_type('1')
        v |= opt_type(3)
        v = opt_type(v)
        self.assertEqual(v, opt_type('y'))
        v &= opt_type(100)
        v = opt_type(v)
        self.assertEqual(v, opt_type(1))
        v = v & opt_type(0)
        v = opt_type(v)
        self.assertEqual(v, 0)
        v = v | opt_type(5)
        v = opt_type(v)
        self.assertEqual(v, 1)
        v ^= opt_type(2)
        v = opt_type(v)
        self.assertEqual(v, 0)
        v = v ^ opt_type(2)
        v = opt_type(v)
        self.assertEqual(v, 1)

        self.assertNotEqual(opt_type('1'), 0)
        self.assertLess(opt_type('0'), 1)
        self.assertLessEqual(opt_type('0'), 1)
        self.assertLessEqual(opt_type('1'), 1)
        self.assertGreater(opt_type('1'), 0)
        self.assertGreaterEqual(opt_type('1'), 1)
        self.assertGreaterEqual(opt_type('1'), 0)

        bt = OptionType(value_type=bool)

        self.assertEqual(bt('1'), 1)
        self.assertNotEqual(bt('1'), 0)
        self.assertNotEqual(bt('0'), 0)
        self.assertEqual(bt(1), True)
        self.assertEqual(bt(0), False)

        self.assertEqual(str(bt(1)), str(True))
        self.assertEqual(str(bt(0)), str(False))

        bt = BoolOptionType()
        self.assertEqual(str(bt(1)), 'True')
        self.assertEqual(str(bt('disabled')), 'False')