return not missing_requirements
-def get_toolchain_configs(**kwargs):
+def get_toolchain_configs(toolchains_url):
"""Fetch and return the possible toolchain configurations
This function returns an array of toolchain configurations. Each
toolchain configuration is itself an array of lines of the defconfig.
"""
- toolchains_url = kwargs['toolchains_url']
with urlopen_closing(toolchains_url) as r:
toolchains_csv = decode_byte_list(r.readlines())
return configs
-def is_toolchain_usable(**kwargs):
+def is_toolchain_usable(outputdir, config):
"""Check if the toolchain is actually usable."""
- idir = "instance-%d" % kwargs['instance']
- sysinfo = kwargs['sysinfo']
- log = kwargs['log']
-
- outputdir = os.path.join(idir, "output")
with open(os.path.join(outputdir, ".config")) as configf:
configlines = configf.readlines()
# Check that the toolchain configuration is still present
- for toolchainline in kwargs['config']:
+ for toolchainline in config:
if toolchainline not in configlines:
return False
return True
-def fixup_config(**kwargs):
+def fixup_config(outputdir, sysinfo):
"""Finalize the configuration and reject any problematic combinations
This function returns 'True' when the configuration has been
generated).
"""
- idir = "instance-%d" % kwargs['instance']
- sysinfo = kwargs['sysinfo']
-
- outputdir = os.path.join(idir, "output")
with open(os.path.join(outputdir, ".config")) as configf:
configlines = configf.readlines()
return True
-def gen_config(**kwargs):
+def gen_config(args):
"""Generate a new random configuration
This function generates the configuration, by choosing a random
packages.
"""
- idir = "instance-%d" % kwargs['instance']
- log = kwargs['log']
+ idir = "instance-%d" % args.instance
# We need the absolute path to use with O=, because the relative
# path to the output directory here is not relative to the
outputdir = os.path.abspath(os.path.join(idir, "output"))
srcdir = os.path.join(idir, "buildroot")
- log_write(log, "INFO: generate the configuration")
+ log_write(args.log, "INFO: generate the configuration")
# Select a random toolchain configuration
try:
- configs = get_toolchain_configs(**kwargs)
+ configs = get_toolchain_configs(args.toolchains_url)
except Exception:
return -1
"olddefconfig"],
stdout=devnull, stderr=devnull)
if ret != 0:
- log_write(log, "ERROR: cannot oldconfig")
+ log_write(args.log, "ERROR: cannot oldconfig")
return -1
- if not is_toolchain_usable(config=config, **kwargs):
+ if not is_toolchain_usable(outputdir, config):
return -1
# Now, generate the random selection of packages, and fixup
bounded_loop = 100
while True:
if bounded_loop == 0:
- log_write(log, "ERROR: cannot generate random configuration after 100 iterations")
+ log_write(args.log, "ERROR: cannot generate random configuration after 100 iterations")
return -1
bounded_loop -= 1
ret = subprocess.call(["make", "O=%s" % outputdir, "-C", srcdir,
"randpackageconfig"],
stdout=devnull, stderr=devnull)
if ret != 0:
- log_write(log, "ERROR: cannot generate random configuration")
+ log_write(args.log, "ERROR: cannot generate random configuration")
return -1
- if fixup_config(**kwargs):
+ if fixup_config(outputdir, args.sysinfo):
break
ret = subprocess.call(["make", "O=%s" % outputdir, "-C", srcdir,
"olddefconfig"],
stdout=devnull, stderr=devnull)
if ret != 0:
- log_write(log, "ERROR: cannot oldconfig")
+ log_write(args.log, "ERROR: cannot oldconfig")
return -1
ret = subprocess.call(["make", "O=%s" % outputdir, "-C", srcdir,
"savedefconfig"],
stdout=devnull, stderr=devnull)
if ret != 0:
- log_write(log, "ERROR: cannot savedefconfig")
+ log_write(args.log, "ERROR: cannot savedefconfig")
return -1
return 0
# gen_config expects "buildroot" directory under idir
os.symlink("..", os.path.join(idir, "buildroot"))
- # gen_config expects a dict, but args is a class object
- ret = gen_config(**args.__dict__)
+ ret = gen_config(args)
if ret != 0:
parser.exit(1)