diff --git a/meta-oe/recipes-support/pidgin/libgnt/0001-meson-import-changes-from-3.0.-version.patch b/meta-oe/recipes-support/pidgin/libgnt/0001-meson-import-changes-from-3.0.-version.patch
deleted file mode 100644
index 8bb60b5557..0000000000
--- a/meta-oe/recipes-support/pidgin/libgnt/0001-meson-import-changes-from-3.0.-version.patch
+++ /dev/null
@@ -1,215 +0,0 @@
-From 51d66c1c257f7487497f562033ac32ac75f648cb Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Mon, 8 Feb 2021 12:27:51 +0100
-Subject: [PATCH] meson: import changes from 3.0.* version
-
-* we need to use the meson option to disable introspection and docs
-
-Upstream-Status: Backport
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- meson.build       | 139 ++++++++++++++++++++++++++++------------------
- meson_options.txt |   5 ++
- 2 files changed, 90 insertions(+), 54 deletions(-)
- create mode 100644 meson_options.txt
-
-diff --git a/meson.build b/meson.build
-index 1084c82..ed040b4 100644
---- a/meson.build
-+++ b/meson.build
-@@ -53,9 +53,9 @@ compiler = meson.get_compiler('c')
- pkgconfig = import('pkgconfig')
- 
- # #######################################################################
--# # Check for GLib 2.16
-+# # Check for GLib 2.44
- # #######################################################################
--glib = dependency('glib-2.0', version : '>= 2.16.0')
-+glib = dependency('glib-2.0', version : '>= 2.44.0')
- gobject = dependency('gobject-2.0')
- gmodule = dependency('gmodule-2.0')
- gnome = import('gnome')
-@@ -63,74 +63,88 @@ gnome = import('gnome')
- #######################################################################
- # Check for LibXML2
- #######################################################################
--libxml = dependency('libxml-2.0', version : '>= 2.6.0', required : false)
--gnt_config.set('NO_LIBXML', not libxml.found())
-+libxml = dependency('libxml-2.0', version : '>= 2.6.0')
- 
- #######################################################################
- # Check for ncurses and other things used by it
- #######################################################################
- ncurses_available = true
--ncurses_inc = []
--# The order of this list is important to the condition that follows.
--ncurses_libs = [
--	compiler.find_library('ncursesw', required : false),
--	compiler.find_library('panelw', required : false),
--	compiler.find_library('tinfow', required : false),
--]
--if not ncurses_libs[0].found() or not ncurses_libs[1].found()
--	ncurses_available = false
--endif
-+ncurses_widechar = true
-+ncurses_header = 'ncurses.h'
-+# Some distros put the headers in ncursesw/, some don't. These are ordered to
-+# pick the last available as most-specific version.
-+ncursesw_header_paths = ['', 'ncursesw/']
- 
--if host_machine.system() == 'windows'
--	# FIXME: $host ?
--	ncurses_sys_prefix = '/usr/$host/sys-root/mingw'
-+ncurses = [
-+	dependency('ncursesw', required : false),
-+	dependency('panelw', required : false),
-+]
-+if ncurses[0].found() and ncurses[1].found()
-+	foreach location : ncursesw_header_paths
-+		f = location + 'ncurses.h'
-+		if compiler.has_header_symbol(f, 'get_wch',
-+		    prefix : '#define _XOPEN_SOURCE_EXTENDED')
-+			ncurses_header = f
-+		endif
-+	endforeach
- else
--	ncurses_sys_prefix = '/usr'
--endif
--
--ncurses_sys_dirs = [ncurses_sys_prefix + '/include/ncursesw',
--                    ncurses_sys_prefix + '/include']
--
--if ncurses_available
--	# Some distros put the headers in ncursesw/, some don't
--	found_ncurses_h = false
--	foreach location : ncurses_sys_dirs
--		f = location + '/ncurses.h'
--		if not found_ncurses_h
-+	ncurses_available = false
-+	ncurses_inc = []
-+	ncurses_libs = [
-+		compiler.find_library('ncursesw', required : false),
-+		compiler.find_library('panelw', required : false)
-+	]
-+	if ncurses_libs[0].found() and ncurses_libs[1].found()
-+		foreach location : ncursesw_header_paths
-+			f = location + 'ncurses.h'
- 			if compiler.has_header_symbol(f, 'get_wch',
- 			    prefix : '#define _XOPEN_SOURCE_EXTENDED')
--				if location != '.'
--					ncurses_inc += [include_directories(location)]
--				endif
--				found_ncurses_h = true
-+				ncurses_available = true
-+				ncurses_header = f
- 			endif
--		endif
--	endforeach
-+		endforeach
- 
--	if not found_ncurses_h
--		ncurses_inc = []
--		ncurses_libs = []
--		ncurses_available = false
-+		if ncurses_available
-+			ncurses = declare_dependency(
-+			    include_directories : ncurses_inc,
-+			    dependencies : ncurses_libs
-+			)
-+		endif
- 	endif
--else
-+endif
-+
-+if not ncurses_available
- 	# ncursesw was not found. Look for plain old ncurses
--	# The order of this list is important to the condition that follows.
--	ncurses_libs = [
--		compiler.find_library('ncurses', required : false),
--		compiler.find_library('panel', required : false),
--		compiler.find_library('tinfo', required : false),
-+	ncurses = [
-+		dependency('ncurses', required : false),
-+		dependency('panel', required : false),
- 	]
--	ncurses_available = ncurses_libs[0].found() and ncurses_libs[1].found()
--	gnt_config.set('NO_WIDECHAR', true)
-+	if ncurses[0].found() and ncurses_libs[1].found()
-+		ncurses_available = true
-+	else
-+		ncurses_libs = [
-+			compiler.find_library('ncurses', required : false),
-+			compiler.find_library('panel', required : false),
-+		]
-+		ncurses_available = ncurses_libs[0].found() and ncurses_libs[1].found()
-+		ncurses = declare_dependency(dependencies : ncurses_libs)
-+	endif
-+	ncurses_widechar = false
- endif
-+
-+if not ncurses_available and host_machine.system() == 'windows'
-+	# Try pdcurses too.
-+	ncurses_header = 'curses.h'
-+	ncurses_libs = compiler.find_library('pdcurses', required : false)
-+	ncurses_available = compiler.has_header(ncurses_header) and ncurses_libs.found()
-+	ncurses = declare_dependency(dependencies : ncurses_libs)
-+endif
-+
- if not ncurses_available
- 	error('ncurses could not be found!')
- endif
--
--ncurses = declare_dependency(
--    include_directories : ncurses_inc,
--    dependencies : ncurses_libs
--)
-+gnt_config.set('NCURSES_HEADER', ncurses_header)
-+gnt_config.set10('NCURSES_WIDECHAR', ncurses_widechar)
- 
- libgnt_SOURCES = [
- 	'gntwidget.c',
-@@ -191,7 +205,10 @@ libgnt_headers = [
- ]
- 
- # Check for Python headers
--python_dep = dependency('python2', required : false)
-+python_dep = dependency('python3-embed', required: false)
-+if not python_dep.found()
-+	python_dep = dependency('python3', required : false)
-+endif
- gnt_config.set('USE_PYTHON', python_dep.found())
- 
- configure_file(output : 'gntconfig.h',
-@@ -233,6 +250,20 @@ pkgconfig.generate(
-     variables : ['plugindir = ${libdir}/gnt'],
-     )
- 
-+if get_option('introspection')
-+	libgnt_gir = gnome.generate_gir(libgnt,
-+	    sources : libgnt_headers + [gnt_h],
-+	    includes : 'GObject-2.0',
-+	    namespace : 'Gnt',
-+	    symbol_prefix : 'gnt',
-+	    identifier_prefix : 'Gnt',
-+	    nsversion : '@0@.@1@'.format(gnt_major_version, gnt_minor_version),
-+	    install : true,
-+	    extra_args : ['-DGNT_COMPILATION', '--quiet'])
-+endif
-+
- subdir('wms')
- subdir('test')
--subdir('doc')
-+if get_option('doc')
-+	subdir('doc')
-+endif
-diff --git a/meson_options.txt b/meson_options.txt
-new file mode 100644
-index 0000000..f2414e2
---- /dev/null
-+++ b/meson_options.txt
-@@ -0,0 +1,5 @@
-+option('doc', type : 'boolean', value : true, yield : true,
-+       description : 'build documentation with gtk-doc')
-+
-+option('introspection', type : 'boolean', value : true, yield : true,
-+       description : 'build introspection data')
diff --git a/meta-oe/recipes-support/pidgin/libgnt/0001-meson-use-pkg-config-to-find-ncursesw-panelw.patch b/meta-oe/recipes-support/pidgin/libgnt/0001-meson-use-pkg-config-to-find-ncursesw-panelw.patch
new file mode 100644
index 0000000000..9d2d2ab77c
--- /dev/null
+++ b/meta-oe/recipes-support/pidgin/libgnt/0001-meson-use-pkg-config-to-find-ncursesw-panelw.patch
@@ -0,0 +1,111 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 4 Aug 2026 00:00:00 +0000
+Subject: [PATCH] meson: use pkg-config to find ncursesw/panelw
+
+The hand-rolled ncurses detection hardcodes the absolute host paths
+/usr/include/ncursesw and /usr/include when probing for ncurses.h and adds
+the matching -I to the compile line.  When cross-compiling this leaks the
+build host's ncurses headers into the target compile:
+
+  gntwm.c:170:21: error: incomplete definition of type 'PANEL'
+
+because the host's panel.h keeps PANEL opaque while the target sysroot's
+does not.
+
+Use pkg-config (ncursesw/panelw, falling back to ncurses/panel) so meson
+takes the include directories from the target sysroot.  libgnt 3.0 solves
+this the same way upstream.
+
+Upstream-Status: Inappropriate [libgnt 2.x is a maintenance-only branch;
+addressed differently in libgnt 3.0]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ meson.build | 68 ++++++++---------------------------------------------
+ 1 file changed, 10 insertions(+), 58 deletions(-)
+
+--- a/meson.build
++++ b/meson.build
+@@ -69,68 +69,28 @@
+ #######################################################################
+ # Check for ncurses and other things used by it
+ #######################################################################
+-ncurses_available = true
+-ncurses_inc = []
+-# The order of this list is important to the condition that follows.
+-ncurses_libs = [
+-	compiler.find_library('ncursesw', required : false),
+-	compiler.find_library('panelw', required : false),
+-	compiler.find_library('tinfow', required : false),
++# Use pkg-config so that cross builds pick up the include directories from
++# the target sysroot rather than the build host's /usr/include.
++ncurses_deps = [
++	dependency('ncursesw', required : false),
++	dependency('panelw', required : false),
+ ]
+-if not ncurses_libs[0].found() or not ncurses_libs[1].found()
+-	ncurses_available = false
+-endif
+-
+-if host_machine.system() == 'windows'
+-	# FIXME: $host ?
+-	ncurses_sys_prefix = '/usr/$host/sys-root/mingw'
+-else
+-	ncurses_sys_prefix = '/usr'
+-endif
++ncurses_available = ncurses_deps[0].found() and ncurses_deps[1].found()
+ 
+-ncurses_sys_dirs = [ncurses_sys_prefix + '/include/ncursesw',
+-                    ncurses_sys_prefix + '/include']
+-
+-if ncurses_available
+-	# Some distros put the headers in ncursesw/, some don't
+-	found_ncurses_h = false
+-	foreach location : ncurses_sys_dirs
+-		f = location + '/ncurses.h'
+-		if not found_ncurses_h
+-			if compiler.has_header_symbol(f, 'get_wch',
+-			    prefix : '#define _XOPEN_SOURCE_EXTENDED')
+-				if location != '.'
+-					ncurses_inc += [include_directories(location)]
+-				endif
+-				found_ncurses_h = true
+-			endif
+-		endif
+-	endforeach
+-
+-	if not found_ncurses_h
+-		ncurses_inc = []
+-		ncurses_libs = []
+-		ncurses_available = false
+-	endif
+-else
+-	# ncursesw was not found. Look for plain old ncurses
+-	# The order of this list is important to the condition that follows.
+-	ncurses_libs = [
+-		compiler.find_library('ncurses', required : false),
+-		compiler.find_library('panel', required : false),
+-		compiler.find_library('tinfo', required : false),
++if not ncurses_available
++	# ncursesw was not found. Look for plain old ncurses.
++	ncurses_deps = [
++		dependency('ncurses', required : false),
++		dependency('panel', required : false),
+ 	]
+-	ncurses_available = ncurses_libs[0].found() and ncurses_libs[1].found()
++	ncurses_available = ncurses_deps[0].found() and ncurses_deps[1].found()
+ 	gnt_config.set('NO_WIDECHAR', true)
+ endif
+ if not ncurses_available
+ 	error('ncurses could not be found!')
+ endif
+ 
+-ncurses = declare_dependency(
+-    include_directories : ncurses_inc,
+-    dependencies : ncurses_libs
+-)
++ncurses = declare_dependency(dependencies : ncurses_deps)
+ 
+ libgnt_SOURCES = [
+ 	'gntwidget.c',
diff --git a/meta-oe/recipes-support/pidgin/libgnt_2.14.1.bb b/meta-oe/recipes-support/pidgin/libgnt_2.14.3.bb
similarity index 74%
rename from meta-oe/recipes-support/pidgin/libgnt_2.14.1.bb
rename to meta-oe/recipes-support/pidgin/libgnt_2.14.3.bb
index f2fe4a7a93..ac58a135bc 100644
--- a/meta-oe/recipes-support/pidgin/libgnt_2.14.1.bb
+++ b/meta-oe/recipes-support/pidgin/libgnt_2.14.3.bb
@@ -11,13 +11,13 @@ inherit meson pkgconfig
 # SRC_URI = "hg://keep.imfreedom.org/${BPN};module=${BPN}
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/project/pidgin/${BPN}/${PV}/${BP}.tar.xz \
-    file://0001-meson-import-changes-from-3.0.-version.patch \
+    file://0001-meson-use-pkg-config-to-find-ncursesw-panelw.patch \
 "
-SRC_URI[sha256sum] = "5ec3e68e18f956e9998d79088b299fa3bca689bcc95c86001bc5da17c1eb4bd8"
+SRC_URI[sha256sum] = "57f5457f72999d0bb1a139a37f2746ec1b5a02c094f2710a339d8bcea4236123"
 
 UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/pidgin/files/libgnt/"
 UPSTREAM_CHECK_REGEX = "${BPN}/(?P<pver>\d+(\.\d+)+)"
 
-EXTRA_OEMESON = "-Dintrospection=false -Ddoc=false"
+EXTRA_OEMESON = "-Dpython2=false -Ddoc=false"
 
 FILES:${PN} += "${libdir}/gnt/s.so ${libdir}/gnt/irssi.so"
