@$(INSTALL) -d $(GRAPHS_DIR)
@cd "$(CONFIG_DIR)"; \
$(TOPDIR)/support/scripts/graph-depends $(BR2_GRAPH_DEPS_OPTS) \
- -o $(GRAPHS_DIR)/$(@).dot
+ --direct -o $(GRAPHS_DIR)/$(@).dot
dot $(BR2_GRAPH_DOT_OPTS) -T$(BR_GRAPH_OUT) \
-o $(GRAPHS_DIR)/$(@).$(BR_GRAPH_OUT) \
$(GRAPHS_DIR)/$(@).dot
@echo ' <pkg>-show-depends - List packages on which <pkg> depends'
@echo ' <pkg>-show-rdepends - List packages which have <pkg> as a dependency'
@echo ' <pkg>-graph-depends - Generate a graph of <pkg>'\''s dependencies'
+ @echo ' <pkg>-graph-rdepends - Generate a graph of <pkg>'\''s reverse dependencies'
@echo ' <pkg>-dirclean - Remove <pkg> build directory'
@echo ' <pkg>-reconfigure - Restart the build from the configure step'
@echo ' <pkg>-rebuild - Restart the build from the build step'
endif
endef
+define pkg-graph-depends
+ @$$(INSTALL) -d $$(GRAPHS_DIR)
+ @cd "$$(CONFIG_DIR)"; \
+ $$(TOPDIR)/support/scripts/graph-depends $$(BR2_GRAPH_DEPS_OPTS) \
+ -p $(1) $(2) -o $$(GRAPHS_DIR)/$$(@).dot
+ dot $$(BR2_GRAPH_DOT_OPTS) -T$$(BR_GRAPH_OUT) \
+ -o $$(GRAPHS_DIR)/$$(@).$$(BR_GRAPH_OUT) \
+ $$(GRAPHS_DIR)/$$(@).dot
+endef
+
################################################################################
# inner-generic-package -- generates the make targets needed to build a
# generic package
@echo $$($(2)_RDEPENDENCIES)
$(1)-graph-depends: graph-depends-requirements
- @$$(INSTALL) -d $$(GRAPHS_DIR)
- @cd "$$(CONFIG_DIR)"; \
- $$(TOPDIR)/support/scripts/graph-depends $$(BR2_GRAPH_DEPS_OPTS) \
- -p $(1) -o $$(GRAPHS_DIR)/$$(@).dot
- dot $$(BR2_GRAPH_DOT_OPTS) -T$$(BR_GRAPH_OUT) \
- -o $$(GRAPHS_DIR)/$$(@).$$(BR_GRAPH_OUT) \
- $$(GRAPHS_DIR)/$$(@).dot
+ $(call pkg-graph-depends,$(1),--direct)
+
+$(1)-graph-rdepends: graph-depends-requirements
+ $(call pkg-graph-depends,$(1),--reverse)
$(1)-all-source: $(1)-source
$(1)-all-source: $$(foreach p,$$($(2)_FINAL_ALL_DEPENDENCIES),$$(p)-all-source)
default=False)
parser.add_argument("--no-transitive", dest="transitive", action='store_false',
help="Draw (do not draw) transitive dependencies")
+parser.add_argument("--direct", dest="direct", action='store_true', default=True,
+ help="Draw direct dependencies (the default)")
+parser.add_argument("--reverse", dest="direct", action='store_false',
+ help="Draw reverse dependencies")
args = parser.parse_args()
check_only = args.check_only
transitive = args.transitive
+if args.direct:
+ rule = "show-depends"
+ arrow_dir = "forward"
+else:
+ if mode == MODE_FULL:
+ sys.stderr.write("--reverse needs a package\n")
+ sys.exit(1)
+ rule = "show-rdepends"
+ arrow_dir = "back"
+
# Get the colours: we need exactly three colours,
# so no need not split more than 4
# We'll let 'dot' validate the colours...
sys.stderr.write("Getting dependencies for %s\n" % pkgs)
cmd = ["make", "-s", "--no-print-directory" ]
for pkg in pkgs:
- cmd.append("%s-show-depends" % pkg)
+ cmd.append("%s-%s" % (pkg, rule))
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
output = p.communicate()[0]
if p.returncode != 0:
add = False
break
if add:
- outfile.write("%s -> %s\n" % (pkg_node_name(pkg), pkg_node_name(d)))
+ outfile.write("%s -> %s [dir=%s]\n" % (pkg_node_name(pkg), pkg_node_name(d), arrow_dir))
print_pkg_deps(depth+1, d)
# Start printing the graph data