Bug 180122 - glibc headers broken on ppc
Summary: glibc headers broken on ppc
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: mesa
Version: rawhide
Hardware: powerpc
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Mike A. Harris
QA Contact: X/OpenGL Maintenance List
URL:
Whiteboard:
Depends On:
Blocks: FC5Blocker
TreeView+ depends on / blocked
 
Reported: 2006-02-06 05:31 UTC by Mike A. Harris
Modified: 2007-11-30 22:11 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2006-02-07 11:52:29 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Mike A. Harris 2006-02-06 05:31:46 UTC
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.

Comment 1 Mike A. Harris 2006-02-06 05:38:28 UTC
/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)


Comment 2 Mike A. Harris 2006-02-06 05:53:37 UTC
[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. ;)

Comment 3 Jakub Jelinek 2006-02-06 09:16:56 UTC
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.

Comment 4 Mike A. Harris 2006-02-07 10:38:46 UTC
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.

Comment 5 Mike A. Harris 2006-02-07 11:52:29 UTC
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"


Note You need to log in before you can comment on or make changes to this bug.