52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
from argparse import ArgumentParser
|
||
|
import os
|
||
|
import json
|
||
|
import re
|
||
|
|
||
|
def actorFile(actor: str, build: str, src: str):
|
||
|
res = actor.replace(build, src, 1)
|
||
|
res = res.replace('actor.g.cpp', 'actor.cpp')
|
||
|
return res.replace('actor.g.h', 'actor.h')
|
||
|
|
||
|
def rreplace(s, old, new, occurrence = 1):
|
||
|
li = s.rsplit(old, occurrence)
|
||
|
return new.join(li)
|
||
|
|
||
|
|
||
|
def actorCommand(cmd: str, build:str, src: str):
|
||
|
r1 = re.compile('-c (.+)(actor\.g\.cpp)')
|
||
|
m1 = r1.search(cmd)
|
||
|
if m1 is None:
|
||
|
return cmd
|
||
|
cmd1 = r1.sub('\\1actor.cpp', cmd)
|
||
|
return rreplace(cmd1, build, src)
|
||
|
|
||
|
|
||
|
parser = ArgumentParser(description="Generates a new compile_commands.json for rtags+flow")
|
||
|
parser.add_argument("-b", help="Build directory", dest="builddir", default=os.getcwd())
|
||
|
parser.add_argument("-s", help="Build directory", dest="srcdir", default=os.getcwd())
|
||
|
parser.add_argument("-o", help="Output file", dest="out", default="processed_compile_commands.json")
|
||
|
parser.add_argument("input", help="compile_commands.json", default="compile_commands.json", nargs="?")
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
print("transform {} with build directory {}".format(args.input, args.builddir))
|
||
|
|
||
|
with open(args.input) as f:
|
||
|
cmds = json.load(f)
|
||
|
|
||
|
result = []
|
||
|
|
||
|
for cmd in cmds:
|
||
|
cmd['command'] = cmd['command'].replace(' -DNO_INTELLISENSE ', ' ')
|
||
|
if cmd['file'].endswith('actor.g.cpp'):
|
||
|
# here we need to rewrite the rule
|
||
|
cmd['command'] = actorCommand(cmd['command'], args.builddir, args.srcdir)
|
||
|
cmd['file'] = actorFile(cmd['file'], args.builddir, args.srcdir)
|
||
|
result.append(cmd)
|
||
|
else:
|
||
|
result.append(cmd)
|
||
|
|
||
|
with open(args.out, 'w') as f:
|
||
|
json.dump(result, f, indent=4)
|