diff options
| -rw-r--r-- | bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml | 13 | ||||
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 98 |
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 | ||
