blob: 2f6999ef30ca9c86f73479d69edbaf960cf752a4 [file]
#!/usr/bin/env python3
"This tool is intended to be used from meson"
import os, sys, shutil
if len(sys.argv) < 4:
sys.exit(__doc__)
OUTPUT = sys.argv[1]
CURRENT_SOURCE_DIR = sys.argv[2]
INPUT = sys.argv[3]
hh = os.path.basename(OUTPUT)
# Decl name derives from the .hh filename: hyphens -> underscores,
# strip the .hh suffix. Example: hb-gpu-fragment-glsl.hh -> hb_gpu_fragment_glsl.
if not hh.endswith('.hh'):
sys.exit(f'Output must end with .hh: {hh}')
decl = hh[:-len('.hh')].replace('-', '_')
# Stringize the GLSL source into a C string literal
with open(INPUT, 'r') as f:
lines = f.read().splitlines()
parts = [f'static const char *{decl} =\n']
for line in lines:
line = line.replace('\\', '\\\\').replace('"', '\\"')
parts.append(f'"{line}\\n"\n')
parts.append(';\n')
content = ''.join(parts)
with open(OUTPUT, 'w') as f:
f.write(content)
# Copy back to source tree; if read-only, verify committed copy matches.
src_copy = os.path.join(CURRENT_SOURCE_DIR, hh)
try:
shutil.copyfile(OUTPUT, src_copy)
except OSError:
# Read as text to ignore line-ending changes
with open(OUTPUT, 'r') as f1, open(src_copy, 'r') as f2:
if f1.read() != f2.read():
sys.exit(f'{src_copy} is out of date; regenerate with a writable source tree')