diff options
| author | Paul Eggert | 2023-08-12 19:39:11 -0700 |
|---|---|---|
| committer | Paul Eggert | 2023-08-12 19:46:12 -0700 |
| commit | 5e736ca6ccfa131736ab0b3a298de2cb319e7dfb (patch) | |
| tree | 65b06f7a73dc2a04c60af430bc95102a347979df /m4 | |
| parent | b35431b218ada2d84eb251d18e5543388b598d80 (diff) | |
| download | emacs-5e736ca6ccfa131736ab0b3a298de2cb319e7dfb.tar.gz emacs-5e736ca6ccfa131736ab0b3a298de2cb319e7dfb.zip | |
Improve boot-time gathering
Simplify Emacs proper by using Gnulib’s boot-time module
instead of doing it all by hand. This should port Emacs
better to obscurish hosts, as Bruno Haible has merged the
best of Emacs’s and Gnulib’s boot-time gathering.
* lib/boot-time-aux.h, lib/boot-time.c, lib/boot-time.h:
* lib/readutmp.h, m4/readutmp.m4: New files, copied from Gnulib.
* admin/merge-gnulib (GNULIB_MODULES): Add boot-time.
* configure.ac: Do not check for utmp.h;
the boot-time module now does this.
(BOOT_TIME_FILE): Remove; no longer used.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* src/filelock.c [__FreeBSD__]: Do not include <sys/sysctl.h>.
[HAVE_UTMP_H]: Do not include utmp.h.
Include boot-time instead: boot-time does the work now.
(BOOT_TIME) [HAVE_ANDROID && !ANDROID_STUBIFY]: Don’t undef.
(WTMP_FILE): Don’t define.
(boot_time, boot_time_initialized, get_boot_time_1, get_boot_time):
Remove.
(get_boot_sec): New function that simply calls Gnulib get_boot_time.
(lock_file_1, current_lock_owner): Use get_boot_sec instead
of get_boot_time.
Diffstat (limited to 'm4')
| -rw-r--r-- | m4/gnulib-comp.m4 | 7 | ||||
| -rw-r--r-- | m4/readutmp.m4 | 117 |
2 files changed, 124 insertions, 0 deletions
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 3382e9bc241..14ff92040a4 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 | |||
| @@ -51,6 +51,7 @@ AC_DEFUN([gl_EARLY], | |||
| 51 | # Code from module at-internal: | 51 | # Code from module at-internal: |
| 52 | # Code from module attribute: | 52 | # Code from module attribute: |
| 53 | # Code from module binary-io: | 53 | # Code from module binary-io: |
| 54 | # Code from module boot-time: | ||
| 54 | # Code from module builtin-expect: | 55 | # Code from module builtin-expect: |
| 55 | # Code from module byteswap: | 56 | # Code from module byteswap: |
| 56 | # Code from module c-ctype: | 57 | # Code from module c-ctype: |
| @@ -243,6 +244,7 @@ AC_DEFUN([gl_INIT], | |||
| 243 | gl_ASSERT_H | 244 | gl_ASSERT_H |
| 244 | gl_CONDITIONAL_HEADER([assert.h]) | 245 | gl_CONDITIONAL_HEADER([assert.h]) |
| 245 | AC_PROG_MKDIR_P | 246 | AC_PROG_MKDIR_P |
| 247 | gl_PREREQ_READUTMP_H | ||
| 246 | gl___BUILTIN_EXPECT | 248 | gl___BUILTIN_EXPECT |
| 247 | gl_BYTESWAP | 249 | gl_BYTESWAP |
| 248 | gl_CONDITIONAL_HEADER([byteswap.h]) | 250 | gl_CONDITIONAL_HEADER([byteswap.h]) |
| @@ -1252,6 +1254,9 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 1252 | lib/attribute.h | 1254 | lib/attribute.h |
| 1253 | lib/binary-io.c | 1255 | lib/binary-io.c |
| 1254 | lib/binary-io.h | 1256 | lib/binary-io.h |
| 1257 | lib/boot-time-aux.h | ||
| 1258 | lib/boot-time.c | ||
| 1259 | lib/boot-time.h | ||
| 1255 | lib/byteswap.in.h | 1260 | lib/byteswap.in.h |
| 1256 | lib/c++defs.h | 1261 | lib/c++defs.h |
| 1257 | lib/c-ctype.c | 1262 | lib/c-ctype.c |
| @@ -1383,6 +1388,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 1383 | lib/rawmemchr.valgrind | 1388 | lib/rawmemchr.valgrind |
| 1384 | lib/readlink.c | 1389 | lib/readlink.c |
| 1385 | lib/readlinkat.c | 1390 | lib/readlinkat.c |
| 1391 | lib/readutmp.h | ||
| 1386 | lib/realloc.c | 1392 | lib/realloc.c |
| 1387 | lib/regcomp.c | 1393 | lib/regcomp.c |
| 1388 | lib/regex.c | 1394 | lib/regex.c |
| @@ -1542,6 +1548,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 1542 | m4/rawmemchr.m4 | 1548 | m4/rawmemchr.m4 |
| 1543 | m4/readlink.m4 | 1549 | m4/readlink.m4 |
| 1544 | m4/readlinkat.m4 | 1550 | m4/readlinkat.m4 |
| 1551 | m4/readutmp.m4 | ||
| 1545 | m4/realloc.m4 | 1552 | m4/realloc.m4 |
| 1546 | m4/regex.m4 | 1553 | m4/regex.m4 |
| 1547 | m4/sha1.m4 | 1554 | m4/sha1.m4 |
diff --git a/m4/readutmp.m4 b/m4/readutmp.m4 new file mode 100644 index 00000000000..fff8d4eb7bf --- /dev/null +++ b/m4/readutmp.m4 | |||
| @@ -0,0 +1,117 @@ | |||
| 1 | # readutmp.m4 serial 28 | ||
| 2 | dnl Copyright (C) 2002-2023 Free Software Foundation, Inc. | ||
| 3 | dnl This file is free software; the Free Software Foundation | ||
| 4 | dnl gives unlimited permission to copy and/or distribute it, | ||
| 5 | dnl with or without modifications, as long as this notice is preserved. | ||
| 6 | |||
| 7 | AC_DEFUN([gl_READUTMP], | ||
| 8 | [ | ||
| 9 | AC_REQUIRE([gl_SYSTEMD_CHOICE]) | ||
| 10 | |||
| 11 | dnl Set READUTMP_LIB to '-lsystemd' or '', depending on whether use of | ||
| 12 | dnl systemd APIs is possible and desired (only the systemd login API, here). | ||
| 13 | dnl AC_LIB_LINKFLAGS_BODY would be overkill here, since few people install | ||
| 14 | dnl libsystemd in non-system directories. | ||
| 15 | READUTMP_LIB= | ||
| 16 | if test "$SYSTEMD_CHOICE" = yes; then | ||
| 17 | AC_CHECK_HEADER([systemd/sd-login.h]) | ||
| 18 | if test $ac_cv_header_systemd_sd_login_h = yes; then | ||
| 19 | AC_CACHE_CHECK([for libsystemd version >= 254], | ||
| 20 | [gl_cv_lib_readutmp_systemd], | ||
| 21 | [gl_save_LIBS="$LIBS" | ||
| 22 | LIBS="$LIBS -lsystemd" | ||
| 23 | AC_LINK_IFELSE( | ||
| 24 | [AC_LANG_PROGRAM([[ | ||
| 25 | #include <stdint.h> | ||
| 26 | #include <systemd/sd-login.h> | ||
| 27 | ]], [[ | ||
| 28 | uint64_t st; | ||
| 29 | sd_session_get_start_time ("1", &st); | ||
| 30 | ]]) | ||
| 31 | ], | ||
| 32 | [gl_cv_lib_readutmp_systemd=yes], | ||
| 33 | [gl_cv_lib_readutmp_systemd=no]) | ||
| 34 | LIBS="$gl_save_LIBS" | ||
| 35 | ]) | ||
| 36 | if test $gl_cv_lib_readutmp_systemd = yes; then | ||
| 37 | AC_DEFINE([READUTMP_USE_SYSTEMD], [1], | ||
| 38 | [Define if the readutmp module should use the systemd login API.]) | ||
| 39 | READUTMP_LIB='-lsystemd' | ||
| 40 | fi | ||
| 41 | fi | ||
| 42 | fi | ||
| 43 | AC_SUBST([READUTMP_LIB]) | ||
| 44 | |||
| 45 | gl_PREREQ_READUTMP_H | ||
| 46 | ]) | ||
| 47 | |||
| 48 | # Prerequisites of readutmp.h and boot-time-aux.h. | ||
| 49 | AC_DEFUN_ONCE([gl_PREREQ_READUTMP_H], | ||
| 50 | [ | ||
| 51 | dnl Persuade utmpx.h to declare utmpxname | ||
| 52 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) | ||
| 53 | |||
| 54 | AC_CHECK_HEADERS_ONCE([utmp.h utmpx.h]) | ||
| 55 | if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then | ||
| 56 | dnl Prerequisites of lib/readutmp.h and lib/readutmp.c. | ||
| 57 | AC_CHECK_FUNCS_ONCE([utmpname utmpxname]) | ||
| 58 | AC_CHECK_DECLS([getutent],,,[[ | ||
| 59 | /* <sys/types.h> is a prerequisite of <utmp.h> on FreeBSD 8.0, OpenBSD 4.6. */ | ||
| 60 | #include <sys/types.h> | ||
| 61 | #ifdef HAVE_UTMP_H | ||
| 62 | # include <utmp.h> | ||
| 63 | #endif | ||
| 64 | ]]) | ||
| 65 | utmp_includes="\ | ||
| 66 | AC_INCLUDES_DEFAULT | ||
| 67 | #ifdef HAVE_UTMPX_H | ||
| 68 | # include <utmpx.h> | ||
| 69 | #endif | ||
| 70 | #ifdef HAVE_UTMP_H | ||
| 71 | # if defined _THREAD_SAFE && defined UTMP_DATA_INIT | ||
| 72 | /* When including both utmp.h and utmpx.h on AIX 4.3, with _THREAD_SAFE | ||
| 73 | defined, work around the duplicate struct utmp_data declaration. */ | ||
| 74 | # define utmp_data gl_aix_4_3_workaround_utmp_data | ||
| 75 | # endif | ||
| 76 | # include <utmp.h> | ||
| 77 | #endif | ||
| 78 | " | ||
| 79 | AC_CHECK_MEMBERS([struct utmpx.ut_user],,,[$utmp_includes]) | ||
| 80 | AC_CHECK_MEMBERS([struct utmp.ut_user],,,[$utmp_includes]) | ||
| 81 | AC_CHECK_MEMBERS([struct utmpx.ut_name],,,[$utmp_includes]) | ||
| 82 | AC_CHECK_MEMBERS([struct utmp.ut_name],,,[$utmp_includes]) | ||
| 83 | AC_CHECK_MEMBERS([struct utmpx.ut_type],,,[$utmp_includes]) | ||
| 84 | AC_CHECK_MEMBERS([struct utmp.ut_type],,,[$utmp_includes]) | ||
| 85 | AC_CHECK_MEMBERS([struct utmpx.ut_pid],,,[$utmp_includes]) | ||
| 86 | AC_CHECK_MEMBERS([struct utmp.ut_pid],,,[$utmp_includes]) | ||
| 87 | AC_CHECK_MEMBERS([struct utmp.ut_tv],,,[$utmp_includes]) | ||
| 88 | AC_CHECK_MEMBERS([struct utmpx.ut_host],,,[$utmp_includes]) | ||
| 89 | AC_CHECK_MEMBERS([struct utmp.ut_host],,,[$utmp_includes]) | ||
| 90 | AC_CHECK_MEMBERS([struct utmpx.ut_id],,,[$utmp_includes]) | ||
| 91 | AC_CHECK_MEMBERS([struct utmp.ut_id],,,[$utmp_includes]) | ||
| 92 | AC_CHECK_MEMBERS([struct utmpx.ut_session],,,[$utmp_includes]) | ||
| 93 | AC_CHECK_MEMBERS([struct utmp.ut_session],,,[$utmp_includes]) | ||
| 94 | AC_CHECK_MEMBERS([struct utmpx.ut_exit],,,[$utmp_includes]) | ||
| 95 | AC_CHECK_MEMBERS([struct utmp.ut_exit],,,[$utmp_includes]) | ||
| 96 | |||
| 97 | AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_exit],,,[$utmp_includes]) | ||
| 98 | AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_exit],,,[$utmp_includes]) | ||
| 99 | AC_CHECK_MEMBERS([struct utmp.ut_exit.e_exit],,,[$utmp_includes]) | ||
| 100 | |||
| 101 | AC_CHECK_MEMBERS([struct utmpx.ut_exit.ut_termination],,,[$utmp_includes]) | ||
| 102 | AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_termination],,,[$utmp_includes]) | ||
| 103 | AC_CHECK_MEMBERS([struct utmp.ut_exit.e_termination],,,[$utmp_includes]) | ||
| 104 | fi | ||
| 105 | |||
| 106 | AC_CHECK_HEADERS_ONCE([sys/param.h]) | ||
| 107 | dnl <sys/sysctl.h> requires <sys/param.h> on OpenBSD 4.0. | ||
| 108 | AC_CHECK_HEADERS([sys/sysctl.h],,, | ||
| 109 | [AC_INCLUDES_DEFAULT | ||
| 110 | #if HAVE_SYS_PARAM_H | ||
| 111 | # include <sys/param.h> | ||
| 112 | #endif | ||
| 113 | ]) | ||
| 114 | AC_CHECK_FUNCS([sysctl]) | ||
| 115 | |||
| 116 | AC_CHECK_HEADERS_ONCE([OS.h]) | ||
| 117 | ]) | ||