diff options
| -rwxr-xr-x | bitbake/bin/bitbake-layers | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/bitbake/bin/bitbake-layers b/bitbake/bin/bitbake-layers index 2a7f82998b..826a3e7a57 100755 --- a/bitbake/bin/bitbake-layers +++ b/bitbake/bin/bitbake-layers | |||
| @@ -566,26 +566,29 @@ Recipes are listed with the bbappends that apply to them as subitems. | |||
| 566 | def do_show_cross_depends(self, args): | 566 | def do_show_cross_depends(self, args): |
| 567 | """figure out the dependency between recipes that crosses a layer boundary. | 567 | """figure out the dependency between recipes that crosses a layer boundary. |
| 568 | 568 | ||
| 569 | usage: show-cross-depends [-f] | 569 | usage: show-cross-depends [-f] [-i layer1[,layer2[,layer3...]]] |
| 570 | 570 | ||
| 571 | Figure out the dependency between recipes that crosses a layer boundary. | 571 | Figure out the dependency between recipes that crosses a layer boundary. |
| 572 | 572 | ||
| 573 | Options: | 573 | Options: |
| 574 | -f show full file path | 574 | -f show full file path |
| 575 | -i ignore dependencies on items in the specified layer(s) | ||
| 575 | 576 | ||
| 576 | NOTE: | 577 | NOTE: |
| 577 | The .bbappend file can impact the dependency. | 578 | The .bbappend file can impact the dependency. |
| 578 | """ | 579 | """ |
| 579 | self.init_bbhandler() | 580 | import optparse |
| 580 | 581 | ||
| 581 | show_filenames = False | 582 | parser = optparse.OptionParser(usage="show-cross-depends [-f] [-i layer1[,layer2[,layer3...]]]") |
| 582 | for arg in args.split(): | 583 | parser.add_option("-f", "", |
| 583 | if arg == '-f': | 584 | action="store_true", dest="show_filenames") |
| 584 | show_filenames = True | 585 | parser.add_option("-i", "", |
| 585 | else: | 586 | action="store", dest="ignore_layers", default="") |
| 586 | sys.stderr.write("show-cross-depends: invalid option %s\n" % arg) | 587 | |
| 587 | self.do_help('') | 588 | options, args = parser.parse_args(sys.argv) |
| 588 | return | 589 | ignore_layers = options.ignore_layers.split(',') |
| 590 | |||
| 591 | self.init_bbhandler() | ||
| 589 | 592 | ||
| 590 | pkg_fn = self.bbhandler.cooker_data.pkg_fn | 593 | pkg_fn = self.bbhandler.cooker_data.pkg_fn |
| 591 | bbpath = str(self.bbhandler.config_data.getVar('BBPATH', True)) | 594 | bbpath = str(self.bbhandler.config_data.getVar('BBPATH', True)) |
| @@ -607,7 +610,7 @@ The .bbappend file can impact the dependency. | |||
| 607 | self.bbhandler.config_data, | 610 | self.bbhandler.config_data, |
| 608 | self.bbhandler.cooker_data, | 611 | self.bbhandler.cooker_data, |
| 609 | self.bbhandler.cooker_data.pkg_pn) | 612 | self.bbhandler.cooker_data.pkg_pn) |
| 610 | self.check_cross_depends("DEPENDS", layername, f, best[3], show_filenames) | 613 | self.check_cross_depends("DEPENDS", layername, f, best[3], options.show_filenames, ignore_layers) |
| 611 | 614 | ||
| 612 | # The RDPENDS | 615 | # The RDPENDS |
| 613 | all_rdeps = self.bbhandler.cooker_data.rundeps[f].values() | 616 | all_rdeps = self.bbhandler.cooker_data.rundeps[f].values() |
| @@ -624,7 +627,7 @@ The .bbappend file can impact the dependency. | |||
| 624 | best = bb.providers.filterProvidersRunTime(all_p, rdep, | 627 | best = bb.providers.filterProvidersRunTime(all_p, rdep, |
| 625 | self.bbhandler.config_data, | 628 | self.bbhandler.config_data, |
| 626 | self.bbhandler.cooker_data)[0][0] | 629 | self.bbhandler.cooker_data)[0][0] |
| 627 | self.check_cross_depends("RDEPENDS", layername, f, best, show_filenames) | 630 | self.check_cross_depends("RDEPENDS", layername, f, best, options.show_filenames, ignore_layers) |
| 628 | 631 | ||
| 629 | # The inherit class | 632 | # The inherit class |
| 630 | cls_re = re.compile('classes/') | 633 | cls_re = re.compile('classes/') |
| @@ -635,8 +638,8 @@ The .bbappend file can impact the dependency. | |||
| 635 | # ignore the classes/cls. | 638 | # ignore the classes/cls. |
| 636 | if not cls_re.match(cls): | 639 | if not cls_re.match(cls): |
| 637 | inherit_layername = self.get_file_layer(cls) | 640 | inherit_layername = self.get_file_layer(cls) |
| 638 | if inherit_layername != layername: | 641 | if inherit_layername != layername and not inherit_layername in ignore_layers: |
| 639 | if not show_filenames: | 642 | if not options.show_filenames: |
| 640 | f_short = self.remove_layer_prefix(f) | 643 | f_short = self.remove_layer_prefix(f) |
| 641 | cls = self.remove_layer_prefix(cls) | 644 | cls = self.remove_layer_prefix(cls) |
| 642 | else: | 645 | else: |
| @@ -656,7 +659,7 @@ The .bbappend file can impact the dependency. | |||
| 656 | if pv_re.search(needed_file) and f in self.bbhandler.cooker_data.pkg_pepvpr: | 659 | if pv_re.search(needed_file) and f in self.bbhandler.cooker_data.pkg_pepvpr: |
| 657 | pv = self.bbhandler.cooker_data.pkg_pepvpr[f][1] | 660 | pv = self.bbhandler.cooker_data.pkg_pepvpr[f][1] |
| 658 | needed_file = re.sub(r"\${PV}", pv, needed_file) | 661 | needed_file = re.sub(r"\${PV}", pv, needed_file) |
| 659 | self.print_cross_files(bbpath, keyword, layername, f, needed_file, show_filenames) | 662 | self.print_cross_files(bbpath, keyword, layername, f, needed_file, options.show_filenames, ignore_layers) |
| 660 | line = fnfile.readline() | 663 | line = fnfile.readline() |
| 661 | fnfile.close() | 664 | fnfile.close() |
| 662 | 665 | ||
| @@ -683,21 +686,22 @@ The .bbappend file can impact the dependency. | |||
| 683 | bbclass=".bbclass" | 686 | bbclass=".bbclass" |
| 684 | # Find a 'require/include xxxx' | 687 | # Find a 'require/include xxxx' |
| 685 | if m: | 688 | if m: |
| 686 | self.print_cross_files(bbpath, keyword, layername, f, m.group(1) + bbclass, show_filenames) | 689 | self.print_cross_files(bbpath, keyword, layername, f, m.group(1) + bbclass, options.show_filenames, ignore_layers) |
| 687 | line = ffile.readline() | 690 | line = ffile.readline() |
| 688 | ffile.close() | 691 | ffile.close() |
| 689 | 692 | ||
| 690 | def print_cross_files(self, bbpath, keyword, layername, f, needed_filename, show_filenames): | 693 | def print_cross_files(self, bbpath, keyword, layername, f, needed_filename, show_filenames, ignore_layers): |
| 691 | """Print the depends that crosses a layer boundary""" | 694 | """Print the depends that crosses a layer boundary""" |
| 692 | needed_file = bb.utils.which(bbpath, needed_filename) | 695 | needed_file = bb.utils.which(bbpath, needed_filename) |
| 693 | if needed_file: | 696 | if needed_file: |
| 694 | # Which layer is this file from | 697 | # Which layer is this file from |
| 695 | needed_layername = self.get_file_layer(needed_file) | 698 | needed_layername = self.get_file_layer(needed_file) |
| 696 | if needed_layername != layername: | 699 | if needed_layername != layername and not needed_layername in ignore_layers: |
| 697 | if not show_filenames: | 700 | if not show_filenames: |
| 698 | f = self.remove_layer_prefix(f) | 701 | f = self.remove_layer_prefix(f) |
| 699 | needed_file = self.remove_layer_prefix(needed_file) | 702 | needed_file = self.remove_layer_prefix(needed_file) |
| 700 | logger.plain("%s %s %s" %(f, keyword, needed_file)) | 703 | logger.plain("%s %s %s" %(f, keyword, needed_file)) |
| 704 | |||
| 701 | def match_inherit(self, line): | 705 | def match_inherit(self, line): |
| 702 | """Match the inherit xxx line""" | 706 | """Match the inherit xxx line""" |
| 703 | return (self.inherit_re.match(line), "inherits") | 707 | return (self.inherit_re.match(line), "inherits") |
| @@ -711,11 +715,11 @@ The .bbappend file can impact the dependency. | |||
| 711 | keyword = "includes" | 715 | keyword = "includes" |
| 712 | return (m, keyword) | 716 | return (m, keyword) |
| 713 | 717 | ||
| 714 | def check_cross_depends(self, keyword, layername, f, needed_file, show_filenames): | 718 | def check_cross_depends(self, keyword, layername, f, needed_file, show_filenames, ignore_layers): |
| 715 | """Print the DEPENDS/RDEPENDS file that crosses a layer boundary""" | 719 | """Print the DEPENDS/RDEPENDS file that crosses a layer boundary""" |
| 716 | best_realfn = bb.cache.Cache.virtualfn2realfn(needed_file)[0] | 720 | best_realfn = bb.cache.Cache.virtualfn2realfn(needed_file)[0] |
| 717 | needed_layername = self.get_file_layer(best_realfn) | 721 | needed_layername = self.get_file_layer(best_realfn) |
| 718 | if needed_layername != layername: | 722 | if needed_layername != layername and not needed_layername in ignore_layers: |
| 719 | if not show_filenames: | 723 | if not show_filenames: |
| 720 | f = self.remove_layer_prefix(f) | 724 | f = self.remove_layer_prefix(f) |
| 721 | best_realfn = self.remove_layer_prefix(best_realfn) | 725 | best_realfn = self.remove_layer_prefix(best_realfn) |
