From: Wolfram Quester [mailto:[email protected]]
>OK, thanks for the link. But the crazy thing is that inkscape
>includes setjmp.h in the code leading to the compiler error
>only via png.h.
You need to look for the #define of _SETJMP_H. Greg's method doesn't work
for that unfortunately, but some header file *other* than setjmp.h is
defining it. IMO that's a big bug in itself, though I've seen similar
things done in code attempting to fake out system header files and
substitute a different implementation.
First check that you really have a valid png.h:
${CC} -c -o foo.o /usr/include/png.h
If this fails your installation has been hacked; reinstall libpng. If it
still fails then the gcc standard pre-include is itself #include'ing
<setjmp.h>. I think someone suggested that on a bug around 2000 - I saw
something to that effect on a recent web search.
Then take the file that fails and temporarily move the #include <png.h> to
the top of the file - make it the first #include. Rebuild. If that fails
you have a local png.h and *it* has been hacked - get a released version.
If it still fails your build script sets the gcc pre-include to #include
<setjmp.h>, fix it.
If it still works move #include <png.h> down towards its previous location
in the file. (Use a binary chop.) This will isolate the #include that is
the top level culprit. Suppose this is <foo.h>, then you should be able to
repro the problem with a simple file of the form:
#include <foo.h>
#include <png.h>
You will probably need to get the gcc -I directives to match those in the
build, but maybe not - just try a simple gcc -c first.
Now it gets more difficult unless it is immediately obvious where foo.h
defines _SETJMP_H. If you can hack on foo.h then you can actually insert
#include <png.h> into the middle and repeat the search in there. If not you
may be able to make a local foo.h and repro the problem in the same way, but
beware the semantics of #include "bar.h" within foo.h - it actually means
'include the bar.h from the directory containing foo.h'. If you can't repro
the problem with a local foo.h it is because you have changed 'the directory
containing foo.h'.
John Bowler <[email protected]>
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]