20Check that no light-release-breaking dependencies have been added.
22If you are failing this test you have managed to break light builds, please
23check with the light release manager for more information.
27def get_sconscripts(package):
28 """glob to get the path to all sconscript files
31 package (str): the name of the package directory
34 list(str): a list of all SConscript files
36 path_to_package = basf2.find_file(package)
37 return glob.glob(f
"{path_to_package}/**/SConscript", recursive=
True)
40def get_dependencies(sconscript_filename):
41 """grab all of the LIBS in the sconscript file
44 sconscript_filename (str): the path to the sconscript file
47 set(str): a set of packages in the env[
'LIBS']
in this file
51 with open(sconscript_filename)
as fi:
53 dependencies = re.search(
54 r"env\['LIBS'\] *= *\[\n*((?:.*?|\n)*?)\n*\]", file_data
57 dependencies = dependencies.group(1)
64 lb.replace(
"'",
"").replace(
'"',
"").strip()
65 for lb
in re.split(
",|\n", dependencies)
66 if not lb.count(
"#")
and not lb ==
''
70 package_dependencies = {lb.split(
"_")[0]
for lb
in dependencies}
72 return package_dependencies
75def check_dependencies(forbidden, sconscript_files, error=""):
76 """Check that there are no dependencies that are forbidden.
79 forbidden set(str): a set of packages we don't want to depend on sconscript_files list(str): a list of paths to sconscript files
80 error str: optionally specify the error message
83 int: count of the number of forbidden dependencies found
86 for sconscript_filename
in sconscript_files:
89 this_dependencies = get_dependencies(sconscript_filename)
93 forbidden_packages_dependencies = forbidden.intersection(this_dependencies)
96 if len(forbidden_packages_dependencies) != 0:
98 f
"The sconscript file {sconscript_filename} depends on",
99 forbidden_packages_dependencies,
106if __name__ ==
"__main__":
110 light_file = basf2.find_file(
".light")
111 with open(light_file)
as fi:
112 light_packages = [li.strip().replace(
"/",
"")
for li
in fi
if li.strip().endswith(
"/")]
117 all_packages = subprocess.check_output(
118 [
"b2code-package-list"], cwd=os.path.dirname(light_file),
120 all_packages = all_packages.decode(
"utf-8").strip().split(
" ")
123 non_light_packages = set(all_packages).difference(set(light_packages))
130 for package
in light_packages:
131 sconscript_files = get_sconscripts(package)
132 return_code_sum += check_dependencies(
133 non_light_packages, sconscript_files,
"This breaks light releases! Sorry."
137 print(
"Test of light dependencies, the loop took:", time() - start,
"seconds to run")
138 print(
"There were", return_code_sum,
"forbidden dependencies")
140 sys.exit(return_code_sum)