diff options
Diffstat (limited to 'numpy/_build_utils/tempita.py')
-rwxr-xr-x | numpy/_build_utils/tempita.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/numpy/_build_utils/tempita.py b/numpy/_build_utils/tempita.py new file mode 100755 index 000000000..3bcc789c5 --- /dev/null +++ b/numpy/_build_utils/tempita.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +import sys +import os +import argparse + +from Cython import Tempita as tempita + +# XXX: If this import ever fails (does it really?), vendor either +# cython.tempita or numpy/npy_tempita. + + +def process_tempita(fromfile, outfile=None): + """Process tempita templated file and write out the result. + + The template file is expected to end in `.c.in` or `.pyx.in`: + E.g. processing `template.c.in` generates `template.c`. + + """ + if outfile is None: + # We're dealing with a distutils build here, write in-place + outfile = os.path.splitext(fromfile)[0] + + from_filename = tempita.Template.from_filename + template = from_filename(fromfile, encoding=sys.getdefaultencoding()) + + content = template.substitute() + + with open(outfile, 'w') as f: + f.write(content) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "infile", + type=str, + help="Path to the input file" + ) + parser.add_argument( + "-o", + "--outfile", + type=str, + help="Path to the output file" + ) + parser.add_argument( + "-i", + "--ignore", + type=str, + help="An ignored input - may be useful to add a " + "dependency between custom targets", + ) + args = parser.parse_args() + + if not args.infile.endswith('.in'): + raise ValueError(f"Unexpected extension: {args.infile}") + + outfile_abs = os.path.join(os.getcwd(), args.outfile) + process_tempita(args.infile, outfile_abs) + + +if __name__ == "__main__": + main() |