Skip to content

Commit

Permalink
emacs: update to 29.1
Browse files Browse the repository at this point in the history
- Rebase (and rename) use-emacs-native-tools-for-cross-compiling.patch
- Build bootstrap-emacs for emacs-native
- Use bootstrap-emacs (native) for cross compiling.
  - We need to pass EMACSLOADPATH and EMACSDATA so we can control the
  directories being used by bootstrap-emacs.
- Create avoid-running-host-binaries-for-sanity.patch to avoid running
  the newly integrated santity-check by emacs since it tries to run target
  binaries on the host.
- Fix emacs-minimal packaging for new version.

Signed-off-by: Alejandro Hernandez Samaniego <[email protected]>
Signed-off-by: Khem Raj <[email protected]>
  • Loading branch information
ahcbb6 authored and kraj committed Aug 30, 2023
1 parent f9afd63 commit 1cfd2bc
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 94 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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."

Expand All @@ -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}
Expand Down Expand Up @@ -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 \
Expand Down Expand Up @@ -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 \
Expand All @@ -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 \
Expand All @@ -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 \
Expand All @@ -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 \
Expand Down
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>

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

Original file line number Diff line number Diff line change
@@ -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 <[email protected]>

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)'`
85 changes: 0 additions & 85 deletions meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch

This file was deleted.

0 comments on commit 1cfd2bc

Please sign in to comment.