diff --git a/gnu/local.mk b/gnu/local.mk index 41e22f183c..4a07da453b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -722,6 +722,7 @@ dist_patch_DATA = \ %D%/packages/patches/guile-present-coding.patch \ %D%/packages/patches/guile-relocatable.patch \ %D%/packages/patches/guile-rsvg-pkgconfig.patch \ + %D%/packages/patches/guile-emacs-fix-configure.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \ %D%/packages/patches/gtk2-theme-paths.patch \ diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index f7a3ce5e6a..acd6ec30ad 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -277,6 +277,7 @@ editor (without an X toolkit)" ) (uri (git-reference (url "git://git.hcoop.net/git/bpt/emacs.git") (commit "41120e0f595b16387eebfbf731fff70481de1b4b"))) + (patches (search-patches "guile-emacs-fix-configure.patch")) (sha256 (base32 "0lvcvsz0f4mawj04db35p1dvkffdqkz8pkhc0jzh9j9x2i63kcz6")))) @@ -295,7 +296,11 @@ editor (without an X toolkit)" ) `(modify-phases ,phases (add-after 'unpack 'autogen (lambda _ - (zero? (system* "sh" "autogen.sh")))))))))) + (zero? (system* "sh" "autogen.sh")))) + ;; Build sometimes fails: deps/dispnew.d: No such file or directory + (add-before 'build 'make-deps-dir + (lambda _ + (zero? (system* "mkdir" "-p" "src/deps")))))))))) ;;; diff --git a/gnu/packages/patches/guile-emacs-fix-configure.patch b/gnu/packages/patches/guile-emacs-fix-configure.patch new file mode 100644 index 0000000000..b1f7146d21 --- /dev/null +++ b/gnu/packages/patches/guile-emacs-fix-configure.patch @@ -0,0 +1,211 @@ +Two patches here backporting fixes from Emacs master. + +Upstream status: emailed first patch to latest committer, Robin Templeton +, no response. + +From dfcb3b6ff318e47b84a28cfc43f50bec42fa3570 Mon Sep 17 00:00:00 2001 +From: Jan Nieuwenhuizen +Date: Tue, 7 Nov 2017 18:48:03 +0100 +Subject: [PATCH 1/2] backport: Port jpeg configuration to Solaris 10 with Sun + C. + +* configure.ac: Check for jpeglib 6b by trying to link it, instead +of relying on cpp magic that has problems in practice. Check for +both jpeglib.h and jerror.h features. Remove special case for +mingw32, which should no longer be needed (and if it were needed, +should now be addressable by hotwiring emacs_cv_jpeglib). +Fixes: bug#20332 + + From fdf532b9c915ad9ba72155646d29d0f530fd72ec Mon Sep 17 00:00:00 2001 + From: Paul Eggert + Date: Wed, 15 Apr 2015 18:30:01 -0700 + Subject: [PATCH] Port jpeg configuration to Solaris 10 with Sun C. + + * configure.ac: Check for jpeglib 6b by trying to link it, instead + of relying on cpp magic that has problems in practice. Check for + both jpeglib.h and jerror.h features. Remove special case for + mingw32, which should no longer be needed (and if it were needed, + should now be addressable by hotwiring emacs_cv_jpeglib). + Fixes: bug#20332 +--- + configure.ac | 72 ++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 34 insertions(+), 38 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2445db4886..36fa8eb390 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3014,44 +3014,40 @@ AC_SUBST(LIBXPM) + ### mingw32 doesn't use -ljpeg, since it loads the library dynamically. + HAVE_JPEG=no + LIBJPEG= +-if test "${opsys}" = "mingw32"; then +- if test "${with_jpeg}" != "no"; then +- dnl Checking for jpeglib.h can lose because of a redefinition of +- dnl HAVE_STDLIB_H. +- AC_CHECK_HEADER(jerror.h, HAVE_JPEG=yes, HAVE_JPEG=no) +- fi +- AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl +- if test "${HAVE_JPEG}" = "yes"; then +- AC_DEFINE(HAVE_JPEG) +- AC_EGREP_CPP([version= *(6[2-9]|[7-9][0-9])], +- [#include +- version=JPEG_LIB_VERSION +-], +- [AC_DEFINE(HAVE_JPEG)], +- [AC_MSG_WARN([libjpeg found, but not version 6b or later]) +- HAVE_JPEG=no]) +- fi +-elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then +- if test "${with_jpeg}" != "no"; then +- dnl Checking for jpeglib.h can lose because of a redefinition of +- dnl HAVE_STDLIB_H. +- AC_CHECK_HEADER(jerror.h, +- [AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes)]) +- fi +- +- AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl +- if test "${HAVE_JPEG}" = "yes"; then +- AC_DEFINE(HAVE_JPEG) +- AC_EGREP_CPP([version= *(6[2-9]|[7-9][0-9])], +- [#include +- version=JPEG_LIB_VERSION +-], +- [AC_DEFINE(HAVE_JPEG)], +- [AC_MSG_WARN([libjpeg found, but not version 6b or later]) +- HAVE_JPEG=no]) +- fi +- if test "${HAVE_JPEG}" = "yes"; then +- LIBJPEG=-ljpeg ++if test "${with_jpeg}" != "no"; then ++ AC_CACHE_CHECK([for jpeglib 6b or later], ++ [emacs_cv_jpeglib], ++ [OLD_LIBS=$LIBS ++ for emacs_cv_jpeglib in yes -ljpeg no; do ++ case $emacs_cv_jpeglib in ++ yes) ;; ++ no) break;; ++ *) LIBS="$LIBS $emacs_cv_jpeglib";; ++ esac ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM( ++ [[#undef HAVE_STDLIB_H /* Avoid config.h/jpeglib.h collision. */ ++ #include /* jpeglib.h needs FILE and size_t. */ ++ #include ++ #include ++ char verify[JPEG_LIB_VERSION < 62 ? -1 : 1]; ++ struct jpeg_decompress_struct cinfo; ++ ]], ++ [[ ++ jpeg_create_decompress (&cinfo); ++ WARNMS (&cinfo, JWRN_JPEG_EOF); ++ jpeg_destroy_decompress (&cinfo); ++ ]])], ++ [emacs_link_ok=yes], ++ [emacs_link_ok=no]) ++ LIBS=$OLD_LIBS ++ test $emacs_link_ok = yes && break ++ done]) ++ if test "$emacs_cv_jpeglib" != no; then ++ HAVE_JPEG=yes ++ AC_DEFINE([HAVE_JPEG], 1, ++ [Define to 1 if you have the jpeg library (typically -ljpeg).]) ++ test "$emacs_cv_jpeglib" != yes && LIBJPEG=$emacs_cv_jpeglib + fi + fi + AC_SUBST(LIBJPEG) +-- +Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org +Freelance IT http://JoyofSource.com | AvatarĀ® http://AvatarAcademy.com + +From f761b92d520b72954be28ad66eb82d1a96c785fb Mon Sep 17 00:00:00 2001 +From: Jan Nieuwenhuizen +Date: Wed, 8 Nov 2017 14:05:43 +0100 +Subject: [PATCH 2/2] backport fix for #24065: calloc loop when compiling with + -O2. + +This patch fixes + + EMACSLOADPATH= '../src/bootstrap-emacs' -batch --no-site-file --no-site-lisp -l autoload \ + --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \ + --eval "(setq generated-autoload-file (expand-file-name + (unmsys--file-name + \"../../git-checkout/lisp/calendar/cal-loaddefs.el\")))" \ + -f batch-update-autoloads ../../git-checkout/lisp/calendar + make[2]: *** [Makefile:466: ../../git-checkout/lisp/calendar/cal-loaddefs.el] Segmentation fault + +in gdb seen as + + in calloc (nmemb=, size=size@entry=1) at gmalloc.c:1510 + +I did not find malloc-fixing commits from emacs master to cleanly +cherry-pick, so this patch replaces the relevant part in configure +(emacs 53da55b8cc45e76b836ebaadd23f46e92d25abce). + +* configure.ac: backport system_malloc/hybrid_malloc detection. +--- + configure.ac | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 36fa8eb390..3cc1794f37 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1966,7 +1966,25 @@ case "$opsys" in + darwin|mingw32|sol2-10) system_malloc=yes ;; + esac + ++hybrid_malloc= ++system_malloc=yes ++ ++test "$CANNOT_DUMP" = yes || ++case "$opsys" in ++ ## darwin ld insists on the use of malloc routines in the System framework. ++ darwin | mingw32 | nacl | sol2-10) ;; ++ cygwin) hybrid_malloc=yes ++ system_malloc= ;; ++ *) test "$ac_cv_func_sbrk" = yes && system_malloc=$emacs_cv_sanitize_address;; ++esac ++ ++if test "${system_malloc}" != yes && test "${doug_lea_malloc}" != yes \ ++ && test "${UNEXEC_OBJ}" = unexelf.o; then ++ hybrid_malloc=yes ++fi ++ + GMALLOC_OBJ= ++HYBRID_MALLOC= + if test "${system_malloc}" = "yes"; then + AC_DEFINE([SYSTEM_MALLOC], 1, + [Define to 1 to use the system memory allocator, even if it is not +@@ -1975,6 +1993,14 @@ if test "${system_malloc}" = "yes"; then + GNU_MALLOC_reason=" + (The GNU allocators don't work with this system configuration.)" + VMLIMIT_OBJ= ++elif test "$hybrid_malloc" = yes; then ++ AC_DEFINE(HYBRID_MALLOC, 1, ++ [Define to use gmalloc before dumping and the system malloc after.]) ++ HYBRID_MALLOC=1 ++ GNU_MALLOC=no ++ GNU_MALLOC_reason=" (only before dumping)" ++ GMALLOC_OBJ=gmalloc.o ++ VMLIMIT_OBJ= + else + test "$doug_lea_malloc" != "yes" && GMALLOC_OBJ=gmalloc.o + VMLIMIT_OBJ=vm-limit.o +@@ -1993,10 +2019,11 @@ else + of the main data segment.]) + fi + fi ++AC_SUBST([HYBRID_MALLOC]) + AC_SUBST(GMALLOC_OBJ) + AC_SUBST(VMLIMIT_OBJ) + +-if test "$doug_lea_malloc" = "yes" ; then ++if test "$doug_lea_malloc" = "yes" && test "$hybrid_malloc" != yes; then + if test "$GNU_MALLOC" = yes ; then + GNU_MALLOC_reason=" + (Using Doug Lea's new malloc from the GNU C Library.)" +-- +Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org +Freelance IT http://JoyofSource.com | AvatarĀ® http://AvatarAcademy.com +