From d17f494f74912389593ce21f654e19ddc32afc5e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 18 May 2025 05:08:31 -0400 Subject: [PATCH] ; Bump Emacs version to 30.1.90 * README: * configure.ac: * exec/configure.ac: * java/AndroidManifest.xml.in (Version-code): * nt/README.W32: * msdos/sed2v2.inp: Bump Emacs version to 30.1.90. (cherry picked from commit 4c110212604d5d825abe95418db5dd822b7e9375) --- README | 2 +- configure.ac | 670 ++++++++++++++++++++---------------- exec/configure.ac | 54 ++- java/AndroidManifest.xml.in | 4 +- msdos/sed2v2.inp | 7 +- nt/README.W32 | 7 +- 6 files changed, 408 insertions(+), 336 deletions(-) diff --git a/README b/README index 20a920ce3cc..d0f2d580b4f 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ Copyright (C) 2001-2025 Free Software Foundation, Inc. See the end of the file for license conditions. -This directory tree holds version 31.0.50 of GNU Emacs, the extensible, +This directory tree holds version 30.1.90 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. The file INSTALL in this directory says how to build and install GNU diff --git a/configure.ac b/configure.ac index fc165e6d35c..e57cf55fe86 100644 --- a/configure.ac +++ b/configure.ac @@ -22,8 +22,8 @@ dnl You should have received a copy of the GNU General Public License dnl along with GNU Emacs. If not, see . AC_PREREQ([2.65]) -dnl Note this is parsed by (at least) make-dist. -AC_INIT([GNU Emacs], [31.0.50], [bug-gnu-emacs@gnu.org], [], +dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el. +AC_INIT([GNU Emacs], [30.1.90], [bug-gnu-emacs@gnu.org], [], [https://www.gnu.org/software/emacs/]) if test "$XCONFIGURE" = "android"; then @@ -49,11 +49,6 @@ if test "$XCONFIGURE" = "android"; then CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=32" enable_largefile=no enable_year2038=no]) - # Gnulib should not attempt not to reimplement tzalloc, as strftime - # attempts to link with symbols that are only present in the Gnulib - # replacement. - AS_IF([test "$ANDROID_SDK" -ge "35"], - [gl_cv_onwards_func_tzalloc="future OS version"]) fi dnl Set emacs_config_options to the options of 'configure', quoted for the shell, @@ -202,17 +197,11 @@ AS_IF([test "$XCONFIGURE" = "android"],[ AC_MSG_NOTICE([configuring in `exec']) - # Derive a name for a cache file for this configure script from the - # current, if specified. - exec_cache_file= - AS_CASE([$cache_file], [/dev/null | ""], [], - [[[\\/]* | ?:[\\/]*]], [exec_cache_file="--cache-file=$cache_file.2"], - [*], [exec_cache_file="--cache-file=../$cache_file.2"]) OLDCWD=`pwd` cd exec $CONFIG_SHELL $emacs_srcdir/exec/configure \ --host=$host "CC=$CC" "LD=$CC" "AS=$CC" \ - "AR=$AR" "CFLAGS=$CFLAGS" $exec_cache_file + "AR=$AR" "CFLAGS=$CFLAGS" emacs_val=$? cd $OLDCWD @@ -449,13 +438,28 @@ this option's value should be 'yes' or 'no'.]) ;; ], [with_pdumper=auto]) +AC_ARG_WITH([unexec], + AS_HELP_STRING( + [--with-unexec=VALUE], + [enable unexec support unconditionally + ('yes', 'no', or 'auto': default 'auto')]), + [ case "${withval}" in + yes|no|auto) val=$withval ;; + *) AC_MSG_ERROR( + ['--with-unexec=$withval' is invalid; +this option's value should be 'yes' or 'no'.]) ;; + esac + with_unexec=$val + ], + [with_unexec=auto]) + AC_ARG_WITH([dumping],[AS_HELP_STRING([--with-dumping=VALUE], [kind of dumping to use for initial Emacs build -(VALUE one of: pdumper, none; default pdumper)])], +(VALUE one of: pdumper, unexec, none; default pdumper)])], [ case "${withval}" in - pdumper|none) val=$withval ;; + pdumper|unexec|none) val=$withval ;; *) AC_MSG_ERROR(['--with-dumping=$withval is invalid; -this option's value should be 'pdumper' or 'none'.]) +this option's value should be 'pdumper', 'unexec', or 'none'.]) ;; esac with_dumping=$val @@ -470,10 +474,22 @@ if test "$with_pdumper" = "auto"; then fi fi +if test "$with_unexec" = "auto"; then + if test "$with_dumping" = "unexec"; then + with_unexec=yes + else + with_unexec=no + fi +fi + if test "$with_dumping" = "pdumper" && test "$with_pdumper" = "no"; then AC_MSG_ERROR(['--with-dumping=pdumper' requires pdumper support]) fi +if test "$with_dumping" = "unexec" && test "$with_unexec" = "no"; then + AC_MSG_ERROR(['--with-dumping=unexec' requires unexec support]) +fi + if test "$with_pdumper" = "yes"; then AC_DEFINE([HAVE_PDUMPER], [1], [Define to build with portable dumper support]) @@ -486,24 +502,6 @@ AC_SUBST([HAVE_PDUMPER]) DUMPING=$with_dumping AC_SUBST([DUMPING]) -dnl Where the etc/emacs.service file is to be installed. -dnl We use $(prefix)/lib/systemd/user as default, but this may not be -dnl in systemd's search path when prefix is neither /usr nor /usr/local. -dnl In that case (e.g. for non-root installs) the location can be -dnl specified with the configure option. -dnl See https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html#id-1.8.5 -dnl for documentation of systemd's unit file load path. -AC_ARG_WITH([systemduserunitdir], - [AS_HELP_STRING([--with-systemduserunitdir=DIR], - [directory for systemd user unit file; - default 'PREFIX/usr/lib/systemd/user'])], - [systemduserunitdir=${withval}], - [systemduserunitdir='${prefix}/lib/systemd/user']) -if test "${systemduserunitdir}" = "no"; then - systemduserunitdir='' -fi -AC_SUBST([systemduserunitdir]) - dnl FIXME currently it is not the last. dnl This should be the last --with option, because --with-x is dnl added later on when we find the file name of X, and it's best to @@ -574,7 +572,7 @@ OPTION_DEFAULT_OFF([w32], [use native MS Windows GUI in a Cygwin build]) OPTION_DEFAULT_OFF([pgtk], [use GTK to support window systems other than X]) OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux console]) -OPTION_DEFAULT_IFAVAILABLE([dbus],[compile with D-Bus support]) +OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support]) AC_ARG_WITH([gconf],[AS_HELP_STRING([--with-gconf], [compile with Gconf support (Gsettings replaces this)])],[], [if test $with_features = yes; then @@ -960,7 +958,7 @@ a valid path to android.jar. See config.log for more details.]) fi AC_CACHE_CHECK([whether android.jar is new enough], - [emacs_cv_android_v_or_later], + [emacs_cv_android_u_or_later], AS_IF([rm -f conftest.class cat << EOF > conftest.java @@ -968,18 +966,18 @@ import android.os.Build; class conftest { - private static int test = Build.VERSION_CODES.VANILLA_ICE_CREAM; + private static int test = Build.VERSION_CODES.UPSIDE_DOWN_CAKE; } EOF ("$JAVAC" -classpath "$with_android" -target 1.7 -source 1.7 conftest.java \ -d . >&AS_MESSAGE_LOG_FD 2>&1) && test -s conftest.class && rm -f conftest.class], - [emacs_cv_android_v_or_later=yes], - [emacs_cv_android_v_or_later=no])) + [emacs_cv_android_u_or_later=yes], + [emacs_cv_android_u_or_later=no])) - if test "$emacs_cv_android_v_or_later" = "no"; then + if test "$emacs_cv_android_u_or_later" = "no"; then AC_MSG_ERROR([Emacs must be built with an android.jar file produced for \ -Android 15 (Vanilla Ice Cream) or later.]) +Android 14 (Upside Down Cake) or later.]) fi dnl See if the Java compiler supports the `--release' option which @@ -1188,8 +1186,6 @@ main (void) foo = "emacs_api_33"; #elif __ANDROID_API__ < 35 foo = "emacs_api_34"; -#elif __ANDROID_API__ < 36 - foo = "emacs_api_35"; #else foo = "emacs_api_future"; #endif @@ -1278,11 +1274,6 @@ packages targeting Android 2.2.])]) emacs_val="--enable-check-lisp-object-type=$enable_check_lisp_object_type" passthrough="$passthrough $emacs_val" - # And derive a name for the recursive configure invocation's cache - # file if one should be specified for this. - AS_IF([test -n "$cache_file" && test "$cache_file" != "/dev/null"], - [passthrough="$passthrough --cache-file=$cache_file.1"]) - AS_IF([test "x$with_mailutils" = "xyes"], [emacs_use_mailutils=yes]) AC_SUBST([emacs_use_mailutils]) @@ -1611,6 +1602,10 @@ ac_func_list=$funcs AC_DEFUN([gt_TYPE_WINT_T], [GNULIBHEADERS_OVERRIDE_WINT_T=0 AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T])]) +# Emacs does not need precise checks for the Solaris 10 MB_CUR_MAX bug. +AC_DEFUN_ONCE([gl_STDLIB_H], + [AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_NEXT_HEADERS([stdlib.h])]) # Emacs does not need to check for off64_t. AC_DEFUN([gl_TYPE_OFF64_T], [HAVE_OFF64_T=1 @@ -1802,6 +1797,7 @@ AS_IF([test $gl_gcc_warnings = no], nw="$nw -Wcast-align=strict" # Emacs is tricky with pointers. nw="$nw -Wduplicated-branches" # Too many false alarms nw="$nw -Wformat-overflow=2" # False alarms due to GCC bug 110333 + nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings nw="$nw -Woverlength-strings" # Not a problem these days nw="$nw -Wvla" # Emacs uses . nw="$nw -Wunused-const-variable=2" # lisp.h declares const objects. @@ -1856,7 +1852,6 @@ AS_IF([test $gl_gcc_warnings = no], gl_WARN_ADD([$w]) done gl_WARN_ADD([-Wredundant-decls]) # Prefer this, as we don't use Bison. - gl_WARN_ADD([-Wtrailing-whitespace]) # This project's coding style gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one gl_WARN_ADD([-Wno-override-init]) # More trouble than it is worth gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now @@ -2001,8 +1996,6 @@ ARCH_INDEPENDENT_CONFIG_FILES([src/verbose.mk]) dnl Some other nice autoconf tests. AC_PROG_INSTALL -dnl use "gawk" where possible -AC_PROG_AWK dnl These are commented out, since gl_EARLY and/or Autoconf already does them. dnl AC_PROG_MKDIR_P dnl if test "x$RANLIB" = x; then @@ -2067,20 +2060,64 @@ AC_PATH_PROG([GZIP_PROG], [gzip]) test $with_compress_install != yes && test -n "$GZIP_PROG" && \ GZIP_PROG=" # $GZIP_PROG # (disabled by configure --without-compress-install)" +if test "$with_dumping" = "unexec" && test "$opsys" = "nacl"; then + AC_MSG_ERROR([nacl is not compatible with --with-dumping=unexec]) +fi + AC_CACHE_CHECK([for 'find' args to delete a file], [emacs_cv_find_delete], [if touch conftest.tmp && find conftest.tmp -delete 2>/dev/null && test ! -f conftest.tmp - then emacs_cv_find_delete="-delete" # GNU 'find' - elif find . -prune -name x -exec echo {} + 2>/dev/null - then emacs_cv_find_delete="-exec rm -f {} +" # POSIX 'find' - else emacs_cv_find_delete="-exec rm -f {} + -o -exec true {} +" # AIX 7.3 + then emacs_cv_find_delete="-delete" + else emacs_cv_find_delete="-exec rm -f {} ';'" fi]) FIND_DELETE=$emacs_cv_find_delete AC_SUBST([FIND_DELETE]) PAXCTL_dumped= PAXCTL_notdumped= +if test $with_unexec = yes && test $opsys = gnu-linux; then + if test "${SETFATTR+set}" != set; then + AC_CACHE_CHECK([for setfattr], + [emacs_cv_prog_setfattr], + [touch conftest.tmp + if (setfattr -n user.pax.flags conftest.tmp) >/dev/null 2>&1; then + emacs_cv_prog_setfattr=yes + else + emacs_cv_prog_setfattr=no + fi]) + if test "$emacs_cv_prog_setfattr" = yes; then + PAXCTL_notdumped='$(SETFATTR) -n user.pax.flags -v er' + SETFATTR=setfattr + else + SETFATTR= + fi + fi + case $opsys,$PAXCTL_notdumped,$emacs_uname_r in + gnu-linux,,* | netbsd,,[0-7].*) + AC_PATH_PROG([PAXCTL], [paxctl], [], + [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) + if test -n "$PAXCTL"; then + if test "$opsys" = netbsd; then + PAXCTL_dumped='$(PAXCTL) +a' + PAXCTL_notdumped=$PAXCTL_dumped + else + AC_MSG_CHECKING([whether binaries have a PT_PAX_FLAGS header]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [if $PAXCTL -v conftest$EXEEXT >/dev/null 2>&1; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PAXCTL= + fi]) + if test -n "$PAXCTL"; then + PAXCTL_dumped='$(PAXCTL) -zex' + PAXCTL_notdumped='$(PAXCTL) -r' + fi + fi + fi;; + esac +fi AC_SUBST([PAXCTL_dumped]) AC_SUBST([PAXCTL_notdumped]) AC_SUBST([SETFATTR]) @@ -2147,6 +2184,37 @@ else ac_link="$ac_link $NON_GCC_LINK_TEST_OPTIONS" fi +dnl On some platforms using GNU ld, linking temacs needs -znocombreloc. +dnl Although this has something to do with dumping, the details are unknown. +dnl If the flag is used but not needed, +dnl Emacs should still work (albeit a bit more slowly), +dnl so use the flag everywhere that it is supported. +dnl When testing whether the flag works, treat GCC specially +dnl since it just gives a non-fatal 'unrecognized option' +dnl if not built to support GNU ld. +if test "$GCC" = yes; then + LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" +else + LDFLAGS_NOCOMBRELOC="-znocombreloc" +fi + +AC_CACHE_CHECK([for -znocombreloc], [emacs_cv_znocombreloc], + [if test $with_unexec = no; then + emacs_cv_znocombreloc='not needed' + else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $LDFLAGS_NOCOMBRELOC" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [emacs_cv_znocombreloc=yes], [emacs_cv_znocombreloc=no]) + LDFLAGS=$save_LDFLAGS + fi]) + +case $emacs_cv_znocombreloc in + no*) + LDFLAGS_NOCOMBRELOC= ;; +esac + + AC_CACHE_CHECK([whether addresses are sanitized], [emacs_cv_sanitize_address], [AC_COMPILE_IFELSE( @@ -2162,8 +2230,48 @@ AC_CACHE_CHECK([whether addresses are sanitized], [emacs_cv_sanitize_address=yes], [emacs_cv_sanitize_address=no])]) -LD_SWITCH_SYSTEM= +if test $with_unexec = yes; then + AC_DEFINE([HAVE_UNEXEC], [1], [Define if Emacs supports unexec.]) + if test "$emacs_cv_sanitize_address" = yes; then + AC_MSG_WARN([[Addresses are sanitized; suggest --without-unexec]]) + fi +fi + + +UNEXEC_OBJ= +test $with_unexec = yes && case "$opsys" in + # MSDOS uses unexcoff.o + aix4-2) + UNEXEC_OBJ=unexaix.o + ;; + cygwin) + UNEXEC_OBJ=unexcw.o + ;; + darwin) + UNEXEC_OBJ=unexmacosx.o + ;; + hpux10-20 | hpux11) + UNEXEC_OBJ=unexhp9k800.o + ;; + mingw32) + UNEXEC_OBJ=unexw32.o + ;; + solaris) + # Use the Solaris dldump() function, called from unexsol.c, to dump + # emacs, instead of the generic ELF dump code found in unexelf.c. + # The resulting binary has a complete symbol table, and is better + # for debugging and other observability tools (debuggers, pstack, etc). + UNEXEC_OBJ=unexsol.o + ;; + *) + UNEXEC_OBJ=unexelf.o + ;; +esac +AC_SUBST([UNEXEC_OBJ]) + +LD_SWITCH_SYSTEM= +test "$with_unexec" = no || case "$opsys" in freebsd|dragonfly) ## Let 'ld' find image libs and similar things in /usr/local/lib. ## The system compiler, GCC, has apparently been modified to not @@ -2185,7 +2293,9 @@ case "$opsys" in ;; openbsd) - : + ## Han Boetes says this is necessary, + ## otherwise Emacs dumps core on elf systems. + LD_SWITCH_SYSTEM="-Z" ;; esac AC_SUBST([LD_SWITCH_SYSTEM]) @@ -2209,50 +2319,21 @@ esac C_SWITCH_MACHINE= -AC_CACHE_CHECK([for flags to work around GCC bug 58416], - [emacs_cv_gcc_bug_58416_CFLAGS], - [emacs_cv_gcc_bug_58416_CFLAGS='none needed' - AS_CASE([$canonical], - [[i[3456]86-* | x86_64-*]], - [AS_IF([test "$GCC" = yes], - [old_CFLAGS=$CFLAGS - # If no flags are needed (e.g., not GCC 4+), don't use any. - # Otherwise, use -mfpmath=sse if already assuming SSE2. - # Otherwise, use -fno-tree-sra. - for emacs_cv_gcc_bug_58416_CFLAGS in \ - 'none needed' -mfpmath=sse -fno-tree-sra - do - AS_CASE([$emacs_cv_gcc_bug_58416_CFLAGS], - ['none needed'], [], - [-fno-tree-sra], [break], - [CFLAGS="$old_CFLAGS $emacs_cv_gcc_bug_58416_CFLAGS"]) - AC_COMPILE_IFELSE( - [AC_LANG_DEFINES_PROVIDED - [/* Work around GCC bug with double in unions on x86, - where the generated insns copy non-floating-point data - via fldl/fstpl instruction pairs. This can misbehave if - the data's bit pattern looks like a NaN. See, e.g.: - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416#c10 - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71460 - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93271 - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114659 - Problem observed with 'gcc -m32' with GCC 14.1.1 - 20240607 (Red Hat 14.1.1-5) on x86-64. */ - #include - #if \ - (4 <= __GNUC__ && __GNUC__ <= 14 && !defined __clang__ \ - && (defined __i386__ || defined __x86_64__) \ - && ! (0 <= FLT_EVAL_METHOD && FLT_EVAL_METHOD <= 1)) - # error "GCC bug 58416 is possibly present" - #endif - ]], - [break]) - done - CFLAGS=$old_CFLAGS])])]) -AS_CASE([$emacs_cv_gcc_bug_58416_CFLAGS], - [-*], - [C_SWITCH_MACHINE="$C_SWITCH_MACHINE $emacs_cv_gcc_bug_58416_CFLAGS"]) - +test $with_unexec = yes && +case $canonical in + alpha*) + ## With ELF, make sure that all common symbols get allocated to in the + ## data section. Otherwise, the dump of temacs may miss variables in + ## the shared library that have been initialized. For example, with + ## GNU libc, __malloc_initialized would normally be resolved to the + ## shared library's .bss section, which is fatal. + if test "x$GCC" = "xyes"; then + C_SWITCH_MACHINE="-fno-common" + else + AC_MSG_ERROR([Non-GCC compilers are not supported.]) + fi + ;; +esac AC_SUBST([C_SWITCH_MACHINE]) C_SWITCH_SYSTEM= @@ -2977,17 +3058,6 @@ if test "${opsys}" = "haiku" && test "${with_be_app}" = "yes"; then [AC_MSG_ERROR([The Application Kit headers required for building with the Application Kit were not found or cannot be compiled. Either fix this, or re-configure with the option '--without-be-app'.])]) - AC_CACHE_CHECK([whether BObjectList accepts ownership as a template parameter], - [emacs_cv_bobjectlist_ownership_is_template_parameter], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - static BObjectList test;]], [])], - [emacs_cv_bobjectlist_ownership_is_template_parameter=yes], - [emacs_cv_bobjectlist_ownership_is_template_parameter=no])]) - AS_IF([test "x$emacs_cv_bobjectlist_ownership_is_template_parameter" = "xyes"], - [AC_DEFINE([BOBJECTLIST_OWNERSHIP_IS_TEMPLATE_PARAMETER], [1], - [Define to 1 if BObjectList ownership is defined as a template parameter.])]) AC_LANG_POP([C++]) fi @@ -3031,6 +3101,7 @@ if test "${opsys}" = "mingw32"; then HAVE_W32=${emacs_cv_w32api} fi +FIRSTFILE_OBJ= NTDIR= LIBS_ECLIENT= LIB_WSOCK32= @@ -3044,7 +3115,7 @@ if test "${HAVE_W32}" = "yes"; then AC_CHECK_TOOL([WINDRES], [windres], [AC_MSG_ERROR([No resource compiler found.])]) W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o" - W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o w32dwrite.o w32cygwinx.o" + W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o w32cygwinx.o" EMACSRES="emacs.res" case "$canonical" in x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;; @@ -3078,6 +3149,7 @@ if test "${HAVE_W32}" = "yes"; then W32_RES_LINK="\$(EMACSRES)" CLIENTRES="emacsclient.res" CLIENTW="emacsclientw\$(EXEEXT)" + FIRSTFILE_OBJ=firstfile.o NTDIR=nt CM_OBJ= LIBS_ECLIENT="-lcomctl32" @@ -3099,6 +3171,7 @@ AC_SUBST([EMACS_MANIFEST]) AC_SUBST([CLIENTRES]) AC_SUBST([CLIENTW]) AC_SUBST([W32_RES_LINK]) +AC_SUBST([FIRSTFILE_OBJ]) AC_SUBST([NTDIR]) AC_SUBST([CM_OBJ]) AC_SUBST([LIBS_ECLIENT]) @@ -3236,78 +3309,36 @@ AC_CACHE_CHECK( [AC_LANG_PROGRAM( [[#include static void hook (void) {}]], - [[__after_morecore_hook = hook; + [[malloc_set_state (malloc_get_state ()); + __after_morecore_hook = hook; __malloc_initialize_hook = hook;]])], [emacs_cv_var_doug_lea_malloc=yes]) fi]) doug_lea_malloc=$emacs_cv_var_doug_lea_malloc -AC_CHECK_ALIGNOF([int]) -AC_CHECK_ALIGNOF([long]) -AC_CHECK_ALIGNOF([long long]) -AC_CHECK_SIZEOF([long]) - -AC_CACHE_CHECK([for struct alignment], - [emacs_cv_struct_alignment], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include - struct s { char c; } __attribute__ ((aligned (8))); - struct t { char c; struct s s; }; - char verify[offsetof (struct t, s) == 8 ? 1 : -1]; - ]])], - [emacs_cv_struct_alignment=yes], - [emacs_cv_struct_alignment=no])]) -if test "$emacs_cv_struct_alignment" = yes; then - AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], [1], - [Define to 1 if 'struct __attribute__ ((aligned (N)))' aligns the - structure to an N-byte boundary.]) -fi - +hybrid_malloc= system_malloc=yes -# If it appears as if the system malloc can't be trusted to return -# adequately positioned memory, enable the GNU malloc, which more -# consistently provides allocations at low addresses, as is required for -# the pdumper to load dump files at a representable location. -AS_IF([test "$with_pdumper" = "yes" && test "$with_wide_int" != "yes"], - AC_CHECK_HEADERS([stdalign.h]) - [AC_CACHE_CHECK([whether alignas is required yet unavailable], - [emacs_cv_alignas_unavailable], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -#ifdef HAVE_STDALIGN_H -#include -#endif - #include - ]], [[ -#define IDEAL_GCALIGNMENT 8 -#if INTPTR_MAX <= INT_MAX && !defined WIDE_EMACS_INT -# define ALIGNOF_EMACS_INT ALIGNOF_INT -# elif INTPTR_MAX <= LONG_MAX && !defined WIDE_EMACS_INT -# define ALIGNOF_EMACS_INT ALIGNOF_LONG -# elif INTPTR_MAX <= LLONG_MAX -# define ALIGNOF_EMACS_INT ALIGNOF_LONG_LONG -# else -# error "INTPTR_MAX too large" -#endif - -#if (ALIGNOF_EMACS_INT < IDEAL_GCALIGNMENT && !defined alignas \ - && !defined HAVE_STRUCT_ATTRIBUTE_ALIGNED \ - && !defined __alignas_is_defined \ - && __STDC_VERSION__ < 202311 && __cplusplus < 201103) -#error "!USE_LSB_TAG required" -#endif - ]])], [emacs_cv_alignas_unavailable=no], - [emacs_cv_alignas_unavailable=yes])]) - AS_IF([test "$emacs_cv_alignas_unavailable" = "yes"], - [system_malloc=no - AC_MSG_WARN([The GNU memory manager will be enabled as your system -does not guarantee that the portable dumper can allocate memory at a suitably -low address.])])]) - dnl This must be before the test of $ac_cv_func_sbrk below. AC_CHECK_FUNCS_ONCE([sbrk]) +test $with_unexec = yes && +case "$opsys" in + ## darwin ld insists on the use of malloc routines in the System framework. + darwin | mingw32 | nacl | solaris) ;; + cygwin | qnxnto | freebsd) + 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 @@ -3316,6 +3347,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 @@ -3334,17 +3373,18 @@ 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.)" fi AC_DEFINE([DOUG_LEA_MALLOC], [1], [Define to 1 if the system memory allocator is Doug Lea style, - with malloc hooks.]) + with malloc hooks and malloc_set_state.]) ## Use mmap directly for allocating larger buffers. ## FIXME this comes from src/s/{gnu,gnu-linux}.h: @@ -3399,7 +3439,8 @@ if test "$ac_cv_header_pthread_h" && test "$opsys" != "mingw32"; then status += pthread_create (&th, 0, 0, 0); status += pthread_sigmask (SIG_BLOCK, &new_mask, &old_mask); status += pthread_kill (th, 0); - #if ! (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC) + #if ! (defined SYSTEM_MALLOC || defined HYBRID_MALLOC \ + || defined DOUG_LEA_MALLOC) /* Test for pthread_atfork only if gmalloc uses it, as older-style hosts like MirBSD 10 lack it. */ status += pthread_atfork (noop, noop, noop); @@ -3487,39 +3528,6 @@ if test "${HAVE_X11}" = "yes"; then export LD_RUN_PATH fi - if test "${opsys}" = "gnu-linux"; then - AC_CACHE_CHECK([whether X on GNU/Linux needs -b to link], [emacs_cv_b_link], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[XOpenDisplay ("foo");]])], - [xgnu_linux_first_failure=no], - [xgnu_linux_first_failure=yes]) - if test "${xgnu_linux_first_failure}" = "yes"; then - OLD_CPPFLAGS="$CPPFLAGS" - OLD_LIBS="$LIBS" - CPPFLAGS="$CPPFLAGS -b i486-linuxaout" - LIBS="$LIBS -b i486-linuxaout" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[XOpenDisplay ("foo");]])], - [xgnu_linux_second_failure=no], - [xgnu_linux_second_failure=yes]) - if test "${xgnu_linux_second_failure}" = "yes"; then - # If we get the same failure with -b, there is no use adding -b. - # So leave it out. This plays safe. - emacs_cv_b_link=no - else - emacs_cv_b_link=yes - fi - CPPFLAGS=$OLD_CPPFLAGS - LIBS=$OLD_LIBS - else - emacs_cv_b_link=no - fi]) - if test "x$emacs_cv_b_link" = xyes ; then - LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -b i486-linuxaout" - C_SWITCH_X_SITE="$C_SWITCH_X_SITE -b i486-linuxaout" - fi - fi - # Reportedly, some broken Solaris systems have XKBlib.h but are missing # header files included from there. AC_CACHE_CHECK([for Xkb], [emacs_cv_xkb], @@ -3651,18 +3659,9 @@ if test "${with_sqlite3}" != "no"; then CFLAGS="$SAVE_CFLAGS" fi else - AC_CACHE_CHECK([for sqlite3], - [emacs_cv_have_sqlite3], - [OLIBS=$LIBS - LIBS="-lsqlite3 $LIBS" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[#include - sqlite3 *handle;]], - [[return sqlite3_open_v2 ("", &handle, 0, "");]])], - [emacs_cv_have_sqlite3=yes], - [emacs_cv_have_sqlite3=no]) - LIBS=$OLIBS]) - HAVE_SQLITE3=$emacs_cv_have_sqlite3 + AC_CHECK_LIB([sqlite3], [sqlite3_open_v2], + [HAVE_SQLITE3=yes], + [HAVE_SQLITE3=no]) if test "$HAVE_SQLITE3" = "yes"; then SQLITE3_LIBS=-lsqlite3 LIBS="$SQLITE3_LIBS $LIBS" @@ -3913,15 +3912,13 @@ dnl D-Bus has been tested under GNU/Linux only. Must be adapted for dnl other platforms. HAVE_DBUS=no DBUS_OBJ= -if test "${with_dbus}" != "no" ; then - EMACS_CHECK_MODULES([DBUS], [dbus-1 >= 1.0], [HAVE_DBUS=yes], [HAVE_DBUS=no]) +if test "${with_dbus}" = "yes"; then + EMACS_CHECK_MODULES([DBUS], [dbus-1 >= 1.0]) if test "$HAVE_DBUS" = yes; then AC_DEFINE([HAVE_DBUS], [1], [Define to 1 if using D-Bus.]) dnl dbus_watch_get_unix_fd has been introduced in D-Bus 1.1.1. dnl dbus_type_is_valid and dbus_validate_* have been introduced in dnl D-Bus 1.5.12. - dnl dbus_message_set_allow_interactive_authorization was introduced - dnl in D-Bus 1.8.10. OLD_LIBS=$LIBS LIBS="$LIBS $DBUS_LIBS" AC_CHECK_FUNCS([dbus_watch_get_unix_fd \ @@ -3929,8 +3926,7 @@ if test "${with_dbus}" != "no" ; then dbus_validate_bus_name \ dbus_validate_path \ dbus_validate_interface \ - dbus_validate_member \ - dbus_message_set_allow_interactive_authorization]) + dbus_validate_member]) LIBS=$OLD_LIBS DBUS_OBJ=dbusbind.o fi @@ -4543,7 +4539,6 @@ fi ### End of font-backend (under any platform) section. ### Start of font-backend (under X11) section. -is_xft_version_outdated=no if test "${HAVE_X11}" = "yes"; then if test $HAVE_CAIRO = yes; then dnl Strict linkers fail with @@ -4592,20 +4587,7 @@ if test "${HAVE_X11}" = "yes"; then if test "${HAVE_XFT}" = "yes"; then AC_DEFINE([HAVE_XFT], [1], [Define to 1 if you have the Xft library.]) - AC_SUBST([XFT_LIBS]) - AC_CACHE_CHECK([whether libXft is not recent enough to support color fonts], - [emacs_cv_is_xft_version_outdated], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[ - #include - #include - #if XftVersion < 20306 - #error "Xft < 2.3.6" - #endif /* XftVersion < 20306 */ - ]], [])], - [emacs_cv_is_xft_version_outdated=no], - [emacs_cv_is_xft_version_outdated=yes])]) - is_xft_version_outdated=$emacs_cv_is_xft_version_outdated + AC_SUBST([XFT_LIBS]) C_SWITCH_X_SITE="$C_SWITCH_X_SITE $XFT_CFLAGS" fi # "${HAVE_XFT}" = "yes" CPPFLAGS=$OLD_CPPFLAGS @@ -4994,29 +4976,22 @@ AC_SUBST([LCMS2_LIBS]) HAVE_ZLIB=no LIBZ= -AS_IF([test "${with_zlib}" != "no"], - [AC_CACHE_CHECK([for library containing inflateEnd], - [emacs_cv_libz], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include - z_stream stream;]], - [[return inflateEnd (&stream);]])]) - OLIBS=$LIBS - for emacs_cv_libz in '' -lz no; do - test "$emacs_cv_libz" = no && break - LIBS="$emacs_cv_libz $OLIBS" - AC_LINK_IFELSE([], [break]) - done - LIBS=$OLIBS]) - - AS_CASE([$emacs_cv_libz], - [-* | ''], - [# mingw32 doesn't use -lz, since it loads the library dynamically. - AS_CASE([$opsys], - [mingw32], [LIBZ=], - [LIBZ=$emacs_cv_libz]) - HAVE_ZLIB=yes - AC_DEFINE([HAVE_ZLIB], [1], - [Define to 1 if you have the zlib library (-lz).])])]) +if test "${with_zlib}" != "no"; then + OLIBS=$LIBS + AC_SEARCH_LIBS([inflateEnd], [z], [HAVE_ZLIB=yes]) + LIBS=$OLIBS + case $ac_cv_search_inflateEnd in + -*) LIBZ=$ac_cv_search_inflateEnd ;; + esac +fi +if test "${HAVE_ZLIB}" = "yes"; then + AC_DEFINE([HAVE_ZLIB], [1], + [Define to 1 if you have the zlib library (-lz).]) + ### mingw32 doesn't use -lz, since it loads the library dynamically. + if test "${opsys}" = "mingw32"; then + LIBZ= + fi +fi AC_SUBST([LIBZ]) ### Dynamic library support @@ -5096,14 +5071,12 @@ AC_SUBST_FILE([module_env_snippet_27]) AC_SUBST_FILE([module_env_snippet_28]) AC_SUBST_FILE([module_env_snippet_29]) AC_SUBST_FILE([module_env_snippet_30]) -AC_SUBST_FILE([module_env_snippet_31]) module_env_snippet_25="$srcdir/src/module-env-25.h" module_env_snippet_26="$srcdir/src/module-env-26.h" module_env_snippet_27="$srcdir/src/module-env-27.h" module_env_snippet_28="$srcdir/src/module-env-28.h" module_env_snippet_29="$srcdir/src/module-env-29.h" module_env_snippet_30="$srcdir/src/module-env-30.h" -module_env_snippet_31="$srcdir/src/module-env-31.h" emacs_major_version=`AS_ECHO([$PACKAGE_VERSION]) | sed 's/[[.]].*//'` AC_SUBST([emacs_major_version]) @@ -5233,9 +5206,15 @@ if test "${with_native_compilation}" = "default"; then # Check if libgccjit really works. AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken]) fi + if test "$with_unexec" = yes; then + with_native_compilation=no + fi fi if test "${with_native_compilation}" != "no"; then + if test "$with_unexec" = yes; then + AC_MSG_ERROR(['--with-native-compilation' is not compatible with unexec]) + fi if test "${HAVE_ZLIB}" = no; then AC_MSG_ERROR(['--with-native-compilation' requires zlib]) fi @@ -5310,7 +5289,7 @@ if test "${with_native_compilation}" != "no"; then LIBS=$SAVE_LIBS fi AC_DEFINE_UNQUOTED([NATIVE_ELISP_SUFFIX], [".eln"], - [System extension for native-compiled elisp]) + [System extension for native compiled elisp]) AC_SUBST([HAVE_NATIVE_COMP]) AC_SUBST([LIBGCCJIT_CFLAGS]) AC_SUBST([LIBGCCJIT_LIBS]) @@ -5523,11 +5502,6 @@ if test "${HAVE_X11}" = "yes"; then WITH_IFAVAILABLE="$WITH_IFAVAILABLE --with-tiff=ifavailable";; esac fi -case $with_dbus,$HAVE_DBUS in - no,* | ifavailable,* | *,yes) ;; - *) MISSING="$MISSING dbus-1" - WITH_IFAVAILABLE="$WITH_IFAVAILABLE --with-dbus=ifavailable";; -esac case $with_gnutls,$HAVE_GNUTLS in no,* | ifavailable,* | *,yes) ;; *) MISSING="$MISSING gnutls" @@ -5954,6 +5928,7 @@ AC_SUBST([HAVE_LIBSECCOMP]) AC_SUBST([LIBSECCOMP_LIBS]) AC_SUBST([LIBSECCOMP_CFLAGS]) +AC_CHECK_SIZEOF([long]) SIZEOF_LONG="$ac_cv_sizeof_long" AC_SUBST([SIZEOF_LONG]) @@ -5962,7 +5937,7 @@ LIBS="$LIB_PTHREAD $LIB_MATH $LIBS" AC_CHECK_FUNCS([accept4 fchdir gethostname \ getrusage get_current_dir_name \ lrand48 random rint tcdrain trunc \ -select getpagesize newlocale \ +select getpagesize setlocale newlocale \ getrlimit setrlimit shutdown \ pthread_sigmask strsignal setitimer \ sendto recvfrom getsockname getifaddrs freeifaddrs \ @@ -6048,6 +6023,19 @@ dnl No need to check for posix_memalign if aligned_alloc works. AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break]) AC_CHECK_DECLS([aligned_alloc], [], [], [[#include ]]) +case $with_unexec,$canonical in + yes,alpha*) + AC_CHECK_DECL([__ELF__], [], + [AC_MSG_ERROR([Non-ELF systems are not supported on this platform.])]);; +esac + +if test "$with_unexec" = yes && test "$opsys" = "haiku"; then + dnl A serious attempt was actually made to port unexec to Haiku. + dnl Something in libstdc++ seems to prevent it from working. + AC_MSG_ERROR([Haiku is not supported by the legacy unexec dumper. +Please use the portable dumper instead.]) +fi + # Dump loading. Android lacks posix_madvise. AC_CHECK_FUNCS([posix_madvise madvise]) @@ -6379,10 +6367,10 @@ dnl posix_spawn. The chdir and setsid functionality is relatively dnl recent, so we check for it specifically. AC_CHECK_HEADERS([spawn.h]) AC_SUBST([HAVE_SPAWN_H]) -gl_CHECK_FUNCS_ANDROID([posix_spawn], [#include ]) -gl_CHECK_FUNCS_ANDROID([posix_spawn_file_actions_addchdir], [#include ]) -gl_CHECK_FUNCS_ANDROID([posix_spawn_file_actions_addchdir_np], [#include ]) -gl_CHECK_FUNCS_ANDROID([posix_spawnattr_setflags], [#include ]) +AC_CHECK_FUNCS([posix_spawn \ + posix_spawn_file_actions_addchdir \ + posix_spawn_file_actions_addchdir_np \ + posix_spawnattr_setflags]) AC_SUBST([HAVE_POSIX_SPAWN]) AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP]) @@ -7067,9 +7055,6 @@ AC_CACHE_CHECK([for usable FIONREAD], [emacs_cv_usable_FIONREAD], #ifdef USG5_4 # include #endif - #ifdef HAVE_UNISTD_H - # include /* defines ioctl() on Solaris */ - #endif ]], [[int foo = ioctl (0, FIONREAD, &foo);]])], [emacs_cv_usable_FIONREAD=yes], @@ -7316,6 +7301,22 @@ else fi AC_SUBST([LIBXMENU]) +AC_CACHE_CHECK([for struct alignment], + [emacs_cv_struct_alignment], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include + struct s { char c; } __attribute__ ((aligned (8))); + struct t { char c; struct s s; }; + char verify[offsetof (struct t, s) == 8 ? 1 : -1]; + ]])], + [emacs_cv_struct_alignment=yes], + [emacs_cv_struct_alignment=no])]) +if test "$emacs_cv_struct_alignment" = yes; then + AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], [1], + [Define to 1 if 'struct __attribute__ ((aligned (N)))' aligns the + structure to an N-byte boundary.]) +fi + AC_C_RESTRICT AC_C_TYPEOF @@ -7347,10 +7348,21 @@ AC_SUBST([RALLOC_OBJ]) if test "$opsys" = "cygwin"; then CYGWIN_OBJ="cygw32.o" + ## Cygwin differs because of its unexec(). + PRE_ALLOC_OBJ= + POST_ALLOC_OBJ=lastfile.o +elif test "$opsys" = "mingw32"; then + CYGWIN_OBJ= + PRE_ALLOC_OBJ= + POST_ALLOC_OBJ=lastfile.o else CYGWIN_OBJ= + PRE_ALLOC_OBJ=lastfile.o + POST_ALLOC_OBJ= fi AC_SUBST([CYGWIN_OBJ]) +AC_SUBST([PRE_ALLOC_OBJ]) +AC_SUBST([POST_ALLOC_OBJ]) dnl Call this 'FORTIFY_SOUR' so that it sorts before the 'FORTIFY_SOURCE' dnl verbatim defined above. The tricky name is apropos, as this hack @@ -7466,6 +7478,9 @@ case "$opsys" in ## about 14 to about 34. Setting it high gets us plenty of slop and ## only costs about 1.5K of wasted binary space. headerpad_extra=1000 + if test "$with_unexec" = yes; then + LD_SWITCH_SYSTEM_TEMACS="-fno-pie $LD_SWITCH_SYSTEM_TEMACS -Xlinker -headerpad -Xlinker $headerpad_extra" + fi ## This is here because src/Makefile.in did some extra fiddling around ## with LD_SWITCH_SYSTEM. It seems cleaner to put this in @@ -7491,11 +7506,49 @@ case "$opsys" in x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x400000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;; *) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;; esac + ## If they want unexec, disable Windows ASLR for the Emacs binary + if test "$with_dumping" = "unexec"; then + case "$canonical" in + x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS -Wl,-disable-dynamicbase -Wl,-disable-high-entropy-va -Wl,-default-image-base-low" ;; + *) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS -Wl,-disable-dynamicbase" ;; + esac + fi ;; *) LD_SWITCH_SYSTEM_TEMACS= ;; esac +# -no-pie or -nopie fixes a temacs segfault on Gentoo, OpenBSD, +# Ubuntu, and other systems with "hardened" GCC configurations for +# some reason (Bug#18784). We don't know why this works, but not +# segfaulting is better than segfaulting. Use ac_c_werror_flag=yes +# when trying the option, otherwise clang keeps warning that it does +# not understand it, and pre-4.6 GCC has a similar problem +# (Bug#20338). Prefer -no-pie to -nopie, as -no-pie is the +# spelling used by GCC 6.1.0 and later (Bug#24682). +AC_CACHE_CHECK( + [for $CC option to disable position independent executables], + [emacs_cv_prog_cc_no_pie], + [if test $with_unexec = no; then + emacs_cv_prog_cc_no_pie='not needed' + else + emacs_save_c_werror_flag=$ac_c_werror_flag + emacs_save_LDFLAGS=$LDFLAGS + ac_c_werror_flag=yes + for emacs_cv_prog_cc_no_pie in -no-pie -nopie no; do + test $emacs_cv_prog_cc_no_pie = no && break + LDFLAGS="$emacs_save_LDFLAGS $emacs_cv_prog_cc_no_pie" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [break]) + done + ac_c_werror_flag=$emacs_save_c_werror_flag + LDFLAGS=$emacs_save_LDFLAGS + fi]) +case $emacs_cv_prog_cc_no_pie in + -*) + LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS $emacs_cv_prog_cc_no_pie" + ;; +esac + if test x$ac_enable_profiling != x ; then case $opsys in *freebsd | gnu-linux) ;; @@ -7523,6 +7576,35 @@ fi AC_SUBST([WINDOW_SYSTEM_OBJ]) +# Some systems have MB_CUR_MAX defined to a call to +# __ctype_get_mb_cur_max, but do not have __ctype_get_mb_cur_max in +# libc. Check for that situation and define MB_CUR_MAX to something +# sane. + +AC_CHECK_FUNC([__ctype_get_mb_cur_max]) + +AC_CACHE_CHECK([whether MB_CUR_MAX is defined to function that won't link], + [emacs_cv_broken_mb_cur_max], + [AC_EGREP_CPP(__ctype_get_mb_cur_max, [ +#include +#ifndef MB_CUR_MAX +#define MB_CUR_MAX -1 +#endif +static int foo = MB_CUR_MAX; +], [AS_IF([test "$ac_cv_func___ctype_get_mb_cur_max" = "yes"], + [emacs_cv_broken_mb_cur_max=no], + [emacs_cv_broken_mb_cur_max=yes])], + [emacs_cv_broken_mb_cur_max=no])]) + +AS_IF([test "$emacs_cv_broken_mb_cur_max" = "yes"], + # Define this to 4, which is right for Android. + [AS_CASE([$opsys], [android], + [AC_DEFINE([REPLACEMENT_MB_CUR_MAX], [4], + [Define to MB_CUR_MAX if stdlib.h is broken.])], + [AC_MSG_ERROR([MB_CUR_MAX does not work on your system. +Please modify configure.ac to set an appropriate value, then +send your change to bug-gnu-emacs@gnu.org])])]) + AH_TOP([/* GNU Emacs site configuration template file. Copyright (C) 1988-2025 Free Software Foundation, Inc. @@ -7604,12 +7686,12 @@ for opt in ACL BE_APP CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTING HARFBUZZ IMAGEMAGICK JPEG LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 \ M17N_FLT MODULES NATIVE_COMP NOTIFY NS OLDXMENU PDUMPER PGTK PNG RSVG SECCOMP \ SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER \ - UNEXEC WEBP X11 XAW3D XDBE XFT XIM XINERAMA XINPUT2 XPM XRANDR XWIDGETS \ - X_TOOLKIT ZLIB; do + UNEXEC WEBP X11 XAW3D XDBE XFT XIM XINPUT2 XPM XWIDGETS X_TOOLKIT \ + ZLIB; do case $opt in PDUMPER) val=${with_pdumper} ;; - UNEXEC) val=no ;; + UNEXEC) val=${with_unexec} ;; GLIB) val=${emacs_cv_links_glib} ;; NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;; TOOLKIT_SCROLL_BARS|X_TOOLKIT) eval val=\${USE_$opt} ;; @@ -7685,6 +7767,7 @@ AS_ECHO([" Does Emacs use -lXaw3d? ${HAVE_XAW3D Does Emacs support Xwidgets? ${HAVE_XWIDGETS} Does Emacs have threading support in lisp? ${threads_enabled} Does Emacs support the portable dumper? ${with_pdumper} + Does Emacs support legacy unexec dumping? ${with_unexec} Which dumping strategy does Emacs use? ${with_dumping} Does Emacs have native lisp compiler? ${HAVE_NATIVE_COMP} Does Emacs use version 2 of the X Input Extension? ${HAVE_XINPUT2} @@ -7767,6 +7850,7 @@ if test -f "$srcdir/$opt_makefile.in"; then dnl Again, it's best not to use a variable. Though you can add dnl ", [], [opt_makefile='$opt_makefile']" and it should work. ARCH_INDEPENDENT_CONFIG_FILES([test/Makefile]) + ARCH_INDEPENDENT_CONFIG_FILES([test/manual/noverlay/Makefile]) fi opt_makefile=test/infra/Makefile if test -f "$srcdir/$opt_makefile.in"; then @@ -7782,9 +7866,10 @@ fi dnl The admin/ directory used to be excluded from tarfiles. if test -d $srcdir/admin; then - SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES admin/charsets/Makefile admin/unidata/Makefile" + SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES admin/charsets/Makefile admin/unidata/Makefile admin/grammars/Makefile" ARCH_INDEPENDENT_CONFIG_FILES([admin/charsets/Makefile]) ARCH_INDEPENDENT_CONFIG_FILES([admin/unidata/Makefile]) + ARCH_INDEPENDENT_CONFIG_FILES([admin/grammars/Makefile]) fi dnl -d admin @@ -7932,11 +8017,12 @@ you can continue to support by using '$0 --with-pop'.]) esac fi -if test "${HAVE_XFT}" = yes && test "$is_xft_version_outdated" = "yes"; then - AC_MSG_WARN([This configuration uses a version of libXft earlier than 2.3.6, - which is impacted by a number of rendering issues up to and including - crashes. Please consider using Cairo graphics instead (they are - auto-detected if the relevant development headers are installed).]) +if test "${HAVE_XFT}" = yes; then + AC_MSG_WARN([This configuration uses libXft, which has a number of + font rendering issues, and is being considered for removal in the + next release of Emacs. Please consider using Cairo graphics + + HarfBuzz text shaping instead (they are auto-detected if the + relevant development headers are installed).]) fi if test "${HAVE_CAIRO}" = "yes" && test "${HAVE_HARFBUZZ}" = no; then diff --git a/exec/configure.ac b/exec/configure.ac index ef825e26788..c66c7276d8c 100644 --- a/exec/configure.ac +++ b/exec/configure.ac @@ -22,10 +22,10 @@ dnl You should have received a copy of the GNU General Public License dnl along with GNU Emacs. If not, see . AC_PREREQ([2.65]) -AC_INIT([libexec], [31.0.50], [bug-gnu-emacs@gnu.org], [], +AC_INIT([libexec], [30.1.90], [bug-gnu-emacs@gnu.org], [], [https://www.gnu.org/software/emacs/]) -AH_TOP([/* Copyright (C) 2025 Free Software Foundation, Inc. +AH_TOP([/* Copyright (C) 2024-2025 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -42,6 +42,11 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */]) +AC_ARG_WITH([reentrancy], + [AS_HELP_STRING([--with-reentrancy], + [Generate library which can be used within a signal handler.])], + [AC_DEFINE([REENTRANT], [1])]) + AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC AC_PROG_CPP @@ -69,9 +74,9 @@ AC_CHECK_FUNC([process_vm_readv], ]])])]) AC_CHECK_HEADERS([sys/param.h sys/uio.h]) AC_CHECK_MEMBERS([siginfo_t.si_syscall], [], [], -[[ + [[ #include -]]) + ]]) AH_BOTTOM([ #ifdef HAVE_STDBOOL_H @@ -115,7 +120,6 @@ AH_TEMPLATE([SYSCALL_ARG2_REG], [Define to register holding arg2 to system calls AH_TEMPLATE([SYSCALL_ARG3_REG], [Define to register holding arg3 to system calls.]) AH_TEMPLATE([SYSCALL_RET_REG], [Define to register holding value of system calls.]) AH_TEMPLATE([STACK_POINTER], [Define to register holding the stack pointer.]) -AH_TEMPLATE([PROGRAM_COUNTER], [Define to register holding the program counter.]) AH_TEMPLATE([EXEC_SYSCALL], [Define to number of the `exec' system call.]) AH_TEMPLATE([USER_WORD], [Define to word type used by tracees.]) AH_TEMPLATE([USER_SWORD], [Define to signed word type used by tracees.]) @@ -130,8 +134,7 @@ AH_TEMPLATE([READLINK_SYSCALL], [Define to number of the `readlink' system call. AH_TEMPLATE([READLINKAT_SYSCALL], [Define to number of the `readlinkat' system call.]) AH_TEMPLATE([OPEN_SYSCALL], [Define to number of the `open' system call.]) AH_TEMPLATE([OPENAT_SYSCALL], [Define to number of the `openat' system call.]) -AH_TEMPLATE([HAVE_SECCOMP], [Define to 1 if secure computing filters are available -to accelerate interception of system calls.]) +AH_TEMPLATE([REENTRANT], [Define to 1 if the library is used within a signal handler.]) AC_CANONICAL_HOST @@ -213,11 +216,11 @@ AC_CACHE_CHECK([whether MIPS NABI calling convention is used], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ -#if !defined __mips64__ && !defined __LP64__ +#ifndef __mips64__ #if _MIPS_SIM == _ABIO32 OABI in use. #endif /* _MIPS_SIM == _ABIO32 */ -#endif /* !__mips64__ && !defined __LP64__ */ +#endif /* !__mips64__ */ ]])], [exec_cv_mips_nabi=yes], [exec_cv_mips_nabi=no])]) @@ -247,7 +250,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [rdx]) AC_DEFINE([SYSCALL_ARG3_REG], [r10]) AC_DEFINE([STACK_POINTER], [rsp]) - AC_DEFINE([PROGRAM_COUNTER], [rip]) AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -281,7 +283,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [edx]) AC_DEFINE([SYSCALL_ARG3_REG], [esi]) AC_DEFINE([STACK_POINTER], [esp]) - AC_DEFINE([PROGRAM_COUNTER], [eip]) AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -313,7 +314,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [[regs[2]]]) AC_DEFINE([SYSCALL_ARG3_REG], [[regs[3]]]) AC_DEFINE([STACK_POINTER], [sp]) - AC_DEFINE([PROGRAM_COUNTER], [pc]) AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -346,7 +346,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [[uregs[2]]]) AC_DEFINE([SYSCALL_ARG3_REG], [[uregs[3]]]) AC_DEFINE([STACK_POINTER], [[uregs[13]]]) - AC_DEFINE([PROGRAM_COUNTER], [[uregs[15]]]) AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -372,7 +371,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [[uregs[2]]]) AC_DEFINE([SYSCALL_ARG3_REG], [[uregs[3]]]) AC_DEFINE([STACK_POINTER], [[uregs[13]]]) - AC_DEFINE([STACK_POINTER], [[uregs[15]]]) AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -404,7 +402,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [[gregs[4]]]) # a2 AC_DEFINE([SYSCALL_ARG3_REG], [[gregs[5]]]) # a3 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp - AC_DEFINE([PROGRAM_COUNTER], [[cp0_epc]]) # pc AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -435,7 +432,6 @@ AS_CASE([$host], [x86_64-*linux*], AC_DEFINE([SYSCALL_ARG2_REG], [[gregs[4]]]) # a2 AC_DEFINE([SYSCALL_ARG3_REG], [[gregs[5]]]) # a3 AC_DEFINE([STACK_POINTER], [[gregs[29]]]) # sp - AC_DEFINE([PROGRAM_COUNTER], [[cp0_epc]]) # pc AC_DEFINE([EXEC_SYSCALL], [__NR_execve]) AC_DEFINE([USER_WORD], [uintptr_t]) AC_DEFINE([USER_SWORD], [intptr_t]) @@ -455,12 +451,12 @@ AS_CASE([$host], [x86_64-*linux*], .section text .global __start __start: - li \$t0, 0 - li \$t1, 0 - daddi \$t0, \$t1, 1 - daddi \$t0, \$t1, -1 - daddi \$t0, -1 - daddi \$t0, 1 + li $t0, 0 + li $t1, 0 + daddi $t0, $t1, 1 + daddi $t0, $t1, -1 + daddi $t0, -1 + daddi $t0, 1 _ACEOF $AS $ASFLAGS conftest.s -o conftest.$OBJEXT \ @@ -470,8 +466,7 @@ _ACEOF AS_IF([test "x$exec_cv_as_daddi" != "xyes"], [DADDI_BROKEN=yes]) exec_CHECK_LINUX_CLONE3 - AC_DEFINE([MIPS_NABI], [1], - [Define to 1 if MIPS NABI calling convention is being used.]) + exec_CHECK_MIPS_NABI LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x3e00000000" is_mips=yes exec_loader=loader-mips64el.s], [*], @@ -485,12 +480,6 @@ AC_ARG_VAR([LOADERFLAGS], [Flags used to link the loader.]) AC_ARG_VAR([ARFLAGS], [Flags for the archiver.]) AC_ARG_VAR([ASFLAGS], [Flags for the assembler.]) -# Search for seccomp headers and declarations. -AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h], - [AC_CHECK_DECLS([SECCOMP_SET_MODE_FILTER, SECCOMP_FILTER_FLAG_TSYNC, SECCOMP_RET_TRACE], - [AC_DEFINE([HAVE_SECCOMP], [1])], [], - [[#include ]])]) - # Make the assembler optimize for code size. Don't do this on MIPS, # as the assembler code manages branch delays manually. @@ -558,9 +547,7 @@ FIND_DELETE=$exec_cv_find_delete AC_SUBST([FIND_DELETE]) AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_FILES([Makefile]) -AS_IF([test "x$is_mips" = xyes], - [AC_CONFIG_FILES([config-mips.m4])]) +AC_CONFIG_FILES([Makefile config-mips.m4]) AC_SUBST([AUTO_DEPEND]) AC_SUBST([LOADERFLAGS]) @@ -569,6 +556,5 @@ AC_SUBST([ASFLAGS]) AC_SUBST([exec_loader]) AC_SUBST([MIPS_N32]) AC_SUBST([OBJS]) -AC_SUBST([is_mips]) AC_OUTPUT diff --git a/java/AndroidManifest.xml.in b/java/AndroidManifest.xml.in index ceec7a97b98..711d34cff30 100644 --- a/java/AndroidManifest.xml.in +++ b/java/AndroidManifest.xml.in @@ -207,7 +207,7 @@ along with GNU Emacs. If not, see . --> + android:targetSdkVersion="34"/> diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index cb44aea4634..f9b5af84e25 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -37,6 +37,7 @@ /^#undef HAVE_STRUCT_UTIMBUF *$/s/^.*$/#define HAVE_STRUCT_UTIMBUF 1/ /^#undef LOCALTIME_CACHE *$/s/^.*$/#define LOCALTIME_CACHE 1/ /^#undef HAVE_TZSET *$/s/^.*$/#define HAVE_TZSET 1/ +/^#undef HAVE_UNEXEC *$/s/^.*$/#define HAVE_UNEXEC 1/ /^#undef HAVE_RINT *$/s/^.*$/#define HAVE_RINT 1/ /^#undef HAVE_C99_STRTOLD *$/s/^.*$/#define HAVE_C99_STRTOLD 1/ /^#undef HAVE_DIFFTIME *$/s/^.*$/#define HAVE_DIFFTIME 1/ @@ -66,7 +67,7 @@ /^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/ /^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/ /^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/ -/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "31.0.50"/ +/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "30.1.90"/ /^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/ /^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/ /^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/ @@ -137,12 +138,8 @@ s/^#undef HAVE_DECL_PUTCHAR_UNLOCKED *$/#define HAVE_DECL_PUTCHAR_UNLOCKED 0/ s/^#undef HAVE_DECL_PUTC_UNLOCKED *$/#define HAVE_DECL_PUTC_UNLOCKED 0/ s/^#undef HAVE_DECL_STRTOLL *$/#define HAVE_DECL_STRTOLL 1/ s/^#undef HAVE_DECL_STRTOIMAX *$/#define HAVE_DECL_STRTOIMAX 1/ -s/^#undef HAVE_PDUMPER *$/#define HAVE_PDUMPER 1/ s/^#undef HAVE_STRTOLL *$/#define HAVE_STRTOLL 1/ s/^#undef HAVE_STRTOULL *$/#define HAVE_STRTOULL 1/ -/^#undef ALIGNOF_INT *$/s/^.*$/#define ALIGNOF_INT 4/ -/^#undef ALIGNOF_LONG *$/s/^.*$/#define ALIGNOF_LONG 4/ -/^#undef ALIGNOF_LONG_LONG *$/s/^.*$/#define ALIGNOF_LONG_LONG 4/ /^#undef HAVE_STRUCT_DIRENT_D_TYPE *$/c\ #if __DJGPP__ + (__DJGPP_MINOR__ >= 5) >= 3\ #define HAVE_STRUCT_DIRENT_D_TYPE 1/\ diff --git a/nt/README.W32 b/nt/README.W32 index 800e851a22d..bdd726f038d 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -1,7 +1,7 @@ Copyright (C) 2001-2025 Free Software Foundation, Inc. See the end of the file for license conditions. - Emacs version 31.0.50 for MS-Windows + Emacs version 30.1.90 for MS-Windows This README file describes how to set up and run a precompiled distribution of the latest version of GNU Emacs for MS-Windows. You @@ -104,9 +104,12 @@ See the end of the file for license conditions. + addpm.exe - A basic installer that adds Emacs to "Start" menus and adds Emacs-related entries to the Windows Registry. - + etags.exe - Tool for generating tag files. See the + + ctags.exe, etags.exe - Tools for generating tag files. See the `Tags' node of the Emacs manual. + + ebrowse.exe - A tool for generating C++ browse information. See the + `Ebrowse' manual. + Several helper programs are in a version-specific subdirectory of the libexec directory: -- 2.39.5