diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -142,6 +142,8 @@ git diff | tee ${BUILD_DIR}/generated_output.patch # Check if the diffs are empty, fail otherwise. ! grep -q '^--- a' ${BUILD_DIR}/generated_output.patch + # Check that no dependency cycles have been introduced. + python3 libcxx/utils/graph_header_deps.py >/dev/null ;; generic-cxx03) export CC=clang diff --git a/libcxx/utils/graph_header_deps.py b/libcxx/utils/graph_header_deps.py --- a/libcxx/utils/graph_header_deps.py +++ b/libcxx/utils/graph_header_deps.py @@ -10,6 +10,7 @@ import argparse import os import re +import sys def is_config_header(h): @@ -61,14 +62,18 @@ system_includes = [] linecount = 0 with open(fname, 'r') as f: - for line in f.readlines(): - linecount += 1 - m = re.match(r'\s*#\s*include\s+"([^"]*)"', line) - if m is not None: - local_includes.append(m.group(1)) - m = re.match(r'\s*#\s*include\s+<([^>]*)>', line) - if m is not None: - system_includes.append(m.group(1)) + try: + for line in f.readlines(): + linecount += 1 + m = re.match(r'\s*#\s*include\s+"([^"]*)"', line) + if m is not None: + local_includes.append(m.group(1)) + m = re.match(r'\s*#\s*include\s+<([^>]*)>', line) + if m is not None: + system_includes.append(m.group(1)) + except UnicodeDecodeError as e: + sys.stderr.write('Non-ASCII detected in %s\n' % fname) + raise fully_qualified_includes = [ locate_header_file(h, options.search_dirs)