blob: a595913891906a315a62ed098a916ccc26eb0d6a [file] [log] [blame]
# TODO: need a function to get the newest config file older than us from
# the repo.
from autotest_utils import *
def apply_overrides(orig_file, changes_file, output_file):
# First suck all the changes into a dictionary.
input = file(changes_file, 'r')
for line in input.readlines():
[key] = line.split('=')[0:1]
if key.startswith('CONFIG_'):
override[key] = line;
input.close()
# Now go through the input file, overriding lines where need be
input = file(orig_file, 'r')
ouput = file(output_file, 'w')
for line in input.readlines():
key = line.split('=')[0:1]
if override[key]:
output.write(override[key])
else:
output.write(line)
input.close()
output.close()
def diff_configs(old, new):
system('diff -u %s %s > %s' % (old, new, new + '.diff'), ignorestatus=1)
def modules_needed(config):
return (grep('CONFIG_MODULES=y', config) and grep('=m', config))
class kernel_config:
# Build directory must be ready before init'ing config.
#
# Stages:
# 1. Get original config file
# 2. Apply overrides
# 3. Do 'make oldconfig' to update it to current source code
# (gets done implicitly during the process)
#
# You may specifiy the a defconfig within the tree to build,
# or a custom config file you want, or None, to get machine's
# default config file from the repo.
build_dir = '' # the directory we're building in
config_dir = '' # local repository for config_file data
build_config = '' # the config file in the build directory
orig_config = '' # the original config file
over_config = '' # config file + overrides
def __init__(self, build_dir, config_dir, orig_file, overrides):
self.build_dir = build_dir
self.config_dir = config_dir
# 1. Get original config file
self.build_config = build_dir + '/.config'
if (orig_file == ''): # use defconfig
os.chdir(build_dir)
system('make defconfig')
else:
self.orig_config = config_dir + '/config.orig'
get_file(orig_file, self.orig_config)
self.update_config(self.orig_config, self.orig_config+'.new')
diff_configs(self.orig_config, self.orig_config+'.new')
# 2. Apply overrides
if overrides:
self.over_config = config_dir + '/config.over'
apply_overrides(self.orig_config, overrides, over_config)
self.update_config(self.over_config, self.over_config+'.new')
diff_configs(self.over_config, self.over_config+'.new')
else:
self.over_config = self.orig_config
def update_config(self, old_config, new_config = 'None'):
os.chdir(self.build_dir)
shutil.copyfile(old_config, self.build_config)
system('yes "" | make oldconfig > /dev/null')
if new_config:
shutil.copyfile(self.build_config, new_config)