On 09/16/2010 08:45 PM, Jason Grout wrote: > On 9/16/10 11:16 PM, Eric Firing wrote: >> On 09/16/2010 05:15 PM, Jason Grout wrote: >>> On 9/16/10 10:00 PM, Eric Firing wrote: >>>> On 09/16/2010 04:12 PM, Jason Grout wrote: >>>>> On 9/16/10 9:03 PM, Jason Grout wrote: >>>>>> On 9/16/10 8:00 PM, Eric Firing wrote: >>>>>> >>>>>>>>> I tested your patch with Ubuntu 10.10, and it failed. The problem is >>>>>>>>> that something is including setjmp.h before libpng.h tries to do so >>>>>>>>> via >>>>>>>>> pngconf.h, resulting in an error as the compiler trips over the >>>>>>>>> following: >>>>>>>> >>>>>>> >>>>>>> Python.h includes pyfpe.h which includes setjmp.h. >>>>>>> >>>>>>> Eric >>>>>>> >>>>>> >>>>>> Ah, good catch. So we just need to include Python.h first, and then set >>>>>> that extra #def so that libpng doesn't try to include it? >>>>>> >>>>>> #include "Python.h" >>>>>> #def PNG_SKIP_SETJMP_CHECK >>>>>> #include<png.h> >>>>>> >>>>> >>>>> Let me try again: >>>>> >>>>> In _backend_agg.cpp and _png.cpp, just add >>>>> >>>>> #define PNG_SKIP_SETJMP_CHECK >>>>> >>>>> right above >>>>> >>>>> #include<png.h> >>>>> >>>>> Does that fix it? >>>> >>>> Sure does. Your patch with that modification is committed to branch and >>>> trunk, 8706, 8707. Thank you! >>>> >>> >>> Did someone check on Windows? I was hoping things wouldn't break in >>> WrapPython.h when I switched the order of includes, but you never know... >> >> Jason, >> >> Big trouble, even without Windows. First, after doing more reading, I >> am far from sure that skipping the check is OK. Second, it doesn't work >> on earlier Linux versions, for which pngconf.h lacks that SKIP variable >> entirely. >> >> What a pain. I see that Andrew Straw ran into this wall a couple years ago. >> >> Time to revert and re-think. It may be that your patch is almost OK, >> but will need a tweak for Linux. > > > An equivalent, but very hackish, fix is to just undef _SETJMP_H. That's > almost as bad as the original undef, though. > > Maybe putting this: > > #ifdef __linux__ > #undef _SETJMP_H > #endif > #define PNG_SKIP_SETJMP_CHECK > > right before including png.h would work, at least until distros > (eventually) upgrade to a libpng past April 2009 (when the check was > added) or until we stop supporting the old distros.
I don't think that any of these hacks is desirable, so I am trying what I hope is a less-bad hack. Maybe Mike or John will be able to figure out a cleaner solution. I'm still worried about the possibility of a conflict between the versions of setjmp expected by png and by python. I think that if there were such a conflict, it would show up as a crash as part of the error handling in one or the other. Therefore it could lurk undetected for a long time. On the other hand, if there were such a conflict, I don't see how the pre-patched versions would have avoided it any better than the present version. I could not find any evidence that _backend_agg even needs to include png.h, so I deleted that inclusion, leaving only _png.cpp as the trouble spot. Eric > > Thanks, > > Jason ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel