* [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends
@ 2018-03-31 16:35 Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables Thomas Petazzoni
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
Hello,
This is a new iteration of the patch from George Redivo [1] that added
the <pkg>-show-rrdepends target. This series pushes this much further:
- It starts by doing a cleanup pass on graph-depends, moving all
global code into proper functions, and removing most global
variables.
- It adds a --quiet option to ask graph-depends to not display its
debugging messages, which are not really meaningful for
show-recursive-depends/show-recursive-rdepend.
- We have chosen to name the target <pkg>-show-recursive-rdepends
instead of <pkg>-show-rrdepends, as it is more explicitly, and
allows us to also introduce <pkg>-show-recursive-depends.
- The change in graph-depends (introducing the --flat-list feature)
and in the package infrastructure are in separate patches.
- The output of show-recursive-(r)depends is now on a single line
(instead of one package by line), to match the output of the
existing show-depends and show-rdepends targets.
[1] http://patchwork.ozlabs.org/patch/756075/
Thanks!
Thomas
George Redivo (2):
support/scripts/graph-depends: add --flat-list option
package/pkg-generic: add <pkg>-show-recursive-(r)depends targets
Thomas Petazzoni (3):
support/scripts/graph-depends: remove global code and most global
variables
support/scripts/graph-depends: use colors instead of colours
support/scripts/graph-depends: add --quiet option
Makefile | 4 +
docs/manual/common-usage.txt | 4 +-
package/pkg-generic.mk | 8 ++
support/scripts/brpkgutil.py | 18 +--
support/scripts/graph-depends | 313 ++++++++++++++++++++++--------------------
5 files changed, 188 insertions(+), 159 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
@ 2018-03-31 16:35 ` Thomas Petazzoni
2018-04-01 17:59 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours Thomas Petazzoni
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
The graph-depends script had no main() function, and the main code was
actually spread between the function definitions, which was a real
mess.
This commit moves the global code into a main() function, which allows
to more easily follow the flow of the script. The argument parsing
code is moved into a parse_args() function.
Most of the global variables are removed, and are instead passed as
argument when appropriate. This has the side-effect that the
print_pkg_deps() function takes a lot of argument, but this is
considered better than tons of global variables.
The global variables that are removed are: max_depth, transitive,
mode, root_colour, target_colour, host_colour, outfile, dict_deps,
dict_version, stop_list, exclude_list, arrow_dir.
The root_colour/target_colour/host_colour variables are entirely
removed, and instead a single colours array is passed, and it's the
function using the colors that actually uses the different entries in
the array.
The way the print_attrs() function determines if we're display the
root node is not is changed. Instead of relying on the package name
and the mode (which requires passing the root package name, and the
mode), it relies on the depth: when the depth is 0, we're at the root
node.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
support/scripts/graph-depends | 289 +++++++++++++++++++++---------------------
1 file changed, 144 insertions(+), 145 deletions(-)
diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
index 85c9bf0a4f..d86d506f6f 100755
--- a/support/scripts/graph-depends
+++ b/support/scripts/graph-depends
@@ -31,96 +31,6 @@ import brpkgutil
# Modes of operation:
MODE_FULL = 1 # draw full dependency graph for all selected packages
MODE_PKG = 2 # draw dependency graph for a given package
-mode = 0
-
-# Limit drawing the dependency graph to this depth. 0 means 'no limit'.
-max_depth = 0
-
-# Whether to draw the transitive dependencies
-transitive = True
-
-parser = argparse.ArgumentParser(description="Graph packages dependencies")
-parser.add_argument("--check-only", "-C", dest="check_only", action="store_true", default=False,
- help="Only do the dependency checks (circular deps...)")
-parser.add_argument("--outfile", "-o", metavar="OUT_FILE", dest="outfile",
- help="File in which to generate the dot representation")
-parser.add_argument("--package", '-p', metavar="PACKAGE",
- help="Graph the dependencies of PACKAGE")
-parser.add_argument("--depth", '-d', metavar="DEPTH", dest="depth", type=int, default=0,
- help="Limit the dependency graph to DEPTH levels; 0 means no limit.")
-parser.add_argument("--stop-on", "-s", metavar="PACKAGE", dest="stop_list", action="append",
- help="Do not graph past this package (can be given multiple times)." +
- " Can be a package name or a glob, " +
- " 'virtual' to stop on virtual packages, or " +
- "'host' to stop on host packages.")
-parser.add_argument("--exclude", "-x", metavar="PACKAGE", dest="exclude_list", action="append",
- help="Like --stop-on, but do not add PACKAGE to the graph.")
-parser.add_argument("--colours", "-c", metavar="COLOR_LIST", dest="colours",
- default="lightblue,grey,gainsboro",
- help="Comma-separated list of the three colours to use" +
- " to draw the top-level package, the target" +
- " packages, and the host packages, in this order." +
- " Defaults to: 'lightblue,grey,gainsboro'")
-parser.add_argument("--transitive", dest="transitive", action='store_true',
- 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
-
-if args.outfile is None:
- outfile = sys.stdout
-else:
- if check_only:
- sys.stderr.write("don't specify outfile and check-only at the same time\n")
- sys.exit(1)
- outfile = open(args.outfile, "w")
-
-if args.package is None:
- mode = MODE_FULL
-else:
- mode = MODE_PKG
- rootpkg = args.package
-
-max_depth = args.depth
-
-if args.stop_list is None:
- stop_list = []
-else:
- stop_list = args.stop_list
-
-if args.exclude_list is None:
- exclude_list = []
-else:
- exclude_list = args.exclude_list
-
-transitive = args.transitive
-
-if args.direct:
- get_depends_func = brpkgutil.get_depends
- arrow_dir = "forward"
-else:
- if mode == MODE_FULL:
- sys.stderr.write("--reverse needs a package\n")
- sys.exit(1)
- get_depends_func = brpkgutil.get_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...
-colours = args.colours.split(',', 4)
-if len(colours) != 3:
- sys.stderr.write("Error: incorrect colour list '%s'\n" % args.colours)
- sys.exit(1)
-root_colour = colours[0]
-target_colour = colours[1]
-host_colour = colours[2]
allpkgs = []
@@ -145,7 +55,7 @@ def get_targets():
# 'dependencies', which contains tuples of the form (pkg1 ->
# pkg2_on_which_pkg1_depends, pkg3 -> pkg4_on_which_pkg3_depends) and
# the function finally returns this list.
-def get_all_depends(pkgs):
+def get_all_depends(pkgs, get_depends_func):
dependencies = []
# Filter the packages for which we already have the dependencies
@@ -175,7 +85,7 @@ def get_all_depends(pkgs):
deps.add(dep)
if len(deps) != 0:
- newdeps = get_all_depends(deps)
+ newdeps = get_all_depends(deps, get_depends_func)
if newdeps is not None:
dependencies += newdeps
@@ -193,35 +103,6 @@ TARGET_EXCEPTIONS = [
"target-post-image",
]
-# In full mode, start with the result of get_targets() to get the main
-# targets and then use get_all_depends() for all targets
-if mode == MODE_FULL:
- targets = get_targets()
- dependencies = []
- allpkgs.append('all')
- filtered_targets = []
- for tg in targets:
- # Skip uninteresting targets
- if tg in TARGET_EXCEPTIONS:
- continue
- dependencies.append(('all', tg))
- filtered_targets.append(tg)
- deps = get_all_depends(filtered_targets)
- if deps is not None:
- dependencies += deps
- rootpkg = 'all'
-
-# In pkg mode, start directly with get_all_depends() on the requested
-# package
-elif mode == MODE_PKG:
- dependencies = get_all_depends([rootpkg])
-
-# Make the dependencies a dictionnary { 'pkg':[dep1, dep2, ...] }
-dict_deps = {}
-for dep in dependencies:
- if dep[0] not in dict_deps:
- dict_deps[dep[0]] = []
- dict_deps[dep[0]].append(dep[1])
# Basic cache for the results of the is_dep() function, in order to
# optimize the execution time. The cache is a dict of dict of boolean
@@ -328,7 +209,7 @@ def check_circular_deps(deps):
# This functions trims down the dependency list of all packages.
# It applies in sequence all the dependency-elimination methods.
-def remove_extra_deps(deps):
+def remove_extra_deps(deps, transitive):
for pkg in list(deps.keys()):
if not pkg == 'all':
deps[pkg] = remove_mandatory_deps(pkg, deps)
@@ -338,32 +219,22 @@ def remove_extra_deps(deps):
return deps
-check_circular_deps(dict_deps)
-if check_only:
- sys.exit(0)
-
-dict_deps = remove_extra_deps(dict_deps)
-dict_version = brpkgutil.get_version([pkg for pkg in allpkgs
- if pkg != "all" and not pkg.startswith("root")])
-
-
# Print the attributes of a node: label and fill-color
-def print_attrs(pkg):
+def print_attrs(outfile, pkg, version, depth, colors):
name = pkg_node_name(pkg)
if pkg == 'all':
label = 'ALL'
else:
label = pkg
- if pkg == 'all' or (mode == MODE_PKG and pkg == rootpkg):
- color = root_colour
+ if depth == 0:
+ color = colors[0]
else:
if pkg.startswith('host') \
or pkg.startswith('toolchain') \
or pkg.startswith('rootfs'):
- color = host_colour
+ color = colors[2]
else:
- color = target_colour
- version = dict_version.get(pkg)
+ color = colors[1]
if version == "virtual":
outfile.write("%s [label = <<I>%s</I>>]\n" % (name, label))
else:
@@ -371,12 +242,16 @@ def print_attrs(pkg):
outfile.write("%s [color=%s,style=filled]\n" % (name, color))
+done_deps = []
+
+
# Print the dependency graph of a package
-def print_pkg_deps(depth, pkg):
+def print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
+ arrow_dir, depth, max_depth, pkg, colors):
if pkg in done_deps:
return
done_deps.append(pkg)
- print_attrs(pkg)
+ print_attrs(outfile, pkg, dict_version.get(pkg), depth, colors)
if pkg not in dict_deps:
return
for p in stop_list:
@@ -401,13 +276,137 @@ def print_pkg_deps(depth, pkg):
break
if add:
outfile.write("%s -> %s [dir=%s]\n" % (pkg_node_name(pkg), pkg_node_name(d), arrow_dir))
- print_pkg_deps(depth + 1, d)
+ print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
+ arrow_dir, depth + 1, max_depth, d, colors)
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(description="Graph packages dependencies")
+ parser.add_argument("--check-only", "-C", dest="check_only", action="store_true", default=False,
+ help="Only do the dependency checks (circular deps...)")
+ parser.add_argument("--outfile", "-o", metavar="OUT_FILE", dest="outfile",
+ help="File in which to generate the dot representation")
+ parser.add_argument("--package", '-p', metavar="PACKAGE",
+ help="Graph the dependencies of PACKAGE")
+ parser.add_argument("--depth", '-d', metavar="DEPTH", dest="depth", type=int, default=0,
+ help="Limit the dependency graph to DEPTH levels; 0 means no limit.")
+ parser.add_argument("--stop-on", "-s", metavar="PACKAGE", dest="stop_list", action="append",
+ help="Do not graph past this package (can be given multiple times)." +
+ " Can be a package name or a glob, " +
+ " 'virtual' to stop on virtual packages, or " +
+ "'host' to stop on host packages.")
+ parser.add_argument("--exclude", "-x", metavar="PACKAGE", dest="exclude_list", action="append",
+ help="Like --stop-on, but do not add PACKAGE to the graph.")
+ parser.add_argument("--colours", "-c", metavar="COLOR_LIST", dest="colours",
+ default="lightblue,grey,gainsboro",
+ help="Comma-separated list of the three colours to use" +
+ " to draw the top-level package, the target" +
+ " packages, and the host packages, in this order." +
+ " Defaults to: 'lightblue,grey,gainsboro'")
+ parser.add_argument("--transitive", dest="transitive", action='store_true',
+ 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")
+ return parser.parse_args()
+
+
+def main():
+ args = parse_args()
+
+ check_only = args.check_only
+
+ if args.outfile is None:
+ outfile = sys.stdout
+ else:
+ if check_only:
+ sys.stderr.write("don't specify outfile and check-only at the same time\n")
+ sys.exit(1)
+ outfile = open(args.outfile, "w")
+ if args.package is None:
+ mode = MODE_FULL
+ else:
+ mode = MODE_PKG
+ rootpkg = args.package
-# Start printing the graph data
-outfile.write("digraph G {\n")
+ if args.stop_list is None:
+ stop_list = []
+ else:
+ stop_list = args.stop_list
+
+ if args.exclude_list is None:
+ exclude_list = []
+ else:
+ exclude_list = args.exclude_list
+
+ if args.direct:
+ get_depends_func = brpkgutil.get_depends
+ arrow_dir = "forward"
+ else:
+ if mode == MODE_FULL:
+ sys.stderr.write("--reverse needs a package\n")
+ sys.exit(1)
+ get_depends_func = brpkgutil.get_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...
+ colours = args.colours.split(',', 4)
+ if len(colours) != 3:
+ sys.stderr.write("Error: incorrect colour list '%s'\n" % args.colours)
+ sys.exit(1)
+
+ # In full mode, start with the result of get_targets() to get the main
+ # targets and then use get_all_depends() for all targets
+ if mode == MODE_FULL:
+ targets = get_targets()
+ dependencies = []
+ allpkgs.append('all')
+ filtered_targets = []
+ for tg in targets:
+ # Skip uninteresting targets
+ if tg in TARGET_EXCEPTIONS:
+ continue
+ dependencies.append(('all', tg))
+ filtered_targets.append(tg)
+ deps = get_all_depends(filtered_targets, get_depends_func)
+ if deps is not None:
+ dependencies += deps
+ rootpkg = 'all'
+
+ # In pkg mode, start directly with get_all_depends() on the requested
+ # package
+ elif mode == MODE_PKG:
+ dependencies = get_all_depends([rootpkg], get_depends_func)
+
+ # Make the dependencies a dictionnary { 'pkg':[dep1, dep2, ...] }
+ dict_deps = {}
+ for dep in dependencies:
+ if dep[0] not in dict_deps:
+ dict_deps[dep[0]] = []
+ dict_deps[dep[0]].append(dep[1])
+
+ check_circular_deps(dict_deps)
+ if check_only:
+ sys.exit(0)
+
+ dict_deps = remove_extra_deps(dict_deps, args.transitive)
+ dict_version = brpkgutil.get_version([pkg for pkg in allpkgs
+ if pkg != "all" and not pkg.startswith("root")])
+
+ # Start printing the graph data
+ outfile.write("digraph G {\n")
+
+ print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
+ arrow_dir, 0, args.depth, rootpkg, colours)
+
+ outfile.write("}\n")
-done_deps = []
-print_pkg_deps(0, rootpkg)
-outfile.write("}\n")
+if __name__ == "__main__":
+ sys.exit(main())
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables Thomas Petazzoni
@ 2018-03-31 16:35 ` Thomas Petazzoni
2018-03-31 21:22 ` Yann E. MORIN
2018-04-01 17:59 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option Thomas Petazzoni
` (2 subsequent siblings)
4 siblings, 2 replies; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
The graph-depends was not very consistent in colors vs. colours: some
parts were using colours, some parts were using colors.
Let's settle on the US spelling, colors.
This change the user-visble option --colours to --colors, but it is
unlikely that a lot of users customize the colors through
BR2_GRAPH_DEPS_OPTS, so this user interface change is considered
reasonable.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
docs/manual/common-usage.txt | 4 ++--
support/scripts/graph-depends | 16 ++++++++--------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/docs/manual/common-usage.txt b/docs/manual/common-usage.txt
index a22da20188..e3d7578c85 100644
--- a/docs/manual/common-usage.txt
+++ b/docs/manual/common-usage.txt
@@ -224,12 +224,12 @@ The +graph-depends+ behaviour can be controlled by setting options in the
* +--transitive+, +--no-transitive+, to draw (or not) the transitive
dependencies. The default is to not draw transitive dependencies.
-* +--colours R,T,H+, the comma-separated list of colours to draw the
+* +--colors R,T,H+, the comma-separated list of colors to draw the
root package (+R+), the target packages (+T+) and the host packages
(+H+). Defaults to: +lightblue,grey,gainsboro+
--------------------------------
-BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colours=red,green,blue' make graph-depends
+BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colors=red,green,blue' make graph-depends
--------------------------------
=== Graphing the build duration
diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
index d86d506f6f..dc265ae28c 100755
--- a/support/scripts/graph-depends
+++ b/support/scripts/graph-depends
@@ -297,9 +297,9 @@ def parse_args():
"'host' to stop on host packages.")
parser.add_argument("--exclude", "-x", metavar="PACKAGE", dest="exclude_list", action="append",
help="Like --stop-on, but do not add PACKAGE to the graph.")
- parser.add_argument("--colours", "-c", metavar="COLOR_LIST", dest="colours",
+ parser.add_argument("--colors", "-c", metavar="COLOR_LIST", dest="colors",
default="lightblue,grey,gainsboro",
- help="Comma-separated list of the three colours to use" +
+ help="Comma-separated list of the three colors to use" +
" to draw the top-level package, the target" +
" packages, and the host packages, in this order." +
" Defaults to: 'lightblue,grey,gainsboro'")
@@ -353,12 +353,12 @@ def main():
get_depends_func = brpkgutil.get_rdepends
arrow_dir = "back"
- # Get the colours: we need exactly three colours,
+ # Get the colors: we need exactly three colors,
# so no need not split more than 4
- # We'll let 'dot' validate the colours...
- colours = args.colours.split(',', 4)
- if len(colours) != 3:
- sys.stderr.write("Error: incorrect colour list '%s'\n" % args.colours)
+ # We'll let 'dot' validate the colors...
+ colors = args.colors.split(',', 4)
+ if len(colors) != 3:
+ sys.stderr.write("Error: incorrect color list '%s'\n" % args.colors)
sys.exit(1)
# In full mode, start with the result of get_targets() to get the main
@@ -403,7 +403,7 @@ def main():
outfile.write("digraph G {\n")
print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
- arrow_dir, 0, args.depth, rootpkg, colours)
+ arrow_dir, 0, args.depth, rootpkg, colors)
outfile.write("}\n")
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours Thomas Petazzoni
@ 2018-03-31 16:35 ` Thomas Petazzoni
2018-03-31 21:27 ` Yann E. MORIN
2018-03-31 16:35 ` [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets Thomas Petazzoni
4 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
This will be useful for the upcoming recursive show-depends and
show-rdepends features.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
support/scripts/brpkgutil.py | 18 ++++++++++--------
support/scripts/graph-depends | 22 +++++++++++++---------
2 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/support/scripts/brpkgutil.py b/support/scripts/brpkgutil.py
index 4c99ae9110..7c70ae7cab 100644
--- a/support/scripts/brpkgutil.py
+++ b/support/scripts/brpkgutil.py
@@ -6,8 +6,9 @@ import subprocess
# Execute the "make <pkg>-show-version" command to get the version of a given
# list of packages, and return the version formatted as a Python dictionary.
-def get_version(pkgs):
- sys.stderr.write("Getting version for %s\n" % pkgs)
+def get_version(pkgs, quiet=False):
+ if not quiet:
+ sys.stderr.write("Getting version for %s\n" % pkgs)
cmd = ["make", "-s", "--no-print-directory"]
for pkg in pkgs:
cmd.append("%s-show-version" % pkg)
@@ -27,8 +28,9 @@ def get_version(pkgs):
return version
-def _get_depends(pkgs, rule):
- sys.stderr.write("Getting dependencies for %s\n" % pkgs)
+def _get_depends(pkgs, rule, quiet=False):
+ if not quiet:
+ sys.stderr.write("Getting dependencies for %s\n" % pkgs)
cmd = ["make", "-s", "--no-print-directory"]
for pkg in pkgs:
cmd.append("%s-%s" % (pkg, rule))
@@ -55,12 +57,12 @@ def _get_depends(pkgs, rule):
# Execute the "make <pkg>-show-depends" command to get the list of
# dependencies of a given list of packages, and return the list of
# dependencies formatted as a Python dictionary.
-def get_depends(pkgs):
- return _get_depends(pkgs, 'show-depends')
+def get_depends(pkgs, quiet=False):
+ return _get_depends(pkgs, 'show-depends', quiet)
# Execute the "make <pkg>-show-rdepends" command to get the list of
# reverse dependencies of a given list of packages, and return the
# list of dependencies formatted as a Python dictionary.
-def get_rdepends(pkgs):
- return _get_depends(pkgs, 'show-rdepends')
+def get_rdepends(pkgs, quiet=False):
+ return _get_depends(pkgs, 'show-rdepends', quiet)
diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
index dc265ae28c..3a60e478d4 100755
--- a/support/scripts/graph-depends
+++ b/support/scripts/graph-depends
@@ -38,8 +38,9 @@ allpkgs = []
# Execute the "make show-targets" command to get the list of the main
# Buildroot PACKAGES and return it formatted as a Python list. This
# list is used as the starting point for full dependency graphs
-def get_targets():
- sys.stderr.write("Getting targets\n")
+def get_targets(quiet):
+ if not quiet:
+ sys.stderr.write("Getting targets\n")
cmd = ["make", "-s", "--no-print-directory", "show-targets"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
output = p.communicate()[0].strip()
@@ -55,7 +56,7 @@ def get_targets():
# 'dependencies', which contains tuples of the form (pkg1 ->
# pkg2_on_which_pkg1_depends, pkg3 -> pkg4_on_which_pkg3_depends) and
# the function finally returns this list.
-def get_all_depends(pkgs, get_depends_func):
+def get_all_depends(pkgs, get_depends_func, quiet):
dependencies = []
# Filter the packages for which we already have the dependencies
@@ -69,7 +70,7 @@ def get_all_depends(pkgs, get_depends_func):
if len(filtered_pkgs) == 0:
return []
- depends = get_depends_func(filtered_pkgs)
+ depends = get_depends_func(filtered_pkgs, quiet)
deps = set()
for pkg in filtered_pkgs:
@@ -85,7 +86,7 @@ def get_all_depends(pkgs, get_depends_func):
deps.add(dep)
if len(deps) != 0:
- newdeps = get_all_depends(deps, get_depends_func)
+ newdeps = get_all_depends(deps, get_depends_func, quiet)
if newdeps is not None:
dependencies += newdeps
@@ -311,6 +312,8 @@ def parse_args():
help="Draw direct dependencies (the default)")
parser.add_argument("--reverse", dest="direct", action='store_false',
help="Draw reverse dependencies")
+ parser.add_argument("--quiet", '-q', dest="quiet", action='store_true',
+ help="Quiet")
return parser.parse_args()
@@ -364,7 +367,7 @@ def main():
# In full mode, start with the result of get_targets() to get the main
# targets and then use get_all_depends() for all targets
if mode == MODE_FULL:
- targets = get_targets()
+ targets = get_targets(args.quiet)
dependencies = []
allpkgs.append('all')
filtered_targets = []
@@ -374,7 +377,7 @@ def main():
continue
dependencies.append(('all', tg))
filtered_targets.append(tg)
- deps = get_all_depends(filtered_targets, get_depends_func)
+ deps = get_all_depends(filtered_targets, get_depends_func, args.quiet)
if deps is not None:
dependencies += deps
rootpkg = 'all'
@@ -382,7 +385,7 @@ def main():
# In pkg mode, start directly with get_all_depends() on the requested
# package
elif mode == MODE_PKG:
- dependencies = get_all_depends([rootpkg], get_depends_func)
+ dependencies = get_all_depends([rootpkg], get_depends_func, args.quiet)
# Make the dependencies a dictionnary { 'pkg':[dep1, dep2, ...] }
dict_deps = {}
@@ -397,7 +400,8 @@ def main():
dict_deps = remove_extra_deps(dict_deps, args.transitive)
dict_version = brpkgutil.get_version([pkg for pkg in allpkgs
- if pkg != "all" and not pkg.startswith("root")])
+ if pkg != "all" and not pkg.startswith("root")],
+ args.quiet)
# Start printing the graph data
outfile.write("digraph G {\n")
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
` (2 preceding siblings ...)
2018-03-31 16:35 ` [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option Thomas Petazzoni
@ 2018-03-31 16:35 ` Thomas Petazzoni
2018-04-01 20:21 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets Thomas Petazzoni
4 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
From: George Redivo <george.redivo@datacom.ind.br>
graph-depends currently spits out a graph in .dot format. However, as
part of the upcoming introduction of <pkg>-show-recursive-depends and
<pkg>-show-recursive-rdepends, we need graph-depends to be able to
display a flat list.
Signed-off-by: George Redivo <george.redivo@datacom.ind.br>
[Thomas:
- Rebase on top of graph-depends changes
- Do not display the package name itself in the list, only its
dependencies (or reverse dependencies)
- Display the result on a single line, instead of one package per
line, in order to match what <pkg>-show-depends and
<pkg>-show-rdepends are doing today.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
support/scripts/graph-depends | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
index 3a60e478d4..a177296da2 100755
--- a/support/scripts/graph-depends
+++ b/support/scripts/graph-depends
@@ -248,11 +248,14 @@ done_deps = []
# Print the dependency graph of a package
def print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
- arrow_dir, depth, max_depth, pkg, colors):
+ arrow_dir, draw_graph, depth, max_depth, pkg, colors):
if pkg in done_deps:
return
done_deps.append(pkg)
- print_attrs(outfile, pkg, dict_version.get(pkg), depth, colors)
+ if draw_graph:
+ print_attrs(outfile, pkg, dict_version.get(pkg), depth, colors)
+ elif depth != 0:
+ outfile.write("%s " % pkg)
if pkg not in dict_deps:
return
for p in stop_list:
@@ -276,9 +279,10 @@ def print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
add = False
break
if add:
- outfile.write("%s -> %s [dir=%s]\n" % (pkg_node_name(pkg), pkg_node_name(d), arrow_dir))
+ if draw_graph:
+ outfile.write("%s -> %s [dir=%s]\n" % (pkg_node_name(pkg), pkg_node_name(d), arrow_dir))
print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
- arrow_dir, depth + 1, max_depth, d, colors)
+ arrow_dir, draw_graph, depth + 1, max_depth, d, colors)
def parse_args():
@@ -314,6 +318,8 @@ def parse_args():
help="Draw reverse dependencies")
parser.add_argument("--quiet", '-q', dest="quiet", action='store_true',
help="Quiet")
+ parser.add_argument("--flat-list", '-f', dest="flat_list", action='store_true', default=False,
+ help="Do not draw graph, just print a flat list")
return parser.parse_args()
@@ -356,6 +362,8 @@ def main():
get_depends_func = brpkgutil.get_rdepends
arrow_dir = "back"
+ draw_graph = not args.flat_list
+
# Get the colors: we need exactly three colors,
# so no need not split more than 4
# We'll let 'dot' validate the colors...
@@ -404,12 +412,16 @@ def main():
args.quiet)
# Start printing the graph data
- outfile.write("digraph G {\n")
+ if draw_graph:
+ outfile.write("digraph G {\n")
print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
- arrow_dir, 0, args.depth, rootpkg, colors)
+ arrow_dir, draw_graph, 0, args.depth, rootpkg, colors)
- outfile.write("}\n")
+ if draw_graph:
+ outfile.write("}\n")
+ else:
+ outfile.write("\n")
if __name__ == "__main__":
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
` (3 preceding siblings ...)
2018-03-31 16:35 ` [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option Thomas Petazzoni
@ 2018-03-31 16:35 ` Thomas Petazzoni
2018-04-01 20:21 ` Peter Korsgaard
4 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-03-31 16:35 UTC (permalink / raw)
To: buildroot
From: George Redivo <george.redivo@datacom.ind.br>
This commit adds the support for <pkg>-show-recursive-depends and
<pkg>-show-recursive-rdepends which respectively show the list of all
dependencies or reverse dependencies for a given package. The existing
show-depends and show-rdepends only show the first-level dependencies,
while show-recursive-depends and show-recursive-rdepends show
recursively the dependencies.
It is worth mentioning that while show-recursive-depends really shows
all dependencies, show-recursive-rdepends is a bit limited because the
reverse dependencies of host packages are not properly accounted
for. But that's a limitation that already exists in show-rdepends, and
that cannot easily be solved.
Signed-off-by: George Redivo <george.redivo@datacom.ind.br>
[Thomas:
- split from the patch that was also changing graph-depends
- rename show-rrdepends to show-recursive-rdepends
- add show-recursive-depends
- don't create GRAPHS_DIR.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Makefile | 4 ++++
package/pkg-generic.mk | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/Makefile b/Makefile
index 9e2402d7d9..60a83932c8 100644
--- a/Makefile
+++ b/Makefile
@@ -1024,6 +1024,10 @@ help:
@echo ' <pkg>-build - Build <pkg> up to the build step'
@echo ' <pkg>-show-depends - List packages on which <pkg> depends'
@echo ' <pkg>-show-rdepends - List packages which have <pkg> as a dependency'
+ @echo ' <pkg>-show-recursive-depends'
+ @echo ' - Recursively list packages on which <pkg> depends'
+ @echo ' <pkg>-show-recursive-rdepends'
+ @echo ' - Recursively 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'
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 6d82f7027e..24b55b9555 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -759,9 +759,17 @@ $(1)-show-version:
$(1)-show-depends:
@echo $$($(2)_FINAL_ALL_DEPENDENCIES)
+$(1)-show-recursive-depends:
+ @cd "$$(CONFIG_DIR)" && \
+ $$(TOPDIR)/support/scripts/graph-depends -p $(1) -f -q
+
$(1)-show-rdepends:
@echo $$($(2)_RDEPENDENCIES)
+$(1)-show-recursive-rdepends:
+ @cd "$$(CONFIG_DIR)" && \
+ $$(TOPDIR)/support/scripts/graph-depends -p $(1) --reverse -f -q
+
$(1)-show-build-order: $$(patsubst %,%-show-build-order,$$($(2)_FINAL_ALL_DEPENDENCIES))
$$(info $(1))
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours
2018-03-31 16:35 ` [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours Thomas Petazzoni
@ 2018-03-31 21:22 ` Yann E. MORIN
2018-04-01 17:59 ` Peter Korsgaard
1 sibling, 0 replies; 12+ messages in thread
From: Yann E. MORIN @ 2018-03-31 21:22 UTC (permalink / raw)
To: buildroot
Thomas, All,
On 2018-03-31 18:35 +0200, Thomas Petazzoni spake thusly:
> The graph-depends was not very consistent in colors vs. colours: some
> parts were using colours, some parts were using colors.
>
> Let's settle on the US spelling, colors.
I would have gone with the superior, historical, better, cleaner, nicer,
and correct englih spelling instead... ;-]
> This change the user-visble option --colours to --colors, but it is
> unlikely that a lot of users customize the colors through
> BR2_GRAPH_DEPS_OPTS, so this user interface change is considered
> reasonable.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Regards,
Yann E. MORIN.
> ---
> docs/manual/common-usage.txt | 4 ++--
> support/scripts/graph-depends | 16 ++++++++--------
> 2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/docs/manual/common-usage.txt b/docs/manual/common-usage.txt
> index a22da20188..e3d7578c85 100644
> --- a/docs/manual/common-usage.txt
> +++ b/docs/manual/common-usage.txt
> @@ -224,12 +224,12 @@ The +graph-depends+ behaviour can be controlled by setting options in the
> * +--transitive+, +--no-transitive+, to draw (or not) the transitive
> dependencies. The default is to not draw transitive dependencies.
>
> -* +--colours R,T,H+, the comma-separated list of colours to draw the
> +* +--colors R,T,H+, the comma-separated list of colors to draw the
> root package (+R+), the target packages (+T+) and the host packages
> (+H+). Defaults to: +lightblue,grey,gainsboro+
>
> --------------------------------
> -BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colours=red,green,blue' make graph-depends
> +BR2_GRAPH_DEPS_OPTS='-d 3 --no-transitive --colors=red,green,blue' make graph-depends
> --------------------------------
>
> === Graphing the build duration
> diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
> index d86d506f6f..dc265ae28c 100755
> --- a/support/scripts/graph-depends
> +++ b/support/scripts/graph-depends
> @@ -297,9 +297,9 @@ def parse_args():
> "'host' to stop on host packages.")
> parser.add_argument("--exclude", "-x", metavar="PACKAGE", dest="exclude_list", action="append",
> help="Like --stop-on, but do not add PACKAGE to the graph.")
> - parser.add_argument("--colours", "-c", metavar="COLOR_LIST", dest="colours",
> + parser.add_argument("--colors", "-c", metavar="COLOR_LIST", dest="colors",
> default="lightblue,grey,gainsboro",
> - help="Comma-separated list of the three colours to use" +
> + help="Comma-separated list of the three colors to use" +
> " to draw the top-level package, the target" +
> " packages, and the host packages, in this order." +
> " Defaults to: 'lightblue,grey,gainsboro'")
> @@ -353,12 +353,12 @@ def main():
> get_depends_func = brpkgutil.get_rdepends
> arrow_dir = "back"
>
> - # Get the colours: we need exactly three colours,
> + # Get the colors: we need exactly three colors,
> # so no need not split more than 4
> - # We'll let 'dot' validate the colours...
> - colours = args.colours.split(',', 4)
> - if len(colours) != 3:
> - sys.stderr.write("Error: incorrect colour list '%s'\n" % args.colours)
> + # We'll let 'dot' validate the colors...
> + colors = args.colors.split(',', 4)
> + if len(colors) != 3:
> + sys.stderr.write("Error: incorrect color list '%s'\n" % args.colors)
> sys.exit(1)
>
> # In full mode, start with the result of get_targets() to get the main
> @@ -403,7 +403,7 @@ def main():
> outfile.write("digraph G {\n")
>
> print_pkg_deps(outfile, dict_deps, dict_version, stop_list, exclude_list,
> - arrow_dir, 0, args.depth, rootpkg, colours)
> + arrow_dir, 0, args.depth, rootpkg, colors)
>
> outfile.write("}\n")
>
> --
> 2.14.3
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option
2018-03-31 16:35 ` [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option Thomas Petazzoni
@ 2018-03-31 21:27 ` Yann E. MORIN
0 siblings, 0 replies; 12+ messages in thread
From: Yann E. MORIN @ 2018-03-31 21:27 UTC (permalink / raw)
To: buildroot
Thomas, All,
On 2018-03-31 18:35 +0200, Thomas Petazzoni spake thusly:
> This will be useful for the upcoming recursive show-depends and
> show-rdepends features.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
> support/scripts/brpkgutil.py | 18 ++++++++++--------
> support/scripts/graph-depends | 22 +++++++++++++---------
> 2 files changed, 23 insertions(+), 17 deletions(-)
>
> diff --git a/support/scripts/brpkgutil.py b/support/scripts/brpkgutil.py
> index 4c99ae9110..7c70ae7cab 100644
> --- a/support/scripts/brpkgutil.py
> +++ b/support/scripts/brpkgutil.py
> @@ -6,8 +6,9 @@ import subprocess
>
> # Execute the "make <pkg>-show-version" command to get the version of a given
> # list of packages, and return the version formatted as a Python dictionary.
> -def get_version(pkgs):
> - sys.stderr.write("Getting version for %s\n" % pkgs)
> +def get_version(pkgs, quiet=False):
> + if not quiet:
> + sys.stderr.write("Getting version for %s\n" % pkgs)
Having all those 'quiet' being propagated everywhere is ugly... ;-)
Instead, I would have done something like:
def verbose_trace(.....):
sys.stderr.write(....)
def quite_trace(......):
pass
and then in main:
if needs_traces:
trace = verbose_trace
else
trace = quite_trace
and then everywhere you need to trace, just call trace(...)
Regards,
Yann E. MORIN.
> cmd = ["make", "-s", "--no-print-directory"]
> for pkg in pkgs:
> cmd.append("%s-show-version" % pkg)
> @@ -27,8 +28,9 @@ def get_version(pkgs):
> return version
>
>
> -def _get_depends(pkgs, rule):
> - sys.stderr.write("Getting dependencies for %s\n" % pkgs)
> +def _get_depends(pkgs, rule, quiet=False):
> + if not quiet:
> + sys.stderr.write("Getting dependencies for %s\n" % pkgs)
> cmd = ["make", "-s", "--no-print-directory"]
> for pkg in pkgs:
> cmd.append("%s-%s" % (pkg, rule))
> @@ -55,12 +57,12 @@ def _get_depends(pkgs, rule):
> # Execute the "make <pkg>-show-depends" command to get the list of
> # dependencies of a given list of packages, and return the list of
> # dependencies formatted as a Python dictionary.
> -def get_depends(pkgs):
> - return _get_depends(pkgs, 'show-depends')
> +def get_depends(pkgs, quiet=False):
> + return _get_depends(pkgs, 'show-depends', quiet)
>
>
> # Execute the "make <pkg>-show-rdepends" command to get the list of
> # reverse dependencies of a given list of packages, and return the
> # list of dependencies formatted as a Python dictionary.
> -def get_rdepends(pkgs):
> - return _get_depends(pkgs, 'show-rdepends')
> +def get_rdepends(pkgs, quiet=False):
> + return _get_depends(pkgs, 'show-rdepends', quiet)
> diff --git a/support/scripts/graph-depends b/support/scripts/graph-depends
> index dc265ae28c..3a60e478d4 100755
> --- a/support/scripts/graph-depends
> +++ b/support/scripts/graph-depends
> @@ -38,8 +38,9 @@ allpkgs = []
> # Execute the "make show-targets" command to get the list of the main
> # Buildroot PACKAGES and return it formatted as a Python list. This
> # list is used as the starting point for full dependency graphs
> -def get_targets():
> - sys.stderr.write("Getting targets\n")
> +def get_targets(quiet):
> + if not quiet:
> + sys.stderr.write("Getting targets\n")
> cmd = ["make", "-s", "--no-print-directory", "show-targets"]
> p = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
> output = p.communicate()[0].strip()
> @@ -55,7 +56,7 @@ def get_targets():
> # 'dependencies', which contains tuples of the form (pkg1 ->
> # pkg2_on_which_pkg1_depends, pkg3 -> pkg4_on_which_pkg3_depends) and
> # the function finally returns this list.
> -def get_all_depends(pkgs, get_depends_func):
> +def get_all_depends(pkgs, get_depends_func, quiet):
> dependencies = []
>
> # Filter the packages for which we already have the dependencies
> @@ -69,7 +70,7 @@ def get_all_depends(pkgs, get_depends_func):
> if len(filtered_pkgs) == 0:
> return []
>
> - depends = get_depends_func(filtered_pkgs)
> + depends = get_depends_func(filtered_pkgs, quiet)
>
> deps = set()
> for pkg in filtered_pkgs:
> @@ -85,7 +86,7 @@ def get_all_depends(pkgs, get_depends_func):
> deps.add(dep)
>
> if len(deps) != 0:
> - newdeps = get_all_depends(deps, get_depends_func)
> + newdeps = get_all_depends(deps, get_depends_func, quiet)
> if newdeps is not None:
> dependencies += newdeps
>
> @@ -311,6 +312,8 @@ def parse_args():
> help="Draw direct dependencies (the default)")
> parser.add_argument("--reverse", dest="direct", action='store_false',
> help="Draw reverse dependencies")
> + parser.add_argument("--quiet", '-q', dest="quiet", action='store_true',
> + help="Quiet")
> return parser.parse_args()
>
>
> @@ -364,7 +367,7 @@ def main():
> # In full mode, start with the result of get_targets() to get the main
> # targets and then use get_all_depends() for all targets
> if mode == MODE_FULL:
> - targets = get_targets()
> + targets = get_targets(args.quiet)
> dependencies = []
> allpkgs.append('all')
> filtered_targets = []
> @@ -374,7 +377,7 @@ def main():
> continue
> dependencies.append(('all', tg))
> filtered_targets.append(tg)
> - deps = get_all_depends(filtered_targets, get_depends_func)
> + deps = get_all_depends(filtered_targets, get_depends_func, args.quiet)
> if deps is not None:
> dependencies += deps
> rootpkg = 'all'
> @@ -382,7 +385,7 @@ def main():
> # In pkg mode, start directly with get_all_depends() on the requested
> # package
> elif mode == MODE_PKG:
> - dependencies = get_all_depends([rootpkg], get_depends_func)
> + dependencies = get_all_depends([rootpkg], get_depends_func, args.quiet)
>
> # Make the dependencies a dictionnary { 'pkg':[dep1, dep2, ...] }
> dict_deps = {}
> @@ -397,7 +400,8 @@ def main():
>
> dict_deps = remove_extra_deps(dict_deps, args.transitive)
> dict_version = brpkgutil.get_version([pkg for pkg in allpkgs
> - if pkg != "all" and not pkg.startswith("root")])
> + if pkg != "all" and not pkg.startswith("root")],
> + args.quiet)
>
> # Start printing the graph data
> outfile.write("digraph G {\n")
> --
> 2.14.3
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables
2018-03-31 16:35 ` [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables Thomas Petazzoni
@ 2018-04-01 17:59 ` Peter Korsgaard
0 siblings, 0 replies; 12+ messages in thread
From: Peter Korsgaard @ 2018-04-01 17:59 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:
> The graph-depends script had no main() function, and the main code was
> actually spread between the function definitions, which was a real
> mess.
> This commit moves the global code into a main() function, which allows
> to more easily follow the flow of the script. The argument parsing
> code is moved into a parse_args() function.
> Most of the global variables are removed, and are instead passed as
> argument when appropriate. This has the side-effect that the
> print_pkg_deps() function takes a lot of argument, but this is
> considered better than tons of global variables.
> The global variables that are removed are: max_depth, transitive,
> mode, root_colour, target_colour, host_colour, outfile, dict_deps,
> dict_version, stop_list, exclude_list, arrow_dir.
> The root_colour/target_colour/host_colour variables are entirely
> removed, and instead a single colours array is passed, and it's the
> function using the colors that actually uses the different entries in
> the array.
> The way the print_attrs() function determines if we're display the
> root node is not is changed. Instead of relying on the package name
> and the mode (which requires passing the root package name, and the
> mode), it relies on the depth: when the depth is 0, we're at the root
> node.
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours
2018-03-31 16:35 ` [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours Thomas Petazzoni
2018-03-31 21:22 ` Yann E. MORIN
@ 2018-04-01 17:59 ` Peter Korsgaard
1 sibling, 0 replies; 12+ messages in thread
From: Peter Korsgaard @ 2018-04-01 17:59 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:
> The graph-depends was not very consistent in colors vs. colours: some
> parts were using colours, some parts were using colors.
> Let's settle on the US spelling, colors.
> This change the user-visble option --colours to --colors, but it is
> unlikely that a lot of users customize the colors through
> BR2_GRAPH_DEPS_OPTS, so this user interface change is considered
> reasonable.
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option
2018-03-31 16:35 ` [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option Thomas Petazzoni
@ 2018-04-01 20:21 ` Peter Korsgaard
0 siblings, 0 replies; 12+ messages in thread
From: Peter Korsgaard @ 2018-04-01 20:21 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:
> From: George Redivo <george.redivo@datacom.ind.br>
> graph-depends currently spits out a graph in .dot format. However, as
> part of the upcoming introduction of <pkg>-show-recursive-depends and
> <pkg>-show-recursive-rdepends, we need graph-depends to be able to
> display a flat list.
> Signed-off-by: George Redivo <george.redivo@datacom.ind.br>
> [Thomas:
> - Rebase on top of graph-depends changes
> - Do not display the package name itself in the list, only its
> dependencies (or reverse dependencies)
> - Display the result on a single line, instead of one package per
> line, in order to match what <pkg>-show-depends and
> <pkg>-show-rdepends are doing today.]
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets
2018-03-31 16:35 ` [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets Thomas Petazzoni
@ 2018-04-01 20:21 ` Peter Korsgaard
0 siblings, 0 replies; 12+ messages in thread
From: Peter Korsgaard @ 2018-04-01 20:21 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:
> From: George Redivo <george.redivo@datacom.ind.br>
> This commit adds the support for <pkg>-show-recursive-depends and
> <pkg>-show-recursive-rdepends which respectively show the list of all
> dependencies or reverse dependencies for a given package. The existing
> show-depends and show-rdepends only show the first-level dependencies,
> while show-recursive-depends and show-recursive-rdepends show
> recursively the dependencies.
> It is worth mentioning that while show-recursive-depends really shows
> all dependencies, show-recursive-rdepends is a bit limited because the
> reverse dependencies of host packages are not properly accounted
> for. But that's a limitation that already exists in show-rdepends, and
> that cannot easily be solved.
> Signed-off-by: George Redivo <george.redivo@datacom.ind.br>
> [Thomas:
> - split from the patch that was also changing graph-depends
> - rename show-rrdepends to show-recursive-rdepends
> - add show-recursive-depends
> - don't create GRAPHS_DIR.]
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Committed, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-04-01 20:21 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-31 16:35 [Buildroot] [PATCH v2 0/5] Recursive show-depends and show-rdepends Thomas Petazzoni
2018-03-31 16:35 ` [Buildroot] [PATCH v2 1/5] support/scripts/graph-depends: remove global code and most global variables Thomas Petazzoni
2018-04-01 17:59 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 2/5] support/scripts/graph-depends: use colors instead of colours Thomas Petazzoni
2018-03-31 21:22 ` Yann E. MORIN
2018-04-01 17:59 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 3/5] support/scripts/graph-depends: add --quiet option Thomas Petazzoni
2018-03-31 21:27 ` Yann E. MORIN
2018-03-31 16:35 ` [Buildroot] [PATCH v2 4/5] support/scripts/graph-depends: add --flat-list option Thomas Petazzoni
2018-04-01 20:21 ` Peter Korsgaard
2018-03-31 16:35 ` [Buildroot] [PATCH v2 5/5] package/pkg-generic: add <pkg>-show-recursive-(r)depends targets Thomas Petazzoni
2018-04-01 20:21 ` Peter Korsgaard
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.