-def deps_then_me(pkg):
- l = []
-
- for dep in sorted(pkg.deps):
- l += deps_then_me(pkgs_map[dep])
- l += [pkg]
-
- return l
-
-
-def generate_targets_buildorder(targetnames):
- buildorder = []
-
- for pkgname in targetnames:
- buildorder += deps_then_me(pkgs_map[pkgname])
+def generate_target_buildorder(target_path, pkgs_map):
+ "Generate a build order for building the dependencies of the specified package."
+ if target_path.endswith('/'):
+ target_path = target_path[:-1]
+
+ package_name = os.path.basename(target_path)
+ package = pkgs_map[package_name]
+ return package.recursive_dependencies(pkgs_map)
+
+def main():
+ "Generate the build order either for all packages or a specific one."
+ packages_directories = ['packages']
+ full_buildorder = len(sys.argv) == 1
+ if not full_buildorder:
+ packages_real_path = os.path.realpath('packages')
+ for path in sys.argv[1:]:
+ if not os.path.isdir(path):
+ die('Not a directory: ' + path)
+ if path.endswith('/'):
+ path = path[:-1]
+ parent_path = os.path.dirname(path)
+ if packages_real_path != os.path.realpath(parent_path):
+ packages_directories.append(parent_path)
+
+ pkgs_map = read_packages_from_directories(packages_directories)
+
+ if full_buildorder:
+ build_order = generate_full_buildorder(pkgs_map)
+ else:
+ build_order = generate_target_buildorder(sys.argv[1], pkgs_map)