<div dir="ltr">Has anybody successfully built petsc4py on a Windows box?  It looks like some of the Cython logic is not quite right.<div><br></div><div>On Windows, Cython is trying to set the various functions in libpetsc4py.h for external DLL import. This wouldn't be a problem, except these functions are consumed *internally* by PETSc.pyx.<br>
</div><div><br></div><div>I'm not sure what the appropriate fix is here.  The current hack-patch is to simply strip out the DL_IMPORT functions after Cythonizing:</div><div><br></div><div>I'm very welcome to better solutions.</div>
<div><br></div><div>BTW: petsc4py 3.4 tests are passing with the current fixes in maint, the patch below, and the relocation of the seemingly randomly placed cyg*.dll libraries. </div><div><br></div><div>A</div><div><br></div>
<div><div>diff -rupN src/src/libpetsc4py/libpetsc4py.h src-fix-libpetsc4py-decls/src/libpetsc4py/libpetsc4py.h</div><div>--- src/src/libpetsc4py/libpetsc4py.h<span class="" style="white-space:pre"> </span>2013-09-25 17:37:37.932555400 -0400</div>
<div>+++ src-fix-libpetsc4py-decls/src/libpetsc4py/libpetsc4py.h<span class="" style="white-space:pre"> </span>2013-09-25 17:38:53.418590300 -0400</div><div>@@ -12,18 +12,18 @@</div><div>   #endif</div><div> #endif</div><div>
<br></div><div>-__PYX_EXTERN_C DL_IMPORT(int) import_libpetsc4py(void);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) MatPythonGetContext(Mat, void **);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) MatPythonSetContext(Mat, void *);</div>
<div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PCPythonGetContext(PC, void **);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PCPythonSetContext(PC, void *);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) KSPPythonGetContext(KSP, void **);</div>
<div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) KSPPythonSetContext(KSP, void *);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) SNESPythonGetContext(SNES, void **);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) SNESPythonSetContext(SNES, void *);</div>
<div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) TSPythonGetContext(TS, void **);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) TSPythonSetContext(TS, void *);</div><div>-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PetscPythonRegisterAll(void);</div>
<div>+__PYX_EXTERN_C int import_libpetsc4py(void);</div><div>+__PYX_EXTERN_C PetscErrorCode MatPythonGetContext(Mat, void **);</div><div>+__PYX_EXTERN_C PetscErrorCode MatPythonSetContext(Mat, void *);</div><div>+__PYX_EXTERN_C PetscErrorCode PCPythonGetContext(PC, void **);</div>
<div>+__PYX_EXTERN_C PetscErrorCode PCPythonSetContext(PC, void *);</div><div>+__PYX_EXTERN_C PetscErrorCode KSPPythonGetContext(KSP, void **);</div><div>+__PYX_EXTERN_C PetscErrorCode KSPPythonSetContext(KSP, void *);</div>
<div>+__PYX_EXTERN_C PetscErrorCode SNESPythonGetContext(SNES, void **);</div><div>+__PYX_EXTERN_C PetscErrorCode SNESPythonSetContext(SNES, void *);</div><div>+__PYX_EXTERN_C PetscErrorCode TSPythonGetContext(TS, void **);</div>
<div>+__PYX_EXTERN_C PetscErrorCode TSPythonSetContext(TS, void *);</div><div>+__PYX_EXTERN_C PetscErrorCode PetscPythonRegisterAll(void);</div><div><br></div><div> #endif /* !__PYX_HAVE_API__libpetsc4py */</div></div></div>