1# file "example_build.py"
2
3# Note: we instantiate the same 'cffi.FFI' class as in the previous
4# example, but call the result 'ffibuilder' now instead of 'ffi';
5# this is to avoid confusion with the other 'ffi' object you get below
6from pathlib import Path
7import os
8import re
9import subprocess
10from cffi import FFI
11import pycparser
12ffibuilder = FFI()
13
14
15if __name__ == "__main__":
16    header_file = Path('mrilib.h')
17    # header_file = Path('cs.h')
18    pp = subprocess.run("gcc -E -P -D'__attribute__(x)=' -I. -Ipycparser/utils/fake_libc_include -Inifti/nifti2 -Inifti/niftilib -Inifti/nifticdf -Inifti/znzlib -Irickr -I/sw/include -I/usr/X11/include -nostdinc mrilib.h > mrilib_processed.h",
19       shell =True,
20        stdout= subprocess.PIPE,
21        stderr = subprocess.PIPE)
22
23    # pycparser.parse_file('mrilib_processed.h')
24    ffibuilder.cdef(Path('mrilib_processed.h').read_text())
25    ffibuilder.set_source("_pyafni",'#include "mrilib_processed.h"',
26         libraries=["mri"],
27         library_dirs=[Path.cwd().absolute()],
28         include_dirs=[".","nifti/nifti2","nifti/niftilib",
29                       "nifti/nifticdf","nifti/znzlib",
30                       "rickr","/usr/X11R6/include","/sw/include"],
31         extra_compile_args=["-std=c99"]
32    )
33
34    ffibuilder.compile(verbose=True)
35