blob: 8805ee6252ae16c899a1223688fb8bc7566ad96c [file] [log] [blame]
# RUN: %{python} %s
# Verify that each run of consecutive #include directives
# in each libcxx/include/ header is maintained in alphabetical order.
import glob
import os
import re
def exclude_from_consideration(path):
return (
path.endswith('.txt') or
path.endswith('.modulemap.in') or
os.path.basename(path) == '__config' or
os.path.basename(path) == '__config_site.in' or
not os.path.isfile(path)
)
def check_for_pragma_GCC_system_header(pretty_fname, lines):
if pretty_fname not in ['__undef_macros']:
for line in lines:
if re.match('# *pragma GCC system_header\n', line):
return True
print('FAILED TO FIND # pragma GCC system_header in libcxx/include/%s' % pretty_fname)
return False
return True
if __name__ == '__main__':
libcxx_test_libcxx_lint = os.path.dirname(os.path.abspath(__file__))
libcxx_include = os.path.abspath(os.path.join(libcxx_test_libcxx_lint, '../../../include'))
assert os.path.isdir(libcxx_include)
def pretty(path):
return path[len(libcxx_include) + 1:]
all_headers = [
p for p in (
glob.glob(os.path.join(libcxx_include, '*')) +
glob.glob(os.path.join(libcxx_include, '__*/*.h'))
) if not exclude_from_consideration(p)
]
okay = True
for fname in all_headers:
pretty_fname = pretty(fname)
with open(fname, 'r') as f:
lines = f.readlines()
okay = check_for_pragma_GCC_system_header(pretty_fname, lines) and okay
assert okay