Mesa 6.4.2 fails to compile in current rawhide, but only on ppc. It builds ok on an older Fedora development installation and on FC4 however on x86 and x86_64. The beehive build log indicates the compilation fails due to a broken system header: g++ -c -I../../../include -Iinclude -Iinternals -Ilibnurbs/internals -Ilibnurbs/interface -Ilibnurbs/nurbtess -Wall -Os -mcpu=603 -fPIC -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER -DGLX_DIRECT_RENDERING -DHAVE_ALIAS -DNDEBUG -DLIBRARYBUILD libnurbs/interface/glcurveval.cc -o libnurbs/interface/glcurveval.o libnurbs/internals/sorter.h:43: warning: 'class Sorter' has virtual functions but non-virtual destructor libnurbs/internals/flistsorter.h:48: warning: 'class FlistSorter' has virtual functions but non-virtual destructor /usr/include/bits/stdio-ldbl.h:53: error: type of 'dprintf' is unknown /usr/include/bits/stdio-ldbl.h:53: error: invalid type in declaration before ';' token /usr/include/bits/stdio-ldbl.h:53: error: 'int dprintf' redeclared as different kind of symbol /usr/include/stdio.h:396: error: previous declaration of 'int dprintf(int, const char*, ...)' libnurbs/internals/cachingeval.h:45: warning: 'class CachingEvaluator' has virtual functions but non-virtual destructor libnurbs/internals/basicsurfeval.h:49: warning: 'class BasicSurfaceEvaluator' has virtual functions but non-virtual destructor libnurbs/internals/basiccrveval.h:49: warning: 'class BasicCurveEvaluator' has virtual functions but non-virtual destructor make[5]: *** [libnurbs/interface/glcurveval.o] Error 1 make[5]: Leaving directory `/usr/src/build/690823-ppc/BUILD/Mesa-6.4.2/src/glu/sgi' make[4]: *** [default] Error 2 make[4]: Leaving directory `/usr/src/build/690823-ppc/BUILD/Mesa-6.4.2/src/glu/sgi' make[3]: *** [default] Error 2 make[3]: Leaving directory `/usr/src/build/690823-ppc/BUILD/Mesa-6.4.2/src/glu' make[2]: *** [subdirs] Error 1 make[2]: Leaving directory `/usr/src/build/690823-ppc/BUILD/Mesa-6.4.2/src' make[1]: *** [default] Error 1 make[1]: Leaving directory `/usr/src/build/690823-ppc/BUILD/Mesa-6.4.2' make: *** [linux-dri-ppc] Error 2 error: Bad exit status from /usr/src/build/690823-ppc/install-tmp/rpm-tmp.76052 (%build) Full log: http://porkchop.redhat.com/beehive/logs/mesa-690816-ppc-js20-bc1-10.build.redhat.com.log Log is also mirrored to devserv:~mharris/bhlogs for 4 days if needed. Just to ensure this wasn't a transient problem, I attempted the build 5 times or so, and they all failed in the same place on ppc.
/usr/include/bits/stdio-ldbl.h:53: error: type of 'dprintf' is unknown /usr/include/bits/stdio-ldbl.h:53: error: invalid type in declaration before ';' token /usr/include/bits/stdio-ldbl.h:53: error: 'int dprintf' redeclared as different kind of symbol /usr/include/stdio.h:396: error: previous declaration of 'int dprintf(int, const char*, ...)' These files aren't on any of my systems, mind you I'm not using current rawhide on ppc either. ;o) I just realized stdio-ldbl.h is related to the PPC ABI changes that are occuring, and so this is probably just a minor typo or something that crept into it. #ifdef __USE_GNU __LDBL_REDIR_DECL (vdprintf) __LDBL_REDIR_DECL (dprintf) <--- This is line 53. __LDBL_REDIR_DECL (vasprintf) __LDBL_REDIR_DECL (__asprintf)
[stdio.h] #ifdef __LDBL_COMPAT # include <bits/stdio-ldbl.h> #endif [stdio-ldbl.h] #ifdef __USE_GNU __LDBL_REDIR_DECL (vdprintf) __LDBL_REDIR_DECL (dprintf) stdio-ldbl.h seems to only be included if __LDBL_COMPAT is defined, and it is being included, so we can assume it is defined. In cdefs.h however: [cdefs.h] #if !defined __LDBL_COMPAT || !defined __REDIRECT # define __LDBL_REDIR1(name, proto, alias) name proto # define __LDBL_REDIR(name, proto) name proto # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW # define __LDBL_REDIR_NTH(name, proto) name proto __THROW # define __LDBL_REDIR_DECL(name) #endif __LDBL_REDIR_DECL is only defined, if __LDBL_COMPAT is not defined, or if __REDIRECT is not defined. We know __LDBL_COMPAT is defined, so it appears that __REDIRECT must be defined also, since that appears to be the only way that the block would get excluded and cause the compile failure. I'll leave the rest to you. ;)
This is a mesa bug. libnurbs/interface/mystdio.h has: inline void dprintf( char *, ... ) { } and Mesa is compiled with -D_GNU_SOURCE. That's namespace violation. dprintf is a GNU namespace standard library function, so, either you choose to use GNU namespace and accept its namespace rules (in this case, don't call your functions the same as interfaces already in the GNU namespace or put them in a different C++ namespace), or don't compile with -D_GNU_SOURCE.
I've added a patch to mesa-6.4.2-2 to attempt to work around the problem by renaming the Mesa function to debugprintf(). Once it's built in beehive and confirmed fixed, I'll close this.
mesa-6.4.2-2 has been successfully built now, and should show up in rawhide in 24 hours or so. Setting status to "RAWHIDE"