summaryrefslogtreecommitdiff
path: root/examples/allnoconfig.py
blob: 2fe151d73ace2ab38c85368ebc11f472931da38e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Works like allnoconfig. Verified to produce identical output to 'make
# allnoconfig' for all ARCHes. The looping is done in case setting one symbol
# to "n" allows other symbols to be set to "n" (due to dependencies).

import kconfiglib
import sys

conf = kconfiglib.Config(sys.argv[1])

while True:
    done = True

    for sym in conf:
        # Choices take care of themselves for allnoconfig, so we only need to
        # worry about non-choice symbols
        if not sym.is_choice_item():
            lower_bound = sym.get_lower_bound()

            # If we can assign a lower value to the symbol (where "n", "m" and
            # "y" are ordered from lowest to highest), then do so.
            # lower_bound() returns None for symbols whose values cannot
            # (currently) be changed, as well as for non-bool, non-tristate
            # symbols.
            if lower_bound is not None and \
               kconfiglib.tri_less(lower_bound, sym.calc_value()):

                sym.set_value(lower_bound)

                # We just changed the value of some symbol. As this may affect
                # other symbols, keep going.
                done = False

    if done:
        break

conf.write_config(".config")