bug-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bugs #11188] configure check for __objc_msg_forward (checking "for forw


From: Adam Fedor
Subject: [bugs #11188] configure check for __objc_msg_forward (checking "for forwarding callback in runtime") should be rewritten
Date: Sun, 12 Dec 2004 23:52:54 -0500
User-agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/125.5.5 (KHTML, like Gecko) Safari/125.12

This mail is an automated notification from the bugs tracker
 of the project: GNUstep.

/**************************************************************************/
[bugs #11188] Latest Modifications:

Changes by: 
                Adam Fedor <fedor@gnu.org>
'Date: 
                Mon 12/13/2004 at 04:42 (US/Mountain)

------------------ Additional Follow-up Comments ----------------------------
OK, I cleaned up configure to avoid using the wrong flags with C programs (and 
the right ones with ObjC). Try it now.






/**************************************************************************/
[bugs #11188] Full Item Snapshot:

URL: <http://savannah.gnu.org/bugs/?func=detailitem&item_id=11188>
Project: GNUstep
Submitted by: 0
On: Thu 12/02/2004 at 02:35

Category:  Base/Foundation
Severity:  5 - Average
Item Group:  Bug
Resolution:  Fixed
Privacy:  Public
Assigned to:  fedor
Status:  Closed


Summary:  configure check for __objc_msg_forward (checking "for forwarding 
callback in runtime") should be rewritten

Original Submission:  checking "for forwarding callback in runtime" currently 
checks if "__objc_msg_forward" is present in the preprocessed file from gcc (by 
invoking gcc with -E):

starting at line 13843:

have_forward_hook=yes
echo "$as_me:$LINENO: checking "for forwarding callback in runtime"" >&5
echo $ECHO_N "checking "for forwarding callback in runtime"... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h.  */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h.  */
#include <objc/objc-api.h>

_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  $EGREP "__objc_msg_forward" >/dev/null 2>&1; then
  echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
  echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6; have_forward_hook=no
fi
rm -f conftest*

in line 13856 there is a grep for  "__objc_msg_forward". If that is present it 
is assumed that forwarding callback in runtime is working. 

there are some problems with that way of doing this. 

At first, as andrew pinski pointed out it is in no way guarantied that 
forwarding callback works if grep find a occurrence of "__objc_msg_forward". 
there could also be a variable named that way in the code.

Second and more important is that -E and -fgnu-runtime don't work together in 
the upcoming version 4.0 of gcc (and this is hard to fix according to pinskia 
at gcc dot gnu dot org):

cc1: warning: command line option "-fgnu-runtime" is valid for ObjC/ObjC++ but 
not for C

See also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18772

because of that pinskia also proposed a better (and more robust) check for that 
feature:

try to compile:

#include <objc/objc-api.h>
...
IMP (*__objc_msg_forward1)(SEL) = __objc_msg_forward;
...

for questions please mail to 
lars dot sonchocky-helldorf at hamburg dot de 
and/or
pinskia at gcc dot gnu dot org

regards, Lars

Follow-up Comments
------------------


-------------------------------------------------------
Date: Mon 12/13/2004 at 04:42       By: Adam Fedor <fedor>
OK, I cleaned up configure to avoid using the wrong flags with C programs (and 
the right ones with ObjC). Try it now.

-------------------------------------------------------
Date: Fri 12/10/2004 at 11:59       By: 0 <None>
nearly perfect, except for the fact that configure does not know how to handle 
ObjC files correctly (for instance by creating 'conftest.m' instead of 
'conftest.c'

So:
 
./configure CC='/opt/local/bin/gcc' 

for base still (core.20041209.tar.bz2) fails on (Open)Darwin(/x86) like this:

configure:13838: checking "for forwarding callback in runtime"
configure:13844: /opt/local/bin/gcc -c -g -O2  -fgnu-runtime 
-I/opt/local/GNUstep/System/Library/Headers conftest.c >&5
cc1: warning: command line option "-fgnu-runtime" is valid for ObjC/ObjC++ but 
not for C
In file included from conftest.c:1:
./config/config.forward.m: In function 'main':
./config/config.forward.m:5: error: '__objc_msg_forward1' undeclared (first use 
in this function)
./config/config.forward.m:5: error: (Each undeclared identifier is reported 
only once
./config/config.forward.m:5: error: for each function it appears in.)
./config/config.forward.m:5: error: 'SEL' undeclared (first use in this 
function)
./config/config.forward.m:5: error: called object 'IMP(<erroneous-expression>)' 
is not a function
./config/config.forward.m:5: error: '__objc_msg_forward' undeclared (first use 
in this function)
configure:13850: $? = 1
configure: failed program was:
| #include "./config/config.forward.m"
configure:13873: result: no
configure:13880: checking "FFI library usage"
configure:14004: result: none
configure:14025: error: Incomplete support for ffi functionality.

A workaround for this was to use:

./configure CC='/opt/local/bin/gcc -x objective-c'

which resulted in:

checking "for forwarding callback in runtime"... yes
checking "FFI library usage"... ffcall

what is correct in my case (OpenDarwin/x86 has no support for libffi because 
the ABI is constantly changing)

regards, Lars

-------------------------------------------------------
Date: Wed 12/08/2004 at 16:25       By: Adam Fedor <fedor>
Fixed.

2004-12-07  Adam Fedor  <fedor@gnu.org>
        * configure.ac: Test for objc forwarding by compiling a program.
        * config/config.forward.m: New file.
        (Fixes bug #11188).













For detailed info, follow this link:
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=11188>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/







reply via email to

[Prev in Thread] Current Thread [Next in Thread]