| #!/usr/bin/env python3 |
| |
| """This script splits httplib.h into .h and .cc parts.""" |
| |
| import os |
| import sys |
| from argparse import ArgumentParser, Namespace |
| from typing import List |
| |
| |
| def main() -> None: |
| """Main entry point for the script.""" |
| BORDER: str = '// ----------------------------------------------------------------------------' |
| |
| args_parser: ArgumentParser = ArgumentParser(description=__doc__) |
| args_parser.add_argument( |
| "-e", "--extension", help="extension of the implementation file (default: cc)", |
| default="cc" |
| ) |
| args_parser.add_argument( |
| "-o", "--out", help="where to write the files (default: out)", default="out" |
| ) |
| args: Namespace = args_parser.parse_args() |
| |
| cur_dir: str = os.path.dirname(sys.argv[0]) |
| if not cur_dir: |
| cur_dir = '.' |
| lib_name: str = 'httplib' |
| header_name: str = f"/{lib_name}.h" |
| source_name: str = f"/{lib_name}.{args.extension}" |
| # get the input file |
| in_file: str = cur_dir + header_name |
| # get the output file |
| h_out: str = args.out + header_name |
| cc_out: str = args.out + source_name |
| |
| # if the modification time of the out file is after the in file, |
| # don't split (as it is already finished) |
| do_split: bool = True |
| |
| if os.path.exists(h_out): |
| in_time: float = os.path.getmtime(in_file) |
| out_time: float = os.path.getmtime(h_out) |
| do_split: bool = in_time > out_time |
| |
| if do_split: |
| with open(in_file) as f: |
| lines: List[str] = f.readlines() |
| |
| os.makedirs(args.out, exist_ok=True) |
| |
| in_implementation: bool = False |
| cc_out: str = args.out + source_name |
| with open(h_out, 'w') as fh, open(cc_out, 'w') as fc: |
| fc.write('#include "httplib.h"\n') |
| fc.write('namespace httplib {\n') |
| for line in lines: |
| is_border_line: bool = BORDER in line |
| if is_border_line: |
| in_implementation: bool = not in_implementation |
| elif in_implementation: |
| fc.write(line.replace('inline ', '')) |
| else: |
| fh.write(line) |
| fc.write('} // namespace httplib\n') |
| |
| print(f"Wrote {h_out} and {cc_out}") |
| else: |
| print(f"{h_out} and {cc_out} are up to date") |
| |
| |
| if __name__ == "__main__": |
| main() |