1SUMMARY = "Emacs is the extensible, customizable, self-documenting real-time display editor" 2HOMEPAGE = "https://www.gnu.org/software/emacs/" 3 4LICENSE = "GPL-3.0-only" 5LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464" 6 7SRC_URI = "https://ftp.gnu.org/pub/gnu/emacs/emacs-${PV}.tar.xz \ 8 " 9SRC_URI:append:class-target = " \ 10 file://use-emacs-native-tools-for-cross-compiling.patch \ 11 file://avoid-running-host-binaries-for-sanity.patch \ 12" 13 14SRC_URI[sha256sum] = "d2f881a5cc231e2f5a03e86f4584b0438f83edd7598a09d24a21bd8d003e2e01" 15 16CVE_STATUS[CVE-2007-6109] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions." 17 18PACKAGECONFIG[gnutls] = "--with-gnutls=yes,--with-gnutls=no,gnutls" 19PACKAGECONFIG[kerberos] = "--with-kerberos=yes,--with-kerberos=no,krb5" 20PACKAGECONFIG[libgmp] = "--with-libgmp=yes,--with-libgmp=no,gmp" 21 22PACKAGECONFIG ??= "gnutls kerberos libgmp" 23 24# We could use --without-all but its better to 25# split it into several packages (size of minimal doesnt change) 26EXTRA_OECONF = " --with-x=no --with-dumping=none --disable-build-details" 27 28# Disable seccomp, as its a default dependency for gnutls but it doesnt work when cross-compiling emacs 29EXTRA_OECONF:append = " ${@bb.utils.contains('PACKAGECONFIG', 'gnutls', 'ac_cv_have_decl_SECCOMP_FILTER_FLAG_TSYNC=no ac_cv_have_decl_SECCOMP_SET_MODE_FILTER=no', '', d)}" 30 31 32DEPENDS = "ncurses" 33DEPENDS:append:class-target = " emacs-native" 34 35inherit autotools mime-xdg pkgconfig 36 37 38# Create the required native tools for the target build 39do_compile:class-native (){ 40 cd ${B}/lib-src 41 oe_runmake make-docfile 42 oe_runmake make-fingerprint 43 cd ${B}/src 44 oe_runmake bootstrap-emacs 45} 46 47do_install:class-native(){ 48 install -d ${D}${bindir} 49 install -m 755 ${B}/lib-src/make-docfile ${D}/${bindir}/ 50 install -m 755 ${B}/lib-src/make-fingerprint ${D}/${bindir}/ 51 install -m 755 ${B}/src/bootstrap-emacs ${D}/${bindir}/ 52} 53 54do_compile:prepend:class-target () { 55 # export EMACS env variables for the native tools to use to allow calling bootstrap-emacs 56 export EMACSLOADPATH=${S}/lisp 57 export EMACSDATA=${S}/etc 58} 59 60 61do_install:prepend:class-target(){ 62 # export EMACS env variables for the native tools to use to allow calling bootstrap-emacs 63 export EMACSLOADPATH=${S}/lisp 64 export EMACSDATA=${S}/etc 65} 66 67# Remove build host references to avoid target pollution 68do_compile:prepend () { 69 sed -i -e 's|${TMPDIR}||g' ${B}/src/config.h 70 sed -i -e 's|${B}||g' ${B}/src/epaths.h 71} 72 73do_install:append(){ 74 # Delete systemd stuff, extend using DISTRO_FEATURES? 75 rm -rf ${D}/${libdir} 76 # Extra stuff which isnt needed 77 rm -rf ${D}/${datadir}/metainfo 78 rm -rf ${D}/${datadir}/info 79 # Emacs copies files to ${D} while building, which were unpacked 80 # by a different user, we need to restore those 81 chown -R root:root ${D}${datadir} 82} 83 84# Use a similar strategy to how we build python: 85# Create three packages 86# minimal - A working lisp based text editor 87# base - What would probably work for most 88# full - A fully working emacs 89# The lists of files are long but are worth it 90# Installing "emacs" installs the base package 91PACKAGE_BEFORE_PN = "${PN}-minimal ${PN}-base ${PN}-full" 92RPROVIDES:${PN}-base = "${PN}" 93RDEPENDS:${PN}-base:class-target = "${PN}-minimal" 94RDEPENDS:${PN}-full:class-target = "${PN}" 95 96 97# A minimal version of emacs that works 98# These are kept sorted in alphabetical order 99FILES:${PN}-minimal = " \ 100 ${bindir}/emacs* \ 101 ${datadir}/${BPN}/${PV}/etc/charsets/ \ 102 ${datadir}/${BPN}/${PV}/lisp/abbrev.elc \ 103 ${datadir}/${BPN}/${PV}/lisp/bindings.elc \ 104 ${datadir}/${BPN}/${PV}/lisp/buff-menu.elc \ 105 ${datadir}/${BPN}/${PV}/lisp/button.elc \ 106 ${datadir}/${BPN}/${PV}/lisp/case-table.elc \ 107 ${datadir}/${BPN}/${PV}/lisp/composite.elc \ 108 ${datadir}/${BPN}/${PV}/lisp/cus-face.elc \ 109 ${datadir}/${BPN}/${PV}/lisp/cus-start.elc \ 110 ${datadir}/${BPN}/${PV}/lisp/custom.elc \ 111 ${datadir}/${BPN}/${PV}/lisp/disp-table.elc \ 112 ${datadir}/${BPN}/${PV}/lisp/electric.elc \ 113 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/backquote.elc \ 114 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/byte-opt.elc \ 115 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/byte-run.elc \ 116 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/bytecomp.elc \ 117 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cconv.elc \ 118 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-generic.elc \ 119 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-lib.elc \ 120 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-macs.elc \ 121 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-preloaded.elc \ 122 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-seq.elc \ 123 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/debug-early.elc \ 124 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/easy-mmode.elc \ 125 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/easymenu.elc \ 126 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eldoc.elc \ 127 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/float-sup.elc \ 128 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/gv.elc \ 129 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/inline.elc \ 130 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp-mode.elc \ 131 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp.elc \ 132 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/macroexp.elc \ 133 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map-ynp.elc \ 134 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map.elc \ 135 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/nadvice.elc \ 136 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/oclosure.elc \ 137 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/pcase.elc \ 138 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/regexp-opt.elc \ 139 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/rmc.elc \ 140 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/rx.elc \ 141 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/seq.elc \ 142 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/shorthands.elc \ 143 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/subr-x.elc \ 144 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/syntax.elc \ 145 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/tabulated-list.elc \ 146 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/timer.elc \ 147 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/vc/warnings.elc \ 148 ${datadir}/${BPN}/${PV}/lisp/env.elc \ 149 ${datadir}/${BPN}/${PV}/lisp/epa-hook.elc \ 150 ${datadir}/${BPN}/${PV}/lisp/facemenu.elc \ 151 ${datadir}/${BPN}/${PV}/lisp/faces.elc \ 152 ${datadir}/${BPN}/${PV}/lisp/files.elc \ 153 ${datadir}/${BPN}/${PV}/lisp/font-core.elc \ 154 ${datadir}/${BPN}/${PV}/lisp/font-lock.elc \ 155 ${datadir}/${BPN}/${PV}/lisp/format.elc \ 156 ${datadir}/${BPN}/${PV}/lisp/frame.elc \ 157 ${datadir}/${BPN}/${PV}/lisp/help.elc \ 158 ${datadir}/${BPN}/${PV}/lisp/image.elc \ 159 ${datadir}/${BPN}/${PV}/lisp/indent.elc \ 160 ${datadir}/${BPN}/${PV}/lisp/international/characters.elc \ 161 ${datadir}/${BPN}/${PV}/lisp/international/charprop.el \ 162 ${datadir}/${BPN}/${PV}/lisp/international/charscript.elc \ 163 ${datadir}/${BPN}/${PV}/lisp/international/cp51932.elc \ 164 ${datadir}/${BPN}/${PV}/lisp/international/emoji-zwj.elc \ 165 ${datadir}/${BPN}/${PV}/lisp/international/eucjp-ms.elc \ 166 ${datadir}/${BPN}/${PV}/lisp/international/iso-transl.elc \ 167 ${datadir}/${BPN}/${PV}/lisp/international/mule-cmds.elc \ 168 ${datadir}/${BPN}/${PV}/lisp/international/mule-conf.elc \ 169 ${datadir}/${BPN}/${PV}/lisp/international/mule.elc \ 170 ${datadir}/${BPN}/${PV}/lisp/international/uni*.el \ 171 ${datadir}/${BPN}/${PV}/lisp/isearch.elc \ 172 ${datadir}/${BPN}/${PV}/lisp/jit-lock.elc \ 173 ${datadir}/${BPN}/${PV}/lisp/jka-cmpr-hook.elc \ 174 ${datadir}/${BPN}/${PV}/lisp/jka-compr.elc \ 175 ${datadir}/${BPN}/${PV}/lisp/keymap.elc \ 176 ${datadir}/${BPN}/${PV}/lisp/language/burmese.elc \ 177 ${datadir}/${BPN}/${PV}/lisp/language/cham.elc \ 178 ${datadir}/${BPN}/${PV}/lisp/language/chinese.elc \ 179 ${datadir}/${BPN}/${PV}/lisp/language/cyrillic.elc \ 180 ${datadir}/${BPN}/${PV}/lisp/language/czech.elc \ 181 ${datadir}/${BPN}/${PV}/lisp/language/english.elc \ 182 ${datadir}/${BPN}/${PV}/lisp/language/ethiopic.elc \ 183 ${datadir}/${BPN}/${PV}/lisp/language/european.elc \ 184 ${datadir}/${BPN}/${PV}/lisp/language/georgian.elc \ 185 ${datadir}/${BPN}/${PV}/lisp/language/greek.elc \ 186 ${datadir}/${BPN}/${PV}/lisp/language/hebrew.elc \ 187 ${datadir}/${BPN}/${PV}/lisp/language/indian.elc \ 188 ${datadir}/${BPN}/${PV}/lisp/language/indonesian.elc \ 189 ${datadir}/${BPN}/${PV}/lisp/language/japanese.elc \ 190 ${datadir}/${BPN}/${PV}/lisp/language/khmer.elc \ 191 ${datadir}/${BPN}/${PV}/lisp/language/korean.elc \ 192 ${datadir}/${BPN}/${PV}/lisp/language/lao.elc \ 193 ${datadir}/${BPN}/${PV}/lisp/language/misc-lang.elc \ 194 ${datadir}/${BPN}/${PV}/lisp/language/philippine.elc \ 195 ${datadir}/${BPN}/${PV}/lisp/language/romanian.elc \ 196 ${datadir}/${BPN}/${PV}/lisp/language/sinhala.elc \ 197 ${datadir}/${BPN}/${PV}/lisp/language/slovak.elc \ 198 ${datadir}/${BPN}/${PV}/lisp/language/tai-viet.elc \ 199 ${datadir}/${BPN}/${PV}/lisp/language/thai.elc \ 200 ${datadir}/${BPN}/${PV}/lisp/language/tibetan.elc \ 201 ${datadir}/${BPN}/${PV}/lisp/language/utf-8-lang.elc \ 202 ${datadir}/${BPN}/${PV}/lisp/language/vietnamese.elc \ 203 ${datadir}/${BPN}/${PV}/lisp/ldefs-boot.el \ 204 ${datadir}/${BPN}/${PV}/lisp/loaddefs.el \ 205 ${datadir}/${BPN}/${PV}/lisp/loadup.el \ 206 ${datadir}/${BPN}/${PV}/lisp/menu-bar.elc \ 207 ${datadir}/${BPN}/${PV}/lisp/minibuffer.elc \ 208 ${datadir}/${BPN}/${PV}/lisp/mouse.elc \ 209 ${datadir}/${BPN}/${PV}/lisp/newcomment.elc \ 210 ${datadir}/${BPN}/${PV}/lisp/obarray.elc \ 211 ${datadir}/${BPN}/${PV}/lisp/paren.elc \ 212 ${datadir}/${BPN}/${PV}/lisp/progmodes/elisp-mode.elc \ 213 ${datadir}/${BPN}/${PV}/lisp/progmodes/prog-mode.elc \ 214 ${datadir}/${BPN}/${PV}/lisp/register.elc \ 215 ${datadir}/${BPN}/${PV}/lisp/replace.elc \ 216 ${datadir}/${BPN}/${PV}/lisp/rfn-eshadow.elc \ 217 ${datadir}/${BPN}/${PV}/lisp/select.elc \ 218 ${datadir}/${BPN}/${PV}/lisp/simple.elc \ 219 ${datadir}/${BPN}/${PV}/lisp/startup.elc \ 220 ${datadir}/${BPN}/${PV}/lisp/subr.elc \ 221 ${datadir}/${BPN}/${PV}/lisp/tab-bar.elc \ 222 ${datadir}/${BPN}/${PV}/lisp/term/tty-colors.elc \ 223 ${datadir}/${BPN}/${PV}/lisp/term/xterm.elc \ 224 ${datadir}/${BPN}/${PV}/lisp/textmodes/fill.elc \ 225 ${datadir}/${BPN}/${PV}/lisp/textmodes/page.elc \ 226 ${datadir}/${BPN}/${PV}/lisp/textmodes/paragraphs.elc \ 227 ${datadir}/${BPN}/${PV}/lisp/textmodes/text-mode.elc \ 228 ${datadir}/${BPN}/${PV}/lisp/thingatpt.elc \ 229 ${datadir}/${BPN}/${PV}/lisp/tooltip.elc \ 230 ${datadir}/${BPN}/${PV}/lisp/uniquify.elc \ 231 ${datadir}/${BPN}/${PV}/lisp/vc/ediff-hook.elc \ 232 ${datadir}/${BPN}/${PV}/lisp/vc/vc-hooks.elc \ 233 ${datadir}/${BPN}/${PV}/lisp/version.elc \ 234 ${datadir}/${BPN}/${PV}/lisp/widget.elc \ 235 ${datadir}/${BPN}/${PV}/lisp/window.elc \ 236 ${prefix}/libexec \ 237" 238 239# What works for "most" is relative, but this can be easily extended if needed 240FILES:${PN}-base = " \ 241 ${datadir}/${BPN}/${PV}/etc/e \ 242 ${datadir}/${BPN}/${PV}/etc/forms \ 243 ${datadir}/${BPN}/${PV}/etc/srecode \ 244 ${datadir}/${BPN}/${PV}/etc/themes/adwaita-theme.el \ 245 ${datadir}/${BPN}/${PV}/etc/themes/deeper-blue-theme.el \ 246 ${datadir}/${BPN}/${PV}/etc/themes/light-blue-theme.el \ 247 ${datadir}/${BPN}/${PV}/etc/themes/misterioso-theme.el \ 248 ${datadir}/${BPN}/${PV}/etc/themes/tango-theme.el \ 249 ${datadir}/${BPN}/${PV}/etc/themes/wheatgrass-theme.el \ 250 ${datadir}/${BPN}/${PV}/etc/themes/wombat-theme.el \ 251 ${datadir}/${BPN}/${PV}/lisp/ansi-color.elc \ 252 ${datadir}/${BPN}/${PV}/lisp/auth-source.elc \ 253 ${datadir}/${BPN}/${PV}/lisp/calendar/iso8601.elc \ 254 ${datadir}/${BPN}/${PV}/lisp/calendar/parse-time.elc \ 255 ${datadir}/${BPN}/${PV}/lisp/calendar/time-date.elc \ 256 ${datadir}/${BPN}/${PV}/lisp/cedet \ 257 ${datadir}/${BPN}/${PV}/lisp/comint.elc \ 258 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-lib.elc \ 259 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-macs.elc \ 260 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-seq.elc \ 261 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eieio-core.elc \ 262 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eieio.elc \ 263 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/inline.elc \ 264 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/pcase.elc \ 265 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/ring.elc \ 266 ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/smie.elc \ 267 ${datadir}/${BPN}/${PV}/lisp/files-x.elc \ 268 ${datadir}/${BPN}/${PV}/lisp/format-spec.elc \ 269 ${datadir}/${BPN}/${PV}/lisp/json.elc \ 270 ${datadir}/${BPN}/${PV}/lisp/ls-lisp.elc \ 271 ${datadir}/${BPN}/${PV}/lisp/net/tramp-compat.elc \ 272 ${datadir}/${BPN}/${PV}/lisp/net/tramp-integration.elc \ 273 ${datadir}/${BPN}/${PV}/lisp/net/tramp-loaddefs.el \ 274 ${datadir}/${BPN}/${PV}/lisp/net/tramp-sh.elc \ 275 ${datadir}/${BPN}/${PV}/lisp/net/tramp.elc \ 276 ${datadir}/${BPN}/${PV}/lisp/net/trampver.elc \ 277 ${datadir}/${BPN}/${PV}/lisp/password-cache.elc \ 278 ${datadir}/${BPN}/${PV}/lisp/pcomplete.elc \ 279 ${datadir}/${BPN}/${PV}/lisp/progmodes/*asm* \ 280 ${datadir}/${BPN}/${PV}/lisp/progmodes/*perl* \ 281 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-align.elc \ 282 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-cmds.elc \ 283 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-defs.elc \ 284 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-engine.elc \ 285 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-fonts.elc \ 286 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-guess.elc \ 287 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-menus.elc \ 288 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-mode.elc \ 289 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-styles.elc \ 290 ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-vars.elc \ 291 ${datadir}/${BPN}/${PV}/lisp/progmodes/cpp* \ 292 ${datadir}/${BPN}/${PV}/lisp/progmodes/executable* \ 293 ${datadir}/${BPN}/${PV}/lisp/progmodes/make* \ 294 ${datadir}/${BPN}/${PV}/lisp/progmodes/prog* \ 295 ${datadir}/${BPN}/${PV}/lisp/progmodes/python* \ 296 ${datadir}/${BPN}/${PV}/lisp/progmodes/sh-script* \ 297 ${datadir}/${BPN}/${PV}/lisp/shell.elc \ 298 ${datadir}/${BPN}/${PV}/lisp/subdirs.el \ 299 ${datadir}/${BPN}/${PV}/site-lisp/ \ 300" 301 302# Restore FILES for the full package to catch everything left 303FILES:${PN}-full = "${FILES:${PN}}" 304FILES:${PN}-full:append = " ${datadir}/icons" 305 306 307# The following does NOT build a native emacs. 308# It only builds some parts of it that are 309# required to by the build for target emacs. 310BBCLASSEXTEND = "native" 311