summaryrefslogtreecommitdiff
path: root/tools/m2ctx.py
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-05-03 18:48:44 +0200
committerAetias <aetias@outlook.com>2024-05-03 18:48:44 +0200
commit420e2c5fa390c8a6f13b21c5aeb8822f390cce5a (patch)
treec109a6f5b7ddeb85b34b38ec1bb82aaf1bfb9d49 /tools/m2ctx.py
parentf4d873c4b3f33918c220b75f53fb48353b7228a6 (diff)
parent2c71c649f6163162ccb5772f3753dedf51d0ccff (diff)
Merge branch 'main' into item-manager
Diffstat (limited to 'tools/m2ctx.py')
-rwxr-xr-xtools/m2ctx.py81
1 files changed, 23 insertions, 58 deletions
diff --git a/tools/m2ctx.py b/tools/m2ctx.py
index b48e2e54..1ddb71d7 100755
--- a/tools/m2ctx.py
+++ b/tools/m2ctx.py
@@ -5,6 +5,15 @@ import pyperclip
import subprocess
import os
from pathlib import Path
+import argparse
+
+parser = argparse.ArgumentParser(description="Generates a context for decomp.me")
+parser.add_argument('file', help="Input file to preprocess")
+parser.add_argument('-f', type=str, dest='out_file', required=False, help='Output context file')
+parser.add_argument('-c', action=argparse.BooleanOptionalAction, dest='clipboard', required=False, help='Copy output to clipboard')
+parser.add_argument('-e', type=str, dest='encoding', required=False, default="Shift-JIS", help='Input file encoding')
+parser.add_argument('-v', action=argparse.BooleanOptionalAction, dest='verbose', required=False, help='Verbose error output')
+args = parser.parse_args()
CXX_FLAGS = [
'-nostdinc',
@@ -16,63 +25,19 @@ CXX_FLAGS = [
script_dir = Path(os.path.dirname(os.path.realpath(__file__)))
root_dir = script_dir / ".."
-program = os.path.basename(sys.argv[0])
-
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
-def print_usage():
- eprint(f"Usage: {program} INFILE [-f OUTFILE] [-c] [-e ENCODING] [-v]")
- eprint(" INFILE \tInput file to preprocess")
- eprint(" -f OUTFILE \tOutput context file")
- eprint(" -c \tCopy output to clipboard")
- eprint(" -e ENCODING\tInput file encoding (Default: Shift-JIS)")
- eprint(" -v \tVerbose error output")
-
-if len(sys.argv) == 1:
- print_usage()
- exit(1)
-
-
-in_file = None
-out_file = None
-clipboard = False
-encoding = "Shift-JIS"
-verbose = False
-i = 1
-while i < len(sys.argv):
- arg = sys.argv[i]
- if arg == "-f":
- i += 1
- if i >= len(sys.argv):
- eprint("Expected output file after -f")
- exit(1)
- out_file = sys.argv[i]
- elif arg == "-c":
- clipboard = True
- elif arg == "-e":
- i += 1
- if i >= len(sys.argv):
- eprint("Expected input file encoding after -e")
- exit(1)
- encoding = sys.argv[i]
- elif arg == "-v":
- verbose = True
- elif arg.startswith("-"):
- eprint(f"Unknown option '{arg}'")
- elif in_file is None:
- in_file = arg
- else:
- eprint(f"Duplicate input file '{arg}'")
- exit(1)
- i += 1
-
-
try:
- ctx: str = subprocess.check_output(['gcc', '-E', '-P', '-undef', '-dD', *CXX_FLAGS, in_file], cwd=root_dir, encoding=encoding)
+ ctx: str = subprocess.check_output([
+ 'gcc',
+ '-E', '-P', '-fworking-directory', '-undef', '-dD',
+ *CXX_FLAGS,
+ args.file
+ ], cwd=root_dir, encoding=args.encoding)
except subprocess.CalledProcessError as e:
- eprint(f"Failed to preprocess '{in_file}'")
- if verbose: eprint(e)
+ eprint(f"Failed to preprocess '{args.file}'")
+ if args.verbose: eprint(e)
else: eprint("Use -v for more verbose error output")
exit(1)
@@ -86,17 +51,17 @@ for i in reversed(range(len(lines))):
ctx = ''.join(lines)
-if out_file:
+if args.out_file:
try:
- with open(out_file, "w") as file:
+ with open(args.out_file, "w") as file:
file.write(ctx)
except OSError as e:
- eprint(f"Failed to write file '{out_file}'")
- if verbose: eprint(e)
+ eprint(f"Failed to write file '{args.out_file}'")
+ if args.verbose: eprint(e)
else: eprint("Use -v for more verbose error output")
exit(1)
-if clipboard:
+if args.clipboard:
pyperclip.copy(ctx)
eprint("Copied context to clipboard")
-if out_file is None and not clipboard:
+if args.out_file is None and not args.clipboard:
print(ctx)