SDL/cmake/xxd.py
Simon McVittie 9be9e2292b build: Consistently use pathlib APIs in cmake/xxd.py
The ability to pass a pathlib.Path to open() was new in Python 3.6,
and the oldest branch of the Steam Runtime only has Python 3.5 available.
Even without considering retrocomputing, using the Path.open method is
more consistent with how we read the input 2 lines earlier.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2023-08-09 15:44:05 +02:00

38 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python
import argparse
import os
import pathlib
import re
def main():
parser = argparse.ArgumentParser(allow_abbrev=False, description="Convert file into includable C header")
parser.add_argument("--in", "-i", type=pathlib.Path, metavar="INPUT", dest="input", required=True, help="Input file")
parser.add_argument("--out", "-o", type=pathlib.Path, metavar="OUTPUT", dest="output", required=True, help="Output header")
parser.add_argument("--columns", type=int, default=12, help="Column count")
args = parser.parse_args()
t = pathlib.Path()
varname, _ = re.subn("[^a-zA-Z0-9]", "_", str(args.input.name))
binary_data = args.input.open("rb").read()
with args.output.open("w") as fout:
fout.write("unsigned char {}[] = {{\n".format(varname))
bytes_written = 0
while bytes_written < len(binary_data):
col = bytes_written % args.columns
if col == 0:
fout.write(" ")
column_data = binary_data[bytes_written:bytes_written+args.columns]
fout.write(", ".join("0x{:02x}".format(d) for d in column_data))
bytes_written += len(column_data)
if bytes_written < len(binary_data):
fout.write(",\n")
else:
fout.write("\n")
fout.write("}};\nunsigned int {}_len = {:d};\n".format(varname, len(binary_data)))
if __name__ == "__main__":
raise SystemExit(main())