diff --git a/meta-oe/recipes-support/emacs/emacs_28.2.bb b/meta-oe/recipes-support/emacs/emacs_29.1.bb similarity index 88% rename from meta-oe/recipes-support/emacs/emacs_28.2.bb rename to meta-oe/recipes-support/emacs/emacs_29.1.bb index d44026536db..ae35367ac41 100644 --- a/meta-oe/recipes-support/emacs/emacs_28.2.bb +++ b/meta-oe/recipes-support/emacs/emacs_29.1.bb @@ -5,11 +5,13 @@ LICENSE = "GPL-3.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464" SRC_URI = "https://ftp.gnu.org/pub/gnu/emacs/emacs-${PV}.tar.xz \ - file://0001-largefile.m4-Update-from-latest-gnulib.patch \ " -SRC_URI:append:class-target = " file://usemake-docfile-native.patch" +SRC_URI:append:class-target = " \ + file://use-emacs-native-tools-for-cross-compiling.patch \ + file://avoid-running-host-binaries-for-sanity.patch \ +" -SRC_URI[sha256sum] = "ee21182233ef3232dc97b486af2d86e14042dbb65bbc535df562c3a858232488" +SRC_URI[sha256sum] = "d2f881a5cc231e2f5a03e86f4584b0438f83edd7598a09d24a21bd8d003e2e01" CVE_STATUS[CVE-2007-6109] = "fixed-version: The CPE in the NVD database doesn't reflect correctly the vulnerable versions." @@ -32,24 +34,42 @@ DEPENDS:append:class-target = " emacs-native" inherit autotools mime-xdg pkgconfig -# Remove build host references to avoid target pollution -do_compile:prepend () { - sed -i -e 's|${TMPDIR}||g' ${B}/src/config.h - sed -i -e 's|${B}||g' ${B}/src/epaths.h -} +# Create the required native tools for the target build do_compile:class-native (){ cd ${B}/lib-src oe_runmake make-docfile oe_runmake make-fingerprint + cd ${B}/src + oe_runmake bootstrap-emacs } + do_install:class-native(){ install -d ${D}${bindir} install -m 755 ${B}/lib-src/make-docfile ${D}/${bindir}/ install -m 755 ${B}/lib-src/make-fingerprint ${D}/${bindir}/ + install -m 755 ${B}/src/bootstrap-emacs ${D}/${bindir}/ +} + +do_compile:prepend:class-target () { + # export EMACS env variables for the native tools to use to allow calling bootstrap-emacs + export EMACSLOADPATH=${S}/lisp + export EMACSDATA=${S}/etc } +do_install:prepend:class-target(){ + # export EMACS env variables for the native tools to use to allow calling bootstrap-emacs + export EMACSLOADPATH=${S}/lisp + export EMACSDATA=${S}/etc +} + +# Remove build host references to avoid target pollution +do_compile:prepend () { + sed -i -e 's|${TMPDIR}||g' ${B}/src/config.h + sed -i -e 's|${B}||g' ${B}/src/epaths.h +} + do_install:append(){ # Delete systemd stuff, extend using DISTRO_FEATURES? rm -rf ${D}/${libdir} @@ -96,18 +116,28 @@ FILES:${PN}-minimal = " \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/bytecomp.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cconv.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-generic.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-lib.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-macs.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-preloaded.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-seq.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/debug-early.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/easy-mmode.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/easymenu.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eldoc.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/float-sup.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/gv.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/inline.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp-mode.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/macroexp.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map-ynp.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/nadvice.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/oclosure.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/pcase.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/regexp-opt.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/rmc.elc \ + ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/rx.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/seq.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/shorthands.elc \ ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/subr-x.elc \ @@ -141,6 +171,8 @@ FILES:${PN}-minimal = " \ ${datadir}/${BPN}/${PV}/lisp/isearch.elc \ ${datadir}/${BPN}/${PV}/lisp/jit-lock.elc \ ${datadir}/${BPN}/${PV}/lisp/jka-cmpr-hook.elc \ + ${datadir}/${BPN}/${PV}/lisp/jka-compr.elc \ + ${datadir}/${BPN}/${PV}/lisp/keymap.elc \ ${datadir}/${BPN}/${PV}/lisp/language/burmese.elc \ ${datadir}/${BPN}/${PV}/lisp/language/cham.elc \ ${datadir}/${BPN}/${PV}/lisp/language/chinese.elc \ @@ -153,11 +185,13 @@ FILES:${PN}-minimal = " \ ${datadir}/${BPN}/${PV}/lisp/language/greek.elc \ ${datadir}/${BPN}/${PV}/lisp/language/hebrew.elc \ ${datadir}/${BPN}/${PV}/lisp/language/indian.elc \ + ${datadir}/${BPN}/${PV}/lisp/language/indonesian.elc \ ${datadir}/${BPN}/${PV}/lisp/language/japanese.elc \ ${datadir}/${BPN}/${PV}/lisp/language/khmer.elc \ ${datadir}/${BPN}/${PV}/lisp/language/korean.elc \ ${datadir}/${BPN}/${PV}/lisp/language/lao.elc \ ${datadir}/${BPN}/${PV}/lisp/language/misc-lang.elc \ + ${datadir}/${BPN}/${PV}/lisp/language/philippine.elc \ ${datadir}/${BPN}/${PV}/lisp/language/romanian.elc \ ${datadir}/${BPN}/${PV}/lisp/language/sinhala.elc \ ${datadir}/${BPN}/${PV}/lisp/language/slovak.elc \ @@ -182,7 +216,6 @@ FILES:${PN}-minimal = " \ ${datadir}/${BPN}/${PV}/lisp/rfn-eshadow.elc \ ${datadir}/${BPN}/${PV}/lisp/select.elc \ ${datadir}/${BPN}/${PV}/lisp/simple.elc \ - ${datadir}/${BPN}/${PV}/lisp/simple.elc \ ${datadir}/${BPN}/${PV}/lisp/startup.elc \ ${datadir}/${BPN}/${PV}/lisp/subr.elc \ ${datadir}/${BPN}/${PV}/lisp/tab-bar.elc \ @@ -192,6 +225,7 @@ FILES:${PN}-minimal = " \ ${datadir}/${BPN}/${PV}/lisp/textmodes/page.elc \ ${datadir}/${BPN}/${PV}/lisp/textmodes/paragraphs.elc \ ${datadir}/${BPN}/${PV}/lisp/textmodes/text-mode.elc \ + ${datadir}/${BPN}/${PV}/lisp/thingatpt.elc \ ${datadir}/${BPN}/${PV}/lisp/tooltip.elc \ ${datadir}/${BPN}/${PV}/lisp/uniquify.elc \ ${datadir}/${BPN}/${PV}/lisp/vc/ediff-hook.elc \ diff --git a/meta-oe/recipes-support/emacs/files/avoid-running-host-binaries-for-sanity.patch b/meta-oe/recipes-support/emacs/files/avoid-running-host-binaries-for-sanity.patch new file mode 100644 index 00000000000..719ee4bce92 --- /dev/null +++ b/meta-oe/recipes-support/emacs/files/avoid-running-host-binaries-for-sanity.patch @@ -0,0 +1,38 @@ +Upstream-Status: Inappropriate [OE-Specific] + +Emacs introduced a sanity-check for the build artifacts, where it +runs the newly built emacs to perform some checks. + +This is not going to work for us since we are cross-compiling, +we need to avoid running target binaries on the host + +Signed-off-by: Alejandro Hernandez Samaniego + +Index: emacs-29.1/Makefile.in +=================================================================== +--- emacs-29.1.orig/Makefile.in ++++ emacs-29.1/Makefile.in +@@ -416,19 +416,10 @@ advice-on-failure: + @exit ${exit-status} + + sanity-check: +- @[ -f .no-advice-on-failure ] && exit 0; true +- @v=$$(src/emacs${EXEEXT} --batch --eval \ +- '(progn (defun f (n) (if (= 0 n) 1 (* n (f (- n 1))))) (princ (f 10)))' \ +- 2> /dev/null); \ +- [ "X$$v" = "X3628800" ] && exit 0; \ +- echo >&2 '***'; \ +- echo >&2 '*** '"\"make ${make-target}\" succeeded, but Emacs is not functional."; \ +- echo >&2 '***'; \ +- cat Makefile | \ +- sed -n '/^# ADVICE-ON-FAILURE-BEGIN:${make-target}/,$${p;/^# ADVICE-ON-FAILURE-END:${make-target}/q;};' | \ +- sed 's/^# /*** /' | grep -v '^\*\*\* ADVICE-ON-FAILURE-' >&2; \ +- echo >&2 '***'; \ +- exit 1 ++# The Makefile will try to call the newly built emacs to perform some checks ++# this is not going to work since it was (probably) built for a different architecture. ++# Avoid calling target binaries from the host and simply assume our build artifacts work. ++ exit 0 + + .PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 epaths-force-ns-self-contained etc-emacsver + diff --git a/meta-oe/recipes-support/emacs/files/use-emacs-native-tools-for-cross-compiling.patch b/meta-oe/recipes-support/emacs/files/use-emacs-native-tools-for-cross-compiling.patch new file mode 100644 index 00000000000..df5e4bd2583 --- /dev/null +++ b/meta-oe/recipes-support/emacs/files/use-emacs-native-tools-for-cross-compiling.patch @@ -0,0 +1,106 @@ +Upstream-Status: Inappropriate [OE-Specific] + +When building emacs, it builds some tools for the HOST +that are then used to build for target, such as +make-fingerprint and make-docfile and bootstrap-emacs, +this needs to be adapted to be used by bitbake, otherwise +the compiled executables arent compatible with the HOST. + +We also need to be able to use emacs env variables to +control how bootstrap-emacs is used when cross-compiling. + +Use the above mentioned tools provided by the native +version of the recipe instead. + +Signed-off-by: Alejandro Enedino Hernandez Samaniego + +Index: emacs-29.1/src/Makefile.in +=================================================================== +--- emacs-29.1.orig/src/Makefile.in ++++ emacs-29.1/src/Makefile.in +@@ -1,3 +1,4 @@ ++ + ### @configure_input@ + + # Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2023 Free Software +@@ -508,7 +509,7 @@ ifeq ($(CHECK_STRUCTS),true) + pdumper.o: dmpstruct.h + endif + dmpstruct.h: $(srcdir)/dmpstruct.awk +-dmpstruct.h: $(libsrc)/make-fingerprint$(EXEEXT) $(dmpstruct_headers) ++dmpstruct.h: $(dmpstruct_headers) + $(AM_V_GEN)POSIXLY_CORRECT=1 awk -f $(srcdir)/dmpstruct.awk \ + $(dmpstruct_headers) > $@ + +@@ -610,8 +611,7 @@ SYSTEM_TYPE = @SYSTEM_TYPE@ + ## Strictly speaking, emacs does not depend directly on all of $lisp, + ## since not all pieces are used on all platforms. But DOC depends + ## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here. +-emacs$(EXEEXT): temacs$(EXEEXT) \ +- lisp.mk $(etc)/DOC $(lisp) \ ++emacs$(EXEEXT): lisp.mk $(etc)/DOC $(lisp) \ + $(lispsource)/international/charprop.el ${charsets} + ifeq ($(SYSTEM_TYPE),cygwin) + find ${top_builddir} -name '*.eln' | rebase -v -O -T - +@@ -654,7 +654,7 @@ endif + $(etc)/DOC: $(libsrc)/make-docfile$(EXEEXT) $(doc_obj) + $(AM_V_GEN)$(MKDIR_P) $(etc) + $(AM_V_at)rm -f $(etc)/DOC +- $(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \ ++ make-docfile -d $(srcdir) \ + $(SOME_MACHINE_OBJECTS) $(doc_obj) > $(etc)/DOC + + $(libsrc)/make-docfile$(EXEEXT) $(libsrc)/make-fingerprint$(EXEEXT): \ +@@ -671,7 +671,7 @@ buildobj.h: Makefile + GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) + + gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) +- $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(doc_obj) > globals.tmp ++ make-docfile -d $(srcdir) -g $(doc_obj) > globals.tmp + $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h + $(AM_V_at)echo timestamp > $@ + +@@ -685,7 +685,7 @@ $(LIBEGNU_ARCHIVE): $(config_h) + $(MAKE) -C $(dir $@) all + + ifeq ($(HAVE_PDUMPER),yes) +-MAKE_PDUMPER_FINGERPRINT = $(libsrc)/make-fingerprint$(EXEEXT) ++MAKE_PDUMPER_FINGERPRINT = make-fingerprint + else + MAKE_PDUMPER_FINGERPRINT = + endif +Index: emacs-29.1/lisp/Makefile.in +=================================================================== +--- emacs-29.1.orig/lisp/Makefile.in ++++ emacs-29.1/lisp/Makefile.in +@@ -53,7 +53,7 @@ FIND_DELETE = @FIND_DELETE@ + # We never change directory before running Emacs, so a relative file + # name is fine, and makes life easier. If we need to change + # directory, we can use emacs --chdir. +-EMACS = ../src/emacs${EXEEXT} ++EMACS = bootstrap-emacs + + # Command line flags for Emacs. + +@@ -109,7 +109,7 @@ MAIN_FIRST = ./emacs-lisp/eieio.el ./ema + ./org/oc.el ./org/ol.el ./emacs-lisp/cl-lib.el + + # Prevent any settings in the user environment causing problems. +-unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH ++unexport EMACSDOC EMACSPATH + + # The actual Emacs command run in the targets below. + emacs = '$(EMACS)' $(EMACSOPT) +Index: emacs-29.1/Makefile.in +=================================================================== +--- emacs-29.1.orig/Makefile.in ++++ emacs-29.1/Makefile.in +@@ -328,7 +328,7 @@ GLIB_COMPILE_SCHEMAS = glib-compile-sche + TRANSFORM = @program_transform_name@ + + # Prevent any settings in the user environment causing problems. +-unexport EMACSDATA EMACSDOC EMACSLOADPATH EMACSPATH ++unexport EMACSDOC EMACSPATH + + # What emacs should be called when installed. + EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'` diff --git a/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch b/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch deleted file mode 100644 index 95b42818367..00000000000 --- a/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch +++ /dev/null @@ -1,85 +0,0 @@ -Upstream-Status: Inappropriate [OE-Specific] - -When building emacs, it builds some tools for the HOST -that are then used to build for target, such as -make-fingerprint and make-docfile, this needs to be -adapted to be used by bitbake, otherwise the compiled -executables arent compatible with the HOST. - -Use the above mentioned tools provided by the native -version of the recipe instead. - -Signed-off-by: Alejandro Enedino Hernandez Samaniego - -Index: emacs-28.2/src/Makefile.in -=================================================================== ---- emacs-28.2.orig/src/Makefile.in -+++ emacs-28.2/src/Makefile.in -@@ -462,7 +462,7 @@ ifeq ($(CHECK_STRUCTS),true) - pdumper.o: dmpstruct.h - endif - dmpstruct.h: $(srcdir)/dmpstruct.awk --dmpstruct.h: $(libsrc)/make-fingerprint$(EXEEXT) $(dmpstruct_headers) -+dmpstruct.h: $(dmpstruct_headers) - $(AM_V_GEN)POSIXLY_CORRECT=1 awk -f $(srcdir)/dmpstruct.awk \ - $(dmpstruct_headers) > $@ - -@@ -563,8 +563,7 @@ SYSTEM_TYPE = @SYSTEM_TYPE@ - ## Strictly speaking, emacs does not depend directly on all of $lisp, - ## since not all pieces are used on all platforms. But DOC depends - ## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here. --emacs$(EXEEXT): temacs$(EXEEXT) \ -- lisp.mk $(etc)/DOC $(lisp) \ -+emacs$(EXEEXT): lisp.mk $(etc)/DOC $(lisp) \ - $(lispsource)/international/charprop.el ${charsets} - ifeq ($(SYSTEM_TYPE),cygwin) - find ${top_builddir} -name '*.eln' | rebase -v -O -T - -@@ -597,15 +596,15 @@ endif - ## for the first time, this prevents any variation between configurations - ## in the contents of the DOC file. - ## --$(etc)/DOC: lisp.mk $(libsrc)/make-docfile$(EXEEXT) $(obj) $(lisp) -+$(etc)/DOC: lisp.mk $(obj) $(lisp) - $(AM_V_GEN)$(MKDIR_P) $(etc) - $(AM_V_at)rm -f $(etc)/DOC -- $(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \ -+ make-docfile -d $(srcdir) \ - $(SOME_MACHINE_OBJECTS) $(obj) > $(etc)/DOC -- $(AM_V_at)$(libsrc)/make-docfile -a $(etc)/DOC -d $(lispsource) \ -+ make-docfile -a $(etc)/DOC -d $(lispsource) \ - $(shortlisp) - --$(libsrc)/make-docfile$(EXEEXT) $(libsrc)/make-fingerprint$(EXEEXT): \ -+$(libsrc)/make-fingerprint$(EXEEXT): \ - $(lib)/libgnu.a - $(MAKE) -C $(dir $@) $(notdir $@) - -@@ -618,8 +617,8 @@ buildobj.h: Makefile - - GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) - --gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) -- $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp -+gl-stamp: $(GLOBAL_SOURCES) -+ make-docfile -d $(srcdir) -g $(obj) > globals.tmp - $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h - $(AM_V_at)echo timestamp > $@ - -@@ -633,7 +632,7 @@ $(LIBEGNU_ARCHIVE): $(config_h) - $(MAKE) -C $(dir $@) all - - ifeq ($(HAVE_PDUMPER),yes) -- MAKE_PDUMPER_FINGERPRINT = $(libsrc)/make-fingerprint$(EXEEXT) -+ MAKE_PDUMPER_FINGERPRINT = make-fingerprint - else - MAKE_PDUMPER_FINGERPRINT = - endif -@@ -643,7 +642,7 @@ endif - ## This goes on to affect various things, and the emacs binary fails - ## to start if Vinstallation_directory has the wrong value. - temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(EMACSRES) \ -- $(charsets) $(charscript) ${emoji-zwj} $(MAKE_PDUMPER_FINGERPRINT) -+ $(charsets) $(charscript) ${emoji-zwj} - $(AM_V_CCLD)$(CC) -o $@.tmp \ - $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \ - $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES)