1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/env python3
- import pathlib
- import sys
- include_dir = pathlib.Path(sys.argv[1]) / "include"
- sysicncl_path = pathlib.Path(sys.argv[2])
- sysincl = open(sysicncl_path).read()
- GENERATED_BEG = "# GENERATED BY YM2\n"
- GENERATED_END = "# END OF GENERATION\n"
- assert sysincl.count("# GENERATED BY YM2") == 1
- assert sysincl.count("# END OF GENERATION") == 1
- headers = []
- ext_headers = []
- expr_headers = []
- for header in include_dir.glob("**/*"):
- if not header.is_file():
- continue
- rel_path = header.relative_to(include_dir)
- if header.parent == include_dir:
- if header.name.startswith("__") or not '.' in header.name:
- headers.append(str(rel_path))
- else:
- str_path = str(rel_path)
- if str_path.startswith('experimental'):
- expr_headers.append(str_path)
- elif str_path.startswith('ext'):
- ext_headers.append(str_path)
- else:
- headers.append(str_path)
- headers = sorted(headers, key = lambda header: (header.count('/') != 0, header.count('__') != 0, header))
- ext_headers = sorted(ext_headers)
- expr_headers = sorted(expr_headers)
- manual, generated = sysincl.split(GENERATED_BEG)
- generated, manual_end = generated.split(GENERATED_END)
- generated = []
- banned_generated = []
- for header in ext_headers + expr_headers:
- banned_generated.append(
- " - {name}:{spaces}DO_NOT_INCLUDE_NON_STANDARD_{banned_name}".format(
- name=str(header),
- spaces=' ' * max(1, 54 - len(header)),
- banned_name=header.replace('/', '_').replace('.', '_').upper(),
- )
- )
- if "experimental/propagate_const" == header:
- banned_generated[-1] = "#TODO: ban this header too\n#" + banned_generated[-1]
- for header in headers:
- generated.append(
- " - {name}:{spaces}contrib/libs/cxxsupp/libcxx/include/{name}".format(
- name=header,
- spaces=' ' * max(1, 54 - len(header))
- )
- )
- generated = """- source_filter: "^(?!(contrib/libs/cxxsupp/libcxx)).*"
- includes:
- """ \
- + '\n'.join(banned_generated) \
- + """
- # This includes all headers needed to resolve includes in c-headers from libcxx listed above
- - includes:
- """ \
- + '\n'.join(generated)
- with open(sysicncl_path, 'w') as f:
- f.write(f"{manual}{GENERATED_BEG}{generated}\n{GENERATED_END}{manual_end}")
|