diff --git a/backport-emacs-glibc-2.34.patch b/backport-emacs-glibc-2.34.patch deleted file mode 100644 index f6ad28633a4ec29d6020df01d71bc6802a17a888..0000000000000000000000000000000000000000 --- a/backport-emacs-glibc-2.34.patch +++ /dev/null @@ -1,39 +0,0 @@ -From f97e07ea807cc6d38774a3888a15091b20645ac6 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Tue, 9 Mar 2021 11:22:59 -0800 -Subject: [PATCH] Port alternate signal stack to upcoming glibc 2.34 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -* src/sysdep.c (sigsegv_stack): Increase size to 64 KiB and align -it to max_align_t. This copies from Gnulib’s c-stack.c, and works -around a portability bug in draft glibc 2.34, which no longer -defines SIGSTKSZ when _GNU_SOURCE is defined. ---- - src/sysdep.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/sysdep.c b/src/sysdep.c -index 941b4e2fa2..24d8832b2f 100644 ---- a/src/sysdep.c -+++ b/src/sysdep.c -@@ -1785,7 +1785,15 @@ handle_arith_signal (int sig) - - /* Alternate stack used by SIGSEGV handler below. */ - --static unsigned char sigsegv_stack[SIGSTKSZ]; -+/* Storage for the alternate signal stack. -+ 64 KiB is not too large for Emacs, and is large enough -+ for all known platforms. Smaller sizes may run into trouble. -+ For example, libsigsegv 2.6 through 2.8 have a bug where some -+ architectures use more than the Linux default of an 8 KiB alternate -+ stack when deciding if a fault was caused by stack overflow. */ -+static max_align_t sigsegv_stack[(64 * 1024 -+ + sizeof (max_align_t) - 1) -+ / sizeof (max_align_t)]; - - - /* Return true if SIGINFO indicates a stack overflow. */ --- -2.29.2 \ No newline at end of file diff --git a/cdefs.h b/cdefs.h new file mode 100644 index 0000000000000000000000000000000000000000..cb2514504f19008a270dd76b4082c2d2388ced92 --- /dev/null +++ b/cdefs.h @@ -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 + . */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include +#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. The -1 check is + redundant because since it implies that __glibc_safe_len_cond is true. */ +#define __glibc_safe_or_unknown_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)) + +/* 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 +# include +#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, [, ]) */ +# 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 */ diff --git a/emacs-27.2.tar.xz b/emacs-28.1.tar.xz similarity index 76% rename from emacs-27.2.tar.xz rename to emacs-28.1.tar.xz index 0618c17e1640bdcd9ed15abb928e57236f1f8900..15883481943571ae3b4a5dca889dbaae7700b7da 100644 Binary files a/emacs-27.2.tar.xz and b/emacs-28.1.tar.xz differ diff --git a/emacs-28.1.tar.xz.sig b/emacs-28.1.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..28ec561c5ac4384106c379111b5411c6971b3c22 --- /dev/null +++ b/emacs-28.1.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEF+kNUhZywEYxsRg+542uDzEV4GsFAmJK2PAACgkQ542uDzEV +4GuLAxAAuUO0wrWOs8bIyoFDspz0oBgJsZD6gScqRf9jVpITqegYQA6UYhPtBg24 +CZGvJYX3TUpw6B+9dzOaRcFghzmgJTOvQemo8WK7o4aumUtp4BUjl1vLsAMgsA7e +age+IY9z6Uo7GsUttpDvdZJYh+YV+p/GPu0Po441ztPAyxWzrSyRVqXXZXb0/tg6 +98MyzcffZbYr/D4Aox/V0Y2PXbO+0S097jFLtKRX/UioEHeGLKdeVbVa7eB5kfJu +IUS7Kg015loBY8UxObnMAU0WGUaPbPk/+Zk4QqRnAf08F8F+ajZxv6nRyPIzv82T +ULgmSdn0SXh870+Q7RWo8Wq+s+9CdYCUVT5DKV9G3aoBGqZnUNe9Wv295GKbZYqE +9TRTFr6000FNIMocc22rVmRVq2cxUUe9uNyZM7jw4Juhczw0/vGA0nSWfqlPSTsH +88AJCyjzL/HqrU9zqS5wwx+DIkVlUW+94/0jo0AUls/2z1oFfrxsv0GEXhtQWR6N +iMdfdY1tLwoS3xx3r9+mEDivn7EW9ySJO41rQ79FTiq5UgZzw+Y+szT7CWpiK/99 +DRPS4yTZsVXfAlLcjSsL+KimBhdWrgrwDIViW1WkJMngwjhRjcRuFpDjZbUYhYaH +a55ePutqf/+R5a0mlgCV3RPmqf+lGp30JohtWL5VZsK90jtdATQ= +=maOw +-----END PGP SIGNATURE----- diff --git a/emacs-deal-taboo-words.patch b/emacs-deal-taboo-words.patch deleted file mode 100644 index 8fb0c82410940a23e1e6aaffd405010ad6ba8a22..0000000000000000000000000000000000000000 --- a/emacs-deal-taboo-words.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 2b98d49b72e801109de870672bc071361a9b6a1b Mon Sep 17 00:00:00 2001 -From: yeah_wang -Date: Thu, 8 Apr 2021 16:07:05 +0800 -Subject: [PATCH] emacs-deal-taboo-words - ---- - etc/publicsuffix.txt | 2 -- - lisp/mail/mail-extr.el | 1 - - 2 files changed, 3 deletions(-) - -diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt -index 1ede2b9..c38649f 100644 ---- a/etc/publicsuffix.txt -+++ b/etc/publicsuffix.txt -@@ -6259,9 +6259,7 @@ tel.tr - tsk.tr - tv.tr - web.tr --// Used by Northern Cyprus - nc.tr --// Used by government agencies of Northern Cyprus - gov.nc.tr - - // tt : http://www.nic.tt/ -diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el -index 11918aa..f2d7fae 100644 ---- a/lisp/mail/mail-extr.el -+++ b/lisp/mail/mail-extr.el -@@ -1932,7 +1932,6 @@ place. It affects how `mail-extract-address-components' works." - ("ec" "Ecuador" "The Republic of %s") - ("ee" "Estonia") - ("eg" "Egypt" "The Arab Republic of %s") -- ("eh" "Western Sahara") - ("er" "Eritrea") - ("es" "Spain" "The Kingdom of %s") - ("et" "Ethiopia") --- -2.23.0 - diff --git a/emacs-libdir-vs-systemd.patch b/emacs-libdir-vs-systemd.patch new file mode 100644 index 0000000000000000000000000000000000000000..32f6a832ede3a44c1b4422415897442deb3b36ab --- /dev/null +++ b/emacs-libdir-vs-systemd.patch @@ -0,0 +1,31 @@ +From a56539c1d7ef7aa56e575685bdfe1406aebb518d Mon Sep 17 00:00:00 2001 +From: Peter Oliver +Date: Wed, 5 Feb 2020 12:42:04 +0000 +Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20assemble=20systemdunitdir=20fro?= + =?UTF-8?q?m=20`libdir`?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On 64 bit Fedora, `libdir` is `/usr/lib64`, whereas systemd services +live under `/usr/lib/systemd`. +--- + Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 2c82c49fba..b2468eb824 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -208,7 +208,7 @@ appdatadir= + # Other options include ~/.config/systemd/user/, + # $XDG_RUNTIME_DIR/systemd/user/ + # It seems the user may end up having to make a manual link... +-systemdunitdir=$(libdir)/systemd/user ++systemdunitdir=$(shell pkg-config --variable=systemduserunitdir systemd) + + # Where the etc/images/icons/hicolor directory is to be installed. + icondir=$(datarootdir)/icons +-- +2.24.1 + diff --git a/emacs-pdmp-fingerprint.patch b/emacs-pdmp-fingerprint.patch new file mode 100644 index 0000000000000000000000000000000000000000..b2247e6d5d8f25f6b904d73bab3cef797599ca0e --- /dev/null +++ b/emacs-pdmp-fingerprint.patch @@ -0,0 +1,171 @@ +From e81f1faca4382ed5c8f15fec84fb7c900a5468f9 Mon Sep 17 00:00:00 2001 +From: Glenn Morris +Date: Mon, 11 Oct 2021 14:03:26 +0200 +Subject: 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 5fc1edc..c6c507f 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -313,6 +313,7 @@ TRANSFORM = @program_transform_name@ + 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: src install-arch-indep install-etcdoc install-$(NTDIR) + 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 d5177fa..313682b 100644 +--- a/doc/emacs/cmdargs.texi ++++ b/doc/emacs/cmdargs.texi +@@ -185,6 +185,11 @@ successfully. + @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 866e43f..cda7a9b 100644 +--- a/src/emacs.c ++++ b/src/emacs.c +@@ -133,6 +133,7 @@ extern char etext; + #endif + + #include "pdumper.h" ++#include "fingerprint.h" + #include "epaths.h" + + static const char emacs_version[] = PACKAGE_VERSION; +@@ -255,6 +256,7 @@ Initialization options:\n\ + #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) + /* Assume the Emacs binary lives in a sibling directory as set up by + the default installation configuration. */ +@@ -1387,6 +1397,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 11c680d..977f4fb 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 deec9af..bc339c4 100644 +--- a/src/pdumper.h ++++ b/src/pdumper.h +@@ -50,6 +50,9 @@ enum { PDUMPER_NO_OBJECT = -1 }; + #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 +-- +cgit v1.1 + diff --git a/emacs-spellchecker.patch b/emacs-spellchecker.patch index 48c2b57eff730ab9ad31414c9ea0ce3d1b1aeff9..f2eab0103e46f2f9ed90b1301ee3c7c5c77124d3 100644 --- a/emacs-spellchecker.patch +++ b/emacs-spellchecker.patch @@ -1,16 +1,22 @@ diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el -index 1d28de7..1daec44 100644 +index 0a3a49d868..b6c0975857 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el -@@ -200,9 +200,9 @@ - ;; cause an error; and one of the other spelling engines below is - ;; almost certainly installed in any case, for enchant to use. +@@ -191,12 +191,12 @@ Must be greater than 1." + :type 'integer) + (defcustom ispell-program-name - (or (executable-find "aspell") -+ (or (executable-find "hunspell") +- (executable-find "ispell") ++ ;; Enchant is commonly installed as `enchant-2', so use this ++ ;; name and avoid old versions of `enchant'. ++ (or (executable-find "enchant-2") + (executable-find "hunspell") +- ;; Enchant is commonly installed as `enchant-2', so use this +- ;; name and avoid old versions of `enchant'. +- (executable-find "enchant-2") + (executable-find "aspell") - (executable-find "ispell") -- (executable-find "hunspell") ++ (executable-find "ispell") "ispell") "Program invoked by \\[ispell-word] and \\[ispell-region] commands." :type 'string diff --git a/emacs.appdata.xml b/emacs.appdata.xml deleted file mode 100644 index 94ba9854e1ffee279ce17aebd19288616c51aa65..0000000000000000000000000000000000000000 --- a/emacs.appdata.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - emacs.desktop - CC0-1.0 - GPL-3.0+ - GNU Emacs - Edit text files, view pictures and binary files - -

- Emacs is a powerful, customizable, self-documenting, modeless - editor. It is used primarely to edit text, including text - documents, source code of programs, web pages and XML documents, - but can also be used to display and edit binary files. -

-

- Emacs allows efficient editing of text with shortcuts which - allow operating on letters, words, sentences, and paragraphs as - single units. This includes both moving around and operations - like copying, deleting, transposing, and pasting. Macros can be - conveniently defined to repeat sequences of commands. In - addition, Emacs is (partially) built in a scripting language - (elisp) which can also be used to define further functions - extending existing capabilities. -

-

- Emacs has extensive support for editing source code, including - programmable syntax highlighting, automatic indentation, source - code indexing, overview modes, and navigation based on language - specific units like functions and blocks. It is also possible to - invoke the compiler from within Emacs and easily move between - compiler output and corresponding positions in the source. -

-

- Emacs has multiple modules which provide further functionality. - This provides the capability to read mail, news, browse - pictures, read man and info pages, browse the web, execute - arbitrary programs, and more, without leaving the editor. -

-
- - - http://in.waw.pl/~zbyszek/fedora/emacs-two-buffers.png - - - http://in.waw.pl/~zbyszek/fedora/emacs-editing-xml.png - - - http://in.waw.pl/~zbyszek/fedora/emacs-hexl-mode.png - - - http://in.waw.pl/~zbyszek/fedora/emacs-showing-svg.png - - - http://in.waw.pl/~zbyszek/fedora/emacs-with-python-source.png - - - http://www.gnu.org/software/emacs/ - https://www.gnu.org/software/emacs/manual/html_node/emacs/Bugs.html - https://my.fsf.org/donate/ - https://www.gnu.org/software/emacs/manual/ - zbyszek@in.waw.pl - -
diff --git a/emacs.desktop b/emacs.desktop deleted file mode 100644 index c71b4a83ba5f8525e9499065e7765de701a409ef..0000000000000000000000000000000000000000 --- a/emacs.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Name=Emacs -GenericName=Text Editor -Comment=Edit text -Comment[zh_TW]=編輯文字 -MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; -Exec=emacs %f -Icon=emacs -Type=Application -Terminal=false -Categories=Utility;TextEditor;X-Red-Hat-Base; -StartupWMClass=Emacs diff --git a/emacs.service b/emacs.service deleted file mode 100644 index d611118186191319df5484ef60b7ee2af7811579..0000000000000000000000000000000000000000 --- a/emacs.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Emacs: the extensible, self-documenting text editor - -[Service] -Type=forking -ExecStart=/usr/bin/emacs --daemon -ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)" -Restart=always - -[Install] -WantedBy=default.target diff --git a/emacs.spec b/emacs.spec index af149cc4780f8d892b31b6ae8a8a7feaf1b7c55d..51ae204f044c0712f5636c1fab648511a0d23f30 100644 --- a/emacs.spec +++ b/emacs.spec @@ -1,40 +1,78 @@ %global _hardened_build 1 -%bcond_with bootstrap - -%if "0%{?product_family}" != "0" -%bcond_without bootstrap -%endif +# This file is encoded in UTF-8. -*- coding: utf-8 -*- +Summary: GNU Emacs text editor Name: emacs Epoch: 1 -Version: 27.2 -Release: 6 -Summary: An extensible GNU text editor -License: GPLv3+ and CC0-1.0 -URL: http://www.gnu.org/software/emacs -Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz -Source1: site-start.el -Source2: default.el -Source3: dotemacs.el -Source4: emacs-terminal.sh -Source5: emacs.service -Source6: emacs.desktop +Version: 28.1 +Release: 1 +License: GPLv3+ and CC0 +URL: http://www.gnu.org/software/emacs/ +Source0: https://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz +Source1: https://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz.sig +# get Eli Zaretskii's key +# wget https://keys.openpgp.org/vks/v1/by-fingerprint/17E90D521672C04631B1183EE78DAE0F3115E06B -O gpgkey-17E90D521672C04631B1183EE78DAE0F3115E06B.gpg +Source2: gpgkey-17E90D521672C04631B1183EE78DAE0F3115E06B.gpg +Source3: https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=lib/cdefs.h;hb=refs/heads/master#./cdefs.h +Source4: dotemacs.el +Source5: site-start.el +Source6: default.el +# Emacs Terminal Mode, #551949, #617355 Source7: emacs-terminal.desktop -Source8: %{name}.appdata.xml - -Patch6001: emacs-spellchecker.patch -Patch6002: emacs-system-crypto-policies.patch -Patch6003: backport-emacs-glibc-2.34.patch -Patch9000: emacs-deal-taboo-words.patch - -BuildRequires: gcc atk-devel cairo-devel freetype-devel fontconfig-devel dbus-devel giflib-devel -BuildRequires: glibc-devel zlib-devel gnutls-devel libselinux-devel GConf2-devel alsa-lib-devel -BuildRequires: libxml2-devel bzip2 cairo texinfo gzip desktop-file-utils libacl-devel libtiff-devel -BuildRequires: libpng-devel libjpeg-turbo-devel libjpeg-turbo ncurses-devel gpm-devel libX11-devel -BuildRequires: libXau-devel libXdmcp-devel libXrender-devel libXt-devel libXpm-devel gtk3-devel -BuildRequires: xorg-x11-proto-devel webkit2gtk3-devel librsvg2-devel -BuildRequires: autoconf harfbuzz-devel jansson-devel systemd-devel gnupg2 -BuildRequires: libotf-devel m17n-lib-devel liblockfile-devel +Source8: emacs-terminal.sh +# rhbz#713600 +Patch1: emacs-spellchecker.patch +Patch2: emacs-system-crypto-policies.patch +Patch3: emacs-libdir-vs-systemd.patch +Patch4: emacs-pdmp-fingerprint.patch + +BuildRequires: gcc +BuildRequires: atk-devel +BuildRequires: cairo-devel +BuildRequires: freetype-devel +BuildRequires: fontconfig-devel +BuildRequires: dbus-devel +BuildRequires: giflib-devel +BuildRequires: glibc-devel +BuildRequires: libpng-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: libjpeg-turbo +BuildRequires: libtiff-devel +BuildRequires: libX11-devel +BuildRequires: libXau-devel +BuildRequires: libXdmcp-devel +BuildRequires: libXrender-devel +BuildRequires: libXt-devel +BuildRequires: libXpm-devel +BuildRequires: ncurses-devel +BuildRequires: xorg-x11-proto-devel +BuildRequires: zlib-devel +BuildRequires: gnutls-devel +BuildRequires: librsvg2-devel +BuildRequires: m17n-lib-devel +BuildRequires: libotf-devel +BuildRequires: libselinux-devel +BuildRequires: alsa-lib-devel +BuildRequires: gpm-devel +BuildRequires: liblockfile-devel +BuildRequires: libxml2-devel +BuildRequires: autoconf +BuildRequires: bzip2 +BuildRequires: cairo +BuildRequires: texinfo +BuildRequires: gzip +BuildRequires: desktop-file-utils +BuildRequires: libappstream-glib +BuildRequires: libacl-devel +BuildRequires: harfbuzz-devel +BuildRequires: jansson-devel +BuildRequires: systemd-devel +BuildRequires: libgccjit-devel + +BuildRequires: gtk3-devel +BuildRequires: webkit2gtk3-devel + +BuildRequires: gnupg2 # For lucid BuildRequires: Xaw3d-devel @@ -42,12 +80,17 @@ BuildRequires: Xaw3d-devel %ifarch %{ix86} BuildRequires: util-linux %endif - -Requires: desktop-file-utils dejavu-sans-mono-fonts -Requires: emacs-common = %{epoch}:%{version}-%{release} -Requires(preun): %{_sbindir}/alternatives +BuildRequires: make + +# Emacs requires info for info mode, rhbz#1989264 +Requires: info +# Emacs doesn't run without dejavu-sans-mono-fonts, rhbz#732422 +Requires: desktop-file-utils +Requires: dejavu-sans-mono-fonts +Requires: libgccjit +Requires(preun): %{_sbindir}/alternatives Requires(posttrans): %{_sbindir}/alternatives - +Requires: emacs-common = %{epoch}:%{version}-%{release} Provides: emacs(bin) = %{epoch}:%{version}-%{release} %define site_lisp %{_datadir}/emacs/site-lisp @@ -55,86 +98,129 @@ Provides: emacs(bin) = %{epoch}:%{version}-%{release} %define bytecompargs -batch --no-init-file --no-site-file -f batch-byte-compile %define pkgconfig %{_datadir}/pkgconfig %define emacs_libexecdir %{_libexecdir}/emacs/%{version}/%{_host} +%define native_lisp %{_libdir}/emacs/%{version}/native-lisp %description -Emacs is the extensible, customizable, self-documenting real-time display editor. -At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language -with extensions to support text editing. And it is an entire ecosystem of functionality beyond text editing, -including a project planner, mail and news reader, debugger interface, calendar, and more. - -%package devel -Summary: Development header files for emacs +Emacs is a powerful, customizable, self-documenting, modeless text +editor. Emacs contains special code editing features, a scripting +language (elisp), and the capability to read mail, news, and more +without leaving the editor. -%description devel -Development header files for emacs. +This package provides an emacs binary with support for X windows. -%if !%{with bootstrap} -%package lucid +%package lucid Summary: GNU Emacs text editor with LUCID toolkit X support -Requires: emacs-common = %{epoch}:%{version}-%{release} -Requires(preun): %{_sbindir}/alternatives +Requires: libgccjit +Requires(preun): %{_sbindir}/alternatives Requires(posttrans): %{_sbindir}/alternatives +Requires: emacs-common = %{epoch}:%{version}-%{release} Provides: emacs(bin) = %{epoch}:%{version}-%{release} -%description lucid +%description lucid +Emacs is a powerful, customizable, self-documenting, modeless text +editor. Emacs contains special code editing features, a scripting +language (elisp), and the capability to read mail, news, and more +without leaving the editor. + This package provides an emacs binary with support for X windows using LUCID toolkit. -%endif -%package nox +%package nox Summary: GNU Emacs text editor without X support -Requires: emacs-common = %{epoch}:%{version}-%{release} -Requires(preun): %{_sbindir}/alternatives +Requires: libgccjit +Requires(preun): %{_sbindir}/alternatives Requires(posttrans): %{_sbindir}/alternatives +Requires: emacs-common = %{epoch}:%{version}-%{release} Provides: emacs(bin) = %{epoch}:%{version}-%{release} -%description nox +%description nox +Emacs is a powerful, customizable, self-documenting, modeless text +editor. Emacs contains special code editing features, a scripting +language (elisp), and the capability to read mail, news, and more +without leaving the editor. + This package provides an emacs binary with no X windows support for running -on a terminal +on a terminal. -%package common +%package common Summary: Emacs common files +# The entire source code is GPLv3+ except lib-src/etags.c which is +# also BSD. Manual (info) is GFDL. License: GPLv3+ and GFDL and BSD -Requires: %{name}-filesystem = %{epoch}:%{version}-%{release} -Requires(preun): /sbin/install-info -Requires(preun): %{_sbindir}/alternatives +Requires(preun): %{_sbindir}/alternatives Requires(posttrans): %{_sbindir}/alternatives -Requires(post): /sbin/install-info +Requires: %{name}-filesystem = %{epoch}:%{version}-%{release} +Recommends: enchant2 Provides: %{name}-el = %{epoch}:%{version}-%{release} Obsoletes: emacs-el < 1:24.3-29 +# transient.el is provided by emacs in lisp/transient.el +Provides: emacs-transient = 0.3.7 +# the existing emacs-transient package is obsoleted by emacs 28+, last package +# version as of the release of emacs 28.1 is obsoleted +Obsoletes: emacs-transient < 0.3.0-4 + +%description common +Emacs is a powerful, customizable, self-documenting, modeless text +editor. Emacs contains special code editing features, a scripting +language (elisp), and the capability to read mail, news, and more +without leaving the editor. -%description common This package contains all the common files needed by emacs, emacs-lucid or emacs-nox. -%package terminal -Summary: A desktop menu for GNU Emacs terminal. +%package terminal +Summary: A desktop menu item for GNU Emacs terminal. Requires: emacs = %{epoch}:%{version}-%{release} BuildArch: noarch -%description terminal -Install emacs-terminal if you need a terminal with Malayalam support. +%description terminal +Contains a desktop menu item running GNU Emacs terminal. Install +emacs-terminal if you need a terminal with Malayalam support. -%package filesystem +Please note that emacs-terminal is a temporary package and it will be +removed when another terminal becomes capable of handling Malayalam. + +%package filesystem Summary: Emacs filesystem layout BuildArch: noarch -%description filesystem -Emacs filesystem layout +%description filesystem +This package provides some directories which are required by other +packages that add functionality to Emacs. + +%package devel +Summary: Development header files for Emacs -%package_help +%description devel +Development header files for Emacs. %prep -%autosetup -n %{name}-%{version} -p1 +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%setup -q + +# workaround for ftbfs on ppc64, see https://bugzilla.redhat.com/show_bug.cgi?id=2045780#c8 +cp -p %{SOURCE3} lib/ +%patch1 -p1 -b .spellchecker +%patch2 -p1 -b .system-crypto-policies +%patch3 -p1 -b .libdir-vs-systemd +%patch4 -p1 -b .pdmp-fingerprint autoconf -egrep -v "tetris.elc|pong.elc" lisp/Makefile.in > lisp/Makefile.in.new && mv lisp/Makefile.in.new lisp/Makefile.in +grep -v "tetris.elc" lisp/Makefile.in > lisp/Makefile.in.new \ + && mv lisp/Makefile.in.new lisp/Makefile.in +grep -v "pong.elc" lisp/Makefile.in > lisp/Makefile.in.new \ + && mv lisp/Makefile.in.new lisp/Makefile.in -rm -f lisp/play/tetris.el* lisp/play/pong.el* +# Avoid trademark issues +rm -f lisp/play/tetris.el lisp/play/tetris.elc +rm -f lisp/play/pong.el lisp/play/pong.el +# Sorted list of info files %define info_files ada-mode auth autotype bovine calc ccmode cl dbus dired-x ebrowse ede ediff edt efaq-w32 efaq eieio eintr elisp emacs-gnutls emacs-mime emacs epa erc ert eshell eudc eww flymake forms gnus htmlfontify idlwave ido info mairix-el message mh-e newsticker nxml-mode octave-mode org pcl-cvs pgg rcirc reftex remember sasl sc semantic ses sieve smtpmail speedbar srecode todo-mode tramp url vhdl-mode vip viper widget wisent woman +# Since the list of info files has to be maintained, check if all info files +# from the upstream tarball are actually present in %%info_files. cd info fs=( $(ls *.info) ) is=( %info_files ) @@ -153,69 +239,71 @@ cd .. %define setarch %{nil} %endif +# Avoid duplicating doc files in the common subpackage ln -s ../../%{name}/%{version}/etc/COPYING doc ln -s ../../%{name}/%{version}/etc/NEWS doc -%build -export CFLAGS="-DMAIL_USE_LOCKF $RPM_OPT_FLAGS -fPIE" - -# Build GTK+ binary -mkdir build-gtk && cd build-gtk -ln -s ../configure . - -LDFLAGS="-Wl,-z,relro,-z,now -pie"; export LDFLAGS; -%configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \ - --with-tiff --with-xft --with-xpm --with-x-toolkit=gtk3 --with-gpm=no \ - --with-harfbuzz --with-cairo --with-json \ - --with-xwidgets --with-modules --without-libotf --without-m17n-flt --without-imagemagick -%make_build bootstrap -%{setarch} %make_build -cd .. +%build +export CFLAGS="-DMAIL_USE_LOCKF %{build_cflags}" +%set_build_flags # Build Lucid binary -%if !%{with bootstrap} mkdir build-lucid && cd build-lucid ln -s ../configure . -LDFLAGS="-Wl,-z,relro,-z,now -pie"; export LDFLAGS; +LDFLAGS=-Wl,-z,relro; export LDFLAGS; %configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \ --with-tiff --with-xft --with-xpm --with-x-toolkit=lucid --with-gpm=no \ - --with-harfbuzz --with-cairo --with-json \ - --with-modules --without-libotf --without-m17n-flt --without-imagemagick -%make_build bootstrap + --with-modules --with-harfbuzz --with-cairo --with-json \ + --with-native-compilation +%{setarch} %make_build bootstrap NATIVE_FULL_AOT=1 %{setarch} %make_build cd .. -%endif # Build binary without X support mkdir build-nox && cd build-nox ln -s ../configure . +%configure --with-x=no --with-modules --with-json --with-native-compilation +%{setarch} %make_build bootstrap NATIVE_FULL_AOT=1 +%{setarch} %make_build +cd .. -LDFLAGS="-Wl,-z,relro,-z,now -pie"; export LDFLAGS; +# Build GTK+ binary +mkdir build-gtk && cd build-gtk +ln -s ../configure . -%configure --with-x=no --with-modules --with-json +LDFLAGS=-Wl,-z,relro; export LDFLAGS; + +%configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \ + --with-tiff --with-xpm --with-x-toolkit=gtk3 --with-gpm=no \ + --with-xwidgets --with-modules --with-harfbuzz --with-cairo --with-json \ + --with-native-compilation +%{setarch} %make_build bootstrap NATIVE_FULL_AOT=1 %{setarch} %make_build -cd ../ +cd .. -# Generate pkgconfig file +# Remove versioned file so that we end up with .1 suffix and only one DOC file +rm build-{gtk,lucid,nox}/src/emacs-%{version}.* + +# Create pkgconfig file cat > emacs.pc << EOF -sitepkglispdir=%{_datadir}/emacs/site-lisp -sitestartdir=%{site_lisp}/site-start.d +sitepkglispdir=%{site_lisp} +sitestartdir=%{site_start_d} Name: emacs Description: GNU Emacs text editor Version: %{epoch}:%{version} EOF -# Generate macros.emacs RPM macro file +# Create macros.emacs RPM macro file cat > macros.emacs << EOF %%_emacs_version %{version} %%_emacs_ev %{?epoch:%{epoch}:}%{version} %%_emacs_evr %{?epoch:%{epoch}:}%{version}-%{release} -%%_emacs_sitelispdir %{_datadir}/emacs/site-lisp -%%_emacs_sitestartdir %{site_lisp}/site-start.d +%%_emacs_sitelispdir %{site_lisp} +%%_emacs_sitestartdir %{site_start_d} %%_emacs_bytecompile /usr/bin/emacs -batch --no-init-file --no-site-file --eval '(progn (setq load-path (cons "." load-path)))' -f batch-byte-compile EOF @@ -224,185 +312,209 @@ cd build-gtk %make_install cd .. +# Let alternatives manage the symlink rm %{buildroot}%{_bindir}/emacs touch %{buildroot}%{_bindir}/emacs -rm %{buildroot}%{emacs_libexecdir}/emacs.pdmp - -gunzip %{buildroot}%{_datadir}/emacs/%{version}/lisp/jka*.el.gz - +# Do not compress the files which implement compression itself (#484830) +gunzip %{buildroot}%{_datadir}/emacs/%{version}/lisp/jka-compr.el.gz +gunzip %{buildroot}%{_datadir}/emacs/%{version}/lisp/jka-cmpr-hook.el.gz -%if !%{with bootstrap} +# Install the emacs with LUCID toolkit install -p -m 0755 build-lucid/src/emacs %{buildroot}%{_bindir}/emacs-%{version}-lucid -%endif +# Install the emacs without X install -p -m 0755 build-nox/src/emacs %{buildroot}%{_bindir}/emacs-%{version}-nox +# Make sure movemail isn't setgid chmod 755 %{buildroot}%{emacs_libexecdir}/movemail -# Confirm movemail don't setgid mkdir -p %{buildroot}%{site_lisp} -install -p -m 0644 %SOURCE1 %{buildroot}%{_datadir}/emacs/site-lisp/site-start.el -install -p -m 0644 %SOURCE2 %{buildroot}%{_datadir}/emacs/site-lisp - -echo "(setq source-directory \"%{_datadir}/emacs/%{version}/\")" >> %{buildroot}%{_datadir}/emacs/site-lisp/site-start.el - -pushd %{buildroot}%{_bindir} -mv etags etags.emacs -mv ctags gctags -popd +install -p -m 0644 %SOURCE5 %{buildroot}%{site_lisp}/site-start.el +install -p -m 0644 %SOURCE6 %{buildroot}%{site_lisp} -pushd %{buildroot}%{_mandir}/man1 -mv ctags.1.gz gctags.1.gz -mv etags.1.gz etags.emacs.1.gz -popd +# This solves bz#474958, "update-directory-autoloads" now finally +# works the path is different each version, so we'll generate it here +echo "(setq source-directory \"%{_datadir}/emacs/%{version}/\")" \ + >> %{buildroot}%{site_lisp}/site-start.el -mv %{buildroot}%{_infodir}/info.info.gz %{buildroot}%{_infodir}/info.gz +mv %{buildroot}%{_bindir}/{etags,etags.emacs} +mv %{buildroot}%{_mandir}/man1/{ctags.1.gz,gctags.1.gz} +mv %{buildroot}%{_mandir}/man1/{etags.1.gz,etags.emacs.1.gz} +mv %{buildroot}%{_bindir}/{ctags,gctags} +# BZ 927996 +mv %{buildroot}%{_infodir}/{info.info.gz,info.gz} -install -d %{buildroot}%{_datadir}/emacs/site-lisp/site-start.d +mkdir -p %{buildroot}%{site_lisp}/site-start.d -install -d %{buildroot}/%{_datadir}/pkgconfig -install -p -m 0644 emacs.pc %{buildroot}/%{_datadir}/pkgconfig +# Default initialization file +mkdir -p %{buildroot}%{_sysconfdir}/skel +install -p -m 0644 %SOURCE4 %{buildroot}%{_sysconfdir}/skel/.emacs -mkdir -p %{buildroot}/%{_datadir}/appdata -cp -a %SOURCE8 %{buildroot}/%{_datadir}/appdata -rm %{buildroot}/%{_datadir}/metainfo/emacs.appdata.xml +# Install pkgconfig file +mkdir -p %{buildroot}/%{pkgconfig} +install -p -m 0644 emacs.pc %{buildroot}/%{pkgconfig} -install -d %{buildroot}%{_rpmconfigdir}/macros.d +# Install rpm macro definition file +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d install -p -m 0644 macros.emacs %{buildroot}%{_rpmconfigdir}/macros.d/ -install -p -m 755 %SOURCE4 %{buildroot}/%{_bindir}/emacs-terminal +# Installing emacs-terminal binary +install -p -m 755 %SOURCE8 %{buildroot}%{_bindir}/emacs-terminal +# After everything is installed, remove info dir rm -f %{buildroot}%{_infodir}/dir -install -d %{buildroot}%{_userunitdir} -install -p -m 0644 %SOURCE5 %{buildroot}%{_userunitdir}/emacs.service - -# Emacs 26.1 don't installs the upstream unit file to /usr/lib64 on 64bit archs. -rm -f %{buildroot}/usr/lib64/systemd/user/emacs.service - -mkdir -p %{buildroot}%{_datadir}/applications -desktop-file-install --dir=%{buildroot}%{_datadir}/applications \ - %SOURCE6 +# Install desktop files desktop-file-install --dir=%{buildroot}%{_datadir}/applications \ %SOURCE7 +# Remove duplicate desktop-related files +rm %{buildroot}%{_datadir}/%{name}/%{version}/etc/%{name}.{desktop,service} + +# We don't ship the client variants yet +# https://src.fedoraproject.org/rpms/emacs/pull-request/12 +rm %{buildroot}%{_datadir}/applications/emacsclient.desktop +rm %{buildroot}%{_datadir}/applications/emacsclient-mail.desktop + +# +# Create file lists +# rm -f *-filelist {common,el}-*-files ( TOPDIR=${PWD} cd %{buildroot} - find .%{_datadir}/emacs/%{version}/lisp .%{_datadir}/emacs/%{version}/lisp/leim \ - .%{_datadir}/emacs/site-lisp \( -type f -name '*.elc' -fprint $TOPDIR/common-lisp-none-elc-files \) -o \( -type d -fprintf $TOPDIR/common-lisp-dir-files "%%%%dir %%p\n" \) -o \( -name '*.el.gz' -fprint $TOPDIR/el-bytecomped-files -o -fprint $TOPDIR/common-not-comped-files \) + find .%{_datadir}/emacs/%{version}/lisp \ + .%{_datadir}/emacs/%{version}/lisp/leim \ + .%{_datadir}/emacs/site-lisp \( -type f -name '*.elc' -fprint $TOPDIR/common-lisp-none-elc-files \) -o \( -type d -fprintf $TOPDIR/common-lisp-dir-files "%%%%dir %%p\n" \) -o \( -name '*.el.gz' -fprint $TOPDIR/el-bytecomped-files -o -fprint $TOPDIR/common-not-comped-files \) + ) + +# Put the lists together after filtering ./usr to /usr sed -i -e "s|\.%{_prefix}|%{_prefix}|" *-files cat common-*-files > common-filelist cat el-*-files common-lisp-dir-files > el-filelist +# Remove old icon +rm %{buildroot}%{_datadir}/icons/hicolor/scalable/mimetypes/emacs-document23.svg + +# Install all the pdmp with fingerprints +gtk_pdmp="emacs-$(./build-gtk/src/emacs --fingerprint 2>&1 | sed 's/.* //').pdmp" +install -p -m 0644 build-gtk/src/emacs.pdmp %{buildroot}%{emacs_libexecdir}/${gtk_pdmp} + +lucid_pdmp="emacs-$(./build-lucid/src/emacs --fingerprint 2>&1 | sed 's/.* //').pdmp" +install -p -m 0644 build-lucid/src/emacs.pdmp %{buildroot}%{emacs_libexecdir}/${lucid_pdmp} + +nox_pdmp="emacs-$(./build-nox/src/emacs --fingerprint 2>&1 | sed 's/.* //').pdmp" +install -p -m 0644 build-nox/src/emacs.pdmp %{buildroot}%{emacs_libexecdir}/${nox_pdmp} + +# Install native compiled Lisp of all builds +gtk_comp_native_ver=$(ls -1 build-gtk/native-lisp) +lucid_comp_native_ver=$(ls -1 build-lucid/native-lisp) +nox_comp_native_ver=$(ls -1 build-nox/native-lisp) +cp -ar build-gtk/native-lisp/${gtk_comp_native_ver} %{buildroot}%{native_lisp} +cp -ar build-lucid/native-lisp/${lucid_comp_native_ver} %{buildroot}%{native_lisp} +cp -ar build-nox/native-lisp/${nox_comp_native_ver} %{buildroot}%{native_lisp} + +# List of binary specific files +echo %{emacs_libexecdir}/${gtk_pdmp} > gtk-filelist +echo %{emacs_libexecdir}/${lucid_pdmp} > lucid-filelist +echo %{emacs_libexecdir}/${nox_pdmp} > nox-filelist +echo %{native_lisp}/${gtk_comp_native_ver} >> gtk-filelist +echo %{native_lisp}/${lucid_comp_native_ver} >> lucid-filelist +echo %{native_lisp}/${nox_comp_native_ver} >> nox-filelist + +%check +appstream-util validate-relax --nonet %{buildroot}/%{_metainfodir}/*.metainfo.xml +desktop-file-validate %{buildroot}/%{_datadir}/applications/*.desktop + %preun -%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version} +%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version} || : %posttrans -%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version} 80 +%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version} 80 || : -%if !%{with bootstrap} %preun lucid -%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version}-lucid -%{_sbindir}/alternatives --remove emacs-lucid %{_bindir}/emacs-%{version}-lucid +%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version}-lucid || : +%{_sbindir}/alternatives --remove emacs-lucid %{_bindir}/emacs-%{version}-lucid || : %posttrans lucid -%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version}-lucid 70 -%{_sbindir}/alternatives --install %{_bindir}/emacs-lucid emacs-lucid %{_bindir}/emacs-%{version}-lucid 60 -%endif +%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version}-lucid 70 || : +%{_sbindir}/alternatives --install %{_bindir}/emacs-lucid emacs-lucid %{_bindir}/emacs-%{version}-lucid 60 || : %preun nox -%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version}-nox -%{_sbindir}/alternatives --remove emacs-nox %{_bindir}/emacs-%{version}-nox +%{_sbindir}/alternatives --remove emacs %{_bindir}/emacs-%{version}-nox || : +%{_sbindir}/alternatives --remove emacs-nox %{_bindir}/emacs-%{version}-nox || : %posttrans nox -%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version}-nox 70 -%{_sbindir}/alternatives --install %{_bindir}/emacs-nox emacs-nox %{_bindir}/emacs-%{version}-nox 60 - -%post common -for f in %{info_files}; do - /sbin/install-info %{_infodir}/$f.info.gz %{_infodir}/dir 2> /dev/null || : -done +%{_sbindir}/alternatives --install %{_bindir}/emacs emacs %{_bindir}/emacs-%{version}-nox 70 || : +%{_sbindir}/alternatives --install %{_bindir}/emacs-nox emacs-nox %{_bindir}/emacs-%{version}-nox 60 || : %preun common -%{_sbindir}/alternatives --remove emacs.etags %{_bindir}/etags.emacs -if [ "$1" = 0 ]; then - for f in %{info_files}; do - /sbin/install-info --delete %{_infodir}/$f.info.gz %{_infodir}/dir 2> /dev/null || : - done -fi +%{_sbindir}/alternatives --remove emacs.etags %{_bindir}/etags.emacs || : %posttrans common %{_sbindir}/alternatives --install %{_bindir}/etags emacs.etags %{_bindir}/etags.emacs 80 \ - --slave %{_mandir}/man1/etags.1.gz emacs.etags.man %{_mandir}/man1/etags.emacs.1.gz - + --slave %{_mandir}/man1/etags.1.gz emacs.etags.man %{_mandir}/man1/etags.emacs.1.gz || : -%files -%defattr(-,root,root) -%doc doc/NEWS BUGS README -%license etc/COPYING -%attr(0755,-,-) %ghost %{_bindir}/emacs +%files -f gtk-filelist %{_bindir}/emacs-%{version} -%{_datadir}/appdata/%{name}.appdata.xml -%{_datadir}/icons/hicolor/* +%attr(0755,-,-) %ghost %{_bindir}/emacs %{_datadir}/applications/emacs.desktop - -%files devel -%{_includedir}/emacs-module.h - -%if !%{with bootstrap} -%files lucid -%defattr(-,root,root) +%{_datadir}/applications/emacs-mail.desktop +%{_metainfodir}/%{name}.metainfo.xml +%{_datadir}/icons/hicolor/*/apps/emacs.png +%{_datadir}/icons/hicolor/scalable/apps/emacs.svg +%{_datadir}/icons/hicolor/scalable/apps/emacs.ico +%{_datadir}/icons/hicolor/scalable/mimetypes/emacs-document.svg + +%files lucid -f lucid-filelist +%{_bindir}/emacs-%{version}-lucid %attr(0755,-,-) %ghost %{_bindir}/emacs %attr(0755,-,-) %ghost %{_bindir}/emacs-lucid -%{_bindir}/emacs-%{version}-lucid -%endif -%files nox -%defattr(-,root,root) +%files nox -f nox-filelist +%{_bindir}/emacs-%{version}-nox %attr(0755,-,-) %ghost %{_bindir}/emacs %attr(0755,-,-) %ghost %{_bindir}/emacs-nox -%{_bindir}/emacs-%{version}-nox %files common -f common-filelist -f el-filelist -%defattr(-,root,root) -%doc doc/NEWS BUGS README -%license etc/COPYING +%config(noreplace) %{_sysconfdir}/skel/.emacs %{_rpmconfigdir}/macros.d/macros.emacs -%attr(0644,root,root) %config(noreplace) %{_datadir}/emacs/site-lisp/default.el -%attr(0644,root,root) %config %{_datadir}/emacs/site-lisp/site-start.el -%{_bindir}/gctags +%license etc/COPYING +%doc doc/NEWS BUGS README %{_bindir}/ebrowse %{_bindir}/emacsclient %{_bindir}/etags.emacs -%{_libexecdir}/emacs -%{pkgconfig}/emacs.pc -%{_userunitdir}/emacs.service +%{_bindir}/gctags +%{_mandir}/*/* +%{_infodir}/* %dir %{_datadir}/emacs/%{version} %{_datadir}/emacs/%{version}/etc %{_datadir}/emacs/%{version}/site-lisp -%{_infodir}/* +%{_libexecdir}/emacs +%{_userunitdir}/emacs.service +%attr(0644,root,root) %config(noreplace) %{_datadir}/emacs/site-lisp/default.el +%attr(0644,root,root) %config %{_datadir}/emacs/site-lisp/site-start.el +%{pkgconfig}/emacs.pc %files terminal %{_bindir}/emacs-terminal %{_datadir}/applications/emacs-terminal.desktop %files filesystem -%defattr(-,root,root) %dir %{_datadir}/emacs %dir %{_datadir}/emacs/site-lisp %dir %{_datadir}/emacs/site-lisp/site-start.d -%files help -%defattr(-,root,root) -%doc doc/NEWS BUGS README -%{_mandir}/*/* +%files devel +%{_includedir}/emacs-module.h %changelog +* Mon Nov 14 2022 hkgy - 1:28.1-1 +- Upgrade to v28.1 + * Fri Aug 26 2022 zhujunhao - 1:27.2-6 - close bootstrap with product_family diff --git a/gpgkey-17E90D521672C04631B1183EE78DAE0F3115E06B.gpg b/gpgkey-17E90D521672C04631B1183EE78DAE0F3115E06B.gpg new file mode 100644 index 0000000000000000000000000000000000000000..5e2fd16e656cfe9c3bbb275232b53e012e5d28cc --- /dev/null +++ b/gpgkey-17E90D521672C04631B1183EE78DAE0F3115E06B.gpg @@ -0,0 +1,53 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 17E9 0D52 1672 C046 31B1 183E E78D AE0F 3115 E06B +Comment: Eli Zaretskii + +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 +=+3ql +-----END PGP PUBLIC KEY BLOCK-----