That makes sense. It sounds like what I tried to work around (but it was back in November, and at 1am I was rather too tired to resume investigation).
So this sounds like a good advice. I'll try moving GCC's Objective-C runtime away, or fixing the header search path in [1].
November ivucica accompanied the patch with the following note, so I assume the patch is actually broken:
#### ADDING RUNTIME.H DIDNT HELP FOR SOME REASON
# Maybe HAVE_OBJC_RUNTIME_H is not defined?! Maybe config.h must be
# included?
I'll know more after I take another look.
Index: Source/Additions/GSObjCRuntime.m
===================================================================
--- Source/Additions/GSObjCRuntime.m (revision 38165)
+++ Source/Additions/GSObjCRuntime.m (working copy)
@@ -49,6 +49,10 @@
#import "../GSPrivate.h"
+#if HAVE_OBJC_RUNTIME_H
+#include <objc/runtime.h> /* needed for GNUstep's libobjc2 to be detected through __GNUSTEP_RUNTIME__ */
+#endif
+
#include <objc/Protocol.h>
#include <stdio.h>
@@ -156,10 +160,10 @@
{
#if NeXT_RUNTIME
return sel_getUid(name);
+#elif defined (__GNUSTEP_RUNTIME__)
+ return sel_registerTypedName_np(name, types);
#elif defined (__GNU_LIBOBJC__) && (__GNU_LIBOBJC__ >= 20110608)
return sel_registerTypedName(name, types);
-#elif defined (__GNUSTEP_RUNTIME__)
- return sel_registerTypedName_np(name, types);
#else
extern SEL sel_get_any_typed_uid(const char*);
extern SEL sel_get_typed_uid(const char*, const char*);
@@ -203,10 +207,10 @@
{
#if NeXT_RUNTIME
return 0;
+#elif defined (__GNUSTEP_RUNTIME__)
+ return sel_getType_np(sel);
#elif defined (__GNU_LIBOBJC__)
return sel_getTypeEncoding(sel);
-#elif defined (__GNUSTEP_RUNTIME__)
- return sel_getType_np(sel);
#else
if (sel == 0)
{
Index: Source/NSException.m
===================================================================
--- Source/NSException.m (revision 38165)
+++ Source/NSException.m (working copy)
@@ -47,6 +47,10 @@
#include <objc/objc-exception.h>
#endif
+#ifdef HAVE_UNEXPECTED
+extern void (*_objc_unexpected_exception)(id);
+#endif
+
#ifdef HAVE_MALLOC_H
#if !defined(__OpenBSD__)
#include <malloc.h>
n.b. If this build system actually starts to work (it used to work, but IIRC not with Clang), producing packages for additional applications involves providing a .spec file, including Master/deb.make from gnustep-make into GNUmakefile, and running:
Afterwards, pushing source packages to Launchpad (so they can be built by Canonical into binaries for PPAs) will involve something similar to:
dput ppa:your-launchpad-username/your-launchpad-repository build/gnustep/core/{make,base/obj,gui/obj,back/obj}/debian_dist/*_source.changes
But, it needs to actually work first... :-)