Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/Makefile,v
diff -u -r1.40 Makefile
--- Makefile	10 Sep 2025 17:04:13 -0000	1.40
+++ Makefile	19 Jan 2026 08:34:48 -0000
@@ -3,22 +3,23 @@
 COMMENT =	GNUstep libobjc2 objective-c runtime
 
 # note: this port does not use the gnustep module
-VERSION =	2.2.1
+VERSION =	2.3
 GH_ACCOUNT =	gnustep
 GH_PROJECT =	libobjc2
 GH_TAGNAME =	v${VERSION}
 DISTNAME =	libobjc2-${VERSION:S/_//}
 PKGNAME =	gnustep-${DISTNAME}
-REVISION =	0
 
-SHARED_LIBS +=	objc2	3.0
-SHARED_LIBS +=  objcxx	2.0
+SHARED_LIBS +=	objc2	4.0
+SHARED_LIBS +=  objcxx	3.0
 
 CATEGORIES =	x11/gnustep devel
 
 HOMEPAGE =	http://www.gnustep.org/
 
-WANTLIB += ${COMPILER_LIBCXX} m
+WANTLIB += ${COMPILER_LIBCXX} m BlocksRuntime
+
+LIB_DEPENDS +=	devel/libdispatch
 
 COMPILER =	base-clang
 MODULES =	devel/cmake
@@ -30,24 +31,37 @@
 .endif
 
 BUILD_DEPENDS +=	devel/robin-map
+BUILD_DEPENDS +=	devel/libdispatch:patch
 MAKE_FLAGS +=	LIBOBJCLIBNAME=objc2 \
 		LIBOBJC=libobjc2 \
 		HEADER_DIR=${DESTDIR}${PREFIX}/include/gnustep \
 		VERSION=${LIBobjc2_VERSION} \
 		SILENT=""
 
-CONFIGURE_ARGS +=       -DLIBOBJC_NAME=objc2 -DINCLUDE_DIRECTORY=gnustep/objc \
+CONFIGURE_ARGS +=	-DLIBOBJC_NAME=objc2 -DINCLUDE_DIRECTORY=gnustep/objc \
 			-DCMAKE_MODULE_PATH=${PREFIX}/share/llvm/cmake \
-                        -DBUILD_STATIC_LIBOBJC=On \
-                        -DLLVM_OPTS=Off \
-                        -DTESTS=Off \
-			-DCMAKE_CXX_FLAGS="-I${LOCALBASE}/include"
-
-MAKE_FLAGS +=   LIBOBJCLIBNAME=objc2 \
-                LIBOBJC=libobjc2
-
-# The Block.h would conflict with devel/libdispatch
-post-install:
-	mv ${PREFIX}/include/Block* ${PREFIX}/include/gnustep/
+			-DBUILD_STATIC_LIBOBJC=On \
+			-DEMBEDDED_BLOCKS_RUNTIME=Off \
+			-DOLDABI_COMPAT=Off \
+			-DLLVM_OPTS=Off \
+			-DTESTS=Off \
+			-DHAVE_BLOCK_USE_RR2=1 \
+			-DCMAKE_C_FLAGS="${CFLAGS} -I${WRKSRC}/libdispatch/BlocksRuntime -I${LOCALBASE}/include" \
+			-DCMAKE_CXX_FLAGS="${CXXFLAGS} -I${WRKSRC}/libdispatch/BlocksRuntime -I${LOCALBASE}/include" \
+			-DCMAKE_OBJC_FLAGS="${OBJCFLAGS} -I${WRKSRC}/libdispatch/BlocksRuntime -I${LOCALBASE}/include" \
+			-DCMAKE_OBJCXX_FLAGS="${OBJCXXFLAGS} -I${WRKSRC}/libdispatch/BlocksRuntime -I${LOCALBASE}/include"
+
+post-extract:
+	ln -s ${WRKDIR}/devel/libdispatch/swift-*/src/ ${WRKSRC}/libdispatch
+
+# This only builds all test, but doesn't run them
+test:
+	cd ${WRKSRC}/Test && \
+	cmake -DCMAKE_C_FLAGS="-I/home/ports/pobj/amd64/gnustep-libobjc2-2.3/build-amd64/objc -I${WRKSRC}" \
+		-DCMAKE_OBJC_FLAGS="-I/home/ports/pobj/amd64/gnustep-libobjc2-2.3/build-amd64/objc -I${WRKSRC}" \
+		-DCMAKE_CXX_FLAGS="-I/home/ports/pobj/amd64/gnustep-libobjc2-2.3/build-amd64/objc -I${WRKSRC}" \
+		-DCMAKE_EXE_LINKER_FLAGS="-L/home/ports/pobj/amd64/gnustep-libobjc2-2.3/build-amd64 -lobjc2 -L/usr/local/lib -lBlocksRuntime -lpthread -lc++abi" \
+		-Wno-dev . && \
+	make VERBOSE=1
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/distinfo,v
diff -u -r1.6 distinfo
--- distinfo	22 Apr 2024 06:47:57 -0000	1.6
+++ distinfo	19 Jan 2026 08:34:48 -0000
@@ -1,2 +1,2 @@
-SHA256 (gnustep/libobjc2-2.2.1.tar.gz) = do6oxb0JmaKbXRV4ESVJT5hkVsHcXFHTcPsxhSzTHqE=
-SIZE (gnustep/libobjc2-2.2.1.tar.gz) = 205087
+SHA256 (gnustep/libobjc2-2.3.tar.gz) = Xq0idrQqU0rEBDfOU7IjEyC5hVOdwyVFPZOHS+jZKGk=
+SIZE (gnustep/libobjc2-2.3.tar.gz) = 213139
Index: patches/patch-CMakeLists_txt
===================================================================
RCS file: patches/patch-CMakeLists_txt
diff -N patches/patch-CMakeLists_txt
--- patches/patch-CMakeLists_txt	10 Sep 2025 17:04:13 -0000	1.10
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,14 +0,0 @@
-Enable objc_method_cache_version on powerpc.
-
-Index: CMakeLists.txt
---- CMakeLists.txt.orig
-+++ CMakeLists.txt
-@@ -188,7 +188,7 @@ add_compile_options($<$<STREQUAL:${CMAKE_SYSTEM_PROCES
- # which is used in safe caching.
- # You must also update the guard in objc/runtime.h, when updating
- # this macro.
--if (ARCHITECTURE STREQUAL "powerpc")
-+if (OFF AND ARCHITECTURE STREQUAL "powerpc")
- 	add_definitions(-DNO_SAFE_CACHING)
- endif()
- 
Index: patches/patch-Test_CMakeLists_txt
===================================================================
RCS file: patches/patch-Test_CMakeLists_txt
diff -N patches/patch-Test_CMakeLists_txt
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-Test_CMakeLists_txt	19 Jan 2026 08:34:48 -0000
@@ -0,0 +1,76 @@
+Index: Test/CMakeLists.txt
+--- Test/CMakeLists.txt.orig
++++ Test/CMakeLists.txt
+@@ -2,7 +2,15 @@
+ # Clear the LD_LIBRARY_PATH if GNUstep set it so that we don't accidentally use
+ # the installed version
+ 
++# Default-Werte
++if(NOT DEFINED LEGACY)
++    set(LEGACY OFF)
++endif()
++if(NOT DEFINED OLDABI_COMPAT)
++    set(OLDABI_COMPAT OFF)
++endif()
+ 
++
+ set(INCREMENTAL " ")
+ if (MSVC)
+ 	set(CMAKE_EXE_LINKER_FLAGS "/DEBUG /INCREMENTAL:NO ${CMAKE_EXE_LINKER_FLAGS}")
+@@ -135,7 +143,7 @@ function(addtest_flags TEST_NAME FLAGS TEST_SOURCE)
+ 	if(WIN32)
+ 		set_property(TEST ${TEST_NAME} PROPERTY ENVIRONMENT_MODIFICATION "PATH=path_list_append:${CMAKE_BINARY_DIR}")
+ 	endif()
+-	target_link_libraries(${TEST_NAME} objc)
++	target_link_libraries(${TEST_NAME} objc2)
+ endfunction(addtest_flags)
+ 
+ function(addtest_variants TEST TEST_SOURCE LEGACY)
+@@ -164,19 +172,35 @@ foreach(TEST_SOURCE ${NEW_TESTS})
+ endforeach()
+ 
+ # Tests that are more than a single file.
+-addtest_variants("CXXExceptions" "CXXException.m;CXXException.cc" true)
++#addtest_variants("CXXExceptions" "CXXException.m;CXXException.cc" true)
+ addtest_variants("ForwardDeclareProtocolAccess" "ForwardDeclareProtocolAccess.m;ForwardDeclareProtocol.m" true)
+-if (ENABLE_OBJCXX)
+-	addtest_variants(ObjCXXEHInterop "ObjCXXEHInterop.mm;ObjCXXEHInterop.m" true)
+-	addtest_variants(ObjCXXEHInteropTwice "ObjCXXEHInteropTwice.mm" true)
+-	if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
+-		if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0.0)
+-			addtest_variants(ObjCXXEHInterop_arc "ObjCXXEHInterop_arc.mm;ObjCXXEHInterop_arc.m" true)
+-		endif()
+-	else()
+-		addtest_variants(ObjCXXEHInterop_arc "ObjCXXEHInterop_arc.mm;ObjCXXEHInterop_arc.m" true)
+-	endif()
+-endif()
++#if (ENABLE_OBJCXX)
++#	addtest_variants(ObjCXXEHInterop "ObjCXXEHInterop.mm;ObjCXXEHInterop.m" true)
++#	addtest_variants(ObjCXXEHInteropTwice "ObjCXXEHInteropTwice.mm" true)
++#	if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
++#		if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0.0)
++#			addtest_variants(ObjCXXEHInterop_arc "ObjCXXEHInterop_arc.mm;ObjCXXEHInterop_arc.m" true)
++#		endif()
++#	else()
++#		addtest_variants(ObjCXXEHInterop_arc "ObjCXXEHInterop_arc.mm;ObjCXXEHInterop_arc.m" true)
++#	endif()
++#endif()
++
++# CXXExceptions needs C++ linker
++#add_executable(CXXExceptions CXXException.m CXXException.cc)
++#set_target_properties(CXXExceptions PROPERTIES
++#    LINKER_LANGUAGE CXX
++#)
++#target_link_libraries(CXXExceptions
++#    objc2
++#    c++abi
++#    c++
++#    BlocksRuntime
++#    dispatch
++#    pthread
++#    m
++#)
++
+ 
+ # Some tests use enough memory that they fail on CI intermittently if they
+ # happen to run in parallel with each other.
Index: patches/patch-block_trampolines_S
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/patches/patch-block_trampolines_S,v
diff -u -r1.2 patch-block_trampolines_S
--- patches/patch-block_trampolines_S	22 Apr 2024 06:47:57 -0000	1.2
+++ patches/patch-block_trampolines_S	19 Jan 2026 08:34:48 -0000
@@ -14,6 +14,6 @@
  ////////////////////////////////////////////////////////////////////////////////
  .macro trampoline arg0, arg1
 +	bti c
- 	adr x17, #-4096
+ 	adr x17, #-0x1000
  	mov \arg1, \arg0
  	ldp \arg0, x17, [x17]
Index: patches/patch-objc_msgSend_x86-64_S
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/patches/patch-objc_msgSend_x86-64_S,v
diff -u -r1.1 patch-objc_msgSend_x86-64_S
--- patches/patch-objc_msgSend_x86-64_S	7 Mar 2024 12:22:50 -0000	1.1
+++ patches/patch-objc_msgSend_x86-64_S	19 Jan 2026 08:34:48 -0000
@@ -1,9 +1,9 @@
 Index: objc_msgSend.x86-64.S
 --- objc_msgSend.x86-64.S.orig
 +++ objc_msgSend.x86-64.S
-@@ -8,7 +8,7 @@
- #	define SECOND_ARGUMENT %rdx
+@@ -9,7 +9,7 @@
  #	define THIRD_ARGUMENT %r8
+ #	define FOURTH_ARGUMENT %r9
  #else
 -#	define START_PROC(x) .cfi_startproc
 +#	define START_PROC(x) .cfi_startproc; endbr64
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/x11/gnustep/libobjc2/pkg/PLIST,v
diff -u -r1.7 PLIST
--- pkg/PLIST	5 Mar 2024 13:28:56 -0000	1.7
+++ pkg/PLIST	19 Jan 2026 08:34:48 -0000
@@ -1,12 +1,8 @@
 include/gnustep/
-include/gnustep/Block.h
-include/gnustep/Block_private.h
 include/gnustep/objc/
 include/gnustep/objc/Availability.h
 include/gnustep/objc/Object.h
 include/gnustep/objc/Protocol.h
-include/gnustep/objc/blocks_private.h
-include/gnustep/objc/blocks_runtime.h
 include/gnustep/objc/capabilities.h
 include/gnustep/objc/developer.h
 include/gnustep/objc/encoding.h
@@ -16,6 +12,7 @@
 include/gnustep/objc/objc-arc.h
 include/gnustep/objc/objc-auto.h
 include/gnustep/objc/objc-class.h
+include/gnustep/objc/objc-config.h
 include/gnustep/objc/objc-exception.h
 include/gnustep/objc/objc-runtime.h
 include/gnustep/objc/objc-visibility.h
@@ -23,6 +20,12 @@
 include/gnustep/objc/runtime-deprecated.h
 include/gnustep/objc/runtime.h
 include/gnustep/objc/slot.h
+lib/cmake/
+lib/cmake/libobjc/
+lib/cmake/libobjc/libobjcConfig.cmake
+lib/cmake/libobjc/libobjcConfigVersion.cmake
+lib/cmake/libobjc/libobjcTargets${MODCMAKE_BUILD_SUFFIX}
+lib/cmake/libobjc/libobjcTargets.cmake
 @static-lib lib/libobjc2.a
 @lib lib/libobjc2.so.${LIBobjc2_VERSION}
 lib/pkgconfig/libobjc.pc
