aboutsummaryrefslogtreecommitdiff
path: root/scripts/configdiff.py
blob: 3cf1b16f36e8bd72448401fa2ec6b2dc3dc2a864 (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
37
38
39
40
41
42
43
44
45
46
47
48
import os
import sys

from conf import conf
import utils


def check():
	"""Check if .config file in kernel tree is consistent with generated solution.
	This containst code fragments from solution.py (apply)
	"""
	# Check if solution_file exist
	if not os.path.isfile(conf.solution_file):
		raise Exception("Solution file is missing. Run sat_solution and check existence of " + conf.solution_file)

	utils.build_symbol_map() # Ensure smap existence
	srmap = {value:key for key, value in utils.smap.items()}

	# Read solution if satisfiable
	with open(conf.solution_file, 'r') as f:
		if not f.readline().rstrip() == 'SAT':
			raise NoSolution()
		solut = f.readline().split()
	solut.remove('0') # Remove 0 at the end 
	solutb = []
	for sl in solut: # This is using that sat. solver output is sorted
		if sl[0] == '-':
			solutb.append(False)
		else:
			solutb.append(True)

	mismatch = False
	with open(conf.linux_sources + '/.config', 'r') as f:
		for line in f:
			if (line[0] == '#') or (not '=' in line):
				continue
			indx = line.index('=')
			if (line[indx + 1] == 'y'):
				if (solutb[int(srmap[line[7:indx]]) - 1] == False):
					print("W: Setting mismatch: " + line, end='')
					mismatch = True
			if (line[indx + 1] == 'm'):
				print("W: module setting find: " + line, end='')
			elif (line[indx + 1] == 'n'):
				if (solutb[int(srmap[line[7:indx]]) - 1] == True):
					print("W: Setting mismatch: " + line, end='')
					mismatch = True
	return mismatch