|
@@ -2,66 +2,72 @@
|
|
|
|
|
|
|
|
"""This script splits httplib.h into .h and .cc parts."""
|
|
"""This script splits httplib.h into .h and .cc parts."""
|
|
|
|
|
|
|
|
-import argparse
|
|
|
|
|
import os
|
|
import os
|
|
|
import sys
|
|
import sys
|
|
|
|
|
+from argparse import ArgumentParser, Namespace
|
|
|
|
|
+from typing import List
|
|
|
|
|
|
|
|
-border = '// ----------------------------------------------------------------------------'
|
|
|
|
|
|
|
|
|
|
-args_parser = argparse.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 = args_parser.parse_args()
|
|
|
|
|
|
|
+def main() -> None:
|
|
|
|
|
+ """Main entry point for the script."""
|
|
|
|
|
+ BORDER: str = '// ----------------------------------------------------------------------------'
|
|
|
|
|
|
|
|
-cur_dir = os.path.dirname(sys.argv[0])
|
|
|
|
|
-lib_name = 'httplib'
|
|
|
|
|
-header_name = '/' + lib_name + '.h'
|
|
|
|
|
-source_name = '/' + lib_name + '.' + args.extension
|
|
|
|
|
-# get the input file
|
|
|
|
|
-in_file = cur_dir + header_name
|
|
|
|
|
-# get the output file
|
|
|
|
|
-h_out = args.out + header_name
|
|
|
|
|
-cc_out = args.out + source_name
|
|
|
|
|
|
|
+ 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()
|
|
|
|
|
|
|
|
-# if the modification time of the out file is after the in file,
|
|
|
|
|
-# don't split (as it is already finished)
|
|
|
|
|
-do_split = True
|
|
|
|
|
|
|
+ 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 os.path.exists(h_out):
|
|
|
|
|
- in_time = os.path.getmtime(in_file)
|
|
|
|
|
- out_time = os.path.getmtime(h_out)
|
|
|
|
|
- do_split = in_time > out_time
|
|
|
|
|
|
|
+ # 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 do_split:
|
|
|
|
|
- with open(in_file) as f:
|
|
|
|
|
- lines = f.readlines()
|
|
|
|
|
|
|
+ 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()
|
|
|
|
|
|
|
|
- python_version = sys.version_info[0]
|
|
|
|
|
- if python_version < 3:
|
|
|
|
|
- os.makedirs(args.out)
|
|
|
|
|
- else:
|
|
|
|
|
os.makedirs(args.out, exist_ok=True)
|
|
os.makedirs(args.out, exist_ok=True)
|
|
|
|
|
|
|
|
- in_implementation = False
|
|
|
|
|
- cc_out = 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 = border in line
|
|
|
|
|
- if is_border_line:
|
|
|
|
|
- in_implementation = not in_implementation
|
|
|
|
|
- elif in_implementation:
|
|
|
|
|
- fc.write(line.replace('inline ', ''))
|
|
|
|
|
- else:
|
|
|
|
|
- fh.write(line)
|
|
|
|
|
- fc.write('} // namespace httplib\n')
|
|
|
|
|
|
|
+ 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")
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- print("Wrote {} and {}".format(h_out, cc_out))
|
|
|
|
|
-else:
|
|
|
|
|
- print("{} and {} are up to date".format(h_out, cc_out))
|
|
|
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
|
+ main()
|