commit b9b0c7ed512575a6c2faa06df60d2486faa5eee5 Author: Paul Eggert Date: Tue Dec 9 18:03:10 2025 -0800 Work even if aclocal is invoked by hand Problem reported by Ulrich Müller (bug#79974). * configure.ac (gl_ALIGNASOF): Arrange for it to be defined even if aclocal is invoked other than via admin/merge-gnulib. Also, change comments from # to dnl as they don’t make much sense in the shell script. diff --git a/configure.ac b/configure.ac index f131735460e..80991f3866c 100644 --- a/configure.ac +++ b/configure.ac @@ -3277,12 +3277,20 @@ if test "$emacs_cv_struct_alignment" = yes; then structure to an N-byte boundary.]) fi -# Check for alignas now rather than waiting for gl_INIT to do it, -# as the system_malloc=no test below needs $gl_cv_header_working_stdalign_h. -# Do not simply call gl_INIT here, as the ac_cv_func_pthread_sigmask=yes -# assignment below affects how gl_INIT works. -# Instead, call gl_ALIGNASOF, the only part of gl_INIT needed here. -# Then make gl_ALIGNASOF a no-op so gl_INIT does not duplicate its code. +dnl Work around a glitch if aclocal is invoked outside of autogen.sh. +dnl Such an invocation generates an aclocal.m4 that lacks m4/stdalign.m4. +dnl The following hack checks the otherwise-uninvolved macro gl_STDALIGN_H +dnl so that the hack itself does not generate a diagnostic. +m4_divert_push([KILL]) +m4_ifdef([gl_STDALIGN_H], [], [m4_include([m4/stdalign.m4])]) +m4_divert_pop([KILL]) + +dnl Check for alignas now rather than waiting for gl_INIT to do it, +dnl as the system_malloc=no test below needs $gl_cv_header_working_stdalign_h. +dnl Do not simply call gl_INIT here, as the ac_cv_func_pthread_sigmask=yes +dnl assignment below affects how gl_INIT works. +dnl Instead, call gl_ALIGNASOF, the only part of gl_INIT needed here. +dnl Then make gl_ALIGNASOF a no-op so gl_INIT does not duplicate its code. gl_ALIGNASOF AC_DEFUN([gl_ALIGNASOF]) commit bc65fb74865483c33a30bf5641686d7bc2b7d04b Author: Paul Eggert Date: Tue Dec 9 13:03:15 2025 -0800 Remove no-longer needed MALLOC_0_IS_NONNULL macro. * src/conf_post.h (MALLOC_0_IS_NONNULL): Remove. Gnulib no longer needs this. diff --git a/src/conf_post.h b/src/conf_post.h index 99400d76210..4a1a64c59fe 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -145,8 +145,6 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */ /* Needed by lib/lchmod.c. */ #define EOPNOTSUPP EINVAL -#define MALLOC_0_IS_NONNULL 1 - /* We must intercept 'opendir' calls to stash away the directory name, so we could reuse it in readlinkat; see msdos.c. */ #define opendir sys_opendir commit 88bf047d39838393cd16f231e721c8b548a50f42 Author: Paul Eggert Date: Tue Dec 9 12:55:17 2025 -0800 Garbage-collect Gnulib sources Remove Gnulib sources no longer needed or used. admin/merge-gnulib is typically not smart enough to do that. * configure.ac: Do not call gl_EEMALLOC, as it is no longer supplied or needed. * lib/explicit_bzero.c, lib/malloc/scratch_buffer_dupfree.c: * lib/xalloc-oversized.h, m4/eealloc.m4, m4/explicit_bzero.m4: * m4/st_dm_mode.m4, m4/year2038.m4: Remove. diff --git a/configure.ac b/configure.ac index eeb3f4bbd7d..f131735460e 100644 --- a/configure.ac +++ b/configure.ac @@ -7382,7 +7382,6 @@ CFLAGS=$pre_PKG_CONFIG_CFLAGS LIBS="$LIB_PTHREAD $pre_PKG_CONFIG_LIBS" gl_ASSERT_NO_GNULIB_POSIXCHECK gl_ASSERT_NO_GNULIB_TESTS -gl_EEMALLOC gl_INIT CFLAGS=$SAVE_CFLAGS LIBS=$SAVE_LIBS diff --git a/lib/explicit_bzero.c b/lib/explicit_bzero.c deleted file mode 100644 index 59d9895abfe..00000000000 --- a/lib/explicit_bzero.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Erasure of sensitive data, generic implementation. - Copyright (C) 2016-2025 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* An assembler implementation of explicit_bzero can be created as an - assembler alias of an optimized bzero implementation. - Architecture-specific implementations also need to define - __explicit_bzero_chk. */ - -#if !_LIBC -# include -#endif - -/* memset_s need this define */ -#if HAVE_MEMSET_S -# define __STDC_WANT_LIB_EXT1__ 1 -#endif - -#include - -#if defined _WIN32 && !defined __CYGWIN__ -# define WIN32_LEAN_AND_MEAN -# include -#endif - -#if _LIBC -/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero - redirects to that. */ -# undef explicit_bzero -#endif - -/* Set LEN bytes of S to 0. The compiler will not delete a call to - this function, even if S is dead after the call. */ -void -explicit_bzero (void *s, size_t len) -{ -#if defined _WIN32 && !defined __CYGWIN__ - (void) SecureZeroMemory (s, len); -#elif HAVE_EXPLICIT_MEMSET - explicit_memset (s, '\0', len); -#elif HAVE_MEMSET_S - (void) memset_s (s, len, '\0', len); -#elif defined __GNUC__ && !defined __clang__ - memset (s, '\0', len); - /* Compiler barrier. */ - asm volatile ("" ::: "memory"); -#elif defined __clang__ - memset (s, '\0', len); - /* Compiler barrier. */ - /* With asm ("" ::: "memory") LLVM analyzes uses of 's' and finds that the - whole thing is dead and eliminates it. Use 'g' to work around this - problem. See . */ - __asm__ volatile ("" : : "g"(s) : "memory"); -#else - /* Invoke memset through a volatile function pointer. This defeats compiler - optimizations. */ - void * (* const volatile volatile_memset) (void *, int, size_t) = memset; - (void) volatile_memset (s, '\0', len); -#endif -} diff --git a/lib/malloc/scratch_buffer_dupfree.c b/lib/malloc/scratch_buffer_dupfree.c deleted file mode 100644 index 0d31a765d5d..00000000000 --- a/lib/malloc/scratch_buffer_dupfree.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Variable-sized buffer with on-stack default allocation. - Copyright (C) 2020-2025 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC -# include -#endif - -#include -#include - -void * -__libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) -{ - void *data = buffer->data; - if (data == buffer->__space.__c) - { - void *copy = malloc (size); - return copy != NULL ? memcpy (copy, data, size) : NULL; - } - else - { - void *copy = realloc (data, size); - return copy != NULL ? copy : data; - } -} -libc_hidden_def (__libc_scratch_buffer_dupfree) diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h deleted file mode 100644 index 808e97b8cae..00000000000 --- a/lib/xalloc-oversized.h +++ /dev/null @@ -1,66 +0,0 @@ -/* xalloc-oversized.h -- memory allocation size checking - - Copyright (C) 1990-2000, 2003-2004, 2006-2025 Free Software - Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef XALLOC_OVERSIZED_H_ -#define XALLOC_OVERSIZED_H_ - -#include -#include - -/* True if N * S does not fit into both ptrdiff_t and size_t. - N and S should be nonnegative and free of side effects. - This expands to a constant expression if N and S are both constants. - By gnulib convention, SIZE_MAX represents overflow in size_t - calculations, so the conservative size_t-based dividend to use here - is SIZE_MAX - 1. */ -#define __xalloc_oversized(n, s) \ - ((s) != 0 \ - && (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) - -/* Return 1 if and only if an array of N objects, each of size S, - cannot exist reliably because its total size in bytes would exceed - MIN (PTRDIFF_MAX, SIZE_MAX - 1). - - N and S should be nonnegative and free of side effects. - - Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can - misbehave if N and S are both narrower than ptrdiff_t and size_t, - and can be rewritten as (xalloc_oversized (N, S) ? NULL - : malloc (N * (size_t) S)). - - This is a macro, not a function, so that it works even if an - argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ -#if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX -# define xalloc_oversized(n, s) \ - __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) -#elif 5 <= __GNUC__ && !defined __clang__ && !defined __ICC \ - && PTRDIFF_MAX < SIZE_MAX -# define xalloc_oversized(n, s) \ - (__builtin_constant_p (n) && __builtin_constant_p (s) \ - ? __xalloc_oversized (n, s) \ - : __extension__ \ - ({ ptrdiff_t __xalloc_count; \ - __builtin_mul_overflow (n, s, &__xalloc_count); })) - -/* Other compilers use integer division; this may be slower but is - more portable. */ -#else -# define xalloc_oversized(n, s) __xalloc_oversized (n, s) -#endif - -#endif /* !XALLOC_OVERSIZED_H_ */ diff --git a/m4/eealloc.m4 b/m4/eealloc.m4 deleted file mode 100644 index d26eb3060d5..00000000000 --- a/m4/eealloc.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# eealloc.m4 -# serial 3 -dnl Copyright (C) 2003, 2009-2025 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_EEALLOC], -[ - AC_REQUIRE([gl_EEMALLOC]) - AC_REQUIRE([gl_EEREALLOC]) -]) - -AC_DEFUN([gl_EEMALLOC], -[ - _AC_FUNC_MALLOC_IF( - [gl_cv_func_malloc_0_nonnull=1], - [gl_cv_func_malloc_0_nonnull=0]) - AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], - [If malloc(0) is != NULL, define this to 1. Otherwise define this - to 0.]) -]) - -AC_DEFUN([gl_EEREALLOC], -[ - _AC_FUNC_REALLOC_IF( - [gl_cv_func_realloc_0_nonnull=1], - [gl_cv_func_realloc_0_nonnull=0]) - AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], - [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this - to 0.]) -]) diff --git a/m4/explicit_bzero.m4 b/m4/explicit_bzero.m4 deleted file mode 100644 index 6fa2eda9f6b..00000000000 --- a/m4/explicit_bzero.m4 +++ /dev/null @@ -1,23 +0,0 @@ -dnl Copyright 2017-2025 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_EXPLICIT_BZERO], -[ - AC_REQUIRE([gl_STRING_H_DEFAULTS]) - - dnl Persuade glibc to declare explicit_bzero. - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_FUNCS_ONCE([explicit_bzero]) - if test $ac_cv_func_explicit_bzero = no; then - HAVE_EXPLICIT_BZERO=0 - fi -]) - -AC_DEFUN([gl_PREREQ_EXPLICIT_BZERO], -[ - AC_CHECK_FUNCS([explicit_memset]) - AC_CHECK_FUNCS_ONCE([memset_s]) -]) diff --git a/m4/st_dm_mode.m4 b/m4/st_dm_mode.m4 deleted file mode 100644 index 56748c385f0..00000000000 --- a/m4/st_dm_mode.m4 +++ /dev/null @@ -1,24 +0,0 @@ -# serial 6 - -# Copyright (C) 1998-1999, 2001, 2009-2025 Free Software Foundation, -# Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Define HAVE_ST_DM_MODE if struct stat has an st_dm_mode member. - -AC_DEFUN([AC_STRUCT_ST_DM_MODE], - [AC_CACHE_CHECK([for st_dm_mode in struct stat], [ac_cv_struct_st_dm_mode], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -#include -#include ]], [[struct stat s; s.st_dm_mode;]])], - [ac_cv_struct_st_dm_mode=yes], - [ac_cv_struct_st_dm_mode=no])]) - - if test $ac_cv_struct_st_dm_mode = yes; then - AC_DEFINE([HAVE_ST_DM_MODE], [1], - [Define if struct stat has an st_dm_mode member.]) - fi - ] -) diff --git a/m4/year2038.m4 b/m4/year2038.m4 deleted file mode 100644 index 47693fb8f3a..00000000000 --- a/m4/year2038.m4 +++ /dev/null @@ -1,132 +0,0 @@ -# year2038.m4 serial 8 -dnl Copyright (C) 2017-2025 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Attempt to ensure that 'time_t' can go past the year 2038 and that -dnl the functions 'time', 'stat', etc. work with post-2038 timestamps. - -m4_ifdef([AC_SYS_YEAR2038], [ - AC_DEFUN([gl_YEAR2038_EARLY]) - AC_DEFUN([gl_YEAR2038], [AC_SYS_YEAR2038]) - AC_DEFUN([gl_YEAR2038_BODY], [_AC_SYS_YEAR2038]) -], [ - -AC_DEFUN([gl_YEAR2038_EARLY], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - case "$host_os" in - mingw*) - AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1], - [For 64-bit time_t on 32-bit mingw.]) - ;; - esac -]) - -# gl_YEAR2038_TEST_INCLUDES -# ------------------------- -AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], -[[ - #include - /* Check that time_t can represent 2**32 - 1 correctly. */ - #define LARGE_TIME_T \\ - ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) - int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 - && LARGE_TIME_T % 65537 == 0) - ? 1 : -1]; -]]) - -# gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE) ------------------------------------------ -AC_DEFUN([gl_YEAR2038_BODY], -[ - AC_ARG_ENABLE([year2038], - [ --disable-year2038 omit support for timestamps past the year 2038]) - AS_IF([test "$enable_year2038" != no], - [ - dnl On many systems, time_t is already a 64-bit type. - dnl On those systems where time_t is still 32-bit, it requires kernel - dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, - dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM. - dnl - dnl On native Windows, the system include files define types __time32_t - dnl and __time64_t. By default, time_t is an alias of - dnl - __time32_t on 32-bit mingw, - dnl - __time64_t on 64-bit mingw and on MSVC (since MSVC 8). - dnl But when compiling with -D__MINGW_USE_VC2005_COMPAT, time_t is an - dnl alias of __time64_t. - dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of - dnl __time32_t. - AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038], - [AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], - [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no]) - ]) - if test "$gl_cv_type_time_t_y2038" = no; then - AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], - [gl_cv_type_time_t_bits_macro], - [AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([[#define _TIME_BITS 64 - #define _FILE_OFFSET_BITS 64 - ]gl_YEAR2038_TEST_INCLUDES])], - [gl_cv_type_time_t_bits_macro=yes], - [gl_cv_type_time_t_bits_macro=no]) - ]) - if test "$gl_cv_type_time_t_bits_macro" = yes; then - AC_DEFINE([_TIME_BITS], [64], - [Number of bits in a timestamp, on hosts where this is settable.]) - dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. - AC_DEFINE([_FILE_OFFSET_BITS], [64], - [Number of bits in a file offset, on hosts where this is settable.]) - gl_cv_type_time_t_y2038=yes - fi - fi - if test $gl_cv_type_time_t_y2038 = no; then - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifdef _USE_32BIT_TIME_T - int ok; - #else - error fail - #endif - ]])], - [AC_MSG_FAILURE( - [The 'time_t' type stops working after January 2038. - Remove _USE_32BIT_TIME_T from the compiler flags.])], - [# If not cross-compiling and $1 says we should check, - # and 'touch' works with a large timestamp, then evidently wider time_t - # is desired and supported, so fail and ask the builder to fix the - # problem. Otherwise, just warn the builder. - m4_ifval([$1], - [if test $cross_compiling = no \ - && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then - case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in - *'Feb 7 2106'* | *'Feb 7 17:10'*) - AC_MSG_FAILURE( - [The 'time_t' type stops working after January 2038, - and your system appears to support a wider 'time_t'. - Try configuring with 'CC="${CC} -m64"'. - To build with a 32-bit time_t anyway (not recommended), - configure with '--disable-year2038'.]);; - esac - rm -f conftest.time - fi]) - if test "$gl_warned_about_y2038" != yes; then - AC_MSG_WARN( - [The 'time_t' type stops working after January 2038, - and this package needs a wider 'time_t' type - if there is any way to access timestamps after that. - Configure with 'CC="${CC} -m64"' perhaps?]) - gl_warned_about_y2038=yes - fi - ]) - fi]) -]) - -AC_DEFUN([gl_YEAR2038], -[ - gl_YEAR2038_BODY([require-year2038-safe]) -]) - -]) # m4_ifndef AC_SYS_YEAR2038 commit cc05493483a005074608f31a54e496599bd3b296 Author: Sean Whitton Date: Tue Dec 9 19:14:41 2025 +0000 Display done message for async checkins too * lisp/vc/vc.el (vc-checkin): When an async checkin completes, display the same "Checking in...done" message. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 5e1c8b84db8..52792fc0ff3 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2147,10 +2147,15 @@ have changed; continue with old fileset?" (current-buffer)))) patch-string comment) (vc-call-backend backend 'checkin files comment rev)) - (mapc #'vc-delete-automatic-version-backups files)))) + (mapc #'vc-delete-automatic-version-backups files))) + (done-msg () + (message "Checking in %s...done" (vc-delistify files)))) (if do-async ;; Rely on `vc-set-async-update' to update properties. - (do-it) + (let ((ret (do-it))) + (when (eq (car-safe ret) 'async) + (vc-exec-after #'done-msg nil (cadr ret))) + ret) (prog2 (message "Checking in %s..." (vc-delistify files)) (with-vc-properties files (do-it) `((vc-state . up-to-date) @@ -2158,7 +2163,7 @@ have changed; continue with old fileset?" (current-buffer)))) . ,(file-attribute-modification-time (file-attributes file))) (vc-working-revision . nil))) - (message "Checking in %s...done" (vc-delistify files)))))) + (done-msg))))) 'vc-checkin-hook backend patch-string))) commit a80f45deb2c364cb5560f29de77c6cc4f3acfce2 Author: Sean Whitton Date: Tue Dec 9 18:49:17 2025 +0000 Make C-g skip counting outgoing revisions for VC-Dir * lisp/vc/vc-dir.el (vc-dir--count-outgoing): New function, factored out. (vc-dir-headers): Use it. diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 0cac2f55e65..d3dad88b7d6 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1350,6 +1350,19 @@ therefore also disable the fetching." :group 'vc :version "31.1") +(defun vc-dir--count-outgoing (backend) + "Call `vc--count-outgoing' with a delayed message and local quits." + (let ((inhibit-quit t)) + (prog1 + (with-local-quit + (with-delayed-message + (2 (substitute-command-keys + "Counting outgoing revisions ... +(\\[keyboard-quit] to skip; \ +see `vc-dir-show-outgoing-count' if this is frequently slow)")) + (ignore-errors (vc--count-outgoing backend)))) + (setq quit-flag nil)))) + (defun vc-dir-headers (backend dir) "Display the headers in the *VC-Dir* buffer. It calls the `dir-extra-headers' backend method to display backend @@ -1363,12 +1376,7 @@ specific headers." (vc-call-backend backend 'dir-extra-headers dir) "\n" (and-let* (vc-dir-show-outgoing-count - (count - (ignore-errors - (with-delayed-message - (2 (substitute-quotes "Counting outgoing revisions ... -(see `vc-dir-show-outgoing-count' if this is frequently slow)" )) - (vc--count-outgoing backend)))) + (count (vc-dir--count-outgoing backend)) (_ (plusp count))) (concat (propertize "Outgoing : " 'face 'vc-dir-header) commit 47073fa12d149200169c921a805bde1750ca635c Author: Paul Eggert Date: Tue Dec 9 09:10:36 2025 -0800 Port back to GTK2 Problem reported by Sven Joachim in: https://lists.gnu.org/r/emacs-devel/2025-12/msg00225.html * src/xterm.c (xi_frame_selected_for): Also define if !(defined USE_GTK && defined HAVE_GTK3). diff --git a/src/xterm.c b/src/xterm.c index bcb96713793..9a6131ebb7d 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -5308,7 +5308,7 @@ x_extension_initialize (struct x_display_info *dpyinfo) #ifdef HAVE_XINPUT2 -# ifdef USE_X_TOOLKIT +# if defined USE_X_TOOLKIT || !(defined USE_GTK && defined HAVE_GTK3) bool xi_frame_selected_for (struct frame *f, unsigned long event) { diff --git a/src/xterm.h b/src/xterm.h index 00b60c6e985..661f6ae78b7 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -2017,7 +2017,7 @@ extern int x_error_message_count; #ifdef HAVE_XINPUT2 extern struct xi_device_t *xi_device_from_id (struct x_display_info *, int); -# ifdef USE_X_TOOLKIT +# if defined USE_X_TOOLKIT || !(defined USE_GTK && defined HAVE_GTK3) extern bool xi_frame_selected_for (struct frame *, unsigned long); # endif # ifndef USE_GTK commit 05c1f340369bc3ceb64824326fe15d4939575665 Author: Paul Eggert Date: Tue Dec 9 09:08:42 2025 -0800 ; Fix confusing comment in xmenu.c. diff --git a/src/xmenu.c b/src/xmenu.c index 1a58b1e1427..7c46b2c2bc4 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -2876,7 +2876,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags, return SAFE_FREE_UNBIND_TO (specpdl_count, entry); } -#endif /* not USE_X_TOOLKIT */ +#endif /* not USE_X_TOOLKIT && not USE_GTK */ #ifndef MSDOS /* Detect if a dialog or menu has been posted. MSDOS has its own commit 6d818a7409ade26801f7189838a6beadfef10f20 Author: Sean Whitton Date: Tue Dec 9 15:43:40 2025 +0000 prepare-user-lisp: Fix adding to load-path * lisp/startup.el (prepare-user-lisp): Use directory-file-name when adding to load-path, as documented for the latter. diff --git a/lisp/startup.el b/lisp/startup.el index f9553018c3d..f1fb726d62b 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1259,7 +1259,7 @@ unconditionally." (dir (expand-file-name user-lisp-directory)) (backup-inhibited t) (dirs (list dir))) - (add-to-list 'load-path dir) + (add-to-list 'load-path (directory-file-name dir)) (dolist (file (directory-files-recursively dir "" t pred)) (cond ((and (file-regular-p file) (string-suffix-p ".el" file)) @@ -1269,7 +1269,7 @@ unconditionally." (when (native-comp-available-p) (native-compile-async file))))) ((file-directory-p file) - (add-to-list 'load-path file) + (add-to-list 'load-path (directory-file-name file)) (push file dirs)))) (unless just-activate (loaddefs-generate dirs autoload-file nil nil nil force)) commit bd6961d3ee18b49a940acea14f447ec926054157 Author: Rudolf Adamkovič Date: Tue Dec 9 14:57:31 2025 +0100 ; etc/NEWS: Fix unbalanced parentheses * etc/NEWS: Fix unbalanced parentheses that break `submit-emacs-patch' when Paredit is active. This happens because `lm-maintainers', which is used by `submit-emacs-patch', enables `emacs-lisp-mode' on the `NEWS' file. diff --git a/etc/NEWS b/etc/NEWS index 45c1d2865f1..2f362a155bb 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -3638,7 +3638,7 @@ if the region is inactive. The interactive specification is equivalent to - (interactive (list (use-region-beginning) (use-region-end)) + (interactive (list (use-region-beginning) (use-region-end))) ** Toolkit commit 244dc6f15e333918db67f15f6b83d9508d0779e2 Author: Przemysław Kryger Date: Tue Dec 9 09:20:44 2025 +0000 Update email and rename packages and buffers in package-vc-tests * test/lisp/emacs-lisp/package-vc-tests.el (package-vc-tests-packages): Rename test packages to avoid suffix being treated as a version number by `package--description-file'. (package-vc-tests-add): Ensure suffix capitalisation remains as original when calling `replace-regexp-in-string'. (package-vc-tests-create-repository): Fix typo in temporary email and use a reserved TLD. (package-vc-tests-environment-tear-down): Rename preserved buffers to avoid conflicts between tests. diff --git a/test/lisp/emacs-lisp/package-vc-tests.el b/test/lisp/emacs-lisp/package-vc-tests.el index 6430848b094..c06dce71e03 100644 --- a/test/lisp/emacs-lisp/package-vc-tests.el +++ b/test/lisp/emacs-lisp/package-vc-tests.el @@ -94,47 +94,47 @@ the package. Otherwise each entry is in a form of PKG." (list ;; checkout and install with `package-vc-install' (on ELPA) (test-package-def - test-package-1 package-user-dir nil + test-package-one package-user-dir nil package-vc-tests-install-from-elpa) ;; checkout and install with `package-vc-install' (not on ELPA) (test-package-def - test-package-2 package-user-dir nil + test-package-two package-user-dir nil package-vc-tests-install-from-spec) ;; checkout with `package-vc-checktout' and install with ;; `package-vc-install-from-checkout' (on ELPA) (test-package-def - test-package-3 package-vc-tests-dir nil + test-package-three package-vc-tests-dir nil package-vc-tests-checkout-from-elpa-install-from-checkout) ;; checkout with git and install with ;; `package-vc-install-from-checkout' (test-package-def - test-package-4 package-vc-tests-dir nil + test-package-four package-vc-tests-dir nil package-vc-tests-checkout-with-git-install-from-checkout) ;; sources in "lisp" sub directory, checkout and install with ;; `package-vc-install' (not on ELPA) (test-package-def - test-package-5 package-user-dir "lisp" + test-package-five package-user-dir "lisp" package-vc-tests-install-from-spec) ;; sources in "lisp" sub directory, checkout with git and ;; install with `package-vc-install-from-checkout' (test-package-def - test-package-6 package-vc-tests-dir "lisp" + test-package-six package-vc-tests-dir "lisp" package-vc-tests-checkout-with-git-install-from-checkout) ;; sources in "src" sub directory, checkout and install with ;; `package-vc-install' (on ELPA) (test-package-def - test-package-7 package-user-dir "src" + test-package-seven package-user-dir "src" package-vc-tests-install-from-elpa) ;; sources in "src" sub directory, checkout with ;; `package-vc-checktout' and install with ;; `package-vc-install-from-checkout' (on ELPA) (test-package-def - test-package-8 package-vc-tests-dir nil + test-package-eight package-vc-tests-dir nil package-vc-tests-checkout-from-elpa-install-from-checkout) ;; sources in "custom-dir" sub directory, checkout and install ;; with `package-vc-install' (on ELPA) (test-package-def - test-package-9 package-user-dir "custom-dir" + test-package-nine package-user-dir "custom-dir" package-vc-tests-install-from-elpa)))))) ;; TODO: add test for deleting packages, with asserting @@ -155,7 +155,8 @@ When LISP-DIR is non-nil place the NAME file under LISP-DIR." (: ".in" string-end)) ) (lambda (mat) (if (string= mat "SUFFIX") suffix "")) - in-file))) + in-file + :fixedcase))) (file-name-concat lisp-dir file)))) (unless (zerop (call-process "sed" (expand-file-name in-file resource-dir) @@ -171,7 +172,13 @@ If LISP-DIR is non-nil place sources of the package in LISP-DIR." (repo-dir (expand-file-name (file-name-concat "repo" name) package-vc-tests-dir))) (make-directory (expand-file-name (or lisp-dir ".") repo-dir) t) - (let ((default-directory repo-dir)) + (let ((default-directory repo-dir) + (process-environment + (append (list + (format "EMAIL=%s@example.com" name) + (format "GIT_AUTHOR_NAME=%s" name) + (format "GIT_COMMITTER_NAME=%s" name)) + process-environment))) (vc-git-command nil 0 nil "init" "-b" "master") (package-vc-tests-add suffix "test-package-SUFFIX-lib-v0.1.el.in" lisp-dir) @@ -530,10 +537,20 @@ when PKG matches `package-vc-tests-preserve-artefacts'." (if (or (memq package-vc-tests-preserve-artefacts `(t ,pkg)) (and (listp package-vc-tests-preserve-artefacts) (memq pkg package-vc-tests-preserve-artefacts))) - (message - "package-vc-tests: preserving temporary directory: %s%s" - package-vc-tests-dir - (and buffers (format " and buffers: %s" buffers))) + (let ((buffers + (mapconcat (lambda (buffer) + (with-current-buffer buffer + (let* ((old-name (buffer-name)) + (new-name (make-temp-name + (string-trim old-name)))) + (rename-buffer new-name) + (concat old-name " -> " new-name)))) + buffers + ", "))) + (message + "package-vc-tests: preserving temporary directory: %s%s" + package-vc-tests-dir + (and buffers (format " and buffers: %s" buffers)))) (delete-directory package-vc-tests-dir t) (dolist (buffer buffers) (kill-buffer buffer))))) commit 5731343ffe655cd3dc8f78bba1ece454304d7fe7 Author: Przemysław Kryger Date: Tue Dec 9 14:06:19 2025 +0000 Update email in vc-tests and vc-git-tests * test/lisp/vc/vc-git-tests.el (vc-git-test--with-repo): Use example.com, domain following RFC 2606. * test/lisp/vc/vc-tests/vc-tests.el (vc-test--with-author-identity): Use example.com, domain following RFC 2606. diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el index eca7baaa88e..cdca3591f4e 100644 --- a/test/lisp/vc/vc-git-tests.el +++ b/test/lisp/vc/vc-git-tests.el @@ -96,7 +96,7 @@ allow `git commit' to determine identities for authors and committers." (declare (indent 1)) `(ert-with-temp-directory ,name (let ((default-directory ,name) - (process-environment (append '("EMAIL=john@doe.ee" + (process-environment (append '("EMAIL=john.doe@example.com" "GIT_AUTHOR_NAME=A" "GIT_COMMITTER_NAME=C") process-environment))) diff --git a/test/lisp/vc/vc-tests/vc-tests.el b/test/lisp/vc/vc-tests/vc-tests.el index 6f6d7a161b5..151efbec4e6 100644 --- a/test/lisp/vc/vc-tests/vc-tests.el +++ b/test/lisp/vc/vc-tests/vc-tests.el @@ -604,7 +604,7 @@ This checks also `vc-backend' and `vc-responsible-backend'." ;; Eg if the user account has no GECOS, git commit can fail with ;; status 128 "fatal: empty ident name". (when (memq ,backend '(Bzr Git)) - (push "EMAIL=john@doe.ee" process-environment)) + (push "EMAIL=joh.doe@example.com" process-environment)) (when (eq ,backend 'Git) (setq process-environment (append '("GIT_AUTHOR_NAME=A" "GIT_COMMITTER_NAME=C") commit 0f3947b379d650883f811377729e89cb05f87ee0 Merge: c5bc4082b53 8d1a79bc9c7 Author: Eli Zaretskii Date: Tue Dec 9 14:32:03 2025 +0200 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit c5bc4082b53e47bfbe274fc55feb3665553b1f2c Author: Eli Zaretskii Date: Tue Dec 9 14:31:14 2025 +0200 ; Fix a typo in xterm.[ch]. diff --git a/src/xterm.c b/src/xterm.c index ed8cbadde41..bcb96713793 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -5308,7 +5308,7 @@ x_extension_initialize (struct x_display_info *dpyinfo) #ifdef HAVE_XINPUT2 -# ifdef HAVE_X_TOOLKIT +# ifdef USE_X_TOOLKIT bool xi_frame_selected_for (struct frame *f, unsigned long event) { diff --git a/src/xterm.h b/src/xterm.h index a1f86fd53d1..00b60c6e985 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -2017,7 +2017,7 @@ extern int x_error_message_count; #ifdef HAVE_XINPUT2 extern struct xi_device_t *xi_device_from_id (struct x_display_info *, int); -# ifdef HAVE_X_TOOLKIT +# ifdef USE_X_TOOLKIT extern bool xi_frame_selected_for (struct frame *, unsigned long); # endif # ifndef USE_GTK commit 8d1a79bc9c74967ef1ae38b23e0580c875e786f9 Author: Gerd Möllmann Date: Tue Dec 9 02:52:57 2025 +0100 Don't make a tty child frame visible by selecting it (bug#79960) * lisp/xt-mouse.el (turn-on-xterm-mouse-tracking-on-terminal): Use the tty-top-frame to avoid accidentally making an invisible child frame visible by selecting it diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index 89f9bbab608..c61dcb0c383 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -515,7 +515,9 @@ enable, ?l to disable)." (unless (terminal-parameter terminal 'xterm-mouse-mode) ;; Simulate selecting a terminal by selecting one of its frames ;; so that we can set the terminal-local `input-decode-map'. - (with-selected-frame (car (frames-on-display-list terminal)) + ;; Use the tty-top-frame to avoid accidentally making an invisible + ;; child frame visible by selecting it (bug#79960). + (with-selected-frame (tty-top-frame terminal) (define-key input-decode-map "\e[M" 'xterm-mouse-translate) (define-key input-decode-map "\e[<" 'xterm-mouse-translate-extended)) (let ((enable (xterm-mouse-tracking-enable-sequence)) commit 57ab746257de21f91c55c873de04aa8b368fcfe1 Author: Przemysław Kryger Date: Tue Dec 9 11:15:36 2025 +0100 Add `lexical-binding' cookie to generated files by package-vc * lisp/emacs-lisp/package-vc.el (package-vc--generate-description-file, package-vc--unpack-1): Add `lexical-binding:t' cookie. diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index c536bdd642b..8338e98d9f0 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -329,7 +329,7 @@ asynchronously." (replace-regexp-in-string "-pkg\\.el\\'" ".el" (file-name-nondirectory pkg-file)) - " -*- no-byte-compile: t -*-\n" + " -*- no-byte-compile: t; lexical-binding: t -*-\n" (prin1-to-string (nconc (list 'define-package @@ -585,7 +585,7 @@ building documentation and marking the package as installed." (unless (file-equal-p lisp-dir pkg-dir) (write-region (concat - ";; Autoload indirection for package-vc\n\n" + ";; Autoload indirection for package-vc -*- lexical-binding: t -*-\n\n" (prin1-to-string ;; The indirection is just a single load statement to the ;; actual file (we don't want to use symbolic links due to