Apologies for the long message---I've really tried to be precise and complete.
On 7/7/10 10:23 AM, Jason Grout wrote: > David Kirkby discovered that a recent SVN version of matplotlib did not > compile when he was testing a new matplotlib for inclusion in Sage. A > bug was opened here: > > https://sourceforge.net/tracker/?func=detail&aid=3022815&group_id=80706&atid=560720 > > It appears that a patch has been committed to 1.0.0 which tries to fix > the issue. However, David still reports that matplotlib 1.0.0 still > doesn't compile on Solaris. See: > > http://trac.sagemath.org/sage_trac/ticket/9221?#comment:7 > > I'm not sure what the right procedure for reopening a ticket is. > I've had some time and access to a solaris box today to try to deal with this issue. I think I've solved it, based on a hint from David Kirkby. Again, the issue is that matplotlib 1.0.0 will not compile on the solaris box t2.sagemath.org (and on another Solaris box too). David Kirkby provided the logs and specs for the systems at http://trac.sagemath.org/sage_trac/ticket/9221#comment:7 The error is in compiling CXX: ================================================================== gcc -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPY_ARRAY_UNIQUE_SYMBOL=MPL_ARRAY_API -DPYCXX_ISO_CPP_LIB=1 -I/scratch/grout/sage-4.5.3/local/lib/python2.6/site-packages/numpy/core/include -I/scratch/grout/sage-4.5.3/local/include -I. -I/scratch/grout/sage-4.5.3/local/lib/python2.6/site-packages/numpy/core/include -Isrc -Iagg24/include -I. -I/scratch/grout/sage-4.5.3/local/lib/python2.6/site-packages/numpy/core/include -I/scratch/grout/sage-4.5.3/local/include/freetype2 -I/scratch/grout/sage-4.5.3/local/include -I. -I/scratch/grout/sage-4.5.3/local/include/python2.6 -c src/backend_agg.cpp -o build/temp.solaris-2.10-sun4v-2.6/src/backend_agg.o cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++ In file included from /scratch/grout/sage-4.5.3/local/include/python2.6/Python.h:8, from ./CXX/WrapPython.h:61, from ./CXX/Extensions.hxx:37, from src/ft2font.h:4, from src/backend_agg.cpp:10: /scratch/grout/sage-4.5.3/local/include/python2.6/pyconfig.h:1013:1: warning: "_FILE_OFFSET_BITS" redefined In file included from /usr/include/sys/types.h:18, from /scratch/grout/sage-4.5.3/local/include/zconf.h:364, from /scratch/grout/sage-4.5.3/local/include/zlib.h:34, from /scratch/grout/sage-4.5.3/local/include/png.h:470, from src/backend_agg.cpp:3: /usr/local/gcc-4.4.1-sun-linker/bin/../lib/gcc/sparc-sun-solaris2.10/4.4.1/include-fixed/sys/feature_tests.h:197:1: warning: this is the location of the previous definition In file included from /scratch/grout/sage-4.5.3/local/include/python2.6/Python.h:42, from ./CXX/WrapPython.h:61, from ./CXX/Extensions.hxx:37, from src/ft2font.h:4, from src/backend_agg.cpp:10: /usr/include/stdlib.h:144: error: declaration of C function 'void swab(const char*, char*, ssize_t)' conflicts with /usr/include/unistd.h:496: error: previous declaration 'void swab(const void*, void*, ssize_t)' here error: command 'gcc' failed with exit status 1 ================================================================== This was reportedly fixed in 1.0.0, but apparently the fix does not work for this Solaris box. Based on a hint from David Kirkby, I changed the CXX/WrapPython.h file to be: ================================================================== #ifndef __PyCXX_wrap_python_hxx__ #define __PyCXX_wrap_python_hxx__ // On some platforms we have to include time.h to get select defined #if !defined(__WIN32__) && !defined(WIN32) && !defined(_WIN32) && !defined(_WIN64) #include <sys/time.h> #endif // pull in python definitions #include <Python.h> #endif ================================================================== (in other words, I just deleted all the defining and undefining of variables). The resulting matplotlib compiled finally, and the result of the testing was: ================================================================== In [1]: import matplotlib In [2]: matplotlib.__version__ Out[2]: '1.0.0' In [3]: matplotlib.test() /scratch/grout/sage-4.5.3/local/lib/python2.6/site-packages/matplotlib/axes.py:2369: UserWarning: Attempting to set identical left==right results in singular transformations; automatically expanding. left=730139.0, right=730139.0 + 'left=%s, right=%s') % (left, right)) ---------------------------------------------------------------------- Ran 138 tests in 755.419s OK (KNOWNFAIL=42) Out[3]: True ================================================================== so I guess that means everything works. I also compiled it on Ubuntu 10.04 (64-bit) and OSX 10.6.4, and it seemed to compile fine on those systems, though on OSX 10.6.4, I got some warnings like: /home/grout/sage/local/include/python2.6/pyconfig.h:1028:1: warning: "_POSIX_C_SOURCE" redefined /home/grout/sage/local/include/python2.6/pyconfig.h:1037:1: warning: "_XOPEN_SOURCE" redefined This brings up another issue: going against the Python API As you probably already know, http://docs.python.org/c-api/intro.html#includes says that: "Since Python may define some pre-processor definitions which affect the standard headers on some systems, you must include Python.h before any standard headers are included." I notice a lot of other #undef statements for _POSIX_C_SOURCE and _XOPEN_SOURCE in matplotlib code. To my (uneducated) eyes, that seems like a recipe for trouble, since defining it one way while including some other files, and then undefining the macros and defining them a different way may lead to problems. For example, in _png.cpp, I see: #include <png.h> // To remove a gcc warning #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE #endif According to the Python API, we should include python.h before including png.h. 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