| 334 | |
| 335 | |
| 336 | def parse_ninja_deps(ninja_deps): |
| 337 | source_dependencies = {} |
| 338 | header_dependents = defaultdict(int) |
| 339 | current_target = None |
| 340 | for line in ninja_deps: |
| 341 | line = line.rstrip() |
| 342 | # Ignore empty lines |
| 343 | if not line: |
| 344 | current_target = None |
| 345 | continue |
| 346 | if line[0] == ' ': |
| 347 | # New dependency |
| 348 | if len(line) < 5 or line[0:4] != ' ' or line[5] == ' ': |
| 349 | sys.exit('Lines must have no indentation or exactly four ' + |
| 350 | 'spaces.') |
| 351 | dep = line[4:] |
| 352 | if not re.search(r"\.(h|hpp)$", dep): |
| 353 | continue |
| 354 | header_dependents[dep] += 1 |
| 355 | continue |
| 356 | # New target |
| 357 | colon_pos = line.find(':') |
| 358 | if colon_pos < 0: |
| 359 | sys.exit('Unindented line must have a colon') |
| 360 | if current_target is not None: |
| 361 | sys.exit('Missing empty line before new target') |
| 362 | current_target = line[0:colon_pos] |
| 363 | match = re.search(r"#deps (\d+)", line) |
| 364 | deps_number = match.group(1) |
| 365 | source_dependencies[current_target] = int(deps_number) |
| 366 | |
| 367 | return (source_dependencies, header_dependents) |
| 368 | |
| 369 | |
| 370 | def Main(): |