mirror of
https://github.com/Relintai/scons_gd.git
synced 2025-02-18 17:14:38 +01:00
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
import getopt
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def make_side_effect(path, text):
|
|
p = Path(path)
|
|
if str(p.parent) != '.':
|
|
p.parent.mkdir(parents=True, exist_ok=True)
|
|
with p.open(mode="wb") as f:
|
|
f.write(text)
|
|
|
|
|
|
def fake_yacc():
|
|
make_header = None
|
|
make_graph = None
|
|
|
|
longopts = ["defines=", "header=", "graph="]
|
|
cmd_opts, args = getopt.getopt(sys.argv[1:], 'o:I:x', longopts)
|
|
opt_string = ''
|
|
i_arguments = ''
|
|
|
|
for opt, arg in cmd_opts:
|
|
if opt == '-o':
|
|
out = arg
|
|
elif opt == '-I':
|
|
i_arguments = f'{i_arguments} {arg}'
|
|
elif opt in ('--defines', '--header'):
|
|
make_header = arg
|
|
opt_string = f'{opt_string} {opt}={arg}'
|
|
elif opt == '--graph':
|
|
make_graph = arg
|
|
opt_string = f'{opt_string} {opt}={arg}'
|
|
else:
|
|
opt_string = f'{opt_string} {opt}'
|
|
|
|
with open(out, 'wb') as ofp:
|
|
for a in args:
|
|
with open(a, 'rb') as ifp:
|
|
contents = ifp.read()
|
|
contents = contents.replace(b'YACCFLAGS', opt_string.encode())
|
|
contents = contents.replace(b'YACC', b'myyacc.py')
|
|
contents = contents.replace(b'I_ARGS', i_arguments.encode())
|
|
ofp.write(contents)
|
|
|
|
# Extra bits:
|
|
if make_header:
|
|
make_side_effect(make_header, b"yacc header\n")
|
|
if make_graph:
|
|
make_side_effect(make_graph, b"yacc graph\n")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
fake_yacc()
|
|
sys.exit(0)
|
|
|
|
# If -d is specified on the command line, yacc will emit a .h
|
|
# or .hpp file with the same name as the .c or .cpp output file.
|
|
|
|
# If -g is specified on the command line, yacc will emit a .vcg
|
|
# file with the same base name as the .y, .yacc, .ym or .yy file.
|
|
|
|
# If -v is specified yacc will create the output debug file
|
|
# which is not really source for any process, but should
|
|
# be noted and also be cleaned (issue #2558)
|