diff options
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 63 |
1 files changed, 42 insertions, 21 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 52a402cd91..0992ec4c2e 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -226,7 +226,7 @@ class BBCooker: | |||
226 | 226 | ||
227 | if fn: | 227 | if fn: |
228 | try: | 228 | try: |
229 | envdata = self.bb_cache.loadDataFull(fn, self.configuration.data) | 229 | envdata = self.bb_cache.loadDataFull(fn, self.get_file_appends(fn), self.configuration.data) |
230 | except IOError as e: | 230 | except IOError as e: |
231 | bb.msg.error(bb.msg.domain.Parsing, "Unable to read %s: %s" % (fn, e)) | 231 | bb.msg.error(bb.msg.domain.Parsing, "Unable to read %s: %s" % (fn, e)) |
232 | raise | 232 | raise |
@@ -637,7 +637,7 @@ class BBCooker: | |||
637 | self.buildSetVars() | 637 | self.buildSetVars() |
638 | 638 | ||
639 | # Load data into the cache for fn and parse the loaded cache data | 639 | # Load data into the cache for fn and parse the loaded cache data |
640 | the_data = self.bb_cache.loadDataFull(fn, self.configuration.data) | 640 | the_data = self.bb_cache.loadDataFull(fn, self.get_file_appends(fn), self.configuration.data) |
641 | self.bb_cache.setData(fn, buildfile, the_data) | 641 | self.bb_cache.setData(fn, buildfile, the_data) |
642 | self.bb_cache.handle_data(fn, self.status) | 642 | self.bb_cache.handle_data(fn, self.status) |
643 | 643 | ||
@@ -778,7 +778,6 @@ class BBCooker: | |||
778 | 778 | ||
779 | self.handleCollections( bb.data.getVar("BBFILE_COLLECTIONS", self.configuration.data, 1) ) | 779 | self.handleCollections( bb.data.getVar("BBFILE_COLLECTIONS", self.configuration.data, 1) ) |
780 | 780 | ||
781 | bb.msg.debug(1, bb.msg.domain.Collection, "collecting .bb files") | ||
782 | (filelist, masked) = self.collect_bbfiles() | 781 | (filelist, masked) = self.collect_bbfiles() |
783 | bb.data.renameVar("__depends", "__base_depends", self.configuration.data) | 782 | bb.data.renameVar("__depends", "__base_depends", self.configuration.data) |
784 | 783 | ||
@@ -817,7 +816,7 @@ class BBCooker: | |||
817 | return bbfiles | 816 | return bbfiles |
818 | 817 | ||
819 | def find_bbfiles( self, path ): | 818 | def find_bbfiles( self, path ): |
820 | """Find all the .bb files in a directory""" | 819 | """Find all the .bb and .bbappend files in a directory""" |
821 | from os.path import join | 820 | from os.path import join |
822 | 821 | ||
823 | found = [] | 822 | found = [] |
@@ -825,7 +824,7 @@ class BBCooker: | |||
825 | for ignored in ('SCCS', 'CVS', '.svn'): | 824 | for ignored in ('SCCS', 'CVS', '.svn'): |
826 | if ignored in dirs: | 825 | if ignored in dirs: |
827 | dirs.remove(ignored) | 826 | dirs.remove(ignored) |
828 | found += [join(dir, f) for f in files if f.endswith('.bb')] | 827 | found += [join(dir, f) for f in files if (f.endswith('.bb') or f.endswith('.bbappend'))] |
829 | 828 | ||
830 | return found | 829 | return found |
831 | 830 | ||
@@ -834,6 +833,8 @@ class BBCooker: | |||
834 | parsed, cached, skipped, masked = 0, 0, 0, 0 | 833 | parsed, cached, skipped, masked = 0, 0, 0, 0 |
835 | self.bb_cache = bb.cache.init(self) | 834 | self.bb_cache = bb.cache.init(self) |
836 | 835 | ||
836 | bb.msg.debug(1, bb.msg.domain.Collection, "collecting .bb files") | ||
837 | |||
837 | files = (data.getVar( "BBFILES", self.configuration.data, 1 ) or "").split() | 838 | files = (data.getVar( "BBFILES", self.configuration.data, 1 ) or "").split() |
838 | data.setVar("BBFILES", " ".join(files), self.configuration.data) | 839 | data.setVar("BBFILES", " ".join(files), self.configuration.data) |
839 | 840 | ||
@@ -848,9 +849,7 @@ class BBCooker: | |||
848 | for f in files: | 849 | for f in files: |
849 | if os.path.isdir(f): | 850 | if os.path.isdir(f): |
850 | dirfiles = self.find_bbfiles(f) | 851 | dirfiles = self.find_bbfiles(f) |
851 | if dirfiles: | 852 | newfiles.update(dirfiles) |
852 | newfiles.update(dirfiles) | ||
853 | continue | ||
854 | else: | 853 | else: |
855 | globbed = glob.glob(f) | 854 | globbed = glob.glob(f) |
856 | if not globbed and os.path.exists(f): | 855 | if not globbed and os.path.exists(f): |
@@ -859,23 +858,45 @@ class BBCooker: | |||
859 | 858 | ||
860 | bbmask = bb.data.getVar('BBMASK', self.configuration.data, 1) | 859 | bbmask = bb.data.getVar('BBMASK', self.configuration.data, 1) |
861 | 860 | ||
862 | if not bbmask: | 861 | if bbmask: |
863 | return (list(newfiles), 0) | 862 | try: |
864 | 863 | bbmask_compiled = re.compile(bbmask) | |
865 | try: | 864 | except sre_constants.error: |
866 | bbmask_compiled = re.compile(bbmask) | 865 | bb.msg.fatal(bb.msg.domain.Collection, "BBMASK is not a valid regular expression.") |
867 | except sre_constants.error: | ||
868 | bb.msg.fatal(bb.msg.domain.Collection, "BBMASK is not a valid regular expression.") | ||
869 | 866 | ||
870 | finalfiles = [] | 867 | bbfiles = [] |
868 | bbappend = [] | ||
871 | for f in newfiles: | 869 | for f in newfiles: |
872 | if bbmask_compiled.search(f): | 870 | if bbmask and bbmask_compiled.search(f): |
873 | bb.msg.debug(1, bb.msg.domain.Collection, "skipping masked file %s" % f) | 871 | bb.msg.debug(1, bb.msg.domain.Collection, "skipping masked file %s" % f) |
874 | masked += 1 | 872 | masked += 1 |
875 | continue | 873 | continue |
876 | finalfiles.append(f) | 874 | if f.endswith('.bb'): |
877 | 875 | bbfiles.append(f) | |
878 | return (finalfiles, masked) | 876 | elif f.endswith('.bbappend'): |
877 | bbappend.append(f) | ||
878 | else: | ||
879 | bb.msg.note(1, bb.msg.domain.Collection, "File %s of unknown filetype in BBFILES? Ignorning..." % f) | ||
880 | |||
881 | # Build a list of .bbappend files for each .bb file | ||
882 | self.appendlist = {} | ||
883 | for f in bbappend: | ||
884 | base = os.path.basename(f).replace('.bbappend', '.bb') | ||
885 | if not base in self.appendlist: | ||
886 | self.appendlist[base] = [] | ||
887 | self.appendlist[base].append(f) | ||
888 | |||
889 | return (bbfiles, masked) | ||
890 | |||
891 | def get_file_appends(self, fn): | ||
892 | """ | ||
893 | Returns a list of .bbappend files to apply to fn | ||
894 | NB: collect_files() must have been called prior to this | ||
895 | """ | ||
896 | f = os.path.basename(fn) | ||
897 | if f in self.appendlist: | ||
898 | return self.appendlist[f] | ||
899 | return [] | ||
879 | 900 | ||
880 | def serve(self): | 901 | def serve(self): |
881 | 902 | ||
@@ -945,7 +966,7 @@ class CookerParser: | |||
945 | f = self.filelist[self.pointer] | 966 | f = self.filelist[self.pointer] |
946 | 967 | ||
947 | try: | 968 | try: |
948 | fromCache, skipped, virtuals = cooker.bb_cache.loadData(f, cooker.configuration.data, cooker.status) | 969 | fromCache, skipped, virtuals = cooker.bb_cache.loadData(f, cooker.get_file_appends(f), cooker.configuration.data, cooker.status) |
949 | if fromCache: | 970 | if fromCache: |
950 | self.cached += 1 | 971 | self.cached += 1 |
951 | else: | 972 | else: |