Discussion:
[bug #53338] base configure script does not detect nonfragile ABI correctly
Graham Lee
2018-03-13 21:34:30 UTC
Permalink
URL:
<http://savannah.gnu.org/bugs/?53338>

Summary: base configure script does not detect nonfragile ABI
correctly
Project: GNUstep
Submitted by: leeg
Submitted on: Tue 13 Mar 2018 09:34:29 PM UTC
Category: Base/Foundation
Severity: 3 - Normal
Item Group: Bug
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any

_______________________________________________________

Details:

Platform: linux (fedora core 27)
Compiler: clang 5.0.1
ObjC runtime: libobjc2

GNUstep-make was configured with '--enable-objc-nonfragile-abi'. I see in the
gnustep-config output:

$ gnustep-config --objc-flags
-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1
-DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions
-fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi
-D_NONFRAGILE_ABI -pthread -fPIC -g -DDEBUG -fno-omit-frame-pointer -Wall
-DGSWARN -DGSDIAGNOSE -Wno-import -fobjc-runtime=gnustep-1.8.1 -fblocks
-fobjc-runtime=gnustep-1.8.1 -fgnu-runtime
-fconstant-string-class=NSConstantString -I.
-I/home/leeg/GNUstep/Library/Headers -I/usr/local/include

GNUstep-base configure script, when configured either with no flags or with
--disable-mixedabi, does not detect the nonfragile abi. Then building -base
fails, because I requested the nonfragile ABI but it can't find it. I find
that if I compile the test program:

$ clang config/config.non-fragile-ivars.m
$ ./a.out
$ echo $?
1 [i.e. no nonfragile ABI detected]

however:

$ clang -fobjc-runtime=gnustep-1.8.1 config/config.non-fragile-ivars.m
$ ./a.out
$ echo $?
0 [i.e. it was detected!]

If I edit GSConfig.h by hand to change GS_NONFRAGILE=1, then -base builds and
'make check' succeeds.

The expected behaviour is that ./configure correctly detects the nonfragile
ABI availability.




_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Galen Rhodes
2018-04-22 18:17:25 UTC
Permalink
Follow-up Comment #1, bug #53338 (project gnustep):

I found the issue in the base/configure script that is causing this problem.
the -fobjc-nonfragile-abi flag was removed from the script when it is testing
for non fragile abi support so it always fails. This issue starts on line 8061
and a missing line between 8081 and 8082. I'll try to attach a screen shot of
the file comparison.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Galen Rhodes
2018-04-22 18:18:32 UTC
Permalink
Additional Item Attachment, bug #53338 (project gnustep):

File name: Screen Shot 2018-04-22 at 12.25.22 PM.png Size:902 KB


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Richard Frith-Macdonald
2018-04-22 19:29:15 UTC
Permalink
Follow-up Comment #2, bug #53338 (project gnustep):

Sorry I missed seeing the original bug report here.

I think this is probably referencing some old version of GNUstep, because it's
talking about '-fobjc-nonfragile-abi'.

David said that option doesn't work properly in clang, so it has been removed
from gnustep (so there should be no more '--enable-objc-nonfragile-abi' option
in gnustep-make).

When you want the nonfragile abi, you should be configuring gnustep-make using
--with-library-combo=ng-gnu-gnu which should automatically use the nonfragile
abi.

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Galen Rhodes
2018-04-22 19:53:30 UTC
Permalink
Follow-up Comment #3, bug #53338 (project gnustep):

Except that ARC requires the -fobjc-nonfragile-abi flag. If you specify
-fobjc-arc without -fobjc-nonfragile-abi flag then the compile will fail with
the message "error: -fobjc-arc is not supported on platforms using the legacy
runtime"

_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
Richard Frith-Macdonald
2018-04-22 20:18:31 UTC
Permalink
Post by Galen Rhodes
Except that ARC requires the -fobjc-nonfragile-abi flag.
It doesn't on my systems (and shouldn't afaik with any version of clang). I
expect the error you got is because you aren't specifying the correct runtime,
not because you aren't specifying the obsolete/broken -fobjc-nonfragile-abi
flag.

If you are using current gnustep-make configured to support it (ie
--with-library-combo=ng-gnu-gnu) then it should work because the build system
should be compiling with the correct flags, but if you are specifying compiler
flags manually in environment variables etc you are expected to know what you
are doing and it's not really a gnustep issue.

Try configuring gnustep-make to use the new compiler/runtime features (ng),
and see if there are any problems then.


_______________________________________________________

Reply to this item at:

<http://savannah.gnu.org/bugs/?53338>

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

Loading...