mirror of
https://github.com/Relintai/scons_gd.git
synced 2025-03-12 18:38:59 +01:00
66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
"""
|
|
Phony lex for testing SCons.
|
|
|
|
Writes the contents of input file to stdout,
|
|
after "substituting" $LEXFLAGS and $I_ARGS
|
|
|
|
Needs to understand all the lex/flex options the testcases might use.
|
|
"""
|
|
|
|
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_lex():
|
|
make_header = None
|
|
make_table = None
|
|
|
|
if sys.platform == 'win32':
|
|
longopts = ['nounistd']
|
|
else:
|
|
longopts = []
|
|
longopts.extend(['header-file=', 'tables-file='])
|
|
cmd_opts, args = getopt.getopt(sys.argv[1:], 'I:tx', longopts)
|
|
opt_string = ''
|
|
i_arguments = ''
|
|
|
|
for opt, arg in cmd_opts:
|
|
if opt == '-I':
|
|
i_arguments = f'{i_arguments} {arg}'
|
|
elif opt == '--header-file':
|
|
make_header = arg
|
|
opt_string = f'{opt_string} {opt}={arg}'
|
|
elif opt == '--tables-file':
|
|
make_table = arg
|
|
opt_string = f'{opt_string} {opt}={arg}'
|
|
else:
|
|
opt_string = f'{opt_string} {opt}'
|
|
|
|
for arg in args:
|
|
with open(arg, 'rb') as ifp:
|
|
contents = ifp.read().decode(encoding='utf-8')
|
|
contents = contents.replace('LEXFLAGS', opt_string)
|
|
contents = contents.replace('LEX', 'mylex.py')
|
|
contents = contents.replace('I_ARGS', i_arguments)
|
|
sys.stdout.write(contents)
|
|
|
|
# Extra bits:
|
|
if make_header:
|
|
make_side_effect(make_header, b"lex header\n")
|
|
if make_table:
|
|
make_side_effect(make_table, b"lex table\n")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
fake_lex()
|
|
sys.exit(0)
|