foundationdb/build/gen_compile_db.py

53 lines
1.8 KiB
Python
Executable File

#!/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:
additional_flags = ['-Wno-unknown-attributes']
cmd['command'] = cmd['command'].replace(' -DNO_INTELLISENSE ', ' {} '.format(' '.join(additional_flags)))
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)