mirror of
https://github.com/boostorg/openmethod.git
synced 2026-01-19 04:22:12 +00:00
48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
#!/usr/bin/python3
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
import re
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("output", type=Path)
|
|
parser.add_argument("input", nargs="+", type=Path)
|
|
args = parser.parse_args()
|
|
|
|
prefix = args.input[0].absolute()
|
|
|
|
while prefix.name != "boost":
|
|
assert prefix.parent != prefix
|
|
prefix = prefix.parent
|
|
|
|
prefix = prefix.parent
|
|
skip = len(str(prefix)) + 1
|
|
|
|
|
|
def flatten(input, output, done):
|
|
header = str(input)[skip:]
|
|
if header in done:
|
|
return
|
|
done.add(header)
|
|
with input.open() as ifh:
|
|
for line in ifh:
|
|
if input.name != "openmethod.hpp" and re.match(
|
|
r"#include <(boost/openmethod/core\.hpp+)>", line
|
|
):
|
|
continue
|
|
|
|
if m := re.match(r"#include <(boost/openmethod/[^>]+)>", line):
|
|
include = m[1]
|
|
print(file=output)
|
|
flatten(prefix / include, output, done)
|
|
print(file=output)
|
|
continue
|
|
|
|
output.write(line)
|
|
|
|
|
|
with args.output.open("w") as ofh:
|
|
done = set()
|
|
for input in args.input:
|
|
flatten(input.absolute(), ofh, done)
|