app-editors/emacs: drop 26.3-r19, 27.2-r17, 28.2-r13, 29.4

Signed-off-by: Ulrich Müller <ulm@gentoo.org>
This commit is contained in:
Ulrich Müller
2025-04-13 14:34:24 +02:00
parent fdd64bcee1
commit ebcdda9372
5 changed files with 0 additions and 1981 deletions

View File

@@ -1,15 +1,11 @@
DIST emacs-18.59-patches-15.tar.xz 34104 BLAKE2B 9d14004d5188ec0ffe11099ae1beb431adfe159d220fc1b6f1d0be67da19b88911b66a206386beee9498bdcaa48e40a185755734cad2d60927c79bc8ddf0fa7d SHA512 c82cd8e81acf63addd137716a60191b916ee9ac9f8176661be1e8dd0f347f63f8ca8bf9d4d225141499dcbf4c20444eb6526cc3a3912a2d4136fb2bd295e2c26
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-patches-9.tar.xz 8168 BLAKE2B 5108fddebe75c188ad2f43e5b92c7b6f3f16645c64eafbbe850539918eac9cebb05e60e4343da62c695c068f51637e91762cb7d49536bb21ca82ef1144295b17 SHA512 9d3006b9d274606bb22b5b614d7c9d111b582e6cca3f83d0b71e5ae1aaba88ac702b756556ee7abd5b09c7964fdcc24d766661a2006c7f77f12d9f66a1ae2d6d
DIST emacs-26.3.tar.xz 44415140 BLAKE2B aa8434e6431992ee40402f03a890dd2c49784ee76f437888efe61d66b9aa2bdb816eb0bfe1055e9e154a8bb3ed065fee71623741b474d465a96964618ec775e3 SHA512 4d5a4319253afb081e105a3697eb6eeb8d8a0da18cd41346e376ca5af1e180a26e641f76c64fad1b0253168f14a511f0a4d9d4141524fb1cf4d04f25b05a76e9
DIST emacs-27.2-patches-10.tar.xz 15260 BLAKE2B 7e5771013e3912e0c3115d819be673399e5dc07b7fb4d8567b8666099049552ce539cfac92cc90762e517deaf6e7c46cbbbd207a4d9ac631ea8ea78cf93442ff SHA512 36f1410b70ff1a972d23919add6153497f1142bef654ac601149da7014eb1cf6bd05029877cc3262f572682b5d99b11d67cae24154b76d6e742e3ebd448865a3
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-8.tar.xz 10504 BLAKE2B fe21b417a79f6f22ac594168aaa786359d13509011992ab958a268764e520b5c2b2270415f118013de8672280bb4c2acb645ab014b8d26ab6f634778a91b90bb SHA512 9c8fc7c4a76fe4c9d742c4e3343b31f9b696483c1774388e23f7db92f5e78bfed3871e344899996bcba142dc782f6a13b6a3df9684c977b86225afaa97a0bab8
DIST emacs-28.2.tar.xz 47722600 BLAKE2B a7e4990658b5e7306510f8dded93aaf0b82cdd9306df8b786526d038c3249ef9579287075f2235eb01a71ae1699db555254f137b86ab2d2305b45895053df552 SHA512 a7cec7e3e82367815a1442f69af54102dbfc434069810a9dec5938a6660cb8b076e6f1fb0bfff9695b15603dbbe05eb9c7dfd92e90cf40fc4d1e5746bce83bd8
DIST emacs-29.4-patches-3.tar.xz 2364 BLAKE2B bf0d044ad0b12eeea1b87d76f143f3a542857eff6b29685abb2b37efd0105580cba2f4ca49655b4da6e13d3997e6c26f2966e597f66753b5321f6aa09f8c563d SHA512 4c6321a63a3f917f9644d464c74925fad0942caeb57966b2a5a0ed171eeb8987230b7039b2829f96526d205b4ad97fcc94f991ecdf7296d8dee355eb14d4df36
DIST emacs-29.4-patches-4.tar.xz 6872 BLAKE2B ad701863650ac7ccd7bd77e73083c62e71b64c547ad05a1b7cc4384f9636a82d1218a5cfae11d8404e0d59c13632a975caa48851b004b9ad55d7f04fa2500f9d SHA512 659edf90ec73e424a635399155413c0c98e45a33d83c353c0e029333761354fa3008ed0b586c64e0b8afe5f5dd85bdeb3b3bfc731afd6869d24d653af5e1c8bf
DIST emacs-29.4.tar.xz 52210344 BLAKE2B 825fd2665b6427dbc3cb618b40df2f71fa6b08883bdd07be6d8acf0039df2aeebd294e679e98f4c64a9dd9bdad93589fc7c176cf3860d4fb823fce23f7f2b3cd SHA512 66b38081cb01d2c46ff7beefb45986cc225b4c922c30712ad0d456c6cae5507176ed99418c8f26948c5375c8afde4e4b2507d23ed997dbb5392d12150a121d80
DIST emacs-30.1.tar.xz 54978160 BLAKE2B ad502a2e15a04618f4766ec6e285739cb5bb6f19c5065c3aed03b3e50df590cee382a0331f382de6f13523f1362a4355f65961ce45504f7d33419ea6d04e326f SHA512 511a6a1d2a170a207913692e1349344b70a0b5202b8d1ae27dc7256e589c77ae9e35da16fc2a098bf9f1b8d0f60233f452ed8d6744b70b907f3484c42f2d7d7f

View File

@@ -1,370 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit autotools elisp-common flag-o-matic readme.gentoo-r1
DESCRIPTION="The extensible, customizable, self-documenting real-time display editor"
HOMEPAGE="https://www.gnu.org/software/emacs/"
SRC_URI="mirror://gnu/emacs/${P}.tar.xz
https://dev.gentoo.org/~ulm/emacs/${P}-patches-9.tar.xz"
# 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%%_*}"
S="${WORKDIR}/emacs-${FULL_VERSION}"
LICENSE="GPL-3+ FDL-1.3+ BSD HPND MIT W3C unicode PSF-2"
SLOT="26"
KEYWORDS="~alpha amd64 arm arm64 hppa ~mips ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
IUSE="acl alsa aqua athena cairo dbus dynamic-loading games gfile gif gpm gsettings gtk gui gzip-el imagemagick +inotify jpeg 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[games?,gui(-)?]
sys-libs/ncurses:0=
acl? ( virtual/acl )
alsa? ( media-libs/alsa-lib )
dbus? ( sys-apps/dbus )
games? ( acct-group/gamestat )
gpm? ( sys-libs/gpm )
!inotify? ( gfile? ( >=dev-libs/glib-2.28.6 ) )
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? ( sys-libs/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/libXft
x11-libs/libXrender
cairo? ( >=x11-libs/cairo-1.12.18[X] )
m17n-lib? (
>=dev-libs/libotf-0.9.4
>=dev-libs/m17n-lib-1.5.1
)
)
gtk? ( x11-libs/gtk+:3 )
!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="virtual/pkgconfig
gzip-el? ( app-arch/gzip )"
IDEPEND="app-eselect/eselect-emacs"
RDEPEND+=" ${IDEPEND}"
EMACS_SUFFIX="emacs-${SLOT}"
SITEFILE="20${EMACS_SUFFIX}-gentoo.el"
PATCHES=("${WORKDIR}/patch")
# Suppress false positive QA warnings #898304
QA_CONFIG_IMPL_DECL_SKIP=( malloc_{set,get}_state MIN )
src_prepare() {
default
# Fix filename reference in redirected man page
sed -i -e "/^\\.so/s/etags/&-${EMACS_SUFFIX}/" doc/man/ctags.1 || die
AT_M4DIR=m4 eautoreconf
}
src_configure() {
strip-flags
filter-flags -pie #526948
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
local myconf
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)"
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"
myconf+=" --without-x"
else
myconf+=" --with-x --without-ns"
myconf+=" --without-gconf"
myconf+=" $(use_with gsettings)"
myconf+=" $(use_with toolkit-scroll-bars)"
myconf+=" $(use_with gif)"
myconf+=" $(use_with jpeg)"
myconf+=" $(use_with png)"
myconf+=" $(use_with svg rsvg)"
myconf+=" $(use_with tiff)"
myconf+=" $(use_with xpm)"
myconf+=" $(use_with imagemagick)"
if use xft; then
myconf+=" --with-xft"
myconf+=" $(use_with cairo)"
myconf+=" $(use_with m17n-lib libotf)"
myconf+=" $(use_with m17n-lib m17n-flt)"
else
myconf+=" --without-xft"
myconf+=" --without-cairo"
myconf+=" --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
Your version of GTK+ will have problems with closing open
displays. This is no problem if you just use one display, but
if you use more than one and close one of them Emacs may crash.
See <https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
If you intend to use more than one display, then it is strongly
recommended that you compile Emacs with the Athena/Lucid or the
Motif toolkit instead.
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
econf \
--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) \
$(use_enable acl) \
$(use_with dbus) \
$(use_with dynamic-loading modules) \
$(use_with games gameuser ":gamestat") \
$(use_with gpm) \
$(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) \
$(use_with zlib) \
${myconf}
}
src_compile() {
export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
# Disable sandbox when dumping. For the unbelievers, see bug #131505
emake RUN_TEMACS="SANDBOX_ON=0 LD_PRELOAD= env ./temacs"
}
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}.appdata.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)" || 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 systemd; then
insinto /usr/lib/systemd/user
sed -e "/^##/d" \
-e "/^ExecStart/s,emacs,${EPREFIX}/usr/bin/${EMACS_SUFFIX}," \
-e "/^ExecStop/s,emacsclient,${EPREFIX}/usr/bin/&-${EMACS_SUFFIX}," \
etc/emacs.service | newins - ${EMACS_SUFFIX}.service
assert
fi
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
assert "gzip .el 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
X
;;; ${EMACS_SUFFIX} site-lisp configuration
X
(when (string-match "\\\\\`${FULL_VERSION//./\\\\.}\\\\>" emacs-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
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
if use livecd; then
# force an update of the emacs symlink for the livecd/dvd,
# because some microemacs packages set it with USE=livecd
eselect emacs update
else
eselect emacs update ifunset
fi
}
pkg_postrm() {
elisp-site-regen
eselect emacs update ifunset
}

View File

@@ -1,443 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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-27"
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://dev.gentoo.org/~ulm/emacs/${P}-patches-10.tar.xz"
PATCHES=("${WORKDIR}/patch")
SLOT="${PV%%.*}"
[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
KEYWORDS="~alpha amd64 arm arm64 hppa ~m68k ~mips ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
fi
DESCRIPTION="The extensible, customizable, self-documenting real-time display editor"
HOMEPAGE="https://www.gnu.org/software/emacs/"
LICENSE="GPL-3+ FDL-1.3+ BSD HPND MIT W3C unicode PSF-2"
IUSE="acl alsa aqua athena cairo dbus dynamic-loading games gfile gif +gmp gpm gsettings gtk gui gzip-el harfbuzz imagemagick +inotify 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"
RESTRICT="test"
RDEPEND="app-emacs/emacs-common[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 ) )
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? ( sys-libs/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 )
!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_set_state malloc_get_state MIN
statvfs64 re_set_syntax re_compile_pattern re_search re_match
)
src_prepare() {
if [[ ${PV##*.} = 9999 ]]; then
FULL_VERSION=$(sed -n 's/^AC_INIT([^,]*,[ \t]*\([^ \t,)]*\).*/\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
# Fix filename reference in redirected man page
sed -i -e "/^\\.so/s/etags/&-${EMACS_SUFFIX}/" doc/man/ctags.1 || 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
local myconf
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)"
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"
myconf+=" --without-x"
else
myconf+=" --with-x --without-ns"
myconf+=" --without-gconf"
myconf+=" $(use_with gsettings)"
myconf+=" $(use_with toolkit-scroll-bars)"
myconf+=" $(use_with gif)"
myconf+=" $(use_with jpeg)"
myconf+=" $(use_with png)"
myconf+=" $(use_with svg rsvg)"
myconf+=" $(use_with tiff)"
myconf+=" $(use_with xpm)"
myconf+=" $(use_with imagemagick)"
if use xft; then
myconf+=" --with-xft"
myconf+=" $(use_with cairo)"
myconf+=" $(use_with harfbuzz)"
myconf+=" $(use_with m17n-lib libotf)"
myconf+=" $(use_with m17n-lib m17n-flt)"
else
myconf+=" --without-xft"
myconf+=" --without-cairo"
myconf+=" --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
Your version of GTK+ will have problems with closing open
displays. This is no problem if you just use one display, but
if you use more than one and close one of them Emacs may crash.
See <https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
If you intend to use more than one display, then it is strongly
recommended that you compile Emacs with the Athena/Lucid or the
Motif toolkit instead.
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 \
--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 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) \
$(use_with zlib) \
${myconf}
}
src_compile() {
export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
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_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}.appdata.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)" || 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 systemd; then
insinto /usr/lib/systemd/user
sed -e "/^##/d" \
-e "/^ExecStart/s,emacs,${EPREFIX}/usr/bin/${EMACS_SUFFIX}," \
-e "/^ExecStop/s,emacsclient,${EPREFIX}/usr/bin/&-${EMACS_SUFFIX}," \
etc/emacs.service | newins - ${EMACS_SUFFIX}.service
assert
fi
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
assert "gzip .el 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
X
;;; ${EMACS_SUFFIX} site-lisp configuration
X
(when (string-match "\\\\\`${FULL_VERSION//./\\\\.}\\\\>" emacs-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
if use livecd; then
# force an update of the emacs symlink for the livecd/dvd,
# because some microemacs packages set it with USE=livecd
eselect emacs update
else
eselect emacs update ifunset
fi
}
pkg_postrm() {
elisp-site-regen
eselect emacs update ifunset
}

View File

@@ -1,539 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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-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://dev.gentoo.org/~ulm/emacs/${P}-patches-8.tar.xz"
PATCHES=("${WORKDIR}/patch")
SLOT="${PV%%.*}"
[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
KEYWORDS="~alpha amd64 arm arm64 hppa ~m68k ~mips ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
fi
DESCRIPTION="The extensible, customizable, self-documenting real-time display editor"
HOMEPAGE="https://www.gnu.org/software/emacs/"
LICENSE="GPL-3+ FDL-1.3+ BSD HPND MIT W3C unicode PSF-2"
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[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(-)]
sys-libs/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? ( sys-libs/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 )
!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_set_state malloc_get_state MIN
statvfs64 re_set_syntax re_compile_pattern re_search re_match
)
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/.*"
# gccjit doesn't play well with ccache or distcc #801580
# For now, work around the problem with an explicit LIBRARY_PATH
has ccache ${FEATURES} || has distcc ${FEATURES} && tc-is-gcc \
&& export LIBRARY_PATH=$("$(tc-getCC)" -print-search-dirs \
| sed -n '/^libraries:/{s:^[^/]*::;p}')
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
local myconf
# Prevents e.g. tests interfering with running Emacs.
unset EMACS_SOCKET_NAME
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)"
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"
myconf+=" --without-x"
else
myconf+=" --with-x --without-ns"
myconf+=" --without-gconf"
myconf+=" $(use_with gsettings)"
myconf+=" $(use_with toolkit-scroll-bars)"
myconf+=" $(use_with gif)"
myconf+=" $(use_with jpeg)"
myconf+=" $(use_with png)"
myconf+=" $(use_with svg rsvg)"
myconf+=" $(use_with tiff)"
myconf+=" $(use_with xpm)"
myconf+=" $(use_with imagemagick)"
if use xft; then
myconf+=" --with-xft"
myconf+=" $(use_with cairo)"
myconf+=" $(use_with harfbuzz)"
myconf+=" $(use_with m17n-lib libotf)"
myconf+=" $(use_with m17n-lib m17n-flt)"
else
myconf+=" --without-xft"
myconf+=" --without-cairo"
myconf+=" --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
Your version of GTK+ will have problems with closing open
displays. This is no problem if you just use one display, but
if you use more than one and close one of them Emacs may crash.
See <https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
If you intend to use more than one display, then it is strongly
recommended that you compile Emacs with the Athena/Lucid or the
Motif toolkit instead.
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 \
--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) \
${myconf}
}
src_compile() {
export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
append-cppflags -DUSE_VALGRIND=$(usex valgrind)
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 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 systemd; then
insinto /usr/lib/systemd/user
sed -e "/^##/d" \
-e "/^ExecStart/s,emacs,${EPREFIX}/usr/bin/${EMACS_SUFFIX}," \
-e "/^ExecStop/s,emacsclient,${EPREFIX}/usr/bin/&-${EMACS_SUFFIX}," \
etc/emacs.service | newins - ${EMACS_SUFFIX}.service
assert
fi
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
assert "gzip .el 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
X
;;; ${EMACS_SUFFIX} site-lisp configuration
X
(when (string-match "\\\\\`${FULL_VERSION//./\\\\.}\\\\>" emacs-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
if use livecd; then
# force an update of the emacs symlink for the livecd/dvd,
# because some microemacs packages set it with USE=livecd
eselect emacs update
else
eselect emacs update ifunset
fi
}
pkg_postrm() {
elisp-site-regen
eselect emacs update ifunset
}

View File

@@ -1,625 +0,0 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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-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://dev.gentoo.org/~ulm/emacs/${P}-patches-3.tar.xz"
PATCHES=("${WORKDIR}/patch")
SLOT="${PV%%.*}"
[[ ${PV} == *.*.* ]] && SLOT+="-vcs"
KEYWORDS="~alpha amd64 arm arm64 hppa ~m68k ~mips ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
fi
DESCRIPTION="The extensible, customizable, self-documenting real-time display editor"
HOMEPAGE="https://www.gnu.org/software/emacs/"
LICENSE="GPL-3+ FDL-1.3+ BSD HPND MIT W3C unicode PSF-2"
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 )
!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[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(-)]
sys-libs/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? ( sys-libs/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[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_set_state malloc_get_state MIN static_assert alignof
statvfs64 re_set_syntax re_compile_pattern re_search re_match
)
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/.*"
# gccjit doesn't play well with ccache or distcc #801580
# For now, work around the problem with an explicit LIBRARY_PATH
has ccache ${FEATURES} || has distcc ${FEATURES} && tc-is-gcc \
&& export LIBRARY_PATH=$("$(tc-getCC)" -print-search-dirs \
| sed -n '/^libraries:/{s:^[^/]*::;p}')
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
local myconf
# Prevents e.g. tests interfering with running Emacs.
unset EMACS_SOCKET_NAME
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)"
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"
myconf+=" --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"
myconf+=" --with-toolkit-scroll-bars" #836392
myconf+=" --without-gconf"
myconf+=" --without-xwidgets"
myconf+=" $(use_with gsettings)"
myconf+=" $(use_with harfbuzz)"
myconf+=" $(use_with m17n-lib libotf)"
myconf+=" $(use_with m17n-lib m17n-flt)"
else
# X11
myconf+=" --with-x --without-pgtk --without-ns"
myconf+=" --without-gconf"
myconf+=" $(use_with gsettings)"
myconf+=" $(use_with toolkit-scroll-bars)"
myconf+=" $(use_with xpm)"
if use xft; then
myconf+=" --with-xft"
myconf+=" $(use_with cairo)"
myconf+=" $(use_with harfbuzz)"
myconf+=" $(use_with m17n-lib libotf)"
myconf+=" $(use_with m17n-lib m17n-flt)"
else
myconf+=" --without-xft"
myconf+=" --without-cairo"
myconf+=" --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
Your version of GTK+ will have problems with closing open
displays. This is no problem if you just use one display, but
if you use more than one and close one of them Emacs may crash.
See <https://gitlab.gnome.org/GNOME/gtk/-/issues/221> and
<https://gitlab.gnome.org/GNOME/gtk/-/issues/2315>.
If you intend to use more than one display, then it is strongly
recommended that you compile Emacs with the Athena/Lucid or the
Motif toolkit instead.
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)"
myconf+=" $(use_with jpeg)"
myconf+=" $(use_with png)"
myconf+=" $(use_with svg rsvg)"
myconf+=" $(use_with tiff)"
myconf+=" $(use_with webp)"
myconf+=" $(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 \
--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) \
${myconf}
}
src_compile() {
export ac_cv_header_valgrind_valgrind_h=$(usex valgrind)
append-cppflags -DUSE_VALGRIND=$(usex valgrind)
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: 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: fails with stable version of tree-sitter-json due to
# ast changes. Bug #922525
%src/treesit-tests.log
# Reason: test is not skipped if tree-sitter-tsx is not installed
# Bug #922525
%lisp/progmodes/typescript-ts-mode-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
%lisp/gnus/mml-sec-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 systemd; then
insinto /usr/lib/systemd/user
sed -e "/^##/d" \
-e "/^ExecStart/s,emacs,${EPREFIX}/usr/bin/${EMACS_SUFFIX}," \
-e "/^ExecStop/s,emacsclient,${EPREFIX}/usr/bin/&-${EMACS_SUFFIX}," \
etc/emacs.service | newins - ${EMACS_SUFFIX}.service
assert
fi
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
assert "gzip .el 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
X
;;; ${EMACS_SUFFIX} site-lisp configuration
X
(when (string-match "\\\\\`${FULL_VERSION//./\\\\.}\\\\>" emacs-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:
https://www.gnu.org/software/emacs/manual/html_node/emacs/Movemail.html"
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
if use livecd; then
# force an update of the emacs symlink for the livecd/dvd,
# because some microemacs packages set it with USE=livecd
eselect emacs update
else
eselect emacs update ifunset
fi
}
pkg_postrm() {
elisp-site-regen
eselect emacs update ifunset
}