#!/usr/bin/env python3 import os import argparse import sys import filecmp def replace_if_changed(new, old): ''' Compare contents and only replace if changed to avoid triggering a rebuild. ''' try: changed = not filecmp.cmp(new, old, shallow=False) except FileNotFoundError: changed = True if changed: os.replace(new, old) else: os.remove(new) parser = argparse.ArgumentParser() parser.add_argument('--array-name', help='The name of the array variable') parser.add_argument('--output', metavar='STRING', help='Output filename', default=None) parser.add_argument('input', metavar='FILE', help='The input file', type=argparse.FileType('r')) args = parser.parse_args() if args.output is None: output = sys.stdout else: output = args.output + '~' with open(output, 'w') as f: f.write('static const char {}[] = {{\n'.format(args.array_name)) for line in args.input: for ch in line: f.write(' 0x{:02x},\n'.format(ord(ch))) f.write('};') if args.output is not None: replace_if_changed(output, args.output)