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