Compiling matplotlib in Solaris 10
Trying to install matplotlib 1.5.1 in my Solaris 10 machines produces the following compiling error:
[...] In file included from /usr/local/include/python3.5m/Python.h:36:0, from src/mplutils.h:21, from src/ft2font_wrapper.cpp:1: /usr/include/unistd.h:496:75: error: conflicting declaration of C function ‘void swab(const void*, void*, ssize_t)’ extern void swab(const void *_RESTRICT_KYWD, void *_RESTRICT_KYWD, ssize_t); ^ In file included from /usr/local/include/python3.5m/Python.h:34:0, from src/mplutils.h:21, from src/ft2font_wrapper.cpp:1: /usr/include/stdlib.h:143:13: note: previous declaration ‘void swab(const char*, char*, ssize_t)’ extern void swab(const char *, char *, ssize_t); ^ error: command 'gcc' failed with exit status 1 ---------------------------------------- Rolling back uninstall of matplotlib
The problem is that Solaris tries hard to maintain binary and source code compatibility and what is Unix is a moving target.
In particular you can read this in file /usr/include/stdlib.h:
/* * swab() has historically been in <stdlib.h> as delivered from AT&T * and continues to be visible in the default compilation environment. * As of Issue 4 of the X/Open Portability Guides, swab() was declared * in <unistd.h>. As a result, with respect to X/Open namespace the * swab() declaration in this header is only visible for the XPG3 * environment. */
That comment is followed with a scary conditional compilacion evaluation. I would usually try to find the magic #define to solve this, but I am in a hurry so I will go quick & dirty:
-
Do a copy of /usr/include/stdlib.h and just (temporally) delete swab() declaration:
# cp -a /usr/include/stdlib.h /usr/include/stdlib.h.OLD # vi /usr/include/stdlib.h (Edit the file and delete "swab()" declaration)
-
Install matplotlib package.
# python3 -m pip install -U matplotlib [...]
-
Recover the old version of the header file:
# mv /usr/include/stdlib.h.OLD /usr/include/stdlib.h
Yes, I agree. This is a huge kludge. Life sucks and time is limited...