summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml13
-rw-r--r--bitbake/lib/bb/cooker.py98
2 files changed, 49 insertions, 62 deletions
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml
index d602c469b0..daf5b35b6a 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml
@@ -666,19 +666,14 @@
666 </para> 666 </para>
667 667
668 <para> 668 <para>
669 When you generate a dependency graph, BitBake writes four files 669 When you generate a dependency graph, BitBake writes three files
670 to the current working directory: 670 to the current working directory:
671 <itemizedlist> 671 <itemizedlist>
672 <listitem><para><emphasis><filename>package-depends.dot</filename>:</emphasis> 672 <listitem><para><emphasis><filename>recipe-depends.dot</filename>:</emphasis>
673 Shows BitBake's knowledge of dependencies between 673 Shows dependencies between recipes (a collapsed version of task-depends.dot).
674 runtime targets.
675 </para></listitem>
676 <listitem><para><emphasis><filename>pn-depends.dot</filename>:</emphasis>
677 Shows dependencies between build-time targets
678 (i.e. recipes).
679 </para></listitem> 674 </para></listitem>
680 <listitem><para><emphasis><filename>task-depends.dot</filename>:</emphasis> 675 <listitem><para><emphasis><filename>task-depends.dot</filename>:</emphasis>
681 Shows dependencies between tasks. 676 Shows dependencies between tasks. This matches bitbake's internal task execution list.
682 </para></listitem> 677 </para></listitem>
683 <listitem><para><emphasis><filename>pn-buildlist</filename>:</emphasis> 678 <listitem><para><emphasis><filename>pn-buildlist</filename>:</emphasis>
684 Shows a simple list of targets that are to be built. 679 Shows a simple list of targets that are to be built.
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index fd1c629188..ce84e1c745 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -947,62 +947,54 @@ class BBCooker:
947 947
948 depgraph = self.generateTaskDepTreeData(pkgs_to_build, task) 948 depgraph = self.generateTaskDepTreeData(pkgs_to_build, task)
949 949
950 # Prints a flattened form of package-depends below where subpackages of a package are merged into the main pn 950 with open('pn-buildlist', 'w') as f:
951 depends_file = open('pn-depends.dot', 'w' ) 951 for pn in depgraph["pn"]:
952 buildlist_file = open('pn-buildlist', 'w' ) 952 f.write(pn + "\n")
953 print("digraph depends {", file=depends_file)
954 for pn in depgraph["pn"]:
955 fn = depgraph["pn"][pn]["filename"]
956 version = depgraph["pn"][pn]["version"]
957 print('"%s" [label="%s %s\\n%s"]' % (pn, pn, version, fn), file=depends_file)
958 print("%s" % pn, file=buildlist_file)
959 buildlist_file.close()
960 logger.info("PN build list saved to 'pn-buildlist'") 953 logger.info("PN build list saved to 'pn-buildlist'")
961 for pn in depgraph["depends"]: 954
962 for depend in depgraph["depends"][pn]: 955 # Remove old format output files to ensure no confusion with stale data
963 print('"%s" -> "%s" [style=solid]' % (pn, depend), file=depends_file) 956 try:
964 for pn in depgraph["rdepends-pn"]: 957 os.unlink('pn-depends.dot')
965 for rdepend in depgraph["rdepends-pn"][pn]: 958 except FileNotFoundError:
966 print('"%s" -> "%s" [style=dashed]' % (pn, rdepend), file=depends_file) 959 pass
967 print("}", file=depends_file) 960 try:
968 depends_file.close() 961 os.unlink('package-depends.dot')
969 logger.info("PN dependencies saved to 'pn-depends.dot'") 962 except FileNotFoundError:
970 963 pass
971 depends_file = open('package-depends.dot', 'w' ) 964
972 print("digraph depends {", file=depends_file) 965 with open('task-depends.dot', 'w') as f:
973 for package in depgraph["packages"]: 966 f.write("digraph depends {\n")
974 pn = depgraph["packages"][package]["pn"] 967 for task in depgraph["tdepends"]:
975 fn = depgraph["packages"][package]["filename"] 968 (pn, taskname) = task.rsplit(".", 1)
976 version = depgraph["packages"][package]["version"] 969 fn = depgraph["pn"][pn]["filename"]
977 if package == pn: 970 version = depgraph["pn"][pn]["version"]
978 print('"%s" [label="%s %s\\n%s"]' % (pn, pn, version, fn), file=depends_file) 971 f.write('"%s.%s" [label="%s %s\\n%s\\n%s"]\n' % (pn, taskname, pn, taskname, version, fn))
979 else: 972 for dep in depgraph["tdepends"][task]:
980 print('"%s" [label="%s(%s) %s\\n%s"]' % (package, package, pn, version, fn), file=depends_file) 973 f.write('"%s" -> "%s"\n' % (task, dep))
981 for depend in depgraph["depends"][pn]: 974 f.write("}\n")
982 print('"%s" -> "%s" [style=solid]' % (package, depend), file=depends_file)
983 for package in depgraph["rdepends-pkg"]:
984 for rdepend in depgraph["rdepends-pkg"][package]:
985 print('"%s" -> "%s" [style=dashed]' % (package, rdepend), file=depends_file)
986 for package in depgraph["rrecs-pkg"]:
987 for rdepend in depgraph["rrecs-pkg"][package]:
988 print('"%s" -> "%s" [style=dotted]' % (package, rdepend), file=depends_file)
989 print("}", file=depends_file)
990 depends_file.close()
991 logger.info("Package dependencies saved to 'package-depends.dot'")
992
993 tdepends_file = open('task-depends.dot', 'w' )
994 print("digraph depends {", file=tdepends_file)
995 for task in depgraph["tdepends"]:
996 (pn, taskname) = task.rsplit(".", 1)
997 fn = depgraph["pn"][pn]["filename"]
998 version = depgraph["pn"][pn]["version"]
999 print('"%s.%s" [label="%s %s\\n%s\\n%s"]' % (pn, taskname, pn, taskname, version, fn), file=tdepends_file)
1000 for dep in depgraph["tdepends"][task]:
1001 print('"%s" -> "%s"' % (task, dep), file=tdepends_file)
1002 print("}", file=tdepends_file)
1003 tdepends_file.close()
1004 logger.info("Task dependencies saved to 'task-depends.dot'") 975 logger.info("Task dependencies saved to 'task-depends.dot'")
1005 976
977 with open('recipe-depends.dot', 'w') as f:
978 f.write("digraph depends {\n")
979 pndeps = {}
980 for task in depgraph["tdepends"]:
981 (pn, taskname) = task.rsplit(".", 1)
982 if pn not in pndeps:
983 pndeps[pn] = set()
984 for dep in depgraph["tdepends"][task]:
985 (deppn, deptaskname) = dep.rsplit(".", 1)
986 pndeps[pn].add(deppn)
987 for pn in pndeps:
988 fn = depgraph["pn"][pn]["filename"]
989 version = depgraph["pn"][pn]["version"]
990 f.write('"%s" [label="%s\\n%s\\n%s"]\n' % (pn, pn, version, fn))
991 for dep in pndeps[pn]:
992 if dep == pn:
993 continue
994 f.write('"%s" -> "%s"\n' % (pn, dep))
995 f.write("}\n")
996 logger.info("Flatened recipe dependencies saved to 'recipe-depends.dot'")
997
1006 def show_appends_with_no_recipes(self): 998 def show_appends_with_no_recipes(self):
1007 # Determine which bbappends haven't been applied 999 # Determine which bbappends haven't been applied
1008 1000