#!/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')