commit:     608e51162c9fef2e83a153b4f42aa8d46ea7309b
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Sat Feb  7 09:34:40 2026 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Sat Feb  7 09:53:14 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=608e5116

app-editors/emacs: Fix compile failure with clang

Closes: https://bugs.gentoo.org/882345
Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org>

 app-editors/emacs/Manifest               |   1 +
 app-editors/emacs/emacs-18.59-r17.ebuild | 170 +++++++++++++++++++++++++++++++
 2 files changed, 171 insertions(+)

diff --git a/app-editors/emacs/Manifest b/app-editors/emacs/Manifest
index 464c4fdd174a..9c0a07975013 100644
--- a/app-editors/emacs/Manifest
+++ b/app-editors/emacs/Manifest
@@ -1,4 +1,5 @@
 DIST emacs-18.59-patches-16.tar.xz 34172 BLAKE2B 
7f30760a39edb854418fae16579b8b62a7ce2bb7977602e288078571ac56a6f68d0ced4d38585f8a601d2ba0483918c147623abe6045833f868c334458007b52
 SHA512 
7f02ad1495d0c58ba338e2b41163a9e5f8bb129e933170f3370fbee04017d8476f44d19b70213588b3922daa322920155f4d9690ea716c1f3b2abef2a5ac8384
+DIST emacs-18.59-patches-17.tar.xz 34812 BLAKE2B 
c517c177ec14a238d5c816951dc88ce42e7b0235f856e9a5b7454555c80493c2f76b21a458b5694f833d5dbb292cb49b4d8120b36385e020d541c01b79f2ecca
 SHA512 
a8fff9de5046037e219f98f17c792fa67e545b239e577644c02337183b6929d16a3fb7d7a415ebeb9be684b3643cb332fe833e22b5a5ccfc2a278b8b8406615f
 DIST emacs-18.59.tar.gz 2962652 BLAKE2B 
d617636daff41e672af2dcda26ec24b2495cf0a3e6373561ee26a2a922b7252c074dd6b79289d771853a4720c60f084f5726b904bf65989718173232ac874b0b
 SHA512 
03ce565e346e89b7aacb1852f4783e8907f394de7da0c543b475cb038eb89b87f980d0f7ca1841b1d2108b20f211e95113c7214e4a33e5767a1827ff43173f33
 DIST emacs-26.3-patches-12.tar.xz 13984 BLAKE2B 
e91785d9b41e396a4d823b913238deda9c37b38155d48125ce6ee674b9fc6779ae57439292fcd074db3f99ccf77263a4554dcd334d7b20fb81517634ce79edca
 SHA512 
15bc05ba27dd77d0925476735ed344864f9e5c2a65e3ef468ff2af6fbd55086cf3d78fa1cd435e568c170ef5a34528e5ef297e9a570a0ed17de3aa6c3690a57c
 DIST emacs-26.3.tar.xz 44415140 BLAKE2B 
aa8434e6431992ee40402f03a890dd2c49784ee76f437888efe61d66b9aa2bdb816eb0bfe1055e9e154a8bb3ed065fee71623741b474d465a96964618ec775e3
 SHA512 
4d5a4319253afb081e105a3697eb6eeb8d8a0da18cd41346e376ca5af1e180a26e641f76c64fad1b0253168f14a511f0a4d9d4141524fb1cf4d04f25b05a76e9

diff --git a/app-editors/emacs/emacs-18.59-r17.ebuild 
b/app-editors/emacs/emacs-18.59-r17.ebuild
new file mode 100644
index 000000000000..0511e505f1f4
--- /dev/null
+++ b/app-editors/emacs/emacs-18.59-r17.ebuild
@@ -0,0 +1,170 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs flag-o-matic multilib
+
+DESCRIPTION="The extensible self-documenting text editor"
+HOMEPAGE="https://www.gnu.org/software/emacs/";
+SRC_URI="https://ftp.gnu.org/old-gnu/emacs/${P}.tar.gz
+       https://dev.gentoo.org/~ulm/emacs/${P}-patches-17.tar.xz";
+
+LICENSE="GPL-1+ GPL-2+ BSD HPND"
+SLOT="18"
+KEYWORDS="~amd64 ~x86"
+IUSE="abi_x86_x32 gui"
+
+RDEPEND="sys-libs/ncurses:0=
+       gui? ( x11-libs/libX11 )
+       amd64? (
+               abi_x86_x32? (
+                       sys-libs/ncurses:0=[abi_x86_x32(-)]
+                       gui? ( x11-libs/libX11[abi_x86_x32(-)] )
+               )
+               !abi_x86_x32? (
+                       sys-libs/ncurses:0=[abi_x86_32(-)]
+                       gui? ( x11-libs/libX11[abi_x86_32(-)] )
+               )
+       )"
+
+DEPEND="${RDEPEND}
+       gui? (
+               x11-base/xorg-proto
+               x11-misc/xbitmaps
+       )"
+
+BDEPEND="virtual/pkgconfig"
+IDEPEND="app-eselect/eselect-emacs"
+RDEPEND+=" ${IDEPEND}"
+
+PATCHES=("${WORKDIR}/patch")
+
+src_prepare() {
+       default
+
+       # Do not use the sandbox, or the dumped Emacs will be twice as large
+       sed -i -e 's:\./temacs.*dump:SANDBOX_ON=0 LD_PRELOAD= env &:' \
+               src/ymakefile || die
+}
+
+src_configure() {
+       # autoconf? What's autoconf? We are living in 1992. ;-)
+       local arch
+       case ${ARCH} in
+               amd64)
+                       if use abi_x86_x32; then
+                               arch=x86-x32
+                               multilib_toolchain_setup x32
+                       else
+                               arch=intel386
+                               multilib_toolchain_setup x86
+                       fi
+                       ;;
+               x86) arch=intel386 ;;
+               *) die "Architecture ${ARCH} not yet supported" ;;
+       esac
+       local cmd="s/\"s-.*\.h\"/\"s-linux.h\"/;s/\"m-.*\.h\"/\"m-${arch}.h\"/"
+       use gui && cmd="${cmd};s/.*\(#define HAVE_X_WINDOWS\).*/\1/"
+       sed -e "${cmd}" src/config.h-dist >src/config.h || die
+
+       cat <<-END >src/paths.h
+               #define PATH_LOADSEARCH "/usr/share/emacs/${PV}/lisp"
+               #define PATH_EXEC "/usr/share/emacs/${PV}/etc"
+               #define PATH_LOCK "/var/lib/emacs/lock/"
+               #define PATH_SUPERLOCK "/var/lib/emacs/lock/!!!SuperLock!!!"
+       END
+
+       sed -i -e "s:/usr/lib/\([^ ]*\).o:/usr/$(get_libdir)/\1.o:g" \
+               -e "s:-lncurses:$("$(tc-getPKG_CONFIG)" --libs ncurses):" \
+               src/s-linux.h || die
+
+       # -O3 and -finline-functions cause segmentation faults at run time;
+       # -flto causes a segmentation fault at compile time.
+       # -Wno-implicit, -Wno-return-type and -Wno-return-mismatch will
+       # quieten newer versions of GCC; feel free to submit a patch adding
+       # all those missing prototypes.
+       strip-flags
+       filter-flags -finline-functions -flto $(test-flags -pie)
+       append-flags -std=gnu17 -fno-strict-aliasing -Wno-implicit \
+               -Wno-return-type -Wno-return-mismatch -Wno-pointer-sign \
+               -Wno-parentheses -Wno-dangling-else -Wno-comment \
+               $(test-flags -Wno-deprecated-non-prototype)
+       append-ldflags $(test-flags -no-pie)    #639562
+       replace-flags -O[3-9] -O2
+}
+
+src_compile() {
+       addpredict /var/lib/emacs/lock          #nowarn
+       emake --jobs=1 \
+               CC="$(tc-getCC)" CFLAGS="${CFLAGS} -Demacs -I." \
+               LD="$(tc-getCC) -nostdlib" LDFLAGS="${LDFLAGS}"
+}
+
+src_install() {
+       local basedir="/usr/share/emacs/${PV}" i
+
+       dodir ${basedir}
+       dodir /usr/share/man/man1
+       emake --jobs=1 \
+               LIBDIR="${D}"${basedir} \
+               BINDIR="${D}"/usr/bin \
+               MANDIR="${D}"/usr/share/man/man1 \
+               install
+
+       rmdir "${D}"${basedir}/lock || die
+       find "${D}"${basedir} -type f \( -name "*.c" -o -name ChangeLog \
+               -o -name COPYING ! -path "*/etc/COPYING" \) -exec rm "{}" + || 
die
+       fperms -R go-w ${basedir}
+
+       # remove duplicate DOC file
+       rm "${D}"${basedir}/etc/DOC || die
+
+       # move executables to the correct place
+       mv "${D}"/usr/bin/emacs{,-${SLOT}} || die
+       mv "${D}"/usr/bin/emacsclient{,-emacs-${SLOT}} || die
+       rm "${D}"${basedir}/etc/emacsclient || die
+
+       dodir /usr/libexec/emacs/${PV}
+       for i in wakeup digest-doc sorted-doc movemail cvtmail fakemail \
+               yow env server
+       do
+               mv "${D}"${basedir}/etc/${i} 
"${D}"/usr/libexec/emacs/${PV}/${i} || die
+               dosym -r /usr/libexec/emacs/${PV}/${i} ${basedir}/etc/${i}
+       done
+       for i in test-distrib make-docfile; do
+               rm "${D}"${basedir}/etc/${i} || die
+       done
+
+       # move man page
+       mv "${D}"/usr/share/man/man1/emacs{,-${SLOT}}.1 || die
+
+       # move Info files
+       dodir /usr/share/info
+       mv "${D}"${basedir}/info "${D}"/usr/share/info/emacs-${SLOT} || die
+       dosym -r /usr/share/info/emacs-${SLOT} ${basedir}/info
+       docompress -x /usr/share/info
+
+       # dissuade Portage from removing our dir file #257260
+       touch "${D}"/usr/share/info/emacs-${SLOT}/.keepinfodir
+
+       dodir /var/lib/emacs
+       diropts -m0777
+       keepdir /var/lib/emacs/lock
+
+       dodoc README PROBLEMS
+}
+
+pkg_preinst() {
+       # verify that the PM hasn't removed our Info directory index #257260
+       local infodir="${ED}/usr/share/info/emacs-${SLOT}"
+       [[ -f ${infodir}/dir || ! -d ${infodir} ]] || die
+}
+
+pkg_postinst() {
+       eselect --root="${ROOT}" emacs update ifunset
+}
+
+pkg_postrm() {
+       eselect --root="${ROOT}" emacs update ifunset
+}

Reply via email to