Hi Christos, list,

Christos Soulios wrote:

This is caused because of the fact that Sun compiler is stricter on C standards.
Ansi C forbids the type casting to a union. However, it is implemented as an
extension by gcc. In my opinion this is wrong, because it violates some C
standards.


In this case you may compile cyrus 2.2.2-BETA if you remove the '(union
config_value)' from all the lines of imapopts.c

Then the compilation will continue throwing only some warnings until it breaks
later in file lib/libcyr_cfg.c where there is another union type cast. (
(union cyrus_config_value))

You must remove this too and the compilation will end normally.

I've removed those, and after some more online research added an
#include <config.h> to the top of lib/prot.h and everything compiles now. However, starting it up results in a crash:


core 'core' of 6151:    /usr/local/cyrus/bin/master -D
 feec3cb4 _free_unlocked (ffbff91a, 783b8, 0, fef3c000, 0, 0) + 40
 feec3c64 free     (ffbff91a, 0, 0, 0, 0, 0) + 20
 ff3248b0 freeaddrinfo (3e420, af02aae8, 18, 3, 4, fef1ef2c) + 34
 00014a50 service_create (413d4, 18a38, 0, 7efefeff, 81010100, ff00) + 8b8
 0001a0c4 main     (2, ffbffcac, ffbffcb8, 32000, 0, 0) + ab4
 00013930 _start   (0, 0, 0, 0, 0, 0) + 108

For the time being removing these union castings is harmless for the binaries
and cyrus function, but there are cases when this may break things down. And I
am afraid that this will happen in some future release.
I think that the cyrus developers should deal with this problem, other than gcc
compilers are excluded.

Agreed, I'll try to help with that, at least documenting all the gotcha's I ran across getting this to compile. Now I just need to get it to run :-)


Regards, Paul Boven.



Reply via email to