aboutsummaryrefslogtreecommitdiff
path: root/tools/cppmerge/main.py
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-04 21:35:33 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-04 21:35:33 +0800
commit08cce61ac9e4b7ebb557b68d57097bd7eab930f3 (patch)
tree0e97c24a9ed539fd10ffd0c5ba5af2eb179f2486 /tools/cppmerge/main.py
parent327f54b605b92a7b81a5a4de95f9f3741b786be5 (diff)
downloadcru-08cce61ac9e4b7ebb557b68d57097bd7eab930f3.tar.gz
cru-08cce61ac9e4b7ebb557b68d57097bd7eab930f3.tar.bz2
cru-08cce61ac9e4b7ebb557b68d57097bd7eab930f3.zip
Remove unused tools.
Diffstat (limited to 'tools/cppmerge/main.py')
-rw-r--r--tools/cppmerge/main.py160
1 files changed, 0 insertions, 160 deletions
diff --git a/tools/cppmerge/main.py b/tools/cppmerge/main.py
deleted file mode 100644
index 6c73ff0d..00000000
--- a/tools/cppmerge/main.py
+++ /dev/null
@@ -1,160 +0,0 @@
-import argparse
-import os
-import os.path
-import re
-import sys
-
-parser = argparse.ArgumentParser()
-parser.add_argument("-o", "--output", required=True, help="The path of output header and source files excluding extension.")
-parser.add_argument("input", nargs="+", help="The input source files or folders to scan.")
-parser.add_argument("-e", "--exclude", nargs="+", help="Filenames that exludes from merging.")
-args = parser.parse_args()
-
-input_dirs = []
-
-header_file_list = []
-source_file_list = []
-
-def add_source_file(path):
- print("find source file: {}".format(path))
- source_file_list.append(path)
-
-def add_header_file(path):
- print("find header file: {}".format(path))
- header_file_list.append(path)
-
-cpp_header_file_regex = re.compile(r"^.*\.(h|hpp)$")
-cpp_source_file_regex = re.compile(r"^.*\.(cpp|cc|cxx)$")
-
-def is_exclude(file_name):
- return args.exclude and file_name in args.exclude
-
-for path in args.input:
- if os.path.isdir(path):
- input_dirs.append(path)
- elif os.path.isfile(path):
- file_name = os.path.basename(path)
- if is_exclude(file_name):
- sys.exit("{} is specified excluding.")
- if cpp_source_file_regex.match(file_name):
- add_source_file(path)
- elif cpp_header_file_regex.match(file_name):
- add_header_file(path)
- else:
- sys.exit("{} is a file but it is neither c++ source nor header.".format(path))
- else:
- sys.exit("{} is neither a file nor a directory.".format(path))
-
-actual_exclude_count = 0
-
-for input_dir in input_dirs:
- for root, subdirs, files in os.walk(input_dir):
- for f in files:
- if is_exclude(f):
- actual_exclude_count += 1
- else:
- if cpp_source_file_regex.match(f):
- path = os.path.join(root, f)
- add_source_file(path)
- elif cpp_header_file_regex.match(f):
- path = os.path.join(root, f)
- add_header_file(path)
-
-print()
-print("total find {} header file(s)".format(len(header_file_list)))
-print("total find {} source file(s)".format(len(source_file_list)))
-print("total actual exclude {} file(s)".format(actual_exclude_count))
-print()
-
-norm_source_file_list = [os.path.normpath(path) for path in source_file_list]
-norm_header_file_list = [os.path.normpath(path) for path in header_file_list]
-
-output_header_file_path = args.output + '.hpp'
-output_source_file_path = args.output + '.cpp'
-
-
-output_header_file = open(output_header_file_path, 'w')
-output_source_file = open(output_source_file_path, 'w')
-
-
-processed_headers = []
-
-header_pragma_once_regex = re.compile(r'#\s*pragma\s*once')
-header_include_command_regex = re.compile(r'#\s*include\s*"([\w.\-_/\\]+)"')
-
-def process_line(line):
- match_result = header_include_command_regex.match(line)
- if match_result:
- return match_result.group(1)
- else:
- return None
-
-def find_header_path(base_path, header_path):
- path = os.path.join(base_path, header_path)
- if os.path.isfile(path):
- return path
- else:
- for d in input_dirs:
- path = os.path.join(d, header_path)
- if os.path.isfile(path):
- return path
- raise RuntimeError("Header not found.\nBase path: {}\nHeader path: {}".format(base_path, header_path))
-
-def process_header_file(base_path, header_path):
- path = find_header_path(base_path, header_path)
- path = os.path.normpath(path)
- if path in processed_headers:
- return
- processed_headers.append(path)
-
- output_header_file.write("//--------------------------------------------------------\n")
- output_header_file.write("//-------begin of file: {}\n".format(path))
- output_header_file.write("//--------------------------------------------------------\n")
- header_f = open(path, 'r')
- found_pragma_once = False
- for line in header_f:
- if (not found_pragma_once):
- if header_pragma_once_regex.match(line):
- found_pragma_once = True
- continue
- new_header_name = process_line(line)
- if not new_header_name is None:
- process_header_file(os.path.dirname(path), new_header_name)
- else:
- output_header_file.write(line)
- output_header_file.write("//--------------------------------------------------------\n")
- output_header_file.write("//-------end of file: {}\n".format(path))
- output_header_file.write("//--------------------------------------------------------\n")
-
-
-output_header_file.write("#pragma once\n")
-
-output_source_file.write('#include "{}"\n'.format(os.path.basename(output_header_file_path)))
-
-
-for source_path in source_file_list:
- source_path = os.path.normpath(source_path)
- output_source_file.write("//--------------------------------------------------------\n")
- output_source_file.write("//-------begin of file: {}\n".format(source_path))
- output_source_file.write("//--------------------------------------------------------\n")
- source_f = open(source_path, 'r')
- for line in source_f:
- new_header_name = process_line(line)
- if not new_header_name is None:
- process_header_file(os.path.dirname(source_path), new_header_name)
- else:
- output_source_file.write(line)
- output_source_file.write("//--------------------------------------------------------\n")
- output_source_file.write("//-------end of file: {}\n".format(source_path))
- output_source_file.write("//--------------------------------------------------------\n")
-
-rest_header_count = len(norm_header_file_list) - len(processed_headers)
-
-if rest_header_count > 0:
- print("{} header files are not included in any sources. Add them to header now.".format(rest_header_count))
- print()
- for header_path in norm_header_file_list:
- if header_path not in processed_headers:
- process_header_file('.', header_path)
-
-print("Done!")