Agreed, which is why I’m using clang in both base and make, and libobjc2. I still don’t understand this error.
Thanks, Graham. > On 20 Jan 2026, at 17:30, Andreas Fink <[email protected]> wrote: > > > if you use libobjc2, you use clang. if you use old runtime, you use gcc. > mixing code with old and new runtime will not work. Code using automatic > reference counting must use clang and libobjc2 runtime. > > As gnustep make defines compiler flags etc its important to use the right > version of runtime flags. > >>> On 20 Jan 2026, at 18:12, Graham Lee <[email protected]> wrote: >>> >> Hi all, >> >> I’m trying to compile GNUstep base inside a Guix environment. The Guix >> GNUstep module >> (https://codeberg.org/guix/guix/src/branch/master/gnu/packages/gnustep.scm) >> is a bit of a mix; it defines a GNUstep make that’s configured with gcc, and >> libobjc2 that needs clang. I’ve defined a package that inherits from their >> GNUstep make but uses clang as the compiler, then a shell guix.scm >> environment at the top-level of the libs-base checkout, to try and build >> libs-base. The shell uses clang, libobjc2, and my GNUstep-make package >> configured with clang. >> >> It configures fine, but in make I get errors from the objc runtime headers, >> shown below. Is this a mistake in configuring the package (it seems like >> it’s trying to use both the local and the libobjc2 header for >> objc/runtime.h), or did I get something else wrong? Does anyone have advice >> for me here? >> >> Thanks, >> >> Graham. >> >> Making all for subproject ObjectiveC2... >> Compiling file NSBlocks.m ... >> In file included from NSBlocks.m:19: >> ../../Headers/ObjectiveC2/objc/runtime.h:89:15: error: typedef redefinition >> with different types ('void *' vs 'struct objc_property *') >> typedef void *objc_property_t; >> ^ >> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:150:31: >> note: previous definition is here >> typedef struct objc_property* objc_property_t; >> ^ >> […] >> >> In file included from NSBlocks.m:19: >> ../../Headers/ObjectiveC2/objc/runtime.h:133:1: error: unknown type name >> 'Method_t'; did you mean 'Method'? >> Method * class_copyMethodList(Class cls, unsigned int *outCount); >> ^~~~~~ >> Method >> ../../Headers/ObjectiveC2/objc/runtime.h:84:17: note: expanded from macro >> 'Method' >> # define Method Method_t >> ^ >> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:126:29: >> note: 'Method' declared here >> typedef struct objc_method *Method; >> ^ >> […] >> >> NSBlocks.m:35:8: error: unknown type name 'objc_mutex_t' >> extern objc_mutex_t __objc_runtime_mutex; >> ^ >> NSBlocks.m:42:12: error: incomplete definition of type 'struct objc_class' >> metaClass->class_pointer = superclass->class_pointer; >> ~~~~~~~~~^ >> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:84:16: >> note: forward declaration of 'struct objc_class' >> typedef struct objc_class *Class; >> ^ >> >> >> <guix.scm>
