Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -639,11 +639,14 @@ esac AC_CHECK_FUNCS(_Unwind_Backtrace) AC_CHECK_FUNC(objc_autoreleasePoolPush, [], [ - AC_SUBST(AUTORELEASE_M, "autorelease.m") + AC_SUBST(RUNTIME_AUTORELEASE_M, "runtime/autorelease.m") +]) +AC_CHECK_FUNC(objc_constructInstance, [], [ + AC_SUBST(RUNTIME_INSTANCE_M, "runtime/instance.m") ]) case "$host_os" in darwin*) AC_SUBST(LDFLAGS_REEXPORT, ["-Wl,-reexport-lobjfw"]) Index: extra.mk.in ================================================================== --- extra.mk.in +++ extra.mk.in @@ -15,11 +15,10 @@ OBJFWBRIDGE_SHARED_LIB = @OBJFWBRIDGE_SHARED_LIB@ OBJFWBRIDGE_STATIC_LIB = @OBJFWBRIDGE_STATIC_LIB@ OBJFWBRIDGE_FRAMEWORK = @OBJFWBRIDGE_FRAMEWORK@ -AUTORELEASE_M = @AUTORELEASE_M@ BIN_PREFIX = @BIN_PREFIX@ BRIDGE = @BRIDGE@ CVINCLUDE_INLINE_H = @CVINCLUDE_INLINE_H@ ENCODINGS = @ENCODINGS@ ENCODINGS_A = @ENCODINGS_A@ @@ -34,11 +33,10 @@ FISH_COMPLETIONS = @FISH_COMPLETIONS@ FORWARDING_A = @FORWARDING_A@ FORWARDING_FORWARDING_A = @FORWARDING_FORWARDING_A@ FORWARDING_FORWARDING_LIB_A = @FORWARDING_FORWARDING_LIB_A@ FORWARDING_LIB_A = @FORWARDING_LIB_A@ -INSTANCE_M = @INSTANCE_M@ INVOCATION_A = @INVOCATION_A@ INVOCATION_INVOCATION_A = @INVOCATION_INVOCATION_A@ INVOCATION_INVOCATION_LIB_A = @INVOCATION_INVOCATION_LIB_A@ INVOCATION_LIB_A = @INVOCATION_LIB_A@ LIBBASES_M = @LIBBASES_M@ @@ -66,11 +64,13 @@ OF_SCTP_SOCKET_M = @OF_SCTP_SOCKET_M@ OF_SELECT_KERNEL_EVENT_OBSERVER_M = @OF_SELECT_KERNEL_EVENT_OBSERVER_M@ REEXPORT_RUNTIME = @REEXPORT_RUNTIME@ REEXPORT_RUNTIME_FRAMEWORK = @REEXPORT_RUNTIME_FRAMEWORK@ RUNTIME = @RUNTIME@ +RUNTIME_AUTORELEASE_M = @RUNTIME_AUTORELEASE_M@ RUNTIME_FRAMEWORK_LIBS = @RUNTIME_FRAMEWORK_LIBS@ +RUNTIME_INSTANCE_M = @RUNTIME_INSTANCE_M@ RUNTIME_LIBS = @RUNTIME_LIBS@ RUN_TESTS = @RUN_TESTS@ SFDC_INLINE_H = @SFDC_INLINE_H@ SFDC_TARGET = @SFDC_TARGET@ SFD_FILE = @SFD_FILE@ Index: src/Makefile ================================================================== --- src/Makefile +++ src/Makefile @@ -212,11 +212,13 @@ OFRangeCharacterSet.m \ OFRangeValue.m \ OFRectangleValue.m \ OFSubarray.m \ OFUTF8String.m \ - ${LIBBASES_M} + ${LIBBASES_M} \ + ${RUNTIME_AUTORELEASE_M} \ + ${RUNTIME_INSTANCE_M} SRCS_FILES += OFFileURLHandler.m \ OFINIFileSettings.m SRCS_SOCKETS += OFDNSResolverSettings.m \ OFHTTPURLHandler.m \ OFHostAddressResolver.m \ Index: src/OFObject.h ================================================================== --- src/OFObject.h +++ src/OFObject.h @@ -1330,10 +1330,15 @@ extern "C" { #endif #ifdef OF_APPLE_RUNTIME extern void *_Null_unspecified objc_autoreleasePoolPush(void); extern void objc_autoreleasePoolPop(void *_Null_unspecified pool); +# ifndef __OBJC2__ +extern id _Nullable objc_constructInstance(Class _Nullable class_, + void *_Nullable bytes); +extern void *_Nullable objc_destructInstance(id _Nullable object); +# endif #endif extern id of_alloc_object(Class class_, size_t extraSize, size_t extraAlignment, void *_Nullable *_Nullable extra); extern void OF_NO_RETURN_FUNC of_method_not_found(id self, SEL _cmd); extern uint32_t of_hash_seed; Index: src/runtime/autorelease.m ================================================================== --- src/runtime/autorelease.m +++ src/runtime/autorelease.m @@ -18,16 +18,26 @@ #include "config.h" #include #include -#import "ObjFWRT.h" -#import "private.h" +#ifdef OF_OBJFW_RUNTIME +# import "ObjFWRT.h" +# import "private.h" +#else +# import +#endif #if !defined(OF_HAVE_COMPILER_TLS) && defined(OF_HAVE_THREADS) # import "tlskey.h" #endif + +#ifndef OF_OBJFW_RUNTIME +@interface DummyObject +- (void)release; +@end +#endif #if defined(OF_HAVE_COMPILER_TLS) static thread_local id *objects = NULL; static thread_local uintptr_t count = 0; static thread_local uintptr_t size = 0; Index: src/runtime/instance.m ================================================================== --- src/runtime/instance.m +++ src/runtime/instance.m @@ -15,12 +15,18 @@ * file. */ #include "config.h" -#import "ObjFWRT.h" -#import "private.h" +#include + +#ifdef OF_OBJFW_RUNTIME +# import "ObjFWRT.h" +# import "private.h" +#else +# import +#endif static SEL constructSelector = NULL; static SEL destructSelector = NULL; static bool