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