Skip to content

Commit 1bfe67e

Browse files
committed
Handle 'ipp' as a template source file extension
This prevents include not-found errors. Template source files have dual nature since they are technically headers. Upon search lookup, these files are considered both the implementation and the second header file of a component. In other words, this is some nasty special case. Closes #31
1 parent 0dd9ff6 commit 1bfe67e

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

cppdep.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)