From f7ce028b08470b719656bd9465a1cad527d9af5a Mon Sep 17 00:00:00 2001 From: Dan McGregor Date: Mon, 24 Nov 2014 08:00:34 -0600 Subject: emacs: Un-blacklist, seems to work fine with new qemu I've only tested the build with armv7 and x86, but the build doesn't segfault anymore. The last time this was tested was with qemu 1.5, we're now using 2.1. While here, don't copy stuff from the sysroot into the qemu tree just use the sysroot itself. Also disable X11 support by default. There is still an issue seen by multiple people where an emacs built with X11 support will hang when run outside of X. Signed-off-by: Dan McGregor --- .../emacs/emacs-23.4/emacs-xgselect.patch | 26 ++++++ meta-oe/recipes-support/emacs/emacs.inc | 98 ++-------------------- meta-oe/recipes-support/emacs/emacs_23.4.bb | 3 +- 3 files changed, 36 insertions(+), 91 deletions(-) create mode 100644 meta-oe/recipes-support/emacs/emacs-23.4/emacs-xgselect.patch diff --git a/meta-oe/recipes-support/emacs/emacs-23.4/emacs-xgselect.patch b/meta-oe/recipes-support/emacs/emacs-23.4/emacs-xgselect.patch new file mode 100644 index 0000000000..c103dfab8d --- /dev/null +++ b/meta-oe/recipes-support/emacs/emacs-23.4/emacs-xgselect.patch @@ -0,0 +1,26 @@ +diff -up emacs-23.4/src/xgselect.c.xgselect emacs-23.4/src/xgselect.c +--- emacs-23.4/src/xgselect.c.xgselect 2011-11-25 14:05:03.963372281 +0100 ++++ emacs-23.4/src/xgselect.c 2011-11-25 14:06:49.798049160 +0100 +@@ -53,12 +53,17 @@ xg_select (max_fds, rfds, wfds, efds, ti + g_main_context_pending (context); + + do { +- if (n_gfds > gfds_size) ++ if (n_gfds > gfds_size) + { +- while (n_gfds > gfds_size) +- gfds_size *= 2; +- xfree (gfds); +- gfds = xmalloc (sizeof (*gfds) * gfds_size); ++ if (gfds_size == 0) ++ xgselect_initialize (); ++ else ++ { ++ while (n_gfds > gfds_size) ++ gfds_size *= 2; ++ xfree (gfds); ++ gfds = xmalloc (sizeof (*gfds) * gfds_size); ++ } + } + + n_gfds = g_main_context_query (context, diff --git a/meta-oe/recipes-support/emacs/emacs.inc b/meta-oe/recipes-support/emacs/emacs.inc index a1a4965ab9..694e3c5d1a 100644 --- a/meta-oe/recipes-support/emacs/emacs.inc +++ b/meta-oe/recipes-support/emacs/emacs.inc @@ -6,7 +6,7 @@ SECTION = "editor" # and it needs to run some generated binaries.. DEPENDS += "qemu-native" -DEPENDS +=" liblockfile" +DEPENDS +=" liblockfile ncurses" X11DEPENDS = " \ libice libsm atk cairo dbus expat libffi fontconfig freetype gconf giflib \ @@ -14,17 +14,19 @@ X11DEPENDS = " \ libx11 libxau libxcomposite libxcursor libxdamage libxdmcp libxext libxfixes \ libxft libxpm libxrandr libxrender \ gdk-pixbuf glib-2.0 gtk+ pango libxcb harfbuzz icu \ -" +" EXTRA_OECONF = "--without-sound --with-crt-dir=${STAGING_LIBDIR} " PACKAGECONFIG ??= "${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}" PACKAGECONFIG[x11] = "--with-x-toolkit=gtk,--without-x --without-dbus,${X11DEPENDS}" - inherit autotools -PACKAGES =+ "${PN}-el" +PACKAGES =+ "${PN}-el ${PN}-grep-changelog" + +RDEPENDS_${PN}-grep-changelog += "perl" +FILES_${PN}-grep-changelog += "${bindir}/grep-changelog" FILES_${PN}-el = "${datadir}/emacs/*/*/*.el.gz \ ${datadir}/emacs/*/*/*/*.el.gz" @@ -33,15 +35,15 @@ FILES_${PN} += "${datadir}/emacs ${datadir}/icons" FILES_${PN}-dbg += "${libexecdir}/emacs/*/*/.debug ${datadir}/emacs/*/*/.debug" -TREEDIR = "${WORKDIR}/qemu-treedir" - QEMUARCH= "${TARGET_ARCH}" QEMUARCH_i486 = "i386" QEMUARCH_i586 = "i386" QEMUARCH_i686 = "i386" +QEMU_OPTIONS ?= "" + # Large stack is required at least on x86_64 host, otherwise random segfaults appear: -QEMU = "qemu-${QEMUARCH} ${QEMU_OPTIONS} -s 1048576 -L ${TREEDIR} " +QEMU = "qemu-${QEMUARCH} ${QEMU_OPTIONS} -s 1048576 -L ${STAGING_DIR_HOST} " export LOGNAME = "$(whoami)" @@ -52,88 +54,6 @@ do_compile_prepend() { ln -sf ../src/emacs lisp/emacs ln -sf ../src/emacs lib-src/emacs ln -sf ../src/emacs leim/emacs -#copy STAGING_DIR_TARGET and libgcc_s.so* to WORKDIR/qemu-treedir #copied code from glibc-package.bbclass - treedir=${TREEDIR} - if [ -e $treedir ];then - rm -rf $treedir - fi - - mkdir -p $treedir/${base_libdir} - - if [ -f ${TOOLCHAIN_PATH}/${TARGET_SYS}/${base_libdir}/libgcc_s.so ]; then - cp -pPR ${TOOLCHAIN_PATH}/${TARGET_SYS}/${base_libdir}/libgcc_s.so $treedir/${base_libdir} - fi - if [ -f ${TOOLCHAIN_PATH}/${TARGET_SYS}/${base_libdir}/libgcc_s.so.* ]; then - cp -pPR ${TOOLCHAIN_PATH}/${TARGET_SYS}/${base_libdir}/libgcc_s.so.* $treedir/${base_libdir} - fi - # stupid hack, but without it, it tries to use /usr/lib/libc.so from host and fails - # temacs: error while loading shared libraries: /usr/lib/libc.so: ELF file version does not match current one - if [ ! -f $treedir/${base_libdir}/libc.so ]; then - ln -s libc.so.6 $treedir/${base_libdir}/libc.so - fi - - # copy only as much stuff as we need - # before: 5.5G ../../qemu-treedir/ - # after: 17M ../../qemu-treedir/ - cp -pPR \ - ${STAGING_DIR_TARGET}/${base_libdir}/ld-* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libc.* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libc-* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libm-* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libm.* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libtinfo.so.* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libresolv* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libdl* \ - ${STAGING_DIR_TARGET}/${base_libdir}/librt* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libgcc_s.so.* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libpthread* $treedir/${base_libdir}/ - - if [ ! -z "${@base_contains('PACKAGECONFIG', 'x11', 'x11', '', d)}" ] ; then - echo "X11 build enabled" - # copy only as much stuff as we need - # before: 5.5G ../../qemu-treedir/ - # after: 86M ../../qemu-treedir/ - cp -pPR \ - ${STAGING_DIR_TARGET}/${base_libdir}/libuuid.so.* \ - ${STAGING_DIR_TARGET}/${base_libdir}/libz.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libICE.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libSM.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libatk-1.0.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libcairo.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libdbus-1.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libdbus-glib-1.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libexpat.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libffi.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libfontconfig.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libfreetype.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libgconf-2.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libgif.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libjpeg.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/liblzma.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libpixman-1.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libpng1*.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/librsvg-2.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libstdc++.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libtiff.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libxml2.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libcroco-0.6.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libharfbuzz.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libicule.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libicuuc.so.* \ - ${STAGING_DIR_TARGET}/${libdir}/libicudata.so.* $treedir/${base_libdir}/ - - # X11 Xau Xcomposite Xcursor Xdamage Xdmcp Xext Xfixes Xft Xpm Xrandr Xrender - cp -pPR ${STAGING_DIR_TARGET}/${libdir}/libX*.so.* $treedir/${base_libdir}/ - - # gdk-x11 gdk_pixbuf gio glib gmodule gobject gthread gtk-x11 - cp -pPR ${STAGING_DIR_TARGET}/${libdir}/libg*-2.0.so.* $treedir/${base_libdir}/ - - # pango pangocairo pangoft2 - cp -pPR ${STAGING_DIR_TARGET}/${libdir}/libpango*-1.0.so.* $treedir/${base_libdir}/ - - # xcb-render xcb-shm xcb - cp -pPR ${STAGING_DIR_TARGET}/${libdir}/libxcb*.so.* $treedir/${base_libdir}/ - fi } do_install_append() { diff --git a/meta-oe/recipes-support/emacs/emacs_23.4.bb b/meta-oe/recipes-support/emacs/emacs_23.4.bb index a32482883b..005fcf72e8 100644 --- a/meta-oe/recipes-support/emacs/emacs_23.4.bb +++ b/meta-oe/recipes-support/emacs/emacs_23.4.bb @@ -2,9 +2,8 @@ require emacs.inc PR = "r4" -PNBLACKLIST[emacs] ?= "qemu: uncaught target signal 11 (Segmentation fault) - core dumped" - SRC_URI = "${GNU_MIRROR}/emacs/emacs-${PV}.tar.gz;name=tarball \ + file://emacs-xgselect.patch \ file://use-qemu.patch \ file://nostdlib-unwind.patch \ " -- cgit 1.2.3-korg