repo/gentoo:master commit in: app-editors/emacs/

Ulrich Müller <[email protected]>
Newsgroups gmane.linux.gentoo.cvs
Message-ID <1786214945.30a49a0ad1daa9eae5498e96d706387831fae2d2.ulm@gentoo>
commit:     30a49a0ad1daa9eae5498e96d706387831fae2d2
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Sat Aug  8 18:49:05 2026 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Sat Aug  8 18:49:05 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=30a49a0a

app-editors/emacs: Nullify read-symbol-shorthands around intern calls

Bug: https://bugs.gentoo.org/980616
Bug: https://debbugs.gnu.org/80574
Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org>

 app-editors/emacs/Manifest              |   3 +
 app-editors/emacs/emacs-28.2-r21.ebuild | 550 +++++++++++++++++++++++++++
 app-editors/emacs/emacs-29.4-r9.ebuild  | 646 ++++++++++++++++++++++++++++++++
 app-editors/emacs/emacs-30.2-r5.ebuild  | 635 +++++++++++++++++++++++++++++++
 4 files changed, 1834 insertions(+)

diff --git a/app-editors/emacs/Manifest b/app-editors/emacs/Manifest
index 636068feb3f0..6205003af00f 100644
--- a/app-editors/emacs/Manifest
+++ b/app-editors/emacs/Manifest
@@ -5,12 +5,15 @@ DIST emacs-26.3.tar.xz 44415140 BLAKE2B aa8434e6431992ee40402f03a890dd2c49784ee7
 DIST emacs-27.2-patches-12.tar.xz 19632 BLAKE2B 280062e8361e63eecb4a2a33ff7d8c5ea9ce1d63dce7dce13a3e2f05ac60781722acecb7cebafaf88159d979810a8d8c742e43a9d9eb87ce126023dcd0827c8d SHA512 a7746631a3ec2f93a1cdd4bb7811d8655b43359c0b281e36b82415cdc6cdd776f94d642c652fdafdbc3452a8bc990d43d8e478f9d35cf221e98c03991ddc3146
 DIST emacs-27.2.tar.xz 44624480 BLAKE2B 245ea96004b90f81ac74de74521cbbe086caf1176937e08157eae12cdde5a0f35fc77f7119272ed812974358e5e95abb05e1c2e4f3b501cf5401ea9274f62156 SHA512 0f63a5a8709b113ef790c1a64845dad05ead096f93f62164ff221c517a35b91ea7bced75a992d794981a85382cda03cca7338da2f5ef8f6ef1459b88018a4ce9
 DIST emacs-28.2-patches-11.tar.xz 15056 BLAKE2B 7ae6c7a62a60ce9407b7e9a925a2f8097f17af2e1696036d7bc2b02e0e4b6d7b7e64b3f92d4d04775db962993f0a41e98eec83908e314157e9e072f6cb484892 SHA512 47e200deef2ee7154683e5efcf6b657b35391874deb1c13b7abb66b7a0e0065d1d5a720b618c2282a5059c03b0570766efdc2bb0d08bd329f855078a85928a3b
+DIST emacs-28.2-patches-12.tar.xz 15612 BLAKE2B ebcd5109a2ccceaa608b3299e128935b0a51c56118cce1dca1371ecb133a45e1ac9f332e95a2cee7c7b2b398ad8a45bece0970a6a9bc46c29734e87745a3aaa1 SHA512 c92bcfbddbb61e910d979b35d103d379ea026f11f55f0a0951f82338b0a1ee7f36260420dea085f2c6b38c01313b37036805606c28a874215c847db13cf054e7
 DIST emacs-28.2.tar.xz 47722600 BLAKE2B a7e4990658b5e7306510f8dded93aaf0b82cdd9306df8b786526d038c3249ef9579287075f2235eb01a71ae1699db555254f137b86ab2d2305b45895053df552 SHA512 a7cec7e3e82367815a1442f69af54102dbfc434069810a9dec5938a6660cb8b076e6f1fb0bfff9695b15603dbbe05eb9c7dfd92e90cf40fc4d1e5746bce83bd8
 DIST emacs-29.4-patches-4.tar.xz 6872 BLAKE2B ad701863650ac7ccd7bd77e73083c62e71b64c547ad05a1b7cc4384f9636a82d1218a5cfae11d8404e0d59c13632a975caa48851b004b9ad55d7f04fa2500f9d SHA512 659edf90ec73e424a635399155413c0c98e45a33d83c353c0e029333761354fa3008ed0b586c64e0b8afe5f5dd85bdeb3b3bfc731afd6869d24d653af5e1c8bf
 DIST emacs-29.4-patches-5.tar.xz 7504 BLAKE2B c0169a58fbe1a69f9b51c3c0d1bd963e2f2f0ee9db1385676efc446c6c4eae2deedaab032ddf206263152c400bd649a556038ad840cdbbfcae5b8f7a21bc9ef6 SHA512 90fbc758549cf3d1dc80fd415dbb91903176aab315a009a23b7c43b1b456324b01678da699ef30df913c35c57b2345a0d83752a10c119774b25a219102e1de76
+DIST emacs-29.4-patches-6.tar.xz 8044 BLAKE2B 5ddb10774cf6c236e27ace79d727863977f8bed370e36c1adc330da512a87f7cc02a4a21c549ea422758d0e5fa82cc9ec371e16b2382c2ad5fed0033fe70b237 SHA512 92f191060b222bfe6b7f38c43a383cd0a59e988b0c588203219627bc1f06e452e665d772844a0a4002b7ae17e4abd6a4e6bacaeefa86e823e5ae19512f631225
 DIST emacs-29.4.tar.xz 52210344 BLAKE2B 825fd2665b6427dbc3cb618b40df2f71fa6b08883bdd07be6d8acf0039df2aeebd294e679e98f4c64a9dd9bdad93589fc7c176cf3860d4fb823fce23f7f2b3cd SHA512 66b38081cb01d2c46ff7beefb45986cc225b4c922c30712ad0d456c6cae5507176ed99418c8f26948c5375c8afde4e4b2507d23ed997dbb5392d12150a121d80
 DIST emacs-30.2-patches-2.tar.xz 4228 BLAKE2B 2904ec6e2c94418835b98d08017d1876f6d4e6f56ef84e97f4f0e1fea74432c01cebf99e9fcc6dc0c30cee3fe4a3b429128ff9d3751212cbcb9fb2591c836406 SHA512 633bcde5e623140683b6dca085be9ad6b3e9be4300ec25caa55921d58937cb834cb7ad3e34d60d7bcf62ee0860952e7cb9298d08f7d4613b328cafb98a0dc41c
 DIST emacs-30.2-patches-3.tar.xz 4732 BLAKE2B bbecdad6613c3e2b17722d2259d95ee57596884ac7a3df83c43355bb0b40c829a0ce67be763cb7c4bb0af9ea0cd525d919c63f765c307a0751a1d52a291cd29a SHA512 558675e954dac3705af42396814832552b5434fa73c9246e252b74b6a21110a4e8ee62d208de64fe0ba9ed51090cd12f3134ec60f3921740237eaa7ec71527f5
+DIST emacs-30.2-patches-4.tar.xz 5360 BLAKE2B 21ef05a21564cc806985b7167c50db3d8ad95c00f75085220b68971c03018bcd023522635e37bdf91893c56d953c80069b3cb16bd4e8ff5fae8190f95747a3fc SHA512 442c43c8ac9435d03ef4e5e88dfe8cc0c92b38323733ab1a7028066517b5b51a4fdf2c5c2000cfb9adfb47b7fe6edd5f8c8cded2c04aae6131ea61c1c8f67f21
 DIST emacs-30.2.tar.xz 55320324 BLAKE2B 9163ba6bfab1010a156c669ac085ad363545d73e3ffac21c710b14b618df61a4c6a80a50fd3fa81d852c2ccace5080e614b679606fa584e28509f99ad6196784 SHA512 313432d11e95c74f8cd35c5b1da442e6223f5d40f9173c55883c0339ecbfb97a0bedf79177ef8902afd3e33c078a233777bed01f5caffa1e7524f17d58bfc9a2
 DIST emacs-31.0.90.tar.xz 57901972 BLAKE2B cb7cf526a5e1efa2843af9e46b16953966a509457e88b87e3568bef9c39e4e05ae302fc880096d1b85e217f68f8cb1cbf4c5086c8387e08a382b76bd31793e6d SHA512 c2b8332f0b1f8a6e65d74affaaa4d9098f2cb0d5c4e1327ab9de944543bf8b728fda30714ffded260b026437668a1ab607089891657bfc3fa8b0961b4cca6852
 DIST emacs-31.0.91.tar.xz 57959264 BLAKE2B 1dfafc69b4b4e2ec167b325ae10db2814e306a97b5c1a0bd2df12377411c0270667e74f97a90383d8cbd5ee0a6a5a5df217d9e8390323d9676f1e39ad163a6b6 SHA512 77431c852942b56623b939f5b68e9877d30099312bf0d4f95406add57771928e5ad22adeca067292491ac05660339e7f3236ad8ded727b60abf6b98305265ba8

diff --git a/app-editors/emacs/emacs-28.2-r21.ebuild b/app-editors/emacs/emacs-28.2-r21.ebuild
new file mode 100644
index 000000000000..3ee50a87c59a
--- /dev/null
+++ b/app-editors/emacs/emacs-28.2-r21.ebuild
@@ -0,0 +1,550 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools eapi9-pipestatus elisp-common flag-o-matic readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV##*.} = 9999 ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="https://git.savannah.gnu.org/git/emacs.git"
+	EGIT_BRANCH="emacs-28"
+	EGIT_CHECKOUT_DIR="${WORKDIR}/emacs"
+	S="${EGIT_CHECKOUT_DIR}"
+	SLOT="${PV%%.*}-vcs"
+else
+	# FULL_VERSION keeps the full version number, which is needed in
+	# order to determine some path information correctly for copy/move
+	# operations later on
+	FULL_VERSION="${PV%%_*}"
+	SRC_URI="mirror://gnu/emacs/${P}.tar.xz"
+	S="${WORKDIR}/emacs-${FULL_VERSION}"
+	# PV can be in any of the following formats:
+	# 27.1                 released version (slot 27)
+	# 27.1_rc1             upstream release candidate (27)
+	# 27.0.9999            live ebuild (slot 27-vcs)
+	# 27.0.90              upstream prerelease snapshot (27-vcs)
+	# 27.0.50_pre20191223  snapshot by Gentoo developer (27-vcs)
+	if [[ ${PV} == *_pre* ]]; then
+		SRC_URI="https://dev.gentoo.org/~ulm/distfiles/${P}.tar.xz"
+		S="${WORKDIR}/emacs"
+	elif [[ ${PV//[0-9]} != "." ]]; then
+		SRC_URI="https://alpha.gnu.org/gnu/emacs/pretest/${PN}-${PV/_/-}.tar.xz"
+	fi
+	# Patchset from proj/emacs-patches.git
+	SRC_URI+=" https://distfiles.gentoo.org/pub/proj/emacs/${P}-patches-12.tar.xz"
+	PATCHES=("${WORKDIR}/patch")
+	SLOT="${PV%%.*}"
+	[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~m68k ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+fi
+
+DESCRIPTION="The advanced, extensible, customizable, self-documenting editor"
+HOMEPAGE="https://www.gnu.org/software/emacs/"
+
+LICENSE="GPL-3+ FDL-1.3+ Boost-1.0 BSD CC-BY-SA-3.0 CC-BY-SA-4.0 HPND MIT MPL-2.0 PCRE PSF-2 unicode W3C"
+IUSE="acl alsa aqua athena cairo dbus dynamic-loading games gfile gif +gmp gpm gsettings gtk gui gzip-el harfbuzz imagemagick +inotify jit jpeg json kerberos lcms libxml2 livecd m17n-lib mailutils motif png selinux sound source ssl svg systemd +threads tiff toolkit-scroll-bars valgrind wide-int Xaw3d xft +xpm zlib"
+
+RDEPEND=">=app-emacs/emacs-common-1.11[games?,gui?]
+	sys-libs/ncurses:0=
+	acl? ( virtual/acl )
+	alsa? ( media-libs/alsa-lib )
+	dbus? ( sys-apps/dbus )
+	games? ( acct-group/gamestat )
+	gmp? ( dev-libs/gmp:0= )
+	gpm? ( sys-libs/gpm )
+	!inotify? ( gfile? ( >=dev-libs/glib-2.28.6 ) )
+	jit? (
+		sys-devel/gcc:=[jit(-)]
+		virtual/zlib:=
+	)
+	json? ( dev-libs/jansson:= )
+	kerberos? ( virtual/krb5 )
+	lcms? ( media-libs/lcms:2 )
+	libxml2? ( >=dev-libs/libxml2-2.2.0:= )
+	mailutils? ( net-mail/mailutils[clients] )
+	!mailutils? ( acct-group/mail net-libs/liblockfile )
+	selinux? ( sys-libs/libselinux )
+	ssl? ( net-libs/gnutls:0= )
+	systemd? ( sys-apps/systemd )
+	valgrind? ( dev-debug/valgrind )
+	zlib? ( virtual/zlib:= )
+	gui? ( !aqua? (
+		x11-libs/libICE
+		x11-libs/libSM
+		x11-libs/libX11
+		x11-libs/libXext
+		x11-libs/libXfixes
+		x11-libs/libXinerama
+		x11-libs/libXrandr
+		x11-libs/libxcb
+		x11-misc/xbitmaps
+		gsettings? ( >=dev-libs/glib-2.28.6 )
+		gif? ( media-libs/giflib:0= )
+		jpeg? ( media-libs/libjpeg-turbo:0= )
+		png? ( >=media-libs/libpng-1.4:0= )
+		svg? ( >=gnome-base/librsvg-2.0 )
+		tiff? ( media-libs/tiff:= )
+		xpm? ( x11-libs/libXpm )
+		imagemagick? ( media-gfx/imagemagick:0=[jpeg?,png?,svg?,tiff?] )
+		xft? (
+			media-libs/fontconfig
+			media-libs/freetype
+			x11-libs/libXrender
+			cairo? ( >=x11-libs/cairo-1.12.18[X] )
+			!cairo? ( x11-libs/libXft )
+			harfbuzz? ( media-libs/harfbuzz:0= )
+			m17n-lib? (
+				>=dev-libs/libotf-0.9.4
+				>=dev-libs/m17n-lib-1.5.1
+			)
+		)
+		gtk? ( x11-libs/gtk+:3[X] )
+		!gtk? (
+			motif? (
+				>=x11-libs/motif-2.3:0=
+				x11-libs/libXpm
+				x11-libs/libXmu
+				x11-libs/libXt
+			)
+			!motif? (
+				Xaw3d? (
+					x11-libs/libXaw3d
+					x11-libs/libXmu
+					x11-libs/libXt
+				)
+				!Xaw3d? ( athena? (
+					x11-libs/libXaw
+					x11-libs/libXmu
+					x11-libs/libXt
+				) )
+			)
+		)
+	) )"
+
+DEPEND="${RDEPEND}
+	gui? ( !aqua? ( x11-base/xorg-proto ) )"
+
+BDEPEND="sys-apps/texinfo
+	virtual/pkgconfig
+	gzip-el? ( app-arch/gzip )"
+
+IDEPEND="app-eselect/eselect-emacs"
+
+RDEPEND+=" ${IDEPEND}"
+
+EMACS_SUFFIX="emacs-${SLOT}"
+SITEFILE="20${EMACS_SUFFIX}-gentoo.el"
+
+# Suppress false positive QA warnings #898304 #925449
+QA_CONFIG_IMPL_DECL_SKIP=( malloc_{get,set}_state statvfs64 )
+
+src_prepare() {
+	if [[ ${PV##*.} = 9999 ]]; then
+		FULL_VERSION=$(sed -n 's/^AC_INIT([^,]*,[^0-9.]*\([0-9.]*\).*/\1/p' \
+			configure.ac)
+		[[ ${FULL_VERSION} ]] || die "Cannot determine current Emacs version"
+		einfo "Emacs branch: ${EGIT_BRANCH}"
+		einfo "Commit: ${EGIT_VERSION}"
+		einfo "Emacs version number: ${FULL_VERSION}"
+		[[ ${FULL_VERSION} =~ ^${PV%.*}(\..*)?$ ]] \
+			|| die "Upstream version number changed to ${FULL_VERSION}"
+	fi
+
+	if use jit; then
+		export NATIVE_FULL_AOT=1
+		find lisp -type f -name "*.elc" -delete || die
+
+		# These files ignore LDFLAGS. We assign the variable here, because
+		# for live ebuilds FULL_VERSION doesn't exist in global scope
+		QA_FLAGS_IGNORED="usr/$(get_libdir)/emacs/${FULL_VERSION}/native-lisp/.*"
+
+		# The build system requires gcc for native compilation #874657
+		if ! tc-is-gcc; then
+			ewarn "Emacs must be built with gcc[jit] if USE=jit is enabled."
+			ewarn "Ignoring CC=$(tc-getCC) and forcing ${CHOST}-gcc"
+			export CC=${CHOST}-gcc AR=${CHOST}-gcc-ar NM=${CHOST}-gcc-nm \
+				RANLIB=${CHOST}-gcc-ranlib
+			tc-is-gcc || die "tc-is-gcc failed in spite of CC=${CC}"
+		fi
+
+		# gccjit doesn't play well with ccache or distcc #801580
+		# For now, work around the problem with an explicit LIBRARY_PATH
+		if has ccache ${FEATURES} || has distcc ${FEATURES}; then
+			export LIBRARY_PATH=$("$(tc-getCC)" -print-search-dirs \
+				| sed -n '/^libraries:/{s:^[^/]*::;p}')
+		fi
+	fi
+
+	default
+
+	# Fix filename reference in redirected man page
+	sed -i -e "/^\\.so/s/etags/&-${EMACS_SUFFIX}/" doc/man/ctags.1 || die
+
+	# Tests that use bubblewrap don't work in the sandbox:
+	# "bwrap: setting up uid map: Permission denied"
+	# So, disrupt the search for the bwrap executable.
+	sed -i -e 's/(executable-find "bwrap")/nil/' test/src/emacs-tests.el \
+		test/lisp/emacs-lisp/bytecomp-tests.el || die
+
+	AT_M4DIR=m4 eautoreconf
+}
+
+src_configure() {
+	replace-flags "-O[3-9]" -O2			#839405
+
+	# We want floating-point arithmetic to be correct #933380
+	replace-flags -Ofast -O2
+	append-flags -fno-fast-math -ffp-contract=off
+
+	export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
+	append-cppflags -DUSE_VALGRIND=$(usex valgrind)
+
+	# Prevents e.g. tests interfering with running Emacs.
+	unset EMACS_SOCKET_NAME
+
+	local myconf=(
+		--program-suffix="-${EMACS_SUFFIX}"
+		--includedir="${EPREFIX}"/usr/include/${EMACS_SUFFIX}
+		--infodir="${EPREFIX}"/usr/share/info/${EMACS_SUFFIX}
+		--localstatedir="${EPREFIX}"/var
+		--enable-locallisppath="${EPREFIX}/etc/emacs:${EPREFIX}${SITELISP}"
+		--without-compress-install
+		--without-hesiod
+		--without-pop
+		--with-file-notification=$(usev inotify || usev gfile || echo no)
+		--with-pdumper
+		$(use_enable acl)
+		$(use_with dbus)
+		$(use_with dynamic-loading modules)
+		$(use_with games gameuser ":gamestat")
+		$(use_with gmp libgmp)
+		$(use_with gpm)
+		$(use_with jit native-compilation)
+		$(use_with json)
+		$(use_with kerberos) $(use_with kerberos kerberos5)
+		$(use_with lcms lcms2)
+		$(use_with libxml2 xml2)
+		$(use_with mailutils)
+		$(use_with selinux)
+		$(use_with ssl gnutls)
+		$(use_with systemd libsystemd)
+		$(use_with threads)
+		$(use_with wide-int)
+	)
+
+	if use alsa; then
+		use sound || ewarn \
+			"USE flag \"alsa\" overrides \"-sound\"; enabling sound support."
+		myconf+=( --with-sound=alsa )
+	else
+		myconf+=( --with-sound=$(usex sound oss no) )
+	fi
+
+	if use jit; then
+		use zlib || ewarn \
+			"USE flag \"jit\" overrides \"-zlib\"; enabling zlib support."
+		myconf+=( --with-zlib )
+	else
+		myconf+=( $(use_with zlib) )
+	fi
+
+	if ! use gui; then
+		einfo "Configuring to build without window system support"
+		myconf+=(
+			--without-x --without-ns
+		)
+	elif use aqua; then
+		einfo "Configuring to build with Nextstep (Macintosh Cocoa) support"
+		myconf+=(
+			--with-ns --disable-ns-self-contained
+			--without-x
+		)
+	else
+		myconf+=(
+			--with-x --without-ns
+			--without-gconf
+			$(use_with gsettings)
+			$(use_with toolkit-scroll-bars)
+			$(use_with gif)
+			$(use_with jpeg)
+			$(use_with png)
+			$(use_with svg rsvg)
+			$(use_with tiff)
+			$(use_with xpm)
+			$(use_with imagemagick)
+		)
+
+		if use xft; then
+			myconf+=(
+				--with-xft
+				$(use_with cairo)
+				$(use_with harfbuzz)
+				$(use_with m17n-lib libotf)
+				$(use_with m17n-lib m17n-flt)
+			)
+		else
+			myconf+=(
+				--without-xft
+				--without-cairo
+				--without-libotf --without-m17n-flt
+			)
+			use cairo && ewarn \
+				"USE flag \"cairo\" has no effect if \"xft\" is not set."
+			use m17n-lib && ewarn \
+				"USE flag \"m17n-lib\" has no effect if \"xft\" is not set."
+		fi
+
+		local f line
+		if use gtk; then
+			einfo "Configuring to build with GIMP Toolkit (GTK+)"
+			while read line; do ewarn "${line}"; done <<-EOF
+				There is a long-standing bug in GTK+ that prevents Emacs
+				from recovering from X disconnects:
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
+				This is not a problem if you use only one display, but if
+				you use more than one and close one of them, Emacs may crash.
+				If you intend to use more than one display or to run Emacs
+				as a daemon, then it is strongly recommended that you compile
+				it with the Athena/Lucid or the Motif toolkit instead,
+				i.e. with USE="athena Xaw3d -gtk -motif" or USE="motif -gtk".
+			EOF
+			myconf+=( --with-x-toolkit=gtk3 --without-xwidgets )
+			for f in motif Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"gtk\" is set."
+			done
+		elif use motif; then
+			einfo "Configuring to build with Motif toolkit"
+			myconf+=( --with-x-toolkit=motif )
+			for f in Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"motif\" is set."
+			done
+		elif use athena || use Xaw3d; then
+			einfo "Configuring to build with Athena/Lucid toolkit"
+			myconf+=( --with-x-toolkit=lucid $(use_with Xaw3d xaw3d) )
+		else
+			einfo "Configuring to build with no toolkit"
+			myconf+=( --with-x-toolkit=no )
+		fi
+	fi
+
+	if tc-is-cross-compiler; then
+		# Configure a CBUILD directory when cross-compiling to make tools
+		mkdir -p "${S}-build" && pushd "${S}-build" >/dev/null || die
+		ECONF_SOURCE="${S}" econf_build --without-all --without-x-toolkit
+		popd >/dev/null || die
+		# Don't try to execute the binary for dumping during the build
+		myconf+=( --with-dumping=none )
+	elif use m68k; then
+		# Workaround for https://debbugs.gnu.org/44531
+		myconf+=( --with-dumping=unexec )
+	else
+		myconf+=( --with-dumping=pdumper )
+	fi
+
+	econf "${myconf[@]}"
+}
+
+src_compile() {
+	if tc-is-cross-compiler; then
+		# Build native tools for compiling lisp etc.
+		emake -C "${S}-build" src
+		emake lib	   # Cross-compile dependencies first for timestamps
+		# Save native build tools in the cross-directory
+		cp "${S}-build"/lib-src/make-{docfile,fingerprint} lib-src || die
+		# Specify the native Emacs to compile lisp
+		emake -C lisp all EMACS="${S}-build/src/emacs"
+	fi
+
+	emake
+}
+
+src_test() {
+	# List .el test files with a comment above listing the exact
+	# subtests which caused failure. Elements should begin with a %.
+	# e.g. %lisp/gnus/mml-sec-tests.el.
+	local exclude_tests=(
+		# Reason: not yet known
+		# mml-secure-en-decrypt-{1,2,3,4}
+		# mml-secure-find-usable-keys-{1,2}
+		# mml-secure-key-checks
+		# mml-secure-select-preferred-keys-4
+		# mml-secure-sign-verify-1
+		%lisp/gnus/mml-sec-tests.el
+
+		# Reason: race condition
+		# Looks like it should be fixed in 29.x at least:
+		# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55706
+		# files-tests-file-name-non-special-file-in-directory-p
+		%lisp/files-tests.el
+
+		# Reason: permission denied on /nonexistent
+		# (vc-*-bzr only fails if breezy is installed, as they
+		# try to access cache dirs under /nonexistent)
+		#
+		# rmail-undigest-test-multipart-mixed-digest
+		# rmail-undigest-test-rfc1153-less-strict-digest
+		# rmail-undigest-test-rfc1153-sloppy-digest
+		# rmail-undigest-test-rfc934-digest
+		# vc-test-bzr02-state
+		# vc-test-bzr05-rename-file
+		# vc-test-bzr06-version-diff
+		# vc-bzr-test-bug9781
+		%lisp/mail/undigest-tests.el
+		%lisp/vc/vc-tests.el
+		%lisp/vc/vc-bzr-tests.el
+
+		# Reason: some copyright years differ
+		%lisp/emacs-lisp/copyright-tests.el
+
+		# Reason: quoting issues (fixed in Emacs 29)
+		%lib-src/emacsclient-tests.el
+
+		# Reason: tries to access network
+		# internet-is-working
+		%src/process-tests.el
+	)
+	use elibc_musl && exclude_tests+=(
+			# Reason: newlocale(3) lenient locale validation #906012
+			# fns-tests-collate-strings
+			%src/fns-tests.el
+		)
+	use threads || exclude_tests+=(
+			%src/emacs-module-tests.el
+			%src/keyboard-tests.el
+			%src/thread-tests.el
+		)
+
+	# See test/README for possible options
+	emake \
+		EMACS_TEST_VERBOSE=1 \
+		EXCLUDE_TESTS="${exclude_tests[*]}" \
+		TERM=dumb \
+		TEST_BACKTRACE_LINE_LENGTH=nil \
+		check
+}
+
+src_install() {
+	emake DESTDIR="${D}" NO_BIN_LINK=t BLESSMAIL_TARGET= install
+
+	mv "${ED}"/usr/bin/{emacs-${FULL_VERSION}-,}${EMACS_SUFFIX} || die
+	mv "${ED}"/usr/share/man/man1/{emacs-,}${EMACS_SUFFIX}.1 || die
+	mv "${ED}"/usr/share/metainfo/{emacs-,}${EMACS_SUFFIX}.metainfo.xml || die
+
+	# dissuade Portage from removing our dir file #257260
+	touch "${ED}"/usr/share/info/${EMACS_SUFFIX}/.keepinfodir
+	docompress -x /usr/share/info/${EMACS_SUFFIX}/dir
+
+	# movemail must be setgid mail
+	if ! use mailutils; then
+		fowners root:mail /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+		fperms 2751 /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+	fi
+
+	# avoid collision between slots, see bug #169033 e.g.
+	rm "${ED}"/usr/share/emacs/site-lisp/subdirs.el || die
+	rm -rf "${ED}"/usr/share/{applications,icons} || die
+	rm -rf "${ED}/usr/$(get_libdir)/systemd" || die
+	rm -rf "${ED}"/var || die
+
+	# remove unused <version>/site-lisp dir
+	rm -rf "${ED}"/usr/share/emacs/${FULL_VERSION}/site-lisp || die
+
+	# remove COPYING file (except for etc/COPYING used by describe-copying)
+	rm "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp/COPYING || die
+
+	if use gzip-el; then
+		# compress .el files when a corresponding .elc exists
+		find "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp -type f \
+			-name "*.elc" -print | sed 's/\.elc$/.el/' | xargs gzip -9n
+		pipestatus || die "gzip .el pipeline failed"
+	fi
+
+	local cdir
+	if use source; then
+		cdir="/usr/share/emacs/${FULL_VERSION}/src"
+		insinto "${cdir}"
+		# This is not meant to install all the source -- just the
+		# C source you might find via find-function
+		doins src/*.{c,h,m}
+	elif has installsources ${FEATURES}; then
+		cdir="/usr/src/debug/${CATEGORY}/${PF}/${S#"${WORKDIR}/"}/src"
+	fi
+
+	sed -e "${cdir:+#}/^Y/d" -e "s/^[XY]//" >"${T}/${SITEFILE}" <<-EOF || die
+	;;; ${EMACS_SUFFIX} site-lisp configuration  -*-lexical-binding:t-*-
+	X
+	(when (string-equal emacs-version "${FULL_VERSION}")
+	Y  (setq find-function-C-source-directory
+	Y	"${EPREFIX}${cdir}")
+	X  (let ((path (getenv "INFOPATH"))
+	X	(dir "${EPREFIX}/usr/share/info/${EMACS_SUFFIX}")
+	X	(re "\\\\\`${EPREFIX}/usr/share\\\\>"))
+	X    (and path
+	X	 ;; move Emacs Info dir before anything else in /usr/share
+	X	 (let* ((p (cons nil (split-string path ":" t))) (q p))
+	X	   (while (and (cdr q) (not (string-match re (cadr q))))
+	X	     (setq q (cdr q)))
+	X	   (setcdr q (cons dir (delete dir (cdr q))))
+	X	   (setenv "INFOPATH" (mapconcat #'identity (cdr p) ":"))))))
+	EOF
+	elisp-site-file-install "${T}/${SITEFILE}" || die
+
+	dodoc README BUGS CONTRIBUTE
+
+	if use gui && use aqua; then
+		dodir /Applications/Gentoo
+		rm -rf "${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+		mv nextstep/Emacs.app \
+			"${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+	fi
+
+	local DOC_CONTENTS="You can set the version to be started by
+		/usr/bin/emacs through the Emacs eselect module, which also
+		redirects man and info pages. Therefore, several Emacs versions can
+		be installed at the same time. \"man emacs.eselect\" for details.
+		\\n\\nIf you upgrade from a previous major version of Emacs, then
+		it is strongly recommended that you use app-admin/emacs-updater
+		to rebuild all byte-compiled elisp files of the installed Emacs
+		packages."
+	if use gui; then
+		DOC_CONTENTS+="\\n\\nYou need to install some fonts for Emacs.
+			Installing media-fonts/font-adobe-{75,100}dpi on the X server's
+			machine would satisfy basic Emacs requirements under X11.
+			See also https://wiki.gentoo.org/wiki/Xft_support_for_GNU_Emacs
+			for how to enable anti-aliased fonts."
+		use aqua && DOC_CONTENTS+="\\n\\n${EMACS_SUFFIX^}.app is in
+			\"${EPREFIX}/Applications/Gentoo\". You may want to copy or
+			symlink it into /Applications by yourself."
+	fi
+	tc-is-cross-compiler && DOC_CONTENTS+="\\n\\nEmacs did not write
+		a portable dump file due to being cross-compiled.
+		To create this file at run time, execute the following command:
+		\\n${EMACS_SUFFIX} --batch -Q --eval='(dump-emacs-portable
+		\"/usr/libexec/emacs/${FULL_VERSION}/${CHOST}/emacs.pdmp\")'"
+	readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+	# verify that the PM hasn't removed our Info directory index #257260
+	local infodir="${ED}/usr/share/info/${EMACS_SUFFIX}"
+	[[ -f ${infodir}/dir || ! -d ${infodir} ]] || die
+}
+
+pkg_postinst() {
+	elisp-site-regen
+	readme.gentoo_print_elog
+
+	# Force an update of the emacs symlink for the livecd/dvd,
+	# because some microemacs packages set it with USE=livecd.
+	# Otherwise, create it only when it is not yet set.
+	eselect --root="${ROOT}" emacs update $(usev !livecd ifunset)
+}
+
+pkg_postrm() {
+	elisp-site-regen
+	eselect --root="${ROOT}" emacs update ifunset
+}

diff --git a/app-editors/emacs/emacs-29.4-r9.ebuild b/app-editors/emacs/emacs-29.4-r9.ebuild
new file mode 100644
index 000000000000..9146b01169bd
--- /dev/null
+++ b/app-editors/emacs/emacs-29.4-r9.ebuild
@@ -0,0 +1,646 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools eapi9-pipestatus elisp-common flag-o-matic readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV##*.} = 9999 ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="https://git.savannah.gnu.org/git/emacs.git"
+	EGIT_BRANCH="emacs-29"
+	EGIT_CHECKOUT_DIR="${WORKDIR}/emacs"
+	S="${EGIT_CHECKOUT_DIR}"
+	SLOT="${PV%%.*}-vcs"
+else
+	# FULL_VERSION keeps the full version number, which is needed in
+	# order to determine some path information correctly for copy/move
+	# operations later on
+	FULL_VERSION="${PV%%_*}"
+	SRC_URI="mirror://gnu/emacs/${P}.tar.xz"
+	S="${WORKDIR}/emacs-${FULL_VERSION}"
+	# PV can be in any of the following formats:
+	# 27.1                 released version (slot 27)
+	# 27.1_rc1             upstream release candidate (27)
+	# 27.0.9999            live ebuild (slot 27-vcs)
+	# 27.0.90              upstream prerelease snapshot (27-vcs)
+	# 27.0.50_pre20191223  snapshot by Gentoo developer (27-vcs)
+	if [[ ${PV} == *_pre* ]]; then
+		SRC_URI="https://dev.gentoo.org/~ulm/distfiles/${P}.tar.xz"
+		S="${WORKDIR}/emacs"
+	elif [[ ${PV//[0-9]} != "." ]]; then
+		SRC_URI="https://alpha.gnu.org/gnu/emacs/pretest/${PN}-${PV/_/-}.tar.xz"
+	fi
+	# Patchset from proj/emacs-patches.git
+	SRC_URI+=" https://distfiles.gentoo.org/pub/proj/emacs/${P}-patches-6.tar.xz"
+	PATCHES=("${WORKDIR}/patch")
+	SLOT="${PV%%.*}"
+	[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+fi
+
+DESCRIPTION="The advanced, extensible, customizable, self-documenting editor"
+HOMEPAGE="https://www.gnu.org/software/emacs/"
+
+LICENSE="GPL-3+ FDL-1.3+ Boost-1.0 BSD CC-BY-SA-3.0 CC-BY-SA-4.0 HPND MIT MPL-2.0 PCRE PSF-2 unicode W3C"
+IUSE="acl alsa aqua athena cairo dbus dynamic-loading games gfile gif +gmp gpm gsettings gtk gui gzip-el harfbuzz imagemagick +inotify jit jpeg json kerberos lcms libxml2 livecd m17n-lib mailutils motif png selinux sound source sqlite ssl svg systemd +threads tiff toolkit-scroll-bars tree-sitter valgrind webp wide-int +X Xaw3d xft +xpm zlib"
+
+X_DEPEND="x11-libs/libICE
+	x11-libs/libSM
+	x11-libs/libX11
+	x11-libs/libXcomposite
+	x11-libs/libXext
+	x11-libs/libXfixes
+	x11-libs/libXi
+	x11-libs/libXinerama
+	x11-libs/libXrandr
+	x11-libs/libxcb
+	x11-libs/xcb-util
+	x11-misc/xbitmaps
+	xpm? ( x11-libs/libXpm )
+	xft? (
+		media-libs/fontconfig
+		media-libs/freetype
+		x11-libs/libXrender
+		cairo? ( >=x11-libs/cairo-1.12.18[X] )
+		!cairo? ( x11-libs/libXft )
+		harfbuzz? ( media-libs/harfbuzz:0= )
+		m17n-lib? (
+			>=dev-libs/libotf-0.9.4
+			>=dev-libs/m17n-lib-1.5.1
+		)
+	)
+	gtk? ( x11-libs/gtk+:3[X] )
+	!gtk? (
+		motif? (
+			>=x11-libs/motif-2.3:0=
+			x11-libs/libXpm
+			x11-libs/libXmu
+			x11-libs/libXt
+		)
+		!motif? (
+			Xaw3d? (
+				x11-libs/libXaw3d
+				x11-libs/libXmu
+				x11-libs/libXt
+			)
+			!Xaw3d? ( athena? (
+				x11-libs/libXaw
+				x11-libs/libXmu
+				x11-libs/libXt
+			) )
+		)
+	)"
+
+RDEPEND=">=app-emacs/emacs-common-1.11[games?,gui?]
+	sys-libs/ncurses:0=
+	acl? ( virtual/acl )
+	alsa? ( media-libs/alsa-lib )
+	dbus? ( sys-apps/dbus )
+	games? ( acct-group/gamestat )
+	gmp? ( dev-libs/gmp:0= )
+	gpm? ( sys-libs/gpm )
+	!inotify? ( gfile? ( >=dev-libs/glib-2.28.6 ) )
+	jit? (
+		sys-devel/gcc:=[jit(-)]
+		virtual/zlib:=
+	)
+	json? ( dev-libs/jansson:= )
+	kerberos? ( virtual/krb5 )
+	lcms? ( media-libs/lcms:2 )
+	libxml2? ( >=dev-libs/libxml2-2.2.0:= )
+	mailutils? ( net-mail/mailutils[clients] )
+	!mailutils? ( acct-group/mail net-libs/liblockfile )
+	selinux? ( sys-libs/libselinux )
+	sqlite? ( dev-db/sqlite:3 )
+	ssl? ( net-libs/gnutls:0= )
+	systemd? ( sys-apps/systemd )
+	tree-sitter? ( dev-libs/tree-sitter:= )
+	valgrind? ( dev-debug/valgrind )
+	zlib? ( virtual/zlib:= )
+	gui? (
+		gif? ( media-libs/giflib:0= )
+		jpeg? ( media-libs/libjpeg-turbo:0= )
+		png? ( >=media-libs/libpng-1.4:0= )
+		svg? ( >=gnome-base/librsvg-2.0 )
+		tiff? ( media-libs/tiff:= )
+		webp? ( media-libs/libwebp:0= )
+		imagemagick? ( media-gfx/imagemagick:0=[jpeg?,png?,svg?,tiff?] )
+		!aqua? (
+			gsettings? (
+				>=app-emacs/emacs-common-1.11[gsettings]
+				>=dev-libs/glib-2.28.6
+			)
+			gtk? ( !X? (
+				media-libs/fontconfig
+				media-libs/freetype
+				>=x11-libs/cairo-1.12.18
+				x11-libs/gtk+:3
+				harfbuzz? ( media-libs/harfbuzz:0= )
+				m17n-lib? (
+					>=dev-libs/libotf-0.9.4
+					>=dev-libs/m17n-lib-1.5.1
+				)
+			) )
+			!gtk? ( ${X_DEPEND} )
+			X? ( ${X_DEPEND} )
+		)
+	)"
+
+DEPEND="${RDEPEND}
+	gui? ( !aqua? (
+		!gtk? ( x11-base/xorg-proto )
+		X? ( x11-base/xorg-proto )
+	) )"
+
+BDEPEND="sys-apps/texinfo
+	virtual/pkgconfig
+	gzip-el? ( app-arch/gzip )"
+
+IDEPEND="app-eselect/eselect-emacs"
+
+RDEPEND+=" ${IDEPEND}"
+
+EMACS_SUFFIX="emacs-${SLOT}"
+SITEFILE="20${EMACS_SUFFIX}-gentoo.el"
+
+# Suppress false positive QA warnings #898304 #925091
+QA_CONFIG_IMPL_DECL_SKIP=( malloc_{get,set}_state statvfs64 )
+
+src_prepare() {
+	if [[ ${PV##*.} = 9999 ]]; then
+		FULL_VERSION=$(sed -n 's/^AC_INIT([^,]*,[^0-9.]*\([0-9.]*\).*/\1/p' \
+			configure.ac)
+		[[ ${FULL_VERSION} ]] || die "Cannot determine current Emacs version"
+		einfo "Emacs branch: ${EGIT_BRANCH}"
+		einfo "Commit: ${EGIT_VERSION}"
+		einfo "Emacs version number: ${FULL_VERSION}"
+		[[ ${FULL_VERSION} =~ ^${PV%.*}(\..*)?$ ]] \
+			|| die "Upstream version number changed to ${FULL_VERSION}"
+	fi
+
+	default
+
+	if use jit; then
+		find lisp -type f -name "*.elc" -delete || die
+
+		# These files ignore LDFLAGS. We assign the variable here, because
+		# for live ebuilds FULL_VERSION doesn't exist in global scope
+		QA_FLAGS_IGNORED="usr/$(get_libdir)/emacs/${FULL_VERSION}/native-lisp/.*"
+
+		# The build system requires gcc for native compilation #874657
+		if ! tc-is-gcc; then
+			ewarn "Emacs must be built with gcc[jit] if USE=jit is enabled."
+			ewarn "Ignoring CC=$(tc-getCC) and forcing ${CHOST}-gcc"
+			export CC=${CHOST}-gcc AR=${CHOST}-gcc-ar NM=${CHOST}-gcc-nm \
+				RANLIB=${CHOST}-gcc-ranlib
+			tc-is-gcc || die "tc-is-gcc failed in spite of CC=${CC}"
+		fi
+
+		# gccjit doesn't play well with ccache or distcc #801580
+		# For now, work around the problem with an explicit LIBRARY_PATH
+		if has ccache ${FEATURES} || has distcc ${FEATURES}; then
+			export LIBRARY_PATH=$("$(tc-getCC)" -print-search-dirs \
+				| sed -n '/^libraries:/{s:^[^/]*::;p}')
+		fi
+	fi
+
+	# Fix filename reference in redirected man page
+	sed -i -e "/^\\.so/s/etags/&-${EMACS_SUFFIX}/" doc/man/ctags.1 || die
+
+	# libseccomp is detected by configure but doesn't appear to have any
+	# effect on the installed image. Suppress it by supplying pkg-config
+	# with a wrong library name.
+	sed -i -e "/CHECK_MODULES/s/libseccomp/DiSaBlE&/" configure.ac || die
+
+	# Tests that use bubblewrap don't work in the sandbox:
+	# "bwrap: setting up uid map: Permission denied"
+	# So, disrupt the search for the bwrap executable.
+	sed -i -e 's/(executable-find "bwrap")/nil/' test/src/emacs-tests.el \
+		test/lisp/emacs-lisp/bytecomp-tests.el || die
+
+	AT_M4DIR=m4 eautoreconf
+}
+
+src_configure() {
+	replace-flags "-O[3-9]" -O2			#839405
+
+	# We want floating-point arithmetic to be correct #933380
+	replace-flags -Ofast -O2
+	append-flags -fno-fast-math -ffp-contract=off
+
+	export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
+	append-cppflags -DUSE_VALGRIND=$(usex valgrind)
+
+	# Prevents e.g. tests interfering with running Emacs.
+	unset EMACS_SOCKET_NAME
+
+	local myconf=(
+		--program-suffix="-${EMACS_SUFFIX}"
+		--includedir="${EPREFIX}"/usr/include/${EMACS_SUFFIX}
+		--infodir="${EPREFIX}"/usr/share/info/${EMACS_SUFFIX}
+		--localstatedir="${EPREFIX}"/var
+		--enable-locallisppath="${EPREFIX}/etc/emacs:${EPREFIX}${SITELISP}"
+		--without-compress-install
+		--without-hesiod
+		--without-pop
+		--with-file-notification=$(usev inotify || usev gfile || echo no)
+		--with-pdumper
+		$(use_enable acl)
+		$(use_with dbus)
+		$(use_with dynamic-loading modules)
+		$(use_with games gameuser ":gamestat")
+		$(use_with gmp libgmp)
+		$(use_with gpm)
+		$(use_with jit native-compilation aot)
+		$(use_with json)
+		$(use_with kerberos) $(use_with kerberos kerberos5)
+		$(use_with lcms lcms2)
+		$(use_with libxml2 xml2)
+		$(use_with mailutils)
+		$(use_with selinux)
+		$(use_with sqlite sqlite3)
+		$(use_with ssl gnutls)
+		$(use_with systemd libsystemd)
+		$(use_with threads)
+		$(use_with tree-sitter)
+		$(use_with wide-int)
+	)
+
+	if use alsa; then
+		use sound || ewarn \
+			"USE flag \"alsa\" overrides \"-sound\"; enabling sound support."
+		myconf+=( --with-sound=alsa )
+	else
+		myconf+=( --with-sound=$(usex sound oss no) )
+	fi
+
+	if use jit; then
+		use zlib || ewarn \
+			"USE flag \"jit\" overrides \"-zlib\"; enabling zlib support."
+		myconf+=( --with-zlib )
+	else
+		myconf+=( $(use_with zlib) )
+	fi
+
+	# Emacs supports these window systems:
+	# X11, pure GTK (without X11), or Nextstep (Aqua/Cocoa).
+	# General GUI support is enabled by the "gui" USE flag, then
+	# the window system is selected as follows:
+	#   "aqua" -> Nextstep
+	#   "gtk -X" -> pure GTK
+	#   otherwise -> X11
+	# For X11 there is the further choice of toolkits GTK, Motif,
+	# Athena (Lucid), or no toolkit. They are enabled (in order of
+	# preference) with the "gtk", "motif", "Xaw3d", and "athena" flags.
+
+	if ! use gui; then
+		einfo "Configuring to build without window system support"
+		myconf+=(
+			--without-x --without-pgtk --without-ns
+		)
+	elif use aqua; then
+		einfo "Configuring to build with Nextstep (Macintosh Cocoa) support"
+		myconf+=(
+			--with-ns --disable-ns-self-contained
+			--without-x --without-pgtk
+		)
+	elif use gtk && ! use X; then
+		einfo "Configuring to build with pure GTK (without X11) support"
+		myconf+=(
+			--with-pgtk --without-x --without-ns
+			--with-toolkit-scroll-bars #836392
+			--without-gconf
+			--without-xwidgets
+			$(use_with gsettings)
+			$(use_with harfbuzz)
+			$(use_with m17n-lib libotf)
+			$(use_with m17n-lib m17n-flt)
+		)
+	else
+		# X11
+		myconf+=(
+			--with-x --without-pgtk --without-ns
+			--without-gconf
+			$(use_with gsettings)
+			$(use_with toolkit-scroll-bars)
+			$(use_with xpm)
+		)
+
+		if use xft; then
+			myconf+=(
+				--with-xft
+				$(use_with cairo)
+				$(use_with harfbuzz)
+				$(use_with m17n-lib libotf)
+				$(use_with m17n-lib m17n-flt)
+			)
+		else
+			myconf+=(
+				--without-xft
+				--without-cairo
+				--without-libotf --without-m17n-flt
+			)
+			use cairo && ewarn \
+				"USE flag \"cairo\" has no effect if \"xft\" is not set."
+			use m17n-lib && ewarn \
+				"USE flag \"m17n-lib\" has no effect if \"xft\" is not set."
+		fi
+
+		local f line
+		if use gtk; then
+			einfo "Configuring to build with GIMP Toolkit (GTK+)"
+			while read line; do ewarn "${line}"; done <<-EOF
+				There is a long-standing bug in GTK+ that prevents Emacs
+				from recovering from X disconnects:
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
+				This is not a problem if you use only one display, but if
+				you use more than one and close one of them, Emacs may crash.
+				If you intend to use more than one display or to run Emacs
+				as a daemon, then it is strongly recommended that you compile
+				it with the Athena/Lucid or the Motif toolkit instead,
+				i.e. with USE="athena Xaw3d -gtk -motif" or USE="motif -gtk".
+			EOF
+			myconf+=( --with-x-toolkit=gtk3 --without-xwidgets )
+			for f in motif Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"gtk\" is set."
+			done
+		elif use motif; then
+			einfo "Configuring to build with Motif toolkit"
+			myconf+=( --with-x-toolkit=motif )
+			for f in Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"motif\" is set."
+			done
+		elif use athena || use Xaw3d; then
+			einfo "Configuring to build with Athena/Lucid toolkit"
+			myconf+=( --with-x-toolkit=lucid $(use_with Xaw3d xaw3d) )
+		else
+			einfo "Configuring to build with no toolkit"
+			myconf+=( --with-x-toolkit=no )
+		fi
+	fi
+
+	if use gui; then
+		# Common flags recognised for all GUIs
+		myconf+=(
+			$(use_with gif)
+			$(use_with jpeg)
+			$(use_with png)
+			$(use_with svg rsvg)
+			$(use_with tiff)
+			$(use_with webp)
+			$(use_with imagemagick)
+		)
+	fi
+
+	if tc-is-cross-compiler; then
+		# Configure a CBUILD directory when cross-compiling to make tools
+		mkdir -p "${S}-build" && pushd "${S}-build" >/dev/null || die
+		ECONF_SOURCE="${S}" econf_build --without-all --without-x-toolkit
+		popd >/dev/null || die
+		# Don't try to execute the binary for dumping during the build
+		myconf+=( --with-dumping=none )
+	elif use m68k; then
+		# Workaround for https://debbugs.gnu.org/44531
+		myconf+=( --with-dumping=unexec )
+	else
+		myconf+=( --with-dumping=pdumper )
+	fi
+
+	econf "${myconf[@]}"
+}
+
+src_compile() {
+	if tc-is-cross-compiler; then
+		# Build native tools for compiling lisp etc.
+		emake -C "${S}-build" src
+		emake lib	   # Cross-compile dependencies first for timestamps
+		# Save native build tools in the cross-directory
+		cp "${S}-build"/lib-src/make-{docfile,fingerprint} lib-src || die
+		# Specify the native Emacs to compile lisp
+		EMACS_EMAKE_ARGS=( EMACS="${S}-build/src/emacs" )
+		emake "${EMACS_EMAKE_ARGS[@]}" actual-all
+	else
+		EMACS_EMAKE_ARGS=()
+		emake
+	fi
+}
+
+src_test() {
+	# List .el test files with a comment above listing the exact
+	# subtests which caused failure. Elements should begin with a %.
+	# e.g. %lisp/gnus/mml-sec-tests.el.
+	local exclude_tests=(
+		# Reason: not yet known
+		# mml-secure-sign-verify-1 #967849
+		%lisp/gnus/mml-sec-tests.el
+
+		# Reason: permission denied on /nonexistent
+		# (vc-*-bzr only fails if breezy is installed, as they
+		# try to access cache dirs under /nonexistent)
+		#
+		# rmail-undigest-test-multipart-mixed-digest
+		# rmail-undigest-test-rfc1153-less-strict-digest
+		# rmail-undigest-test-rfc1153-sloppy-digest
+		# rmail-undigest-test-rfc934-digest
+		# vc-test-bzr02-state
+		# vc-test-bzr05-rename-file
+		# vc-test-bzr06-version-diff
+		# vc-bzr-test-bug9781
+		%lisp/mail/undigest-tests.el
+		%lisp/vc/vc-tests.el
+		%lisp/vc/vc-bzr-tests.el
+
+		# Reason: tries to access network
+		# internet-is-working
+		%src/process-tests.el
+
+		# Reason: test not skipped if tree-sitter-cpp is missing #979386
+		# c-ts-mode-test-filling
+		%lisp/progmodes/c-ts-mode-tests.el
+
+		# Reason: test is not skipped if tree-sitter-tsx is not installed
+		# Bug #922525
+		%lisp/progmodes/typescript-ts-mode-tests.el
+
+		# eglot-test-lsp-abiding-column #977411
+		%lisp/progmodes/eglot-tests.el
+	)
+	use elibc_musl && exclude_tests+=(
+			# Reason: newlocale(3) lenient locale validation #906012
+			# fns-tests-collate-strings
+			%src/fns-tests.el
+		)
+	use threads || exclude_tests+=(
+			%lisp/server-tests.el
+			%lisp/progmodes/eglot-tests.el
+			%src/emacs-module-tests.el
+			%src/keyboard-tests.el
+		)
+	use xpm || exclude_tests+=( %src/image-tests.el )
+
+	# Some tests hang with gnupg-2.2.42
+	local gpgver=$(best_version app-crypt/gnupg)
+	gpgver=${gpgver#*gnupg-}
+	[[ -n ${gpgver} ]] \
+		&& ver_test "${gpgver}" -ge 2.2.42 && ver_test "${gpgver}" -lt 2.3 \
+		&& exclude_tests+=(
+			%lisp/epg-tests.el
+		)
+
+	# Redirect GnuPG's sockets, in order not to exceed the 108 char limit
+	# for socket paths on Linux.
+	mkdir -p "${T}"/gpg || die
+	local f
+	for f in browser extra ssh; do
+		printf "%%Assuan%%\nsocket=%s\n" "${T}/gpg/S.${f}" \
+			> "test/lisp/gnus/mml-sec-resources/S.gpg-agent.${f}" || die
+	done
+
+	# See test/README for possible options
+	emake \
+		EMACS_TEST_VERBOSE=1 \
+		EXCLUDE_TESTS="${exclude_tests[*]}" \
+		TERM=dumb \
+		TEST_BACKTRACE_LINE_LENGTH=nil \
+		check
+}
+
+src_install() {
+	emake \
+		"${EMACS_EMAKE_ARGS[@]}" \
+		DESTDIR="${D}" \
+		NO_BIN_LINK=t \
+		BLESSMAIL_TARGET="" \
+		install
+
+	mv "${ED}"/usr/bin/{emacs-${FULL_VERSION}-,}${EMACS_SUFFIX} || die
+	mv "${ED}"/usr/share/man/man1/{emacs-,}${EMACS_SUFFIX}.1 || die
+	mv "${ED}"/usr/share/metainfo/{emacs-,}${EMACS_SUFFIX}.metainfo.xml || die
+
+	# dissuade Portage from removing our dir file #257260
+	touch "${ED}"/usr/share/info/${EMACS_SUFFIX}/.keepinfodir
+	docompress -x /usr/share/info/${EMACS_SUFFIX}/dir
+
+	# movemail must be setgid mail
+	if ! use mailutils; then
+		fowners root:mail /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+		fperms 2751 /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+	fi
+
+	# avoid collision between slots, see bug #169033 e.g.
+	rm "${ED}"/usr/share/emacs/site-lisp/subdirs.el || die
+	rm -rf "${ED}"/usr/share/{applications,icons} || die
+	rm -rf "${ED}"/usr/share/glib-2.0 || die #911117
+	rm -rf "${ED}/usr/$(get_libdir)/systemd" || die
+	rm -rf "${ED}"/var || die
+
+	# remove unused <version>/site-lisp dir
+	rm -rf "${ED}"/usr/share/emacs/${FULL_VERSION}/site-lisp || die
+
+	# remove COPYING file (except for etc/COPYING used by describe-copying)
+	rm "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp/COPYING || die
+
+	if use gzip-el; then
+		# compress .el files when a corresponding .elc exists
+		find "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp -type f \
+			-name "*.elc" -print | sed 's/\.elc$/.el/' | xargs gzip -9n
+		pipestatus || die "gzip .el pipeline failed"
+	fi
+
+	local cdir
+	if use source; then
+		cdir="/usr/share/emacs/${FULL_VERSION}/src"
+		insinto "${cdir}"
+		# This is not meant to install all the source -- just the
+		# C source you might find via find-function
+		doins src/*.{c,h,m}
+	elif has installsources ${FEATURES}; then
+		cdir="/usr/src/debug/${CATEGORY}/${PF}/${S#"${WORKDIR}/"}/src"
+	fi
+
+	sed -e "${cdir:+#}/^Y/d" -e "s/^[XY]//" >"${T}/${SITEFILE}" <<-EOF || die
+	;;; ${EMACS_SUFFIX} site-lisp configuration  -*-lexical-binding:t-*-
+	X
+	(when (string-equal emacs-version "${FULL_VERSION}")
+	Y  (setq find-function-C-source-directory
+	Y	"${EPREFIX}${cdir}")
+	X  (let ((path (getenv "INFOPATH"))
+	X	(dir "${EPREFIX}/usr/share/info/${EMACS_SUFFIX}")
+	X	(re "\\\\\`${EPREFIX}/usr/share\\\\>"))
+	X    (and path
+	X	 ;; move Emacs Info dir before anything else in /usr/share
+	X	 (let* ((p (cons nil (split-string path ":" t))) (q p))
+	X	   (while (and (cdr q) (not (string-match re (cadr q))))
+	X	     (setq q (cdr q)))
+	X	   (setcdr q (cons dir (delete dir (cdr q))))
+	X	   (setenv "INFOPATH" (mapconcat #'identity (cdr p) ":"))))))
+	EOF
+	elisp-site-file-install "${T}/${SITEFILE}" || die
+
+	dodoc README BUGS CONTRIBUTE
+
+	if use gui && use aqua; then
+		dodir /Applications/Gentoo
+		rm -rf "${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+		mv nextstep/Emacs.app \
+			"${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+	fi
+
+	local DOC_CONTENTS="You can set the version to be started by
+		/usr/bin/emacs through the Emacs eselect module, which also
+		redirects man and info pages. Therefore, several Emacs versions can
+		be installed at the same time. \"man emacs.eselect\" for details.
+		\\n\\nIf you upgrade from a previous major version of Emacs, then
+		it is strongly recommended that you use app-admin/emacs-updater
+		to rebuild all byte-compiled elisp files of the installed Emacs
+		packages."
+	if use gui; then
+		DOC_CONTENTS+="\\n\\nYou need to install some fonts for Emacs.
+			Installing media-fonts/font-adobe-{75,100}dpi on the X server's
+			machine would satisfy basic Emacs requirements under X11.
+			See also https://wiki.gentoo.org/wiki/Xft_support_for_GNU_Emacs
+			for how to enable anti-aliased fonts."
+		use aqua && DOC_CONTENTS+="\\n\\n${EMACS_SUFFIX^}.app is in
+			\"${EPREFIX}/Applications/Gentoo\". You may want to copy or
+			symlink it into /Applications by yourself."
+	fi
+	if ! use mailutils; then
+		DOC_CONTENTS+="\\n\\nThe mailutils USE flag is disabled. If Emacs'
+		own e-mail features are going to be used as an e-mail client
+		(e.g. Rmail), you are strongly encouraged to enable it. If not,
+		Emacs will use its own implementation of movemail; which has
+		fewer features and is less secure. For more information see the
+		Info node '(emacs)Movemail' in the Emacs manual."
+	fi
+	tc-is-cross-compiler && DOC_CONTENTS+="\\n\\nEmacs did not write
+		a portable dump file due to being cross-compiled.
+		To create this file at run time, execute the following command:
+		\\n${EMACS_SUFFIX} --batch -Q --eval='(dump-emacs-portable
+		\"/usr/libexec/emacs/${FULL_VERSION}/${CHOST}/emacs.pdmp\")'"
+	readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+	# verify that the PM hasn't removed our Info directory index #257260
+	local infodir="${ED}/usr/share/info/${EMACS_SUFFIX}"
+	[[ -f ${infodir}/dir || ! -d ${infodir} ]] || die
+}
+
+pkg_postinst() {
+	elisp-site-regen
+	readme.gentoo_print_elog
+
+	# Force an update of the emacs symlink for the livecd/dvd,
+	# because some microemacs packages set it with USE=livecd.
+	# Otherwise, create it only when it is not yet set.
+	eselect --root="${ROOT}" emacs update $(usev !livecd ifunset)
+}
+
+pkg_postrm() {
+	elisp-site-regen
+	eselect --root="${ROOT}" emacs update ifunset
+}

diff --git a/app-editors/emacs/emacs-30.2-r5.ebuild b/app-editors/emacs/emacs-30.2-r5.ebuild
new file mode 100644
index 000000000000..7408b059be75
--- /dev/null
+++ b/app-editors/emacs/emacs-30.2-r5.ebuild
@@ -0,0 +1,635 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=9
+
+inherit autotools elisp-common flag-o-matic readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV##*.} = 9999 ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="https://git.savannah.gnu.org/git/emacs.git"
+	EGIT_BRANCH="emacs-30"
+	EGIT_CHECKOUT_DIR="${WORKDIR}/emacs"
+	S="${EGIT_CHECKOUT_DIR}"
+	SLOT="${PV%%.*}-vcs"
+else
+	# FULL_VERSION keeps the full version number, which is needed in
+	# order to determine some path information correctly for copy/move
+	# operations later on
+	FULL_VERSION="${PV%%_*}"
+	SRC_URI="mirror://gnu/emacs/${P}.tar.xz"
+	S="${WORKDIR}/emacs-${FULL_VERSION}"
+	# PV can be in any of the following formats:
+	# 27.1                 released version (slot 27)
+	# 27.1_rc1             upstream release candidate (27)
+	# 27.0.9999            live ebuild (slot 27-vcs)
+	# 27.0.90              upstream prerelease snapshot (27-vcs)
+	# 27.0.50_pre20191223  snapshot by Gentoo developer (27-vcs)
+	if [[ ${PV} == *_pre* ]]; then
+		SRC_URI="https://dev.gentoo.org/~ulm/distfiles/${P}.tar.xz"
+		S="${WORKDIR}/emacs"
+	elif [[ ${PV//[0-9]} != "." ]]; then
+		SRC_URI="https://alpha.gnu.org/gnu/emacs/pretest/${PN}-${PV/_/-}.tar.xz"
+	fi
+	# Patchset from proj/emacs-patches.git
+	SRC_URI+=" https://distfiles.gentoo.org/pub/proj/emacs/${P}-patches-4.tar.xz"
+	PATCHES=("${WORKDIR}/patch")
+	SLOT="${PV%%.*}"
+	[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
+	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
+fi
+
+DESCRIPTION="The advanced, extensible, customizable, self-documenting editor"
+HOMEPAGE="https://www.gnu.org/software/emacs/"
+
+LICENSE="GPL-3+ FDL-1.3+ Boost-1.0 BSD CC-BY-SA-3.0 CC-BY-SA-4.0 HPND MIT MPL-2.0 PCRE PSF-2 unicode W3C"
+IUSE="acl alsa aqua athena cairo dbus dynamic-loading games gfile gif +gmp gpm gsettings gtk gui gzip-el harfbuzz imagemagick +inotify jit jpeg kerberos lcms libxml2 livecd m17n-lib mailutils motif png selinux sound source sqlite ssl svg systemd +threads tiff toolkit-scroll-bars tree-sitter valgrind webp wide-int +X xattr Xaw3d xft +xpm zlib"
+
+X_DEPEND="x11-libs/libICE
+	x11-libs/libSM
+	x11-libs/libX11
+	x11-libs/libXcomposite
+	x11-libs/libXext
+	x11-libs/libXfixes
+	x11-libs/libXi
+	x11-libs/libXinerama
+	x11-libs/libXrandr
+	x11-libs/libxcb
+	x11-libs/xcb-util
+	x11-misc/xbitmaps
+	xpm? ( x11-libs/libXpm )
+	xft? (
+		media-libs/fontconfig
+		media-libs/freetype
+		x11-libs/libXrender
+		cairo? ( >=x11-libs/cairo-1.12.18[X] )
+		!cairo? ( x11-libs/libXft )
+		harfbuzz? ( media-libs/harfbuzz:0= )
+		m17n-lib? (
+			>=dev-libs/libotf-0.9.4
+			>=dev-libs/m17n-lib-1.5.1
+		)
+	)
+	gtk? ( x11-libs/gtk+:3[X] )
+	!gtk? (
+		motif? (
+			>=x11-libs/motif-2.3:0=
+			x11-libs/libXpm
+			x11-libs/libXmu
+			x11-libs/libXt
+		)
+		!motif? (
+			Xaw3d? (
+				x11-libs/libXaw3d
+				x11-libs/libXmu
+				x11-libs/libXt
+			)
+			!Xaw3d? ( athena? (
+				x11-libs/libXaw
+				x11-libs/libXmu
+				x11-libs/libXt
+			) )
+		)
+	)"
+
+RDEPEND=">=app-emacs/emacs-common-1.11[games?,gui?]
+	sys-libs/ncurses:0=
+	acl? ( virtual/acl )
+	alsa? ( media-libs/alsa-lib )
+	dbus? ( sys-apps/dbus )
+	games? ( acct-group/gamestat )
+	gmp? ( dev-libs/gmp:0= )
+	gpm? ( sys-libs/gpm )
+	!inotify? ( gfile? ( >=dev-libs/glib-2.28.6 ) )
+	jit? (
+		sys-devel/gcc:=[jit(-)]
+		virtual/zlib:=
+	)
+	kerberos? ( virtual/krb5 )
+	lcms? ( media-libs/lcms:2 )
+	libxml2? ( >=dev-libs/libxml2-2.2.0:= )
+	mailutils? ( net-mail/mailutils[clients] )
+	!mailutils? ( acct-group/mail net-libs/liblockfile )
+	selinux? ( sys-libs/libselinux )
+	sqlite? ( dev-db/sqlite:3 )
+	ssl? ( net-libs/gnutls:0= )
+	systemd? ( sys-apps/systemd )
+	tree-sitter? ( dev-libs/tree-sitter:= )
+	valgrind? ( dev-debug/valgrind )
+	xattr? ( sys-apps/attr )
+	zlib? ( virtual/zlib:= )
+	gui? (
+		gif? ( media-libs/giflib:0= )
+		jpeg? ( media-libs/libjpeg-turbo:0= )
+		png? ( >=media-libs/libpng-1.4:0= )
+		svg? ( >=gnome-base/librsvg-2.0 )
+		tiff? ( media-libs/tiff:= )
+		webp? ( media-libs/libwebp:0= )
+		imagemagick? ( media-gfx/imagemagick:0=[jpeg?,png?,svg?,tiff?] )
+		!aqua? (
+			gsettings? (
+				>=app-emacs/emacs-common-1.11[gsettings]
+				>=dev-libs/glib-2.28.6
+			)
+			gtk? ( !X? (
+				media-libs/fontconfig
+				media-libs/freetype
+				>=x11-libs/cairo-1.12.18
+				x11-libs/gtk+:3
+				harfbuzz? ( media-libs/harfbuzz:0= )
+				m17n-lib? (
+					>=dev-libs/libotf-0.9.4
+					>=dev-libs/m17n-lib-1.5.1
+				)
+			) )
+			!gtk? ( ${X_DEPEND} )
+			X? ( ${X_DEPEND} )
+		)
+	)"
+
+DEPEND="${RDEPEND}
+	gui? ( !aqua? (
+		!gtk? ( x11-base/xorg-proto )
+		X? ( x11-base/xorg-proto )
+	) )"
+
+BDEPEND="sys-apps/texinfo
+	virtual/pkgconfig
+	gzip-el? ( app-arch/gzip )"
+
+IDEPEND="app-eselect/eselect-emacs"
+
+RDEPEND+=" ${IDEPEND}"
+
+EMACS_SUFFIX="emacs-${SLOT}"
+SITEFILE="20${EMACS_SUFFIX}-gentoo.el"
+
+# Suppress false positive QA warnings #898304 #925091
+QA_CONFIG_IMPL_DECL_SKIP=( malloc_{get,set}_state statvfs64 )
+
+src_prepare() {
+	if [[ ${PV##*.} = 9999 ]]; then
+		FULL_VERSION=$(sed -n 's/^AC_INIT([^,]*,[^0-9.]*\([0-9.]*\).*/\1/p' \
+			configure.ac)
+		[[ ${FULL_VERSION} ]] || die "Cannot determine current Emacs version"
+		einfo "Emacs branch: ${EGIT_BRANCH}"
+		einfo "Commit: ${EGIT_VERSION}"
+		einfo "Emacs version number: ${FULL_VERSION}"
+		[[ ${FULL_VERSION} =~ ^${PV%.*}(\..*)?$ ]] \
+			|| die "Upstream version number changed to ${FULL_VERSION}"
+	fi
+
+	default
+
+	if use jit; then
+		find lisp -type f -name "*.elc" -delete || die
+
+		# These files ignore LDFLAGS. We assign the variable here, because
+		# for live ebuilds FULL_VERSION doesn't exist in global scope
+		QA_FLAGS_IGNORED="usr/$(get_libdir)/emacs/${FULL_VERSION}/native-lisp/.*"
+
+		# The build system requires gcc for native compilation #874657
+		if ! tc-is-gcc; then
+			ewarn "Emacs must be built with gcc[jit] if USE=jit is enabled."
+			ewarn "Ignoring CC=$(tc-getCC) and forcing ${CHOST}-gcc"
+			export CC=${CHOST}-gcc AR=${CHOST}-gcc-ar NM=${CHOST}-gcc-nm \
+				RANLIB=${CHOST}-gcc-ranlib
+			tc-is-gcc || die "tc-is-gcc failed in spite of CC=${CC}"
+		fi
+
+		# gccjit doesn't play well with ccache or distcc #801580
+		# For now, work around the problem with an explicit LIBRARY_PATH
+		if has ccache ${FEATURES} || has distcc ${FEATURES}; then
+			export LIBRARY_PATH=$("$(tc-getCC)" -print-search-dirs \
+				| sed -n '/^libraries:/{s:^[^/]*::;p}')
+		fi
+	fi
+
+	# Fix filename reference in redirected man page
+	sed -i -e "/^\\.so/s/etags/&-${EMACS_SUFFIX}/" doc/man/ctags.1 || die
+
+	# libseccomp is detected by configure but doesn't appear to have any
+	# effect on the installed image. Suppress it by supplying pkg-config
+	# with a wrong library name.
+	sed -i -e "/CHECK_MODULES/s/libseccomp/DiSaBlE&/" configure.ac || die
+
+	# Tests that use bubblewrap don't work in the sandbox:
+	# "bwrap: setting up uid map: Permission denied"
+	# So, disrupt the search for the bwrap executable.
+	sed -i -e 's/(executable-find "bwrap")/nil/' test/src/emacs-tests.el \
+		test/lisp/emacs-lisp/bytecomp-tests.el || die
+
+	AT_M4DIR=m4 eautoreconf
+}
+
+src_configure() {
+	replace-flags "-O[3-9]" -O2			#839405
+
+	# We want floating-point arithmetic to be correct #933380
+	replace-flags -Ofast -O2
+	append-flags -fno-fast-math -ffp-contract=off
+
+	export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
+	append-cppflags -DUSE_VALGRIND=$(usex valgrind)
+
+	# Prevents e.g. tests interfering with running Emacs.
+	unset EMACS_SOCKET_NAME
+
+	local myconf=(
+		--program-suffix="-${EMACS_SUFFIX}"
+		--includedir="${EPREFIX}"/usr/include/${EMACS_SUFFIX}
+		--infodir="${EPREFIX}"/usr/share/info/${EMACS_SUFFIX}
+		--localstatedir="${EPREFIX}"/var
+		--enable-locallisppath="${EPREFIX}/etc/emacs:${EPREFIX}${SITELISP}"
+		--without-compress-install
+		--without-hesiod
+		--without-pop
+		--with-file-notification=$(usev inotify || usev gfile || echo no)
+		--with-pdumper
+		$(use_enable acl)
+		$(use_enable xattr)
+		$(use_with dbus)
+		$(use_with dynamic-loading modules)
+		$(use_with games gameuser ":gamestat")
+		$(use_with gmp libgmp)
+		$(use_with gpm)
+		$(use_with jit native-compilation aot)
+		$(use_with kerberos) $(use_with kerberos kerberos5)
+		$(use_with lcms lcms2)
+		$(use_with libxml2 xml2)
+		$(use_with mailutils)
+		$(use_with selinux)
+		$(use_with sqlite sqlite3)
+		$(use_with ssl gnutls)
+		$(use_with systemd libsystemd)
+		$(use_with threads)
+		$(use_with tree-sitter)
+		$(use_with wide-int)
+	)
+
+	if use alsa; then
+		use sound || ewarn \
+			"USE flag \"alsa\" overrides \"-sound\"; enabling sound support."
+		myconf+=( --with-sound=alsa )
+	else
+		myconf+=( --with-sound=$(usex sound oss no) )
+	fi
+
+	if use jit; then
+		use zlib || ewarn \
+			"USE flag \"jit\" overrides \"-zlib\"; enabling zlib support."
+		myconf+=( --with-zlib )
+	else
+		myconf+=( $(use_with zlib) )
+	fi
+
+	# Emacs supports these window systems:
+	# X11, pure GTK (without X11), or Nextstep (Aqua/Cocoa).
+	# General GUI support is enabled by the "gui" USE flag, then
+	# the window system is selected as follows:
+	#   "aqua" -> Nextstep
+	#   "gtk -X" -> pure GTK
+	#   otherwise -> X11
+	# For X11 there is the further choice of toolkits GTK, Motif,
+	# Athena (Lucid), or no toolkit. They are enabled (in order of
+	# preference) with the "gtk", "motif", "Xaw3d", and "athena" flags.
+
+	if ! use gui; then
+		einfo "Configuring to build without window system support"
+		myconf+=(
+			--without-x --without-pgtk --without-ns
+		)
+	elif use aqua; then
+		einfo "Configuring to build with Nextstep (Macintosh Cocoa) support"
+		myconf+=(
+			--with-ns --disable-ns-self-contained
+			--without-x --without-pgtk
+		)
+	elif use gtk && ! use X; then
+		einfo "Configuring to build with pure GTK (without X11) support"
+		myconf+=(
+			--with-pgtk --without-x --without-ns
+			--with-toolkit-scroll-bars #836392
+			--without-gconf
+			--without-xwidgets
+			$(use_with gsettings)
+			$(use_with harfbuzz)
+			$(use_with m17n-lib libotf)
+			$(use_with m17n-lib m17n-flt)
+		)
+	else
+		# X11
+		myconf+=(
+			--with-x --without-pgtk --without-ns
+			--without-gconf
+			$(use_with gsettings)
+			$(use_with toolkit-scroll-bars)
+			$(use_with xpm)
+		)
+
+		if use xft; then
+			myconf+=(
+				--with-xft
+				$(use_with cairo)
+				$(use_with harfbuzz)
+				$(use_with m17n-lib libotf)
+				$(use_with m17n-lib m17n-flt)
+			)
+		else
+			myconf+=(
+				--without-xft
+				--without-cairo
+				--without-libotf --without-m17n-flt
+			)
+			use cairo && ewarn \
+				"USE flag \"cairo\" has no effect if \"xft\" is not set."
+			use m17n-lib && ewarn \
+				"USE flag \"m17n-lib\" has no effect if \"xft\" is not set."
+		fi
+
+		local f line
+		if use gtk; then
+			einfo "Configuring to build with GIMP Toolkit (GTK+)"
+			while read line; do ewarn "${line}"; done <<-EOF
+				There is a long-standing bug in GTK+ that prevents Emacs
+				from recovering from X disconnects:
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
+				<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
+				This is not a problem if you use only one display, but if
+				you use more than one and close one of them, Emacs may crash.
+				If you intend to use more than one display or to run Emacs
+				as a daemon, then it is strongly recommended that you compile
+				it with the Athena/Lucid or the Motif toolkit instead,
+				i.e. with USE="athena Xaw3d -gtk -motif" or USE="motif -gtk".
+			EOF
+			myconf+=( --with-x-toolkit=gtk3 --without-xwidgets )
+			for f in motif Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"gtk\" is set."
+			done
+		elif use motif; then
+			einfo "Configuring to build with Motif toolkit"
+			myconf+=( --with-x-toolkit=motif )
+			for f in Xaw3d athena; do
+				use ${f} && ewarn \
+					"USE flag \"${f}\" has no effect if \"motif\" is set."
+			done
+		elif use athena || use Xaw3d; then
+			einfo "Configuring to build with Athena/Lucid toolkit"
+			myconf+=( --with-x-toolkit=lucid $(use_with Xaw3d xaw3d) )
+		else
+			einfo "Configuring to build with no toolkit"
+			myconf+=( --with-x-toolkit=no )
+		fi
+	fi
+
+	if use gui; then
+		# Common flags recognised for all GUIs
+		myconf+=(
+			$(use_with gif)
+			$(use_with jpeg)
+			$(use_with png)
+			$(use_with svg rsvg)
+			$(use_with tiff)
+			$(use_with webp)
+			$(use_with imagemagick)
+		)
+	fi
+
+	if tc-is-cross-compiler; then
+		# Configure a CBUILD directory when cross-compiling to make tools
+		mkdir -p "${S}-build" && pushd "${S}-build" >/dev/null || die
+		ECONF_SOURCE="${S}" econf_build --without-all --without-x-toolkit
+		popd >/dev/null || die
+		# Don't try to execute the binary for dumping during the build
+		myconf+=( --with-dumping=none )
+	elif use m68k; then
+		# Workaround for https://debbugs.gnu.org/44531
+		myconf+=( --with-dumping=unexec )
+	else
+		myconf+=( --with-dumping=pdumper )
+	fi
+
+	econf "${myconf[@]}"
+}
+
+src_compile() {
+	unset SHELL #965834
+
+	if tc-is-cross-compiler; then
+		# Build native tools for compiling lisp etc.
+		emake -C "${S}-build" src
+		emake lib	   # Cross-compile dependencies first for timestamps
+		# Save native build tools in the cross-directory
+		cp "${S}-build"/lib-src/make-{docfile,fingerprint} lib-src || die
+		# Specify the native Emacs to compile lisp
+		EMACS_EMAKE_ARGS=( EMACS="${S}-build/src/emacs" )
+		emake "${EMACS_EMAKE_ARGS[@]}" actual-all
+	else
+		EMACS_EMAKE_ARGS=()
+		emake
+	fi
+}
+
+src_test() {
+	# List .el test files with a comment above listing the exact
+	# subtests which caused failure. Elements should begin with a %.
+	# e.g. %lisp/gnus/mml-sec-tests.el.
+	local exclude_tests=(
+		# Reason: not yet known
+		# mml-secure-sign-verify-1 #967849 #979419
+		%lisp/gnus/mml-sec-tests.el
+
+		# Reason: permission denied on /nonexistent
+		# (vc-*-bzr only fails if breezy is installed, as they
+		# try to access cache dirs under /nonexistent)
+		#
+		# rmail-undigest-test-multipart-mixed-digest
+		# rmail-undigest-test-rfc1153-less-strict-digest
+		# rmail-undigest-test-rfc1153-sloppy-digest
+		# rmail-undigest-test-rfc934-digest
+		# vc-test-bzr02-state
+		# vc-test-bzr05-rename-file
+		# vc-test-bzr06-version-diff
+		# vc-bzr-test-bug9781
+		%lisp/mail/undigest-tests.el
+		%lisp/vc/vc-tests.el
+		%lisp/vc/vc-bzr-tests.el
+
+		# Reason: malformed html tag in test, https://bugs.gnu.org/79041
+		# shr-test/zoom-image
+		%lisp/net/shr-tests.el
+
+		%lisp/progmodes/eglot-tests.el  #966957
+
+		# Reason: test not skipped if tree-sitter-cpp is missing #979386
+		# c-ts-mode-test-filling
+		%lisp/progmodes/c-ts-mode-tests.el
+
+		# Reason: tries to access network
+		# internet-is-working
+		%src/process-tests.el
+	)
+	use elibc_musl && exclude_tests+=(
+			# Reason: newlocale(3) lenient locale validation #906012
+			# fns-tests-collate-strings
+			%src/fns-tests.el
+		)
+	use threads || exclude_tests+=(
+			%src/emacs-module-tests.el
+			%src/keyboard-tests.el
+		)
+
+	# Redirect GnuPG's sockets, in order not to exceed the 108 char limit
+	# for socket paths on Linux.
+	mkdir -p "${T}"/gpg || die
+	local f
+	for f in browser extra ssh; do
+		printf "%%Assuan%%\nsocket=%s\n" "${T}/gpg/S.${f}" \
+			> "test/lisp/gnus/mml-sec-resources/S.gpg-agent.${f}" || die
+	done
+
+	# See test/README for possible options
+	emake \
+		EMACS_TEST_VERBOSE=1 \
+		EXCLUDE_TESTS="${exclude_tests[*]}" \
+		TERM=dumb \
+		TEST_BACKTRACE_LINE_LENGTH=nil \
+		check
+}
+
+src_install() {
+	emake \
+		"${EMACS_EMAKE_ARGS[@]}" \
+		DESTDIR="${D}" \
+		NO_BIN_LINK=t \
+		BLESSMAIL_TARGET="" \
+		install
+
+	mv "${ED}"/usr/bin/{emacs-${FULL_VERSION}-,}${EMACS_SUFFIX} || die
+	mv "${ED}"/usr/share/man/man1/{emacs-,}${EMACS_SUFFIX}.1 || die
+	mv "${ED}"/usr/share/metainfo/{emacs-,}${EMACS_SUFFIX}.metainfo.xml || die
+
+	# dissuade Portage from removing our dir file #257260
+	touch "${ED}"/usr/share/info/${EMACS_SUFFIX}/.keepinfodir
+	docompress -x /usr/share/info/${EMACS_SUFFIX}/dir
+
+	# movemail must be setgid mail
+	if ! use mailutils; then
+		fowners root:mail /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+		fperms 2751 /usr/libexec/emacs/${FULL_VERSION}/${CHOST}/movemail
+	fi
+
+	# avoid collision between slots, see bug #169033 e.g.
+	rm "${ED}"/usr/share/emacs/site-lisp/subdirs.el || die
+	rm -rf "${ED}"/usr/share/{applications,icons} || die
+	rm -rf "${ED}"/usr/share/glib-2.0 || die #911117
+	rm -rf "${ED}/usr/$(get_libdir)/systemd" || die
+	rm -rf "${ED}"/var || die
+
+	# remove unused <version>/site-lisp dir
+	rm -rf "${ED}"/usr/share/emacs/${FULL_VERSION}/site-lisp || die
+
+	# remove COPYING file (except for etc/COPYING used by describe-copying)
+	rm "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp/COPYING || die
+
+	if use gzip-el; then
+		# compress .el files when a corresponding .elc exists
+		find "${ED}"/usr/share/emacs/${FULL_VERSION}/lisp -type f \
+			-name "*.elc" -print | sed 's/\.elc$/.el/' | xargs gzip -9n
+		pipestatus || die "gzip .el pipeline failed"
+	fi
+
+	local cdir
+	if use source; then
+		cdir="/usr/share/emacs/${FULL_VERSION}/src"
+		insinto "${cdir}"
+		# This is not meant to install all the source -- just the
+		# C source you might find via find-function
+		doins src/*.{c,h,m}
+	elif has installsources ${FEATURES}; then
+		cdir="/usr/src/debug/${CATEGORY}/${PF}/${S#"${WORKDIR}/"}/src"
+	fi
+
+	sed -e "${cdir:+#}/^Y/d" -e "s/^[XY]//" >"${T}/${SITEFILE}" <<-EOF || die
+	;;; ${EMACS_SUFFIX} site-lisp configuration  -*-lexical-binding:t-*-
+	X
+	(when (string-equal emacs-version "${FULL_VERSION}")
+	Y  (setq find-function-C-source-directory
+	Y	"${EPREFIX}${cdir}")
+	X  (let ((path (getenv "INFOPATH"))
+	X	(dir "${EPREFIX}/usr/share/info/${EMACS_SUFFIX}")
+	X	(re "\\\\\`${EPREFIX}/usr/share\\\\>"))
+	X    (and path
+	X	 ;; move Emacs Info dir before anything else in /usr/share
+	X	 (let* ((p (cons nil (split-string path ":" t))) (q p))
+	X	   (while (and (cdr q) (not (string-match re (cadr q))))
+	X	     (setq q (cdr q)))
+	X	   (setcdr q (cons dir (delete dir (cdr q))))
+	X	   (setenv "INFOPATH" (mapconcat #'identity (cdr p) ":"))))))
+	EOF
+	elisp-site-file-install "${T}/${SITEFILE}" || die
+
+	dodoc README BUGS CONTRIBUTE
+
+	if use gui && use aqua; then
+		dodir /Applications/Gentoo
+		rm -rf "${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+		mv nextstep/Emacs.app \
+			"${ED}"/Applications/Gentoo/${EMACS_SUFFIX^}.app || die
+	fi
+
+	local DOC_CONTENTS="You can set the version to be started by
+		/usr/bin/emacs through the Emacs eselect module, which also
+		redirects man and info pages. Therefore, several Emacs versions can
+		be installed at the same time. \"man emacs.eselect\" for details.
+		\\n\\nIf you upgrade from a previous major version of Emacs, then
+		it is strongly recommended that you use app-admin/emacs-updater
+		to rebuild all byte-compiled elisp files of the installed Emacs
+		packages."
+	if use gui; then
+		DOC_CONTENTS+="\\n\\nYou need to install some fonts for Emacs.
+			Installing media-fonts/font-adobe-{75,100}dpi on the X server's
+			machine would satisfy basic Emacs requirements under X11.
+			See also https://wiki.gentoo.org/wiki/Xft_support_for_GNU_Emacs
+			for how to enable anti-aliased fonts."
+		use aqua && DOC_CONTENTS+="\\n\\n${EMACS_SUFFIX^}.app is in
+			\"${EPREFIX}/Applications/Gentoo\". You may want to copy or
+			symlink it into /Applications by yourself."
+	fi
+	if ! use mailutils; then
+		DOC_CONTENTS+="\\n\\nThe mailutils USE flag is disabled. If Emacs'
+		own e-mail features are going to be used as an e-mail client
+		(e.g. Rmail), you are strongly encouraged to enable it. If not,
+		Emacs will use its own implementation of movemail; which has
+		fewer features and is less secure. For more information see the
+		Info node '(emacs)Movemail' in the Emacs manual."
+	fi
+	tc-is-cross-compiler && DOC_CONTENTS+="\\n\\nEmacs did not write
+		a portable dump file due to being cross-compiled.
+		To create this file at run time, execute the following command:
+		\\n${EMACS_SUFFIX} --batch -Q --eval='(dump-emacs-portable
+		\"/usr/libexec/emacs/${FULL_VERSION}/${CHOST}/emacs.pdmp\")'"
+	readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+	# verify that the PM hasn't removed our Info directory index #257260
+	local infodir="${ED}/usr/share/info/${EMACS_SUFFIX}"
+	[[ -f ${infodir}/dir || ! -d ${infodir} ]] || die
+}
+
+pkg_postinst() {
+	elisp-site-regen
+	readme.gentoo_print_elog
+
+	# Force an update of the emacs symlink for the livecd/dvd,
+	# because some microemacs packages set it with USE=livecd.
+	# Otherwise, create it only when it is not yet set.
+	eselect --root="${ROOT}" emacs update $(usev !livecd ifunset)
+}
+
+pkg_postrm() {
+	elisp-site-regen
+	eselect --root="${ROOT}" emacs update ifunset
+}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.