Compare commits

..

1 commit

25 changed files with 12650 additions and 3308 deletions

17
.gitignore vendored
View file

@ -1,6 +1,5 @@
/bodhi.template.last
/emacs-*.src.rpm
/emacs-23.3a.tar.bz2
/php-mode.el
/emacs-24.0.92.tar.gz
/emacs-24.0.93.tar.gz
/emacs-24.0.94.tar.gz
@ -34,17 +33,3 @@
/emacs-28.1.tar.xz.sig
/emacs-28.2.tar.xz
/emacs-28.2.tar.xz.sig
/emacs-29.1.tar.xz
/emacs-29.1.tar.xz.sig
/emacs-29.3.tar.xz
/emacs-29.3.tar.xz.sig
/emacs-29.4.tar.xz
/emacs-29.4.tar.xz.sig
/emacs-30.0.91.tar.xz
/emacs-30.0.91.tar.xz.sig
/php-mode.el
/results_emacs/
/emacs-30.1.tar.xz
/emacs-30.1.tar.xz.sig
/emacs-30.2.tar.xz
/emacs-30.2.tar.xz.sig

View file

@ -1,31 +0,0 @@
From 164e45695f9784469ff2f66cafcd6bc927c246be Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Tue, 18 Mar 2025 13:16:15 +0000
Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20specify=20StartupWMClass=20in?=
=?UTF-8?q?=20emacs.desktop?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
See the explanation at
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49505#67. In summary, the
value we were providing doesnt work on Wayland, and the default should
be fine.
* etc/emacs.desktop: Dont specify StartupWMClass
---
etc/emacs.desktop | 1 -
1 file changed, 1 deletion(-)
diff --git a/etc/emacs.desktop b/etc/emacs.desktop
index 0d7cac14da5..16ad3c7eb48 100644
--- a/etc/emacs.desktop
+++ b/etc/emacs.desktop
@@ -9,4 +9,3 @@ Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupNotify=true
-StartupWMClass=Emacs
--
2.48.1

View file

@ -1,86 +0,0 @@
From 6f29ac0393bb0bb70c8122d9f1bda0ae5d8cee24 Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Thu, 26 Sep 2024 13:20:06 +0100
Subject: [PATCH] Pong and Tetris are excluded.
---
doc/emacs/ack.texi | 2 +-
doc/emacs/misc.texi | 7 +------
lisp/menu-bar.el | 6 ------
test/src/doc-tests.el | 4 ++--
4 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index 5ec5cd53fa6..26f174831ca 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -228,7 +228,7 @@ Acknowledgments
@item
Glynn Clements provided @file{gamegrid.el} and a couple of games that
-use it, Snake and Tetris.
+use it, including Snake.
@item
Andrew Cohen wrote @file{spam-wash.el}, to decode and clean email before
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 41e37fd094e..38e281bf59c 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -3248,14 +3248,9 @@ Amusements
nato-region} converts the text in the region to NATO phonetic
alphabet; @kbd{M-x denato-region} converts it back.
-@findex pong
-@cindex Pong game
-@findex tetris
-@cindex Tetris
@findex snake
@cindex Snake
- @kbd{M-x pong}, @kbd{M-x snake} and @kbd{M-x tetris} are
-implementations of the well-known Pong, Snake and Tetris games.
+ @kbd{M-x snake} is an implementation of the well-known Snake game.
@findex solitaire
@cindex solitaire
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index bcfa83cf8e4..1b0a0bce6a5 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -1658,18 +1658,12 @@ menu-bar-games-menu
(bindings--define-key menu [zone]
'(menu-item "Zone Out" zone
:help "Play tricks with Emacs display when Emacs is idle"))
- (bindings--define-key menu [tetris]
- '(menu-item "Tetris" tetris
- :help "Falling blocks game"))
(bindings--define-key menu [solitaire]
'(menu-item "Solitaire" solitaire
:help "Get rid of all the stones"))
(bindings--define-key menu [snake]
'(menu-item "Snake" snake
:help "Move snake around avoiding collisions"))
- (bindings--define-key menu [pong]
- '(menu-item "Pong" pong
- :help "Bounce the ball to your opponent"))
(bindings--define-key menu [mult]
'(menu-item "Multiplication Puzzle" mpuz
:help "Exercise brain with multiplication"))
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
index b41a7ac5fb6..24befb737bc 100644
--- a/test/src/doc-tests.el
+++ b/test/src/doc-tests.el
@@ -34,8 +34,8 @@ doc-tests-documentation/autoloaded-macro
(ert-deftest doc-tests-documentation/autoloaded-defun ()
(skip-unless noninteractive)
- (should (autoloadp (symbol-function 'tetris)))
- (should (stringp (documentation 'tetris)))) ; See Bug#52969.
+ (should (autoloadp (symbol-function 'doctor)))
+ (should (stringp (documentation 'doctor)))) ; See Bug#52969.
(ert-deftest doc-tests-quoting-style ()
(should (memq (text-quoting-style) '(grave straight curve))))
--
2.46.1

View file

@ -1,106 +0,0 @@
From 16f0be6354ea13331859c861fa7d423a0b54bec7 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii <eliz@gnu.org>
Date: Fri, 17 Oct 2025 14:15:41 +0300
Subject: [PATCH] Support Tree-sitter version 0.26 and later
* src/treesit.c (init_treesit_functions)
[TREE_SITTER_LANGUAGE_VERSION >= 15]: Define prototype for, and
load 'ts_language_abi_version' instead of the deprecated (and
removed in tree-sitter 0.26) 'ts_language_version'.
(ts_language_abi_version) [TREE_SITTER_LANGUAGE_VERSION >= 15]:
Define on WINDOWSNT, instead of 'ts_language_version'.
(treesit_language_abi_version): New compatibility function.
(treesit_load_language, Ftreesit_language_abi_version): Use
'treesit_language_abi_version' instead of 'ts_language_version'.
(Bug#79627)
---
src/treesit.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/treesit.c b/src/treesit.c
index e2986c186b8..4d6bf9a5dbd 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -34,7 +34,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc.
# include "w32common.h"
/* In alphabetical order. */
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+#undef ts_language_abi_version
+#else
#undef ts_language_version
+#endif
#undef ts_node_child
#undef ts_node_child_by_field_name
#undef ts_node_child_count
@@ -89,7 +93,11 @@ Copyright (C) 2021-2025 Free Software Foundation, Inc.
#undef ts_tree_get_changed_ranges
#undef ts_tree_root_node
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+DEF_DLL_FN (uint32_t, ts_language_abi_version, (const TSLanguage *));
+#else
DEF_DLL_FN (uint32_t, ts_language_version, (const TSLanguage *));
+#endif
DEF_DLL_FN (TSNode, ts_node_child, (TSNode, uint32_t));
DEF_DLL_FN (TSNode, ts_node_child_by_field_name,
(TSNode, const char *, uint32_t));
@@ -166,7 +174,11 @@ init_treesit_functions (void)
if (!library)
return false;
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+ LOAD_DLL_FN (library, ts_language_abi_version);
+#else
LOAD_DLL_FN (library, ts_language_version);
+#endif
LOAD_DLL_FN (library, ts_node_child);
LOAD_DLL_FN (library, ts_node_child_by_field_name);
LOAD_DLL_FN (library, ts_node_child_count);
@@ -224,7 +236,11 @@ init_treesit_functions (void)
return true;
}
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+#define ts_language_abi_version fn_ts_language_abi_version
+#else
#define ts_language_version fn_ts_language_version
+#endif
#define ts_node_child fn_ts_node_child
#define ts_node_child_by_field_name fn_ts_node_child_by_field_name
#define ts_node_child_count fn_ts_node_child_count
@@ -632,6 +648,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Object lib_base_name,
}
}
+/* This function is a compatibility shim. Tree-sitter 0.25 introduced
+ ts_language_abi_version as a replacement for ts_language_version, and
+ tree-sitter 0.26 removed ts_language_version. Here we use the fact
+ that 0.25 bumped TREE_SITTER_LANGUAGE_VERSION to 15, to use the new
+ function instead of the old one, when Emacs is compiled against
+ tree-sitter version 0.25 or newer. */
+static uint32_t
+treesit_language_abi_version (const TSLanguage *ts_lang)
+{
+#if TREE_SITTER_LANGUAGE_VERSION >= 15
+ return ts_language_abi_version (ts_lang);
+#else
+ return ts_language_version (ts_lang);
+#endif
+}
+
/* Load the dynamic library of LANGUAGE_SYMBOL and return the pointer
to the language definition.
@@ -817,7 +849,7 @@ DEFUN ("treesit-language-abi-version", Ftreesit_language_abi_version,
&signal_data);
if (ts_language == NULL)
return Qnil;
- uint32_t version = ts_language_version (ts_language);
+ uint32_t version = treesit_language_abi_version (ts_language);
return make_fixnum((ptrdiff_t) version);
}
}
--
2.52.0

View file

@ -1,63 +0,0 @@
From 7099578f18b1ea6a168b1883fa7a4ac7f49fc08f Mon Sep 17 00:00:00 2001
From: Peter Oliver <git@mavit.org.uk>
Date: Sun, 14 Jul 2024 20:47:14 +0100
Subject: [PATCH 2/2] Fall back to the terminal from pure GTK when no display
is available
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* src/dispnew.c (init_display_interactive): Only use PGTK windowing if
at least one of the environment variables WAYLAND_DISPLAY, DISPLAY,
BROADWAY_DISPLAY is set. (Bug#63555)
This patch is not suitable for merging, because it doesnt consider
what happens if you try to use PGTK on Windows or MacOS.
---
src/dispnew.c | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/dispnew.c b/src/dispnew.c
index 7cf2b49273c..481d33a7302 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -6557,10 +6557,33 @@ init_display_interactive (void)
#endif
#ifdef HAVE_PGTK
- if (!inhibit_window_system && !will_dump_p ())
+ if (!inhibit_window_system)
{
- Vinitial_window_system = Qpgtk;
- return;
+ if (!display_arg && !will_dump_p ())
+ {
+ int i;
+ const char *gdk_display_variables[] = {
+ "WAYLAND_DISPLAY",
+ "DISPLAY",
+ "BROADWAY_DISPLAY",
+ };
+ size_t n = ARRAYELTS (gdk_display_variables);
+
+ for (i = 0; i < n; i++)
+ {
+ char *display;
+ display = getenv (gdk_display_variables[i]);
+ if (display != 0 && *display != 0)
+ {
+ display_arg = 1;
+ break;
+ }
+ }
+ }
+ if (display_arg) {
+ Vinitial_window_system = Qpgtk;
+ return;
+ }
}
#endif
--
2.45.2

View file

@ -1,31 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: 12BB 9B40 0EE3 F772 8286 4D18 272B 5C54 E015 416A
Comment: Andrea Corallo <acorallo@gnu.org>
xsFNBGa/sd8BEAC7hQAGte6YvxDaiTutpSkVrb+zJBGcEW/AroE/dduBn8mfxa/Y
i71C2GV/y03aibdaO+cXPULAkkuJVDnFk57hn3w9zo98LzqDSEgNFcAUSSSQdyj7
Wn3J26doRpFQKnv3dbx1yZRZccbLgt/AH6hzhvNjFbYZ53LYE9rKzUYLTNHDhUI4
QTda2PvgWoySXcjBKhyIgg9zZLSc2w4ZwhO9WDVai58xNsl+YyU2HqVPpJZSCX0j
liIooHOEL2D601ByrWmePRGFR0tD6V9xj5jWuusErb78r57NOPsRCRKCKcg/v/kl
fA5+byvanw27PDa8zoheXgF41uDf96keOQPBve3TE1Oy4x+G55zuP9KNQ5aSCG49
x0Cc7BET23JmiWUnz1GUbM7vka5ell+smmq+kTDtK47L+4N954a6CR0esPLJMLF6
Ub2y8SY2XPn1Bv8lsN77f0L5yyhnK72H+mf4fS/qjJlN0F+DWx49Z8it9rbG8Atc
X6Vqzv5qaDPbCpAqdqs2qrv3nAdvYOlwxmVh6Hxq1EOFT2v49dmn3viVBNnuT7yW
tyvpTDyvfLKOnfH+OLLuqPUFZnxt8mU8ieNEnvIYojSOFyddJAh2uOI3sqjLHrDg
PRAYFv9jp7K7pk+S054mdF31qD+TTxjWQtNI8Sxh/Q71Vtz7JyqYWd/JCQARAQAB
zSFBbmRyZWEgQ29yYWxsbyA8YWNvcmFsbG9AZ251Lm9yZz7CwZQEEwEKAD4WIQQS
u5tADuP3coKGTRgnK1xU4BVBagUCZr+x3wIbAwUJA8JnAAULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRAnK1xU4BVBaj/0D/4ogwPjg6Cwyi8pmRYx9gOjQNIRtjOb
2aHFYQs9luFy20Wlt/7QtelDH+NLCAb5PKvhDI3Sw+SIoheAndhbzqW7GEW5J9G7
10PPkCUCjbicJOKsUkMv03wS6IrelUYzgjbmGYRo2vYcSb+BHXQR4MuxDSL/2vPD
LHYKwij9K+FozgJVfjq5n97l/wsGsc/orRiST23ykiXyCZweulGLhXnoCghHrnB1
B+xBaCv3P1GW/BZZgXGPQ+1XMOsFlP951vfjirlHnJMvMDkMkNhT6Qh282jTokWN
TVQqKUv5tpdNkId+QmUhzC+DcfoOsegB3wWa6VQ/w1cG9mkoPUTT8Y8fo4FXnWwV
U4472JuZdQYFDAKEnTsW1TRNgBb5xLNNCUmDUVDndgn1WtZIZx18QBtJ1CHhycaN
C68McWuvvENhEM8clUXIHundgeDce4gcQC23Un7NT0PbNTwvGPfBSaoVax5ZVHuZ
Tr2pTHqAqqi4YLnrE5R06OIWQzVOVs5NZplDPZGXZOxryXa3ssLxjL2VYbo4AAUZ
h3fyVOzNHlGLT3Egj4XHDuDFcswUimD5SmrqQQwg94CgXExDisqH9Uo8L7Zxf/AG
UpIsxpDv219GOdTffbzl01W6oaP4obiTwMFUaQ7ljdCfq19KYdo576touTU+/48q
7AjjL28Eznhz0Q==
=goOm
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -1,53 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: 17E9 0D52 1672 C046 31B1 183E E78D AE0F 3115 E06B
Comment: Eli Zaretskii <eliz@gnu.org>
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
=+3ql
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -17,321 +17,241 @@ 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
ZOTZGRs=
=fO4L
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
=gNkS
-----END PGP PUBLIC KEY BLOCK-----

707
cdefs.h Normal file
View file

@ -0,0 +1,707 @@
/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
Copyright The GNU Toolchain Authors.
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
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_CDEFS_H
#define _SYS_CDEFS_H 1
/* We are almost always included from features.h. */
#ifndef _FEATURES_H
# include <features.h>
#endif
/* The GNU libc does not support any K&R compilers or the traditional mode
of ISO C compilers anymore. Check for some of the combinations not
supported anymore. */
#if defined __GNUC__ && !defined __STDC__
# error "You need a ISO C conforming compiler to use the glibc headers"
#endif
/* Some user header file might have defined this before. */
#undef __P
#undef __PMT
/* Compilers that lack __has_attribute may object to
#if defined __has_attribute && __has_attribute (...)
even though they do not need to evaluate the right-hand side of the &&.
Similarly for __has_builtin, etc. */
#if (defined __has_attribute \
&& (!defined __clang_minor__ \
|| (defined __apple_build_version__ \
? 6000000 <= __apple_build_version__ \
: 3 < __clang_major__ + (5 <= __clang_minor__))))
# define __glibc_has_attribute(attr) __has_attribute (attr)
#else
# define __glibc_has_attribute(attr) 0
#endif
#ifdef __has_builtin
# define __glibc_has_builtin(name) __has_builtin (name)
#else
# define __glibc_has_builtin(name) 0
#endif
#ifdef __has_extension
# define __glibc_has_extension(ext) __has_extension (ext)
#else
# define __glibc_has_extension(ext) 0
#endif
#if defined __GNUC__ || defined __clang__
/* All functions, except those with callbacks or those that
synchronize memory, are leaf functions. */
# if __GNUC_PREREQ (4, 6) && !defined _LIBC
# define __LEAF , __leaf__
# define __LEAF_ATTR __attribute__ ((__leaf__))
# else
# define __LEAF
# define __LEAF_ATTR
# endif
/* GCC can always grok prototypes. For C++ programs we add throw()
to help it optimize the function calls. But this only works with
gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions
as non-throwing using a function attribute since programs can use
the -fexceptions options for C code as well. */
# if !defined __cplusplus \
&& (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__))
# define __THROW __attribute__ ((__nothrow__ __LEAF))
# define __THROWNL __attribute__ ((__nothrow__))
# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct
# else
# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
# if __cplusplus >= 201103L
# define __THROW noexcept (true)
# else
# define __THROW throw ()
# endif
# define __THROWNL __THROW
# define __NTH(fct) __LEAF_ATTR fct __THROW
# define __NTHNL(fct) fct __THROW
# else
# define __THROW
# define __THROWNL
# define __NTH(fct) fct
# define __NTHNL(fct) fct
# endif
# endif
#else /* Not GCC or clang. */
# if (defined __cplusplus \
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
# define __inline inline
# else
# define __inline /* No inline functions. */
# endif
# define __THROW
# define __THROWNL
# define __NTH(fct) fct
#endif /* GCC || clang. */
/* These two macros are not used in glibc anymore. They are kept here
only because some other projects expect the macros to be defined. */
#define __P(args) args
#define __PMT(args) args
/* For these things, GCC behaves the ANSI way normally,
and the non-ANSI way under -traditional. */
#define __CONCAT(x,y) x ## y
#define __STRING(x) #x
/* This is not a typedef so `const __ptr_t' does the right thing. */
#define __ptr_t void *
/* C++ needs to know that types and declarations are C, not C++. */
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif
/* Fortify support. */
#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
#define __bos0(ptr) __builtin_object_size (ptr, 0)
/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */
#if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \
|| __GNUC_PREREQ (12, 0))
# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0)
# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1)
#else
# define __glibc_objsize0(__o) __bos0 (__o)
# define __glibc_objsize(__o) __bos (__o)
#endif
/* Compile time conditions to choose between the regular, _chk and _chk_warn
variants. These conditions should get evaluated to constant and optimized
away. */
#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s))
#define __glibc_unsigned_or_positive(__l) \
((__typeof (__l)) 0 < (__typeof (__l)) -1 \
|| (__builtin_constant_p (__l) && (__l) > 0))
/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ
condition can be folded to a constant and if it is true, or unknown (-1) */
#define __glibc_safe_or_unknown_len(__l, __s, __osz) \
((__osz) == (__SIZE_TYPE__) -1 \
|| (__glibc_unsigned_or_positive (__l) \
&& __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
(__s), (__osz))) \
&& __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz))))
/* Conversely, we know at compile time that the length is unsafe if the
__L * __S <= __OBJSZ condition can be folded to a constant and if it is
false. */
#define __glibc_unsafe_len(__l, __s, __osz) \
(__glibc_unsigned_or_positive (__l) \
&& __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
__s, __osz)) \
&& !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be
declared. */
#define __glibc_fortify(f, __l, __s, __osz, ...) \
(__glibc_safe_or_unknown_len (__l, __s, __osz) \
? __ ## f ## _alias (__VA_ARGS__) \
: (__glibc_unsafe_len (__l, __s, __osz) \
? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \
: __ ## f ## _chk (__VA_ARGS__, __osz))) \
/* Fortify function f, where object size argument passed to f is the number of
elements and not total size. */
#define __glibc_fortify_n(f, __l, __s, __osz, ...) \
(__glibc_safe_or_unknown_len (__l, __s, __osz) \
? __ ## f ## _alias (__VA_ARGS__) \
: (__glibc_unsafe_len (__l, __s, __osz) \
? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \
: __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \
#if __GNUC_PREREQ (4,3)
# define __warnattr(msg) __attribute__((__warning__ (msg)))
# define __errordecl(name, msg) \
extern void name (void) __attribute__((__error__ (msg)))
#else
# define __warnattr(msg)
# define __errordecl(name, msg) extern void name (void)
#endif
/* Support for flexible arrays.
Headers that should use flexible arrays only if they're "real"
(e.g. only if they won't affect sizeof()) should test
#if __glibc_c99_flexarr_available. */
#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
# define __flexarr []
# define __glibc_c99_flexarr_available 1
#elif __GNUC_PREREQ (2,97) || defined __clang__
/* GCC 2.97 and clang support C99 flexible array members as an extension,
even when in C89 mode or compiling C++ (any version). */
# define __flexarr []
# define __glibc_c99_flexarr_available 1
#elif defined __GNUC__
/* Pre-2.97 GCC did not support C99 flexible arrays but did have
an equivalent extension with slightly different notation. */
# define __flexarr [0]
# define __glibc_c99_flexarr_available 1
#else
/* Some other non-C99 compiler. Approximate with [1]. */
# define __flexarr [1]
# define __glibc_c99_flexarr_available 0
#endif
/* __asm__ ("xyz") is used throughout the headers to rename functions
at the assembly language level. This is wrapped by the __REDIRECT
macro, in order to support compilers that can do this some other
way. When compilers don't support asm-names at all, we have to do
preprocessor tricks instead (which don't have exactly the right
semantics, but it's the best we can do).
Example:
int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4)
# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
# ifdef __cplusplus
# define __REDIRECT_NTH(name, proto, alias) \
name proto __THROW __asm__ (__ASMNAME (#alias))
# define __REDIRECT_NTHNL(name, proto, alias) \
name proto __THROWNL __asm__ (__ASMNAME (#alias))
# else
# define __REDIRECT_NTH(name, proto, alias) \
name proto __asm__ (__ASMNAME (#alias)) __THROW
# define __REDIRECT_NTHNL(name, proto, alias) \
name proto __asm__ (__ASMNAME (#alias)) __THROWNL
# endif
# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
/*
#elif __SOME_OTHER_COMPILER__
# define __REDIRECT(name, proto, alias) name proto; \
_Pragma("let " #name " = " #alias)
*/
#endif
/* GCC and clang have various useful declarations that can be made with
the '__attribute__' syntax. All of the ways we use this do fine if
they are omitted for compilers that don't understand it. */
#if !(defined __GNUC__ || defined __clang__)
# define __attribute__(xyz) /* Ignore */
#endif
/* At some point during the gcc 2.96 development the `malloc' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__)
# define __attribute_malloc__ __attribute__ ((__malloc__))
#else
# define __attribute_malloc__ /* Ignore */
#endif
/* Tell the compiler which arguments to an allocation function
indicate the size of the allocation. */
#if __GNUC_PREREQ (4, 3)
# define __attribute_alloc_size__(params) \
__attribute__ ((__alloc_size__ params))
#else
# define __attribute_alloc_size__(params) /* Ignore. */
#endif
/* Tell the compiler which argument to an allocation function
indicates the alignment of the allocation. */
#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__)
# define __attribute_alloc_align__(param) \
__attribute__ ((__alloc_align__ param))
#else
# define __attribute_alloc_align__(param) /* Ignore. */
#endif
/* At some point during the gcc 2.96 development the `pure' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__)
# define __attribute_pure__ __attribute__ ((__pure__))
#else
# define __attribute_pure__ /* Ignore */
#endif
/* This declaration tells the compiler that the value is constant. */
#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__)
# define __attribute_const__ __attribute__ ((__const__))
#else
# define __attribute_const__ /* Ignore */
#endif
#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__)
# define __attribute_maybe_unused__ __attribute__ ((__unused__))
#else
# define __attribute_maybe_unused__ /* Ignore */
#endif
/* At some point during the gcc 3.1 development the `used' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings. */
#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__)
# define __attribute_used__ __attribute__ ((__used__))
# define __attribute_noinline__ __attribute__ ((__noinline__))
#else
# define __attribute_used__ __attribute__ ((__unused__))
# define __attribute_noinline__ /* Ignore */
#endif
/* Since version 3.2, gcc allows marking deprecated functions. */
#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__)
# define __attribute_deprecated__ __attribute__ ((__deprecated__))
#else
# define __attribute_deprecated__ /* Ignore */
#endif
/* Since version 4.5, gcc also allows one to specify the message printed
when a deprecated function is used. clang claims to be gcc 4.2, but
may also support this feature. */
#if __GNUC_PREREQ (4,5) \
|| __glibc_has_extension (__attribute_deprecated_with_message__)
# define __attribute_deprecated_msg__(msg) \
__attribute__ ((__deprecated__ (msg)))
#else
# define __attribute_deprecated_msg__(msg) __attribute_deprecated__
#endif
/* At some point during the gcc 2.8 development the `format_arg' attribute
for functions was introduced. We don't want to use it unconditionally
(although this would be possible) since it generates warnings.
If several `format_arg' attributes are given for the same function, in
gcc-3.0 and older, all but the last one are ignored. In newer gccs,
all designated arguments are considered. */
#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__)
# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
#else
# define __attribute_format_arg__(x) /* Ignore */
#endif
/* At some point during the gcc 2.97 development the `strfmon' format
attribute for functions was introduced. We don't want to use it
unconditionally (although this would be possible) since it
generates warnings. */
#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__)
# define __attribute_format_strfmon__(a,b) \
__attribute__ ((__format__ (__strfmon__, a, b)))
#else
# define __attribute_format_strfmon__(a,b) /* Ignore */
#endif
/* The nonnull function attribute marks pointer parameters that
must not be NULL. This has the name __nonnull in glibc,
and __attribute_nonnull__ in files shared with Gnulib to avoid
collision with a different __nonnull in DragonFlyBSD 5.9. */
#ifndef __attribute_nonnull__
# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__)
# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))
# else
# define __attribute_nonnull__(params)
# endif
#endif
#ifndef __nonnull
# define __nonnull(params) __attribute_nonnull__ (params)
#endif
/* The returns_nonnull function attribute marks the return type of the function
as always being non-null. */
#ifndef __returns_nonnull
# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__)
# define __returns_nonnull __attribute__ ((__returns_nonnull__))
# else
# define __returns_nonnull
# endif
#endif
/* If fortification mode, we warn about unused results of certain
function calls which can lead to problems. */
#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__)
# define __attribute_warn_unused_result__ \
__attribute__ ((__warn_unused_result__))
# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
# define __wur __attribute_warn_unused_result__
# endif
#else
# define __attribute_warn_unused_result__ /* empty */
#endif
#ifndef __wur
# define __wur /* Ignore */
#endif
/* Forces a function to be always inlined. */
#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__)
/* The Linux kernel defines __always_inline in stddef.h (283d7573), and
it conflicts with this definition. Therefore undefine it first to
allow either header to be included first. */
# undef __always_inline
# define __always_inline __inline __attribute__ ((__always_inline__))
#else
# undef __always_inline
# define __always_inline __inline
#endif
/* Associate error messages with the source location of the call site rather
than with the source location inside the function. */
#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__)
# define __attribute_artificial__ __attribute__ ((__artificial__))
#else
# define __attribute_artificial__ /* Ignore */
#endif
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__
or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
older than 4.3 may define these macros and still not guarantee GNU inlining
semantics.
clang++ identifies itself as gcc-4.2, but has support for GNU inlining
semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
__GNUC_GNU_INLINE__ macro definitions. */
#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
|| (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
|| defined __GNUC_GNU_INLINE__)))
# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
# define __extern_always_inline \
extern __always_inline __attribute__ ((__gnu_inline__))
# else
# define __extern_inline extern __inline
# define __extern_always_inline extern __always_inline
# endif
#endif
#ifdef __extern_always_inline
# define __fortify_function __extern_always_inline __attribute_artificial__
#endif
/* GCC 4.3 and above allow passing all anonymous arguments of an
__extern_always_inline function to some other vararg function. */
#if __GNUC_PREREQ (4,3)
# define __va_arg_pack() __builtin_va_arg_pack ()
# define __va_arg_pack_len() __builtin_va_arg_pack_len ()
#endif
/* It is possible to compile containing GCC extensions even if GCC is
run in pedantic mode if the uses are carefully marked using the
`__extension__' keyword. But this is not generally available before
version 2.8. */
#if !(__GNUC_PREREQ (2,8) || defined __clang__)
# define __extension__ /* Ignore */
#endif
/* __restrict is known in EGCS 1.2 and above, and in clang.
It works also in C++ mode (outside of arrays), but only when spelled
as '__restrict', not 'restrict'. */
#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3)
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
# define __restrict restrict
# else
# define __restrict /* Ignore */
# endif
#endif
/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
array_name[restrict]
GCC 3.1 and clang support this.
This syntax is not usable in C++ mode. */
#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus
# define __restrict_arr __restrict
#else
# ifdef __GNUC__
# define __restrict_arr /* Not supported in old GCC. */
# else
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
# define __restrict_arr restrict
# else
/* Some other non-C99 compiler. */
# define __restrict_arr /* Not supported. */
# endif
# endif
#endif
#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect)
# define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
# define __glibc_likely(cond) __builtin_expect ((cond), 1)
#else
# define __glibc_unlikely(cond) (cond)
# define __glibc_likely(cond) (cond)
#endif
#if (!defined _Noreturn \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& !(__GNUC_PREREQ (4,7) \
|| (3 < __clang_major__ + (5 <= __clang_minor__))))
# if __GNUC_PREREQ (2,8)
# define _Noreturn __attribute__ ((__noreturn__))
# else
# define _Noreturn
# endif
#endif
#if __GNUC_PREREQ (8, 0)
/* Describes a char array whose address can safely be passed as the first
argument to strncpy and strncat, as the char array is not necessarily
a NUL-terminated string. */
# define __attribute_nonstring__ __attribute__ ((__nonstring__))
#else
# define __attribute_nonstring__
#endif
/* Undefine (also defined in libc-symbols.h). */
#undef __attribute_copy__
#if __GNUC_PREREQ (9, 0)
/* Copies attributes from the declaration or type referenced by
the argument. */
# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
#else
# define __attribute_copy__(arg)
#endif
#if (!defined _Static_assert && !defined __cplusplus \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \
|| defined __STRICT_ANSI__))
# define _Static_assert(expr, diagnostic) \
extern int (*__Static_assert_function (void)) \
[!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
#endif
/* Gnulib avoids including these, as they don't work on non-glibc or
older glibc platforms. */
#ifndef __GNULIB_CDEFS
# include <bits/wordsize.h>
# include <bits/long-double.h>
#endif
#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
# ifdef __REDIRECT
/* Alias name defined automatically. */
# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir
# define __LDBL_REDIR_DECL(name) \
extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128"));
/* Alias name defined automatically, with leading underscores. */
# define __LDBL_REDIR2_DECL(name) \
extern __typeof (__##name) __##name \
__asm (__ASMNAME ("__" #name "ieee128"));
/* Alias name defined manually. */
# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1
# define __LDBL_REDIR1_DECL(name, alias) \
extern __typeof (name) name __asm (__ASMNAME (#alias));
# define __LDBL_REDIR1_NTH(name, proto, alias) \
__REDIRECT_NTH (name, proto, alias)
# define __REDIRECT_NTH_LDBL(name, proto, alias) \
__LDBL_REDIR1_NTH (name, proto, __##alias##ieee128)
/* Unused. */
# define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl
# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth
# else
_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform");
# endif
#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
# define __LDBL_COMPAT 1
# ifdef __REDIRECT
# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
# define __LDBL_REDIR(name, proto) \
__LDBL_REDIR1 (name, proto, __nldbl_##name)
# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
# define __LDBL_REDIR_NTH(name, proto) \
__LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
# define __LDBL_REDIR2_DECL(name) \
extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name));
# define __LDBL_REDIR1_DECL(name, alias) \
extern __typeof (name) name __asm (__ASMNAME (#alias));
# define __LDBL_REDIR_DECL(name) \
extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
# define __REDIRECT_LDBL(name, proto, alias) \
__LDBL_REDIR1 (name, proto, __nldbl_##alias)
# define __REDIRECT_NTH_LDBL(name, proto, alias) \
__LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
# endif
#endif
#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \
|| !defined __REDIRECT
# define __LDBL_REDIR1(name, proto, alias) name proto
# define __LDBL_REDIR(name, proto) name proto
# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
# define __LDBL_REDIR2_DECL(name)
# define __LDBL_REDIR_DECL(name)
# ifdef __REDIRECT
# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
# define __REDIRECT_NTH_LDBL(name, proto, alias) \
__REDIRECT_NTH (name, proto, alias)
# endif
#endif
/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is
intended for use in preprocessor macros.
Note: MESSAGE must be a _single_ string; concatenation of string
literals is not supported. */
#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
# define __glibc_macro_warning1(message) _Pragma (#message)
# define __glibc_macro_warning(message) \
__glibc_macro_warning1 (GCC warning message)
#else
# define __glibc_macro_warning(msg)
#endif
/* Generic selection (ISO C11) is a C-only feature, available in GCC
since version 4.9. Previous versions do not provide generic
selection, even though they might set __STDC_VERSION__ to 201112L,
when in -std=c11 mode. Thus, we must check for !defined __GNUC__
when testing __STDC_VERSION__ for generic selection support.
On the other hand, Clang also defines __GNUC__, so a clang-specific
check is required to enable the use of generic selection. */
#if !defined __cplusplus \
&& (__GNUC_PREREQ (4, 9) \
|| __glibc_has_extension (c_generic_selections) \
|| (!defined __GNUC__ && defined __STDC_VERSION__ \
&& __STDC_VERSION__ >= 201112L))
# define __HAVE_GENERIC_SELECTION 1
#else
# define __HAVE_GENERIC_SELECTION 0
#endif
#if __GNUC_PREREQ (10, 0)
/* Designates a 1-based positional argument ref-index of pointer type
that can be used to access size-index elements of the pointed-to
array according to access mode, or at least one element when
size-index is not provided:
access (access-mode, <ref-index> [, <size-index>]) */
# define __attr_access(x) __attribute__ ((__access__ x))
/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may
use the access attribute to get object sizes from function definition
arguments, so we can't use them on functions we fortify. Drop the object
size hints for such functions. */
# if __USE_FORTIFY_LEVEL == 3
# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o)))
# else
# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s))
# endif
# if __GNUC_PREREQ (11, 0)
# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
# else
# define __attr_access_none(argno)
# endif
#else
# define __fortified_attr_access(a, o, s)
# define __attr_access(x)
# define __attr_access_none(argno)
#endif
#if __GNUC_PREREQ (11, 0)
/* Designates dealloc as a function to call to deallocate objects
allocated by the declared function. */
# define __attr_dealloc(dealloc, argno) \
__attribute__ ((__malloc__ (dealloc, argno)))
# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
#else
# define __attr_dealloc(dealloc, argno)
# define __attr_dealloc_free
#endif
/* Specify that a function such as setjmp or vfork may return
twice. */
#if __GNUC_PREREQ (4, 1)
# define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
#else
# define __attribute_returns_twice__ /* Ignore. */
#endif
#endif /* sys/cdefs.h */

1880
changelog

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,7 @@
;;; default.el --- loaded after ".emacs" on startup -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Setting `inhibit-default-init' non-nil in "~/.emacs"
;; prevents loading of this file. Also the "-q" option to "emacs"
;; prevents both "~/.emacs" and this file from being loaded at startup.
;;; Code:
;;; default.el - loaded after ".emacs" on startup
;;;
;;; Setting `inhibit-default-init' non-nil in "~/.emacs"
;;; prevents loading of this file. Also the "-q" option to emacs
;;; prevents both "~/.emacs" and this file from being loaded at startup.
(setq-default smime-CA-directory "/etc/ssl/certs")
;;; default.el ends here

View file

@ -1,4 +1,4 @@
;;; -*- lexical-binding: t -*-
;; .emacs
(custom-set-variables
;; uncomment to always end a file with a newline

View file

@ -0,0 +1,51 @@
Remove obsolete a.out linker test. It contains an implicit
function declaration, leading to false positives.
Submitted upstream:
<https://lists.gnu.org/archive/html/emacs-devel/2022-12/msg01019.html>
diff --git a/configure.ac b/configure.ac
index 660784347bbc0dcd..cc390d40b33a1d8f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2493,39 +2493,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([[]],
- [[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([[]],
- [[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],

View file

@ -0,0 +1,19 @@
Avoid an implicit declaration of the malloc function. Improves C99
compatibility.
Submitted upstream:
<https://lists.gnu.org/archive/html/emacs-devel/2022-12/msg01020.html>
diff --git a/configure.ac b/configure.ac
index cc390d40b33a1d8f..7be08de740cfc486 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4590,6 +4590,7 @@ AC_CACHE_CHECK([whether signals can be handled on alternate stack],
[emacs_cv_alternate_stack],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <signal.h>
+ #include <stdlib.h>
]],
[[stack_t ss;
struct sigaction sa;

View file

@ -1,41 +0,0 @@
#!/usr/bin/bash
# The pure GTK build of emacs is not supported on X11, so try to avoid
# using it there if there is another alternative.
preferred="$(readlink -f /usr/bin/emacs)"
if [[ $XDG_SESSION_TYPE == 'x11' ]]; then
case "$preferred" in
*-pgtk)
for variant in gtk+x11 lucid; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
;;
*/emacs-desktop)
# If this wrapper script is itself the preferred alternative,
# select something suitable from the options available.
for variant in gtk+x11 lucid pgtk nw; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
exit 2
;;
esac
else
case "$preferred" in
*/emacs-desktop)
for variant in pgtk gtk+x11 lucid nw; do
if type "emacs-$variant" >/dev/null; then
exec -a emacs "emacs-$variant" "$@"
fi
done
exit 2
;;
esac
fi
exec emacs "$@"

View file

@ -0,0 +1,171 @@
From 31607778ef262e5c25a65eb479f9531c5803f4a6 Mon Sep 17 00:00:00 2001
From: Glenn Morris <rgm@gnu.org>
Date: Mon, 11 Oct 2021 14:03:26 +0200
Subject: [PATCH] Make the installed pmdp file use a fingerprint
* Makefile.in (EMACS_PDMP): Use --fingerprint.
* doc/emacs/cmdargs.texi (Action Arguments): Document --fingerprint.
* src/emacs.c (load_pdump): Load the fingerprinted version of the
pdmp file (bug#42790).
(main): Support --fingerprint.
* src/pdumper.c (dump_fingerprint): Make non-static.
* src/pdumper.h: Declare dump_fingerprint.
---
Makefile.in | 3 ++-
doc/emacs/cmdargs.texi | 5 +++++
src/emacs.c | 31 +++++++++++++++++++++++++++++--
src/pdumper.c | 2 +-
src/pdumper.h | 3 +++
5 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index c902b46ced..f8b8058d96 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -313,6 +313,7 @@ TRANSFORM =
EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'`
EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
+EMACS_PDMP = `./src/emacs${EXEEXT} --fingerprint 2>&1 | sed 's/.* //'`.pdmp
# Subdirectories to make recursively.
SUBDIR = $(NTDIR) lib lib-src src lisp
@@ -521,7 +522,7 @@ install-arch-dep:
ifeq (${ns_self_contained},no)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifeq (${DUMPING},pdumper)
- ${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs.pdmp
+ ${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs-${EMACS_PDMP}
endif
-chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifndef NO_BIN_LINK
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index ffab2b2213..b3f84098e7 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -185,6 +185,11 @@ Action Arguments
@item --version
@opindex --version
Print Emacs version, then exit successfully.
+
+@item --fingerprint
+@opindex --fingerprint
+Print the Emacs ``fingerprint'', which is used to uniquely identify
+the compiled version of Emacs.
@end table
@node Initial Options
diff --git a/src/emacs.c b/src/emacs.c
index 0a90b0913b..1907065a95 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -133,6 +133,7 @@ #define MAIN_PROGRAM
#endif
#include "pdumper.h"
+#include "fingerprint.h"
#include "epaths.h"
static const char emacs_version[] = PACKAGE_VERSION;
@@ -255,6 +256,7 @@ #define MAIN_PROGRAM
#ifdef HAVE_PDUMPER
"\
--dump-file FILE read dumped state from FILE\n\
+--fingerprint output fingerprint and exit\n\
",
#endif
#if SECCOMP_USABLE
@@ -830,6 +832,8 @@ load_pdump (int argc, char **argv)
const char *const suffix = ".pdmp";
int result;
char *emacs_executable = argv[0];
+ ptrdiff_t hexbuf_size;
+ char *hexbuf;
const char *strip_suffix =
#if defined DOS_NT || defined CYGWIN
".exe"
@@ -927,9 +931,15 @@ load_pdump (int argc, char **argv)
/* Look for "emacs.pdmp" in PATH_EXEC. We hardcode "emacs" in
"emacs.pdmp" so that the Emacs binary still works if the user
copies and renames it. */
+ hexbuf_size = 2 * sizeof fingerprint;
+ hexbuf = xmalloc (hexbuf_size + 1);
+ hexbuf_digest (hexbuf, (char *)fingerprint, sizeof fingerprint);
+ hexbuf[hexbuf_size] = '\0';
needed = (strlen (path_exec)
+ 1
+ strlen (argv0_base)
+ + 1
+ + strlen (hexbuf)
+ strlen (suffix)
+ 1);
if (bufsize < needed)
@@ -937,8 +947,8 @@ load_pdump (int argc, char **argv)
xfree (dump_file);
dump_file = xpalloc (NULL, &bufsize, needed - bufsize, -1, 1);
}
- sprintf (dump_file, "%s%c%s%s",
- path_exec, DIRECTORY_SEP, argv0_base, suffix);
+ sprintf (dump_file, "%s%c%s-%s%s",
+ path_exec, DIRECTORY_SEP, argv0_base, hexbuf, suffix);
#if !defined (NS_SELF_CONTAINED)
if (!(emacs_executable && *emacs_executable))
{
@@ -1424,6 +1434,23 @@ main (int argc, char **argv)
exit (0);
}
+#ifdef HAVE_PDUMPER
+ if (argmatch (argv, argc, "-fingerprint", "--fingerprint", 4,
+ NULL, &skip_args))
+ {
+ if (initialized)
+ {
+ dump_fingerprint ("fingerprint", (unsigned char *)fingerprint);
+ exit (0);
+ }
+ else
+ {
+ fputs ("Not initialized\n", stderr);
+ exit (1);
+ }
+ }
+#endif
+
emacs_wd = emacs_get_current_dir_name ();
#ifdef HAVE_PDUMPER
if (dumped_with_pdumper_p ())
diff --git a/src/pdumper.c b/src/pdumper.c
index b0167299d7..56a5e2ec6d 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -312,7 +312,7 @@ dump_reloc_set_offset (struct dump_reloc *reloc, dump_off offset)
error ("dump relocation out of range");
}
-static void
+void
dump_fingerprint (char const *label,
unsigned char const xfingerprint[sizeof fingerprint])
{
diff --git a/src/pdumper.h b/src/pdumper.h
index 8383283894..002e1d88ce 100644
--- a/src/pdumper.h
+++ b/src/pdumper.h
@@ -50,6 +50,9 @@ #define PDUMPER_IGNORE(thing) ((void) &(thing))
#define PDUMPER_REMEMBER_SCALAR(thing) \
pdumper_remember_scalar (&(thing), sizeof (thing))
+extern void dump_fingerprint (const char *label,
+ const unsigned char *xfingerprint);
+
extern void pdumper_remember_scalar_impl (void *data, ptrdiff_t nbytes);
INLINE void
--
2.37.3

View file

@ -1,26 +0,0 @@
From eaaf4883aee50974eeb03e529a29585f8ddc1d9d Mon Sep 17 00:00:00 2001
From: Bhavin Gandhi <bhavin192@geeksocket.in>
Date: Wed, 31 May 2023 22:44:54 +0530
Subject: [PATCH] Add package names to PGTK on X error message
---
src/pgtkterm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index c00e13550bd..ce51bff5947 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -6680,7 +6680,8 @@ pgtk_display_x_warning (GdkDisplay *display)
" System. That configuration is unsupported and\n"
" will lead to sporadic crashes during transfer of\n"
" large selection data. It will also lead to\n"
- " various problems with keyboard input.\n");
+ " various problems with keyboard input.\n"
+ "\nInstall emacs-gtk+x11 or emacs-lucid package.\n");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_container_add (GTK_CONTAINER (content_area), label);
gtk_widget_show (label);
--
2.40.1

View file

@ -1,12 +1,11 @@
--- a/src/gnutls.c 2016-01-24 10:29:58.000000000 +0100
+++ b/src/gnutls.c 2016-02-02 09:32:28.477274274 +0100
@@ -1557,8 +1557,8 @@
@@ -1557,7 +1557,7 @@
gnutls_certificate_credentials_t x509_cred = NULL;
gnutls_anon_client_credentials_t anon_cred = NULL;
Lisp_Object global_init;
- char const *priority_string_ptr = "NORMAL"; /* default priority string. */
+ char const *priority_string_ptr = "@SYSTEM"; /* default priority string. */
char *c_hostname;
const char *c_pass;
/* Placeholders for the property list elements. */

2727
emacs.spec

File diff suppressed because it is too large Load diff

View file

@ -1,5 +0,0 @@
# -*- rpm-spec -*-
%__emacs_lisp_recommends %{_rpmconfigdir}/emacs_lisp.rec
%__emacs_lisp_path %{_datadir}/emacs/.+\.el(\.gz)?$
%__emacs_lisp_protocol multifile

View file

@ -1,49 +0,0 @@
#!/usr/bin/emacs -x
;; This file is not part of GNU Emacs.
;;; Commentary:
;; Inspect Emacs Lisp files for usage of Tree-sitter parsers, and
;; generate RPM Recommends for those.
;;; Code:
(setq backtrace-on-error-noninteractive nil
jka-compr-verbose nil)
(condition-case nil
(while (setq filename (read-from-minibuffer ""))
(when (string-match-p (rx ".el" (optional ".gz") line-end)
filename)
(condition-case err
(let* ((symlink-target (file-symlink-p filename))
(source-filename
(if (and (stringp symlink-target)
(string-match-p (rx line-start "/")
symlink-target))
(file-name-concat (getenv "RPM_BUILD_ROOT")
symlink-target)
filename)))
(with-temp-buffer
(insert-file-contents source-filename)
(setq parsers ())
(while
(search-forward-regexp
(rx "(" (or "treesit-ensure-installed"
"treesit-parser-create"
"treesit-ready-p")
" '")
nil t)
(add-to-list 'parsers (thing-at-point 'symbol t)))
(when parsers
(princ (concat ";" filename "\n"))
(dolist (parser parsers)
(princ (concat "tree-sitter(" parser ")" "\n"))))))
;; Missing files are probably caused by "broken" symlinks
;; (which may actually be fulfilled by some other package).
(file-missing (message "warning: %s" (error-message-string err))))))
(end-of-file nil))
;;; emacs_lisp.rec ends here

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,22 @@
--- emacs-28.2/lisp/emacs-lisp/comp.el~ 2022-09-07 05:31:53.000000000 +0800
+++ emacs-28.2/lisp/emacs-lisp/comp.el 2022-12-23 15:02:25.446994014 +0800
@@ -3706,7 +3706,7 @@
(if (zerop
(call-process (expand-file-name invocation-name
invocation-directory)
- nil t t "--batch" "-l" temp-file))
+ nil t t "-Q" "--batch" "-l" temp-file))
(progn
(delete-file temp-file)
output)
@@ -3976,7 +3976,7 @@
:command (list
(expand-file-name invocation-name
invocation-directory)
- "--batch" "-l" temp-file)
+ "-Q" "--batch" "-l" temp-file)
:sentinel
(lambda (process _event)
(run-hook-with-args
Diff finished. Fri Dec 23 15:02:42 2022

View file

@ -1,16 +1,9 @@
;;; site-start.el --- loaded before user's ".emacs" file and default.el -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Load *.el and *.elc in /usr/share/emacs/site-lisp/site-start.d on startup
;;; Code:
;;; loaded before user's ".emacs" file and default.el
;; load *.el and *.elc in /usr/share/emacs/site-lisp/site-start.d on startup
(mapc
'load
(delete-dups
(mapcar 'file-name-sans-extension
(directory-files
"/usr/share/emacs/site-lisp/site-start.d" t "\\.elc?\\'"))))
;;; site-start.el ends here

View file

@ -1,2 +1,2 @@
SHA512 (emacs-30.2.tar.xz) = 313432d11e95c74f8cd35c5b1da442e6223f5d40f9173c55883c0339ecbfb97a0bedf79177ef8902afd3e33c078a233777bed01f5caffa1e7524f17d58bfc9a2
SHA512 (emacs-30.2.tar.xz.sig) = ab5b5d0624b37ac662cf9914e8807fc37ee273c107f1a19ca75a527b6b9a85ce35f9436d03d8a988876cce7e7bebcc6c4a1251b0ceb08785b56bf42743f246e1
SHA512 (emacs-28.2.tar.xz) = a7cec7e3e82367815a1442f69af54102dbfc434069810a9dec5938a6660cb8b076e6f1fb0bfff9695b15603dbbe05eb9c7dfd92e90cf40fc4d1e5746bce83bd8
SHA512 (emacs-28.2.tar.xz.sig) = de40bc10088051b2707fc9764a5a5fb49687c05bf0e27bd7ad6f5a952ad324904366ca10dbd58015e1d3d5206b900da99cf4485d7f048220e4dda657180f3d1c