diff --git a/CMake/generate.py b/CMake/generate.py index e2186287fee8d7bd79548108ac75808f83fd5e4c..23ed8f1cd99f9c37bb144a04ec55dddf1abaa54b 100755 --- a/CMake/generate.py +++ b/CMake/generate.py @@ -170,13 +170,19 @@ class Project: def generate(self, dry_run): return Generator().generate(self, dry_run) - def recursive_dependencies(self): + def recursive_dependencies(self, no_test_dependencies): visited = {self.name} stack = [self.name] while len(stack) > 0: c = stack.pop() - for dep in PROJECTS[c].dependencies + PROJECTS[c].dependencies_test: + + deps = PROJECTS[c].dependencies + + if no_test_dependencies is False: + deps += PROJECTS[c].dependencies_test + + for dep in deps: if dep not in visited: visited.add(dep) stack.append(dep) @@ -233,7 +239,7 @@ class Generator: project_name=project.name, target_libs=Helpers.join(project.dependencies + sys_libs, ' '), include_paths=Helpers.join([project.name] + sys_includes, ' '), - cmake_options=project.cmake_additional_set, + cmake_options=Helpers.join(["set({} {})".format(k.upper(), v) for k, v in project.cmake_additional_set], sep='\n'), source_files=Helpers.join(project.find_sources()), find_packages=Helpers.join(map(lambda p: "find_package({})".format(p), finds), "\n"), )) @@ -288,7 +294,7 @@ CATEGORIES = { # ---------------------------------------------------------------------------------------------------------------------- -def compute_packages(packages, groups, no_dependencies, verbose): +def compute_packages(packages, groups, no_dependencies, no_test_dependencies, verbose): # filter out invalid for g in groups: if g not in GROUPS: @@ -306,7 +312,7 @@ def compute_packages(packages, groups, no_dependencies, verbose): # no packages specified, i.e. return all if len(packages) is 0: - return PROJECTS.values() + packages = PROJECTS.values() # possibly compute dependencies for p in packages: @@ -314,15 +320,19 @@ def compute_packages(packages, groups, no_dependencies, verbose): p_dependencies_str = map(lambda s: "'{}'".format(s), p.dependencies) print("Project '{}' depends on: {}".format(p, Helpers.join(p_dependencies_str, ', ')), file=sys.stderr) + if no_test_dependencies is False: + p_dependencies_test_str = map(lambda s: "'{}'".format(s), p.dependencies_test) + print("Project '{}' tests depends on: {}".format(p, Helpers.join(p_dependencies_test_str, ', ')), file=sys.stderr) + if no_dependencies: res.add(p) else: - res |= {PROJECTS[d] for d in p.recursive_dependencies()} + res |= {PROJECTS[d] for d in p.recursive_dependencies(no_test_dependencies)} return res -def main(dry_run, main_file, packages_requested, groups_requested, no_dependencies, only_show_dependencies): - packages = compute_packages(packages_requested, groups_requested, no_dependencies, only_show_dependencies) +def main(dry_run, main_file, packages_requested, groups_requested, no_dependencies, no_test_dependencies, only_show_dependencies): + packages = compute_packages(packages_requested, groups_requested, no_dependencies, no_test_dependencies, only_show_dependencies) print("The following packages will be generated:", file=sys.stderr) print(", ".join(sorted([p.name for p in packages])), file=sys.stderr) @@ -358,6 +368,7 @@ if __name__ == '__main__': parser.add_argument('-p', '--package', action='append', help='Specify packages to build. For multiple packages, use -p multiple times. Can be combined with -g') parser.add_argument('-g', '--group', action='append', help='Specify package group to build. For multiple groups, use -g multiple times. Can be combined with -p') parser.add_argument('--no-deps', action='store_true', default=False, help="Don't generate dependencies") + parser.add_argument('--no-test-deps', action='store_true', default=False, help="Don't consider test dependencies as dependencies") parser.add_argument('--show-deps', action='store_true', default=False, help='Only show dependencies of selected packages or groups') parser.add_argument('-v', '--version', action='store_true', default=False, help="Show current version") @@ -374,4 +385,5 @@ if __name__ == '__main__': args.package if args.package else [], args.group if args.group else [], args.no_deps, + args.no_test_deps, args.show_deps))