| # RUN: %{python} %s |
| |
| # Verify that each list of private submodules in libcxx/include/module.modulemap.in |
| # is maintained in alphabetical order. |
| |
| import os |
| import re |
| |
| |
| if __name__ == '__main__': |
| libcxx_test_libcxx_lint = os.path.dirname(os.path.abspath(__file__)) |
| libcxx = os.path.abspath(os.path.join(libcxx_test_libcxx_lint, '../../..')) |
| modulemap_name = os.path.join(libcxx, 'include/module.modulemap.in') |
| assert os.path.isfile(modulemap_name) |
| |
| okay = True |
| prevline = None |
| with open(modulemap_name, 'r') as f: |
| for line in f.readlines(): |
| if re.match(r'^\s*module.*[{]\s*private', line): |
| # Check that these lines are all of the expected format. |
| # This incidentally checks for typos in the module name. |
| if re.match(r'^\s*module (\w+)\s+[{] private header "\1(.h)?"\s+export [*] [}]', line): |
| # It's a top-level private header, such as <__bit_reference>. |
| pass |
| elif re.match(r'^\s*module (\w+)\s+[{] private header "__\w+/\1[.]h" [}]', line): |
| # It's a private submodule, such as <__utility/swap.h>. |
| pass |
| elif re.match(r'^\s*module (\w+)_fwd\s+[{] private header "__fwd/\1[.]h" [}]', line): |
| # It's a private submodule with forward declarations, such as <__fwd/span.h>. |
| pass |
| else: |
| okay = False |
| print("LINE DOESN'T MATCH REGEX in libcxx/include/module.modulemap.in!") |
| print(line) |
| # Check that these lines are alphabetized. |
| if (prevline is not None) and (line < prevline): |
| okay = False |
| print('LINES OUT OF ORDER in libcxx/include/module.modulemap.in!') |
| print(prevline) |
| print(line) |
| prevline = line |
| else: |
| prevline = None |
| assert okay |