summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbitbake/bin/bitbake-layers44
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
569usage: show-cross-depends [-f] 569usage: show-cross-depends [-f] [-i layer1[,layer2[,layer3...]]]
570 570
571Figure out the dependency between recipes that crosses a layer boundary. 571Figure out the dependency between recipes that crosses a layer boundary.
572 572
573Options: 573Options:
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
576NOTE: 577NOTE:
577The .bbappend file can impact the dependency. 578The .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)