papermario/tools/substitute.py
alex a4e1c2f522
Add versioning (#187)
* fix vscode cpp extension messing with files.associations

* move stuff

* it builds!

* symlink papermario.us.z64

* ci: put baserom in right place

* add jp

* fix splat dir

* ignore starrod dump

* .s deps

* update jenkins

* add dsl back

* configure.py versions

* wups

* fine ethan

* fix paths

* configure: default to only the version(s) with existing baseroms

* fix coverage

* fix progress.py

* progress.py verisoning

* remove format.sh from CONTRIBUTING

* update CONTRIBUTING

* fix first_diff

* diff.py: use ver/current/

* update splat.yaml

* trying to fix subrepo

* git subrepo pull tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "06a737f02d"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "06a737f02d"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* configure fix

* git subrepo pull tools/splat

subrepo:
  subdir:   "tools/splat"
  merged:   "41786effd3"
upstream:
  origin:   "https://github.com/ethteck/splat.git"
  branch:   "master"
  commit:   "41786effd3"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

Co-authored-by: Ethan Roseman <ethteck@gmail.com>
2021-02-22 18:21:23 +09:00

58 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python3
import argparse
import os
import re
from pathlib import Path
script_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = script_dir + "/../"
src_dir = root_dir + "src/"
asm_dir = root_dir + "ver/current/asm/"
parser = argparse.ArgumentParser(description="Replace many functions with one")
parser.add_argument("from_list", help="path to line-separated file of functions to be replaced. first line is the string to replace them with")
args = parser.parse_args()
from_funcs = []
with open(args.from_list) as f:
from_text = f.readlines()
to_line = from_text[0].strip()
func_name = to_line[to_line.rfind("/") + 1:to_line.find(".")]
for from_line in from_text[1:]:
if len(from_line.strip()) > 0:
from_funcs.append(from_line.rstrip().split(" ")[-1])
for root, dirs, files in os.walk(src_dir):
for f_name in files:
if f_name.endswith(".c"):
f_path = os.path.join(root, f_name)
with open(f_path) as f:
f_text_orig = f.read()
f_text = f_text_orig
for func in from_funcs:
search_pattern = re.compile("\n.*" + func + "\).*\n")
f_text = re.sub(search_pattern, "\n" + to_line + "\n", f_text)
if f_text != f_text_orig:
with open(f_path, "w", newline="\n") as f:
f.write(f_text)
for root, dirs, files in os.walk(asm_dir):
for f_name in files:
if f_name.endswith(".s"):
f_path = os.path.join(root, f_name)
with open(f_path) as f:
f_text_orig = f.read()
f_text = f_text_orig
for func in from_funcs:
f_text = f_text.replace(func, Path(f_path).parent.parent.name + "_" + func_name)
if f_text != f_text_orig:
with open(f_path, "w", newline="\n") as f:
f.write(f_text)