@@ -353,7 +353,7 @@ class Package(object):
353353 """
354354
355355 _RE_SRC = re .compile (r'(?i)\w+((?P<h>(\.h(h|xx|\+\+|pp)?)?)|'
356- r'(?P<c>\.c(c|xx|\+\+|pp)?))$' )
356+ r'(?P<c>\.(( c(c|xx|\+\+|pp)?)|ipp) ))$' )
357357
358358 def __init__ (self , name , group , src_paths , include_paths , alias_paths ,
359359 include_patterns , ignore_paths ):
@@ -542,8 +542,6 @@ class DependencyAnalysis(object):
542542
543543 Attributes:
544544 config: The configuration dictionary.
545- external_components: {hpath: ExternalComponent}
546- internal_components: {hpath: Component}
547545 external_groups: External dependency packages and package groups.
548546 {group_name: PackageGroup}
549547 internal_groups: The package groups of the project under analysis.
@@ -565,11 +563,11 @@ def __init__(self, config_file):
565563 InvalidArgumentError: The configuration has is invalid values.
566564 """
567565 self .config = None
568- self .external_components = {}
569- self .internal_components = {}
570566 self .external_groups = {}
571567 self .internal_groups = {}
572568 self .include_dirs = []
569+ self ._external_components = {} # {hpath: ExternalComponent}
570+ self ._internal_components = {} # {hpath: Component}
573571 self .__package_aliases = [] # Sorted [(alias_path, external_package)]
574572 self .__include_patterns = [] # [(package, [regex])]
575573 self .__parse_config (config_file )
@@ -683,21 +681,29 @@ def _find_external_package(hpath):
683681
684682 if hpath is None :
685683 return False
686- if package is None and hpath in self .internal_components :
687- dep_component = self .internal_components [hpath ]
684+ if package is None and hpath in self ._internal_components :
685+ dep_component = self ._internal_components [hpath ]
688686 if dep_component != component :
689687 component .dep_components .add (dep_component )
690688 else :
691- if hpath in self .external_components :
689+ if hpath in self ._external_components :
692690 component .dep_components .add (
693- self .external_components [hpath ])
691+ self ._external_components [hpath ])
694692 else :
695693 dep_component = ExternalComponent (
696694 hpath , package or _find_external_package (hpath ))
697695 component .dep_components .add (dep_component )
698- self .external_components [hpath ] = dep_component
696+ self ._external_components [hpath ] = dep_component
699697 return True
700698
699+ @property
700+ def internal_components (self ):
701+ """Yields components in internal groups."""
702+ for group in self .internal_groups .values ():
703+ for package in group .packages .values ():
704+ for component in package .components :
705+ yield component
706+
701707 def make_components (self ):
702708 """Pairs hfiles and cfiles.
703709
@@ -707,10 +713,14 @@ def make_components(self):
707713 for group in self .internal_groups .values ():
708714 for package in group .packages .values ():
709715 package .construct_components ()
710- self .internal_components .update (
711- (x .hpath or x .cpath , x ) for x in package .components )
712716
713- for component in self .internal_components .values ():
717+ for component in self .internal_components :
718+ id_path = component .hpath or component .cpath
719+ self ._internal_components [id_path ] = component
720+ if component .cpath and component .cpath .endswith ('.ipp' ):
721+ self ._internal_components [component .cpath ] = component
722+
723+ for component in self .internal_components :
714724 for include in itertools .chain (component .includes_in_h ,
715725 component .includes_in_c ):
716726 if not self .locate (include , component ):
0 commit comments