Bug 179835

Summary: glibc breaks ruby headers or ruby does not work with gcc headers
Product: [Fedora] Fedora Reporter: Andreas Bierfert <andreas.bierfert>
Component: rubyAssignee: Akira TAGOH <tagoh>
Status: CLOSED RAWHIDE QA Contact: Bill Huang <bhuang>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: rdieter, tagoh
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: 1.8.4-3 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2006-02-06 04:41:38 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Andreas Bierfert 2006-02-03 10:00:49 UTC
Here is the info from an fc4 system where everything works fine:
[10:55 AM][awjb@alkaid ~]$ rpm -qf /usr/include/unistd.h 
glibc-headers-2.3.5-10.3
[10:57 AM][awjb@alkaid ~]$ rpm -qf /usr/lib/ruby/1.8/i386-linux/intern.h
ruby-devel-1.8.4-1.fc4

[10:57 AM][awjb@alkaid ~]$ grep eaccess /usr/lib/ruby/1.8/i386-linux/intern.h
/usr/include/unistd.h 
/usr/lib/ruby/1.8/i386-linux/intern.h:int eaccess _((const char*, int));

Now on devel I get this:
[11:04 AM][awjb@alioth ~]$  rpm -qf /usr/include/unistd.h
glibc-headers-2.3.90-30
[11:04 AM][awjb@alioth ~]$ rpm -qf /usr/lib/ruby/1.8/i386-linux/intern.h
ruby-devel-1.8.4-2


[10:59 AM][awjb@alioth ~]$ grep eaccess /usr/lib/ruby/1.8/i386-linux/intern.h
/usr/include/unistd.h 
/usr/lib/ruby/1.8/i386-linux/intern.h:int eaccess _((const char*, int));
/usr/include/unistd.h:extern int eaccess (__const char *__name, int __type)
/usr/include/unistd.h:   If AT_EACCESS is set in FLAG, then use effective IDs
like `eaccess',

with eaccess in unistd.h like this:
/* An alias for `euidaccess', used by some other systems.  */
extern int eaccess (__const char *__name, int __type)
     __THROW __nonnull ((1));

and ruby being:
int eaccess _((const char*, int));

Resulting in:
make[4]: Entering directory `/builddir/build/BUILD/koffice-1.4.90/lib/kross/ruby'
/bin/sh ../../../libtool --silent --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H
-I. -I. -I../../.. -I../../../lib/kross -I/usr/lib/ruby/1.8/i386-linux
-I/usr/include/kde -I/usr/lib/qt-3.3/include -I.   -DQT_THREAD_SUPPORT 
-D_REENTRANT  -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE
-Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -O2 -g
-pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4
-fasynchronous-unwind-tables -Wformat-security -Wmissing-format-attribute
-Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common
-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT
-DQT_NO_TRANSLATION -DHAVE_KNEWSTUFF -fexceptions -c -o rubyinterpreter.lo
rubyinterpreter.cpp
/usr/include/unistd.h:266: error: declaration of 'int eaccess(const char*, int)
throw ()' throws different exceptions
/usr/lib/ruby/1.8/i386-linux/intern.h:224: error: from previous declaration 'int
eaccess(const char*, int)'
make[4]: *** [rubyinterpreter.lo] Error 1
make[4]: Leaving directory `/builddir/build/BUILD/koffice-1.4.90/lib/kross/ruby'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/builddir/build/BUILD/koffice-1.4.90/lib/kross'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/builddir/build/BUILD/koffice-1.4.90/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/builddir/build/BUILD/koffice-1.4.90'
make: *** [all] Error 2

Comment 1 Andreas Bierfert 2006-02-03 10:02:15 UTC
darn should read: ...not work with glibc headers.

Comment 2 Jakub Jelinek 2006-02-03 17:27:01 UTC
Ruby certainly should never redeclare prototypes defined in glibc headers.
It needs to use configure to figure out whether the prototype is provided.

Comment 3 Akira TAGOH 2006-02-06 04:41:38 UTC
Fixed in ruby-1.8.4-3.