> gd.h in the GD library (v 1.8.4) distribution (www.boutell.com/gd) declares > ... > > typedef struct gdIOCtx { ..blah blah... } gdIOCtx; > > Then ext/gd/gd.c also goes ahead and declares ... > > #ifdef USE_GD_IOCTX > .. > .. > typedef struct gdIOCtx; > .. > .. > #endif > > Perhaps the guard USE_GD_IOCTX should have been taking effect ...but it > isnt. > So the PHP declaration is clearly conflicting.
No, you are not reading the code right. The actual code says: #ifdef USE_GD_IOCTX #include "gd_ctx.c" #else #define gdImageCreateFromGdCtx NULL #define gdImageCreateFromGd2Ctx NULL #define gdImageCreateFromGd2partCtx NULL #define gdImageCreateFromGifCtx NULL #define gdImageCreateFromJpegCtx NULL #define gdImageCreateFromPngCtx NULL #define gdImageCreateFromWBMPCtx NULL typedef FILE gdIOCtx; #define CTX_PUTC(c, fp) fputc(c, fp) #endif Note the #else there. So the only way that PHP will do that typedef is if USE_GD_IOCTX is not set. And this will not be set based on this: #if HAVE_LIBGD15 /* it's >= 1.5, i.e. has IOCtx */ #define USE_GD_IOCTX 1 #else #undef USE_GD_IOCTX #endif ie. if HAVE_LIBGD15 is set, we set it. And this symbol comes from this config.m4 rule: PHP_CHECK_LIBRARY(gd, gdImagePaletteCopy, [AC_DEFINE(HAVE_LIBGD15, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) That says that it will link against libgd and check for the gdImagePaletteCopy() function. If it sees this function in the library, it will define HAVE_LIBGD15. My prediction is still that you have multiple versions of libgd installed. Probably an old libgd 1.3 library floating around somewhere that is getting picked up on this configure link. "locate libgd" should prove interesting. -Rasmus -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php