123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # Copyright 2019 Hans Dembinski, Henry Schreiner
- #
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE_1_0.txt
- # or copy at http://www.boost.org/LICENSE_1_0.txt)
- import os
- import sys
- import re
- this_path = os.path.dirname(__file__)
- all_headers = set()
- include_path = os.path.join(this_path, "..", "include")
- for root, dirs, files in os.walk(include_path):
- for fn in files:
- fn = os.path.join(root, fn)
- assert fn.startswith(include_path)
- fn = fn[len(include_path) + 1 :]
- all_headers.add(fn)
- def get_headers(filename):
- with open(filename) as f:
- for hdr in re.findall('^#include [<"]([^>"]+)[>"]', f.read(), re.MULTILINE):
- if not hdr.startswith("boost/histogram"):
- continue
- yield hdr.replace("/", os.path.sep) # adapt the paths for Windows
- included_headers = set()
- unread_headers = set()
- for hdr in get_headers(os.path.join(this_path, "odr_test.cpp")):
- unread_headers.add(hdr)
- while unread_headers:
- included_headers.update(unread_headers)
- for hdr in tuple(unread_headers): # copy needed because unread_headers is modified
- unread_headers.remove(hdr)
- for hdr2 in get_headers(os.path.join(include_path, hdr)):
- if hdr2 not in included_headers:
- unread_headers.add(hdr2)
- diff = sorted(all_headers - set(included_headers))
- if not diff:
- sys.exit(0)
- print("Header not included in odr_test.cpp:")
- for fn in diff:
- print(fn)
- sys.exit(1)
|