summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2022-02-04 15:11:47 +0000
committerColin Watson <cjwatson@debian.org>2022-02-04 15:11:47 +0000
commit828b489c68a5a022c106656cfdff19bb9b584eec (patch)
tree7225919cd6e445d94080fa108a1a6b05fb890cf7 /lib
parenta2d4ffce13a855f29a63bac2099ebe0f5a4e50bd (diff)
parentbfe34108bc20e9d75e3f08bfc8305e4f4cd632a9 (diff)
Import man-db_2.10.0.orig.tar.xz
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am11
-rw-r--r--lib/Makefile.in832
-rw-r--r--lib/README18
-rw-r--r--lib/appendstr.c6
-rw-r--r--lib/appendstr.h24
-rw-r--r--lib/cleanup.c4
-rw-r--r--lib/debug.c9
-rw-r--r--lib/debug.h32
-rw-r--r--lib/encodings.c189
-rw-r--r--lib/encodings.h2
-rw-r--r--lib/fatal.c48
-rw-r--r--lib/fatal.h26
-rw-r--r--lib/glcontainers.c5
-rw-r--r--lib/glcontainers.h36
-rw-r--r--lib/mp.h483
-rw-r--r--lib/orderfiles.c13
-rw-r--r--lib/pathsearch.c15
-rw-r--r--lib/sandbox.c82
-rw-r--r--lib/sandbox.h2
-rw-r--r--lib/security.c25
-rw-r--r--lib/tempfile.c4
-rw-r--r--lib/tempfile.h24
-rw-r--r--lib/util.c11
-rw-r--r--lib/util.h31
-rw-r--r--lib/wordfnmatch.c1
-rw-r--r--lib/xregcomp.c7
26 files changed, 1321 insertions, 619 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index e5bd626c..475fea04 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -25,24 +25,28 @@ dist_noinst_DATA = README
AM_CFLAGS = $(WARN_CFLAGS)
libman_la_CPPFLAGS = \
- -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
-I$(top_srcdir)/gl/lib \
-I$(top_builddir)/gl/lib \
-DLOCALEDIR=\"$(localedir)\" \
- $(libpipeline_CFLAGS) \
$(libseccomp_CFLAGS)
libman_la_SOURCES = \
appendstr.c \
+ appendstr.h \
cleanup.c \
cleanup.h \
debug.c \
+ debug.h \
encodings.c \
encodings.h \
+ fatal.c \
+ fatal.h \
glcontainers.c \
glcontainers.h \
linelength.c \
linelength.h \
+ mp.h \
orderfiles.c \
orderfiles.h \
pathsearch.c \
@@ -52,7 +56,9 @@ libman_la_SOURCES = \
security.c \
security.h \
tempfile.c \
+ tempfile.h \
util.c \
+ util.h \
wordfnmatch.c \
wordfnmatch.h \
xregcomp.c \
@@ -64,5 +70,4 @@ libman_la_LIBADD = ../gl/lib/libgnu.la $(LTLIBOBJS) \
libman_la_LDFLAGS = \
-avoid-version -release $(VERSION) -rpath $(pkglibdir) \
-no-undefined \
- $(libpipeline_LIBS) \
$(libseccomp_LIBS)
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 872757c6..3aa38d11 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.3 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -121,13 +121,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/asm-underscore.m4 \
$(top_srcdir)/gl/m4/btowc.m4 \
$(top_srcdir)/gl/m4/builtin-expect.m4 \
+ $(top_srcdir)/gl/m4/calloc.m4 \
$(top_srcdir)/gl/m4/canonicalize.m4 \
$(top_srcdir)/gl/m4/chdir-long.m4 $(top_srcdir)/gl/m4/chown.m4 \
$(top_srcdir)/gl/m4/clock_time.m4 $(top_srcdir)/gl/m4/close.m4 \
$(top_srcdir)/gl/m4/closedir.m4 $(top_srcdir)/gl/m4/codeset.m4 \
- $(top_srcdir)/gl/m4/ctype.m4 $(top_srcdir)/gl/m4/d-ino.m4 \
+ $(top_srcdir)/gl/m4/ctype_h.m4 $(top_srcdir)/gl/m4/d-ino.m4 \
$(top_srcdir)/gl/m4/d-type.m4 $(top_srcdir)/gl/m4/dirent_h.m4 \
- $(top_srcdir)/gl/m4/dirfd.m4 $(top_srcdir)/gl/m4/dirname.m4 \
+ $(top_srcdir)/gl/m4/dirfd.m4 \
$(top_srcdir)/gl/m4/double-slash-root.m4 \
$(top_srcdir)/gl/m4/dup.m4 $(top_srcdir)/gl/m4/dup2.m4 \
$(top_srcdir)/gl/m4/eealloc.m4 $(top_srcdir)/gl/m4/environ.m4 \
@@ -142,8 +143,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/flexmember.m4 \
$(top_srcdir)/gl/m4/float_h.m4 $(top_srcdir)/gl/m4/flock.m4 \
$(top_srcdir)/gl/m4/fnmatch.m4 \
- $(top_srcdir)/gl/m4/fnmatch_h.m4 $(top_srcdir)/gl/m4/fstat.m4 \
- $(top_srcdir)/gl/m4/fstatat.m4 $(top_srcdir)/gl/m4/futimens.m4 \
+ $(top_srcdir)/gl/m4/fnmatch_h.m4 $(top_srcdir)/gl/m4/free.m4 \
+ $(top_srcdir)/gl/m4/fstat.m4 $(top_srcdir)/gl/m4/fstatat.m4 \
$(top_srcdir)/gl/m4/getcwd-abort-bug.m4 \
$(top_srcdir)/gl/m4/getcwd-path-max.m4 \
$(top_srcdir)/gl/m4/getcwd.m4 $(top_srcdir)/gl/m4/getdelim.m4 \
@@ -153,10 +154,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/getopt.m4 \
$(top_srcdir)/gl/m4/getpagesize.m4 \
$(top_srcdir)/gl/m4/getprogname.m4 \
+ $(top_srcdir)/gl/m4/getrandom.m4 \
$(top_srcdir)/gl/m4/gettext.m4 $(top_srcdir)/gl/m4/gettime.m4 \
$(top_srcdir)/gl/m4/gettimeofday.m4 \
- $(top_srcdir)/gl/m4/glibc21.m4 $(top_srcdir)/gl/m4/glob.m4 \
- $(top_srcdir)/gl/m4/glob_h.m4 \
+ $(top_srcdir)/gl/m4/glob.m4 $(top_srcdir)/gl/m4/glob_h.m4 \
$(top_srcdir)/gl/m4/gnulib-common.m4 \
$(top_srcdir)/gl/m4/gnulib-comp.m4 \
$(top_srcdir)/gl/m4/host-cpu-c-abi.m4 \
@@ -178,10 +179,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/locale-ja.m4 \
$(top_srcdir)/gl/m4/locale-zh.m4 \
$(top_srcdir)/gl/m4/locale_h.m4 \
- $(top_srcdir)/gl/m4/localeconv.m4 \
- $(top_srcdir)/gl/m4/localtime-buffer.m4 \
- $(top_srcdir)/gl/m4/lock.m4 $(top_srcdir)/gl/m4/lstat.m4 \
- $(top_srcdir)/gl/m4/ltoptions.m4 \
+ $(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \
+ $(top_srcdir)/gl/m4/lstat.m4 $(top_srcdir)/gl/m4/ltoptions.m4 \
$(top_srcdir)/gl/m4/ltsugar.m4 \
$(top_srcdir)/gl/m4/ltversion.m4 \
$(top_srcdir)/gl/m4/lt~obsolete.m4 \
@@ -206,16 +205,19 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/open-cloexec.m4 \
$(top_srcdir)/gl/m4/open-slash.m4 $(top_srcdir)/gl/m4/open.m4 \
$(top_srcdir)/gl/m4/openat.m4 $(top_srcdir)/gl/m4/opendir.m4 \
- $(top_srcdir)/gl/m4/pathmax.m4 $(top_srcdir)/gl/m4/po.m4 \
- $(top_srcdir)/gl/m4/printf.m4 $(top_srcdir)/gl/m4/progtest.m4 \
+ $(top_srcdir)/gl/m4/pathmax.m4 $(top_srcdir)/gl/m4/pipe.m4 \
+ $(top_srcdir)/gl/m4/po.m4 $(top_srcdir)/gl/m4/printf.m4 \
+ $(top_srcdir)/gl/m4/progtest.m4 \
$(top_srcdir)/gl/m4/pthread_rwlock_rdlock.m4 \
$(top_srcdir)/gl/m4/raise.m4 $(top_srcdir)/gl/m4/rawmemchr.m4 \
$(top_srcdir)/gl/m4/readdir.m4 $(top_srcdir)/gl/m4/readlink.m4 \
- $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/regex.m4 \
- $(top_srcdir)/gl/m4/rename.m4 $(top_srcdir)/gl/m4/renameat.m4 \
+ $(top_srcdir)/gl/m4/realloc.m4 \
+ $(top_srcdir)/gl/m4/reallocarray.m4 \
+ $(top_srcdir)/gl/m4/regex.m4 $(top_srcdir)/gl/m4/rename.m4 \
+ $(top_srcdir)/gl/m4/renameat.m4 \
$(top_srcdir)/gl/m4/rewinddir.m4 $(top_srcdir)/gl/m4/rmdir.m4 \
- $(top_srcdir)/gl/m4/same.m4 $(top_srcdir)/gl/m4/save-cwd.m4 \
- $(top_srcdir)/gl/m4/select.m4 $(top_srcdir)/gl/m4/setenv.m4 \
+ $(top_srcdir)/gl/m4/save-cwd.m4 $(top_srcdir)/gl/m4/select.m4 \
+ $(top_srcdir)/gl/m4/setenv.m4 \
$(top_srcdir)/gl/m4/setlocale_null.m4 \
$(top_srcdir)/gl/m4/sigaction.m4 \
$(top_srcdir)/gl/m4/signal_h.m4 \
@@ -225,7 +227,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/sockets.m4 $(top_srcdir)/gl/m4/socklen.m4 \
$(top_srcdir)/gl/m4/ssize_t.m4 \
$(top_srcdir)/gl/m4/stat-time.m4 $(top_srcdir)/gl/m4/stat.m4 \
- $(top_srcdir)/gl/m4/std-gnu11.m4 \
$(top_srcdir)/gl/m4/stdalign.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
$(top_srcdir)/gl/m4/stdbool.m4 $(top_srcdir)/gl/m4/stddef_h.m4 \
$(top_srcdir)/gl/m4/stdint.m4 $(top_srcdir)/gl/m4/stdint_h.m4 \
@@ -240,6 +241,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/strsep.m4 \
$(top_srcdir)/gl/m4/sys_file_h.m4 \
$(top_srcdir)/gl/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/gl/m4/sys_random_h.m4 \
$(top_srcdir)/gl/m4/sys_select_h.m4 \
$(top_srcdir)/gl/m4/sys_socket_h.m4 \
$(top_srcdir)/gl/m4/sys_stat_h.m4 \
@@ -267,6 +269,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \
$(top_srcdir)/gl/m4/xalloc.m4 $(top_srcdir)/gl/m4/xgetcwd.m4 \
$(top_srcdir)/gl/m4/xsize.m4 $(top_srcdir)/gl/m4/xstrndup.m4 \
$(top_srcdir)/gl/m4/xvasprintf.m4 \
+ $(top_srcdir)/gl/m4/year2038.m4 \
$(top_srcdir)/gl/m4/zzgnulib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -307,7 +310,7 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(pkglib_LTLIBRARIES)
libman_la_DEPENDENCIES = ../gl/lib/libgnu.la $(LTLIBOBJS)
am_libman_la_OBJECTS = libman_la-appendstr.lo libman_la-cleanup.lo \
- libman_la-debug.lo libman_la-encodings.lo \
+ libman_la-debug.lo libman_la-encodings.lo libman_la-fatal.lo \
libman_la-glcontainers.lo libman_la-linelength.lo \
libman_la-orderfiles.lo libman_la-pathsearch.lo \
libman_la-sandbox.lo libman_la-security.lo \
@@ -340,6 +343,7 @@ am__depfiles_remade = ./$(DEPDIR)/libman_la-appendstr.Plo \
./$(DEPDIR)/libman_la-cleanup.Plo \
./$(DEPDIR)/libman_la-debug.Plo \
./$(DEPDIR)/libman_la-encodings.Plo \
+ ./$(DEPDIR)/libman_la-fatal.Plo \
./$(DEPDIR)/libman_la-glcontainers.Plo \
./$(DEPDIR)/libman_la-linelength.Plo \
./$(DEPDIR)/libman_la-orderfiles.Plo \
@@ -394,8 +398,6 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in \
$(top_srcdir)/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -423,6 +425,8 @@ CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CYGPATH_W = @CYGPATH_W@
DBLIBS = @DBLIBS@
DBTYPE = @DBTYPE@
@@ -442,6 +446,7 @@ ENOLINK_VALUE = @ENOLINK_VALUE@
EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
ERRNO_H = @ERRNO_H@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FLOAT_H = @FLOAT_H@
@@ -449,319 +454,389 @@ FNMATCH_H = @FNMATCH_H@
GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
GETOPT_H = @GETOPT_H@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GLIBC21 = @GLIBC21@
GLOB_H = @GLOB_H@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFS = @GL_GNULIB_FFS@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@
+GL_GNULIB_FNMATCH = @GL_GNULIB_FNMATCH@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GLOB = @GL_GNULIB_GLOB@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READDIR = @GL_GNULIB_READDIR@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIME = @GL_GNULIB_UTIME@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
-GNULIB_ACCEPT = @GNULIB_ACCEPT@
-GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
-GNULIB_ACCESS = @GNULIB_ACCESS@
-GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
-GNULIB_ATOLL = @GNULIB_ATOLL@
-GNULIB_BIND = @GNULIB_BIND@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
-GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
-GNULIB_CHDIR = @GNULIB_CHDIR@
-GNULIB_CHOWN = @GNULIB_CHOWN@
-GNULIB_CLOSE = @GNULIB_CLOSE@
-GNULIB_CLOSEDIR = @GNULIB_CLOSEDIR@
-GNULIB_CONNECT = @GNULIB_CONNECT@
-GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
-GNULIB_CREAT = @GNULIB_CREAT@
-GNULIB_CTIME = @GNULIB_CTIME@
-GNULIB_DIRFD = @GNULIB_DIRFD@
-GNULIB_DPRINTF = @GNULIB_DPRINTF@
-GNULIB_DUP = @GNULIB_DUP@
-GNULIB_DUP2 = @GNULIB_DUP2@
-GNULIB_DUP3 = @GNULIB_DUP3@
-GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@
-GNULIB_ENVIRON = @GNULIB_ENVIRON@
-GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
-GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
-GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
-GNULIB_FCHDIR = @GNULIB_FCHDIR@
-GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
-GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
-GNULIB_FCLOSE = @GNULIB_FCLOSE@
-GNULIB_FCNTL = @GNULIB_FCNTL@
-GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
-GNULIB_FDOPEN = @GNULIB_FDOPEN@
-GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
-GNULIB_FFLUSH = @GNULIB_FFLUSH@
-GNULIB_FFS = @GNULIB_FFS@
-GNULIB_FFSL = @GNULIB_FFSL@
-GNULIB_FFSLL = @GNULIB_FFSLL@
-GNULIB_FGETC = @GNULIB_FGETC@
-GNULIB_FGETS = @GNULIB_FGETS@
-GNULIB_FLOCK = @GNULIB_FLOCK@
-GNULIB_FNMATCH = @GNULIB_FNMATCH@
-GNULIB_FOPEN = @GNULIB_FOPEN@
-GNULIB_FPRINTF = @GNULIB_FPRINTF@
-GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
-GNULIB_FPURGE = @GNULIB_FPURGE@
-GNULIB_FPUTC = @GNULIB_FPUTC@
-GNULIB_FPUTS = @GNULIB_FPUTS@
-GNULIB_FREAD = @GNULIB_FREAD@
-GNULIB_FREOPEN = @GNULIB_FREOPEN@
-GNULIB_FSCANF = @GNULIB_FSCANF@
-GNULIB_FSEEK = @GNULIB_FSEEK@
-GNULIB_FSEEKO = @GNULIB_FSEEKO@
-GNULIB_FSTAT = @GNULIB_FSTAT@
-GNULIB_FSTATAT = @GNULIB_FSTATAT@
-GNULIB_FSYNC = @GNULIB_FSYNC@
-GNULIB_FTELL = @GNULIB_FTELL@
-GNULIB_FTELLO = @GNULIB_FTELLO@
-GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
-GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
-GNULIB_FWRITE = @GNULIB_FWRITE@
-GNULIB_GETC = @GNULIB_GETC@
-GNULIB_GETCHAR = @GNULIB_GETCHAR@
-GNULIB_GETCWD = @GNULIB_GETCWD@
-GNULIB_GETDELIM = @GNULIB_GETDELIM@
-GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
-GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
-GNULIB_GETENTROPY = @GNULIB_GETENTROPY@
-GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
-GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
-GNULIB_GETLINE = @GNULIB_GETLINE@
-GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
-GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
-GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
-GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@
-GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
-GNULIB_GETPASS = @GNULIB_GETPASS@
-GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@
-GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@
-GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@
-GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
-GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
-GNULIB_GLOB = @GNULIB_GLOB@
-GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
-GNULIB_GRANTPT = @GNULIB_GRANTPT@
-GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_IOCTL = @GNULIB_IOCTL@
-GNULIB_ISATTY = @GNULIB_ISATTY@
-GNULIB_ISBLANK = @GNULIB_ISBLANK@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@
-GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@
-GNULIB_LCHMOD = @GNULIB_LCHMOD@
-GNULIB_LCHOWN = @GNULIB_LCHOWN@
-GNULIB_LINK = @GNULIB_LINK@
-GNULIB_LINKAT = @GNULIB_LINKAT@
-GNULIB_LISTEN = @GNULIB_LISTEN@
-GNULIB_LOCALECONV = @GNULIB_LOCALECONV@
-GNULIB_LOCALENAME = @GNULIB_LOCALENAME@
-GNULIB_LOCALTIME = @GNULIB_LOCALTIME@
-GNULIB_LSEEK = @GNULIB_LSEEK@
-GNULIB_LSTAT = @GNULIB_LSTAT@
-GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
-GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
-GNULIB_MBSCHR = @GNULIB_MBSCHR@
-GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSLEN = @GNULIB_MBSLEN@
-GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
-GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
-GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
-GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_MBSSEP = @GNULIB_MBSSEP@
-GNULIB_MBSSPN = @GNULIB_MBSSPN@
-GNULIB_MBSSTR = @GNULIB_MBSSTR@
-GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
-GNULIB_MBTOWC = @GNULIB_MBTOWC@
-GNULIB_MEMCHR = @GNULIB_MEMCHR@
-GNULIB_MEMMEM = @GNULIB_MEMMEM@
-GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
-GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
-GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
-GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
-GNULIB_MKFIFO = @GNULIB_MKFIFO@
-GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
-GNULIB_MKNOD = @GNULIB_MKNOD@
-GNULIB_MKNODAT = @GNULIB_MKNODAT@
-GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
-GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
-GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
-GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
-GNULIB_MKTIME = @GNULIB_MKTIME@
-GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
-GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
-GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
-GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
-GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
-GNULIB_OPEN = @GNULIB_OPEN@
-GNULIB_OPENAT = @GNULIB_OPENAT@
-GNULIB_OPENDIR = @GNULIB_OPENDIR@
-GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@
-GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
-GNULIB_PCLOSE = @GNULIB_PCLOSE@
-GNULIB_PERROR = @GNULIB_PERROR@
-GNULIB_PIPE = @GNULIB_PIPE@
-GNULIB_PIPE2 = @GNULIB_PIPE2@
-GNULIB_POPEN = @GNULIB_POPEN@
-GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
-GNULIB_PREAD = @GNULIB_PREAD@
-GNULIB_PRINTF = @GNULIB_PRINTF@
-GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
-GNULIB_PSELECT = @GNULIB_PSELECT@
-GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
-GNULIB_PTSNAME = @GNULIB_PTSNAME@
-GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
-GNULIB_PUTC = @GNULIB_PUTC@
-GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
-GNULIB_PUTENV = @GNULIB_PUTENV@
-GNULIB_PUTS = @GNULIB_PUTS@
-GNULIB_PWRITE = @GNULIB_PWRITE@
-GNULIB_QSORT_R = @GNULIB_QSORT_R@
-GNULIB_RAISE = @GNULIB_RAISE@
-GNULIB_RANDOM = @GNULIB_RANDOM@
-GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
-GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
-GNULIB_READ = @GNULIB_READ@
-GNULIB_READDIR = @GNULIB_READDIR@
-GNULIB_READLINK = @GNULIB_READLINK@
-GNULIB_READLINKAT = @GNULIB_READLINKAT@
-GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
-GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
-GNULIB_REALPATH = @GNULIB_REALPATH@
-GNULIB_RECV = @GNULIB_RECV@
-GNULIB_RECVFROM = @GNULIB_RECVFROM@
-GNULIB_REMOVE = @GNULIB_REMOVE@
-GNULIB_RENAME = @GNULIB_RENAME@
-GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
-GNULIB_REWINDDIR = @GNULIB_REWINDDIR@
-GNULIB_RMDIR = @GNULIB_RMDIR@
-GNULIB_RPMATCH = @GNULIB_RPMATCH@
-GNULIB_SCANDIR = @GNULIB_SCANDIR@
-GNULIB_SCANF = @GNULIB_SCANF@
-GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
-GNULIB_SELECT = @GNULIB_SELECT@
-GNULIB_SEND = @GNULIB_SEND@
-GNULIB_SENDTO = @GNULIB_SENDTO@
-GNULIB_SETENV = @GNULIB_SETENV@
-GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
-GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
-GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@
-GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@
-GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@
-GNULIB_SIGACTION = @GNULIB_SIGACTION@
-GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
-GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
-GNULIB_SLEEP = @GNULIB_SLEEP@
-GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
-GNULIB_SOCKET = @GNULIB_SOCKET@
-GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
-GNULIB_STAT = @GNULIB_STAT@
-GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
-GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
-GNULIB_STPCPY = @GNULIB_STPCPY@
-GNULIB_STPNCPY = @GNULIB_STPNCPY@
-GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
-GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
-GNULIB_STRDUP = @GNULIB_STRDUP@
-GNULIB_STRERROR = @GNULIB_STRERROR@
-GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
-GNULIB_STRFTIME = @GNULIB_STRFTIME@
-GNULIB_STRNCAT = @GNULIB_STRNCAT@
-GNULIB_STRNDUP = @GNULIB_STRNDUP@
-GNULIB_STRNLEN = @GNULIB_STRNLEN@
-GNULIB_STRPBRK = @GNULIB_STRPBRK@
-GNULIB_STRPTIME = @GNULIB_STRPTIME@
-GNULIB_STRSEP = @GNULIB_STRSEP@
-GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
-GNULIB_STRSTR = @GNULIB_STRSTR@
-GNULIB_STRTOD = @GNULIB_STRTOD@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
-GNULIB_STRTOLD = @GNULIB_STRTOLD@
-GNULIB_STRTOLL = @GNULIB_STRTOLL@
-GNULIB_STRTOULL = @GNULIB_STRTOULL@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
-GNULIB_SYMLINK = @GNULIB_SYMLINK@
-GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
-GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
-GNULIB_TIMEGM = @GNULIB_TIMEGM@
-GNULIB_TIME_R = @GNULIB_TIME_R@
-GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
-GNULIB_TMPFILE = @GNULIB_TMPFILE@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_TRUNCATE = @GNULIB_TRUNCATE@
-GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
-GNULIB_TZSET = @GNULIB_TZSET@
-GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
-GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
-GNULIB_UNLINK = @GNULIB_UNLINK@
-GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
-GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
-GNULIB_UNSETENV = @GNULIB_UNSETENV@
-GNULIB_USLEEP = @GNULIB_USLEEP@
-GNULIB_UTIME = @GNULIB_UTIME@
-GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
-GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
-GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
-GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
-GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
-GNULIB_VFSCANF = @GNULIB_VFSCANF@
-GNULIB_VPRINTF = @GNULIB_VPRINTF@
-GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
-GNULIB_VSCANF = @GNULIB_VSCANF@
-GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
-GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTOMB = @GNULIB_WCTOMB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GNULIB_WRITE = @GNULIB_WRITE@
-GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
HAVE_ALPHASORT = @HAVE_ALPHASORT@
HAVE_ATOLL = @HAVE_ATOLL@
@@ -773,13 +848,18 @@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@
HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@
HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
@@ -812,14 +892,15 @@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
HAVE_DIRENT_H = @HAVE_DIRENT_H@
HAVE_DPRINTF = @HAVE_DPRINTF@
-HAVE_DUP2 = @HAVE_DUP2@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
@@ -850,8 +931,10 @@ HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETOPT_H = @HAVE_GETOPT_H@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
HAVE_GLOB = @HAVE_GLOB@
HAVE_GLOB_H = @HAVE_GLOB_H@
HAVE_GLOB_PATTERN_P = @HAVE_GLOB_PATTERN_P@
@@ -882,7 +965,6 @@ HAVE_MBSLEN = @HAVE_MBSLEN@
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
HAVE_MBTOWC = @HAVE_MBTOWC@
-HAVE_MEMCHR = @HAVE_MEMCHR@
HAVE_MEMPCPY = @HAVE_MEMPCPY@
HAVE_MKDIRAT = @HAVE_MKDIRAT@
HAVE_MKDTEMP = @HAVE_MKDTEMP@
@@ -905,6 +987,7 @@ HAVE_PCLOSE = @HAVE_PCLOSE@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
HAVE_PREAD = @HAVE_PREAD@
@@ -933,7 +1016,9 @@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
HAVE_SETENV = @HAVE_SETENV@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
@@ -947,13 +1032,16 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
HAVE_STRCASECMP = @HAVE_STRCASECMP@
HAVE_STRCASESTR = @HAVE_STRCASESTR@
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
HAVE_STRINGS_H = @HAVE_STRINGS_H@
HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
HAVE_STRTOLD = @HAVE_STRTOLD@
HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
HAVE_STRTOULL = @HAVE_STRTOULL@
HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
@@ -971,15 +1059,17 @@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
-HAVE_TZSET = @HAVE_TZSET@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
@@ -1065,6 +1155,7 @@ LIBTHREAD = @LIBTHREAD@
LIBTOOL = @LIBTOOL@
LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
LIB_GETLOGIN = @LIB_GETLOGIN@
+LIB_GETRANDOM = @LIB_GETRANDOM@
LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
LIB_MBRTOWC = @LIB_MBRTOWC@
LIB_NANOSLEEP = @LIB_NANOSLEEP@
@@ -1077,6 +1168,7 @@ LINGUAS = @LINGUAS@
LIPO = @LIPO@
LN_S = @LN_S@
LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
LOCALE_FR = @LOCALE_FR@
LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
LOCALE_JA = @LOCALE_JA@
@@ -1088,7 +1180,6 @@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
LTLIBOBJS = @LTLIBOBJS@
LTLIBTHREAD = @LTLIBTHREAD@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANDIR_LAYOUT = @MANDIR_LAYOUT@
MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -1120,6 +1211,7 @@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
@@ -1154,6 +1246,7 @@ NEXT_STRING_H = @NEXT_STRING_H@
NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@
NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@
NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
@@ -1187,17 +1280,19 @@ POSUB = @POSUB@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
RANLIB = @RANLIB@
REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
REPLACE_CREAT = @REPLACE_CREAT@
REPLACE_CTIME = @REPLACE_CTIME@
REPLACE_DIRFD = @REPLACE_DIRFD@
@@ -1205,6 +1300,13 @@ REPLACE_DPRINTF = @REPLACE_DPRINTF@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
@@ -1213,10 +1315,13 @@ REPLACE_FCNTL = @REPLACE_FCNTL@
REPLACE_FDOPEN = @REPLACE_FDOPEN@
REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
REPLACE_FNMATCH = @REPLACE_FNMATCH@
REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
REPLACE_FPRINTF = @REPLACE_FPRINTF@
REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
REPLACE_FREOPEN = @REPLACE_FREOPEN@
REPLACE_FSEEK = @REPLACE_FSEEK@
@@ -1236,6 +1341,8 @@ REPLACE_GETLINE = @REPLACE_GETLINE@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
REPLACE_GLOB = @REPLACE_GLOB@
REPLACE_GLOB_PATTERN_P = @REPLACE_GLOB_PATTERN_P@
@@ -1256,7 +1363,8 @@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_LSTAT = @REPLACE_LSTAT@
-REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
REPLACE_MBRLEN = @REPLACE_MBRLEN@
REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
REPLACE_MBSINIT = @REPLACE_MBSINIT@
@@ -1268,7 +1376,9 @@ REPLACE_MEMCHR = @REPLACE_MEMCHR@
REPLACE_MEMMEM = @REPLACE_MEMMEM@
REPLACE_MKDIR = @REPLACE_MKDIR@
REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
REPLACE_MKTIME = @REPLACE_MKTIME@
REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
@@ -1281,6 +1391,7 @@ REPLACE_OPENAT = @REPLACE_OPENAT@
REPLACE_OPENDIR = @REPLACE_OPENDIR@
REPLACE_PERROR = @REPLACE_PERROR@
REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PRINTF = @REPLACE_PRINTF@
REPLACE_PSELECT = @REPLACE_PSELECT@
@@ -1296,7 +1407,9 @@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_READLINKAT = @REPLACE_READLINKAT@
-REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
REPLACE_REALPATH = @REPLACE_REALPATH@
REPLACE_REMOVE = @REPLACE_REMOVE@
REPLACE_RENAME = @REPLACE_RENAME@
@@ -1317,6 +1430,7 @@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
REPLACE_STRDUP = @REPLACE_STRDUP@
REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
REPLACE_STRFTIME = @REPLACE_STRFTIME@
REPLACE_STRNCAT = @REPLACE_STRNCAT@
@@ -1327,7 +1441,11 @@ REPLACE_STRSTR = @REPLACE_STRSTR@
REPLACE_STRTOD = @REPLACE_STRTOD@
REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
@@ -1378,6 +1496,7 @@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_U
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
TBL_X_FORMAT = @TBL_X_FORMAT@
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
TRANS_APROPOS = @TRANS_APROPOS@
TRANS_APROPOS_UPPER = @TRANS_APROPOS_UPPER@
TRANS_CATMAN = @TRANS_CATMAN@
@@ -1407,7 +1526,6 @@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
-UTIME_H = @UTIME_H@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
@@ -1439,13 +1557,11 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
-bunzip2 = @bunzip2@
bzip2 = @bzip2@
cache_top_owner = @cache_top_owner@
cat = @cat@
col = @col@
compress = @compress@
-compress_ext = @compress_ext@
compressor = @compressor@
config_file = @config_file@
config_file_basename = @config_file_basename@
@@ -1457,14 +1573,15 @@ docdir = @docdir@
dvidir = @dvidir@
eqn = @eqn@
exec_prefix = @exec_prefix@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
grap = @grap@
grep = @grep@
-gunzip = @gunzip@
gzip = @gzip@
host = @host@
host_alias = @host_alias@
@@ -1518,11 +1635,6 @@ top_srcdir = @top_srcdir@
tr = @tr@
troff = @troff@
troff_as_troff_input = @troff_as_troff_input@
-uncompress = @uncompress@
-unlzip = @unlzip@
-unlzma = @unlzma@
-unxz = @unxz@
-unzstd = @unzstd@
vgrind = @vgrind@
xz = @xz@
zstd = @zstd@
@@ -1530,24 +1642,28 @@ pkglib_LTLIBRARIES = libman.la
dist_noinst_DATA = README
AM_CFLAGS = $(WARN_CFLAGS)
libman_la_CPPFLAGS = \
- -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
-I$(top_srcdir)/gl/lib \
-I$(top_builddir)/gl/lib \
-DLOCALEDIR=\"$(localedir)\" \
- $(libpipeline_CFLAGS) \
$(libseccomp_CFLAGS)
libman_la_SOURCES = \
appendstr.c \
+ appendstr.h \
cleanup.c \
cleanup.h \
debug.c \
+ debug.h \
encodings.c \
encodings.h \
+ fatal.c \
+ fatal.h \
glcontainers.c \
glcontainers.h \
linelength.c \
linelength.h \
+ mp.h \
orderfiles.c \
orderfiles.h \
pathsearch.c \
@@ -1557,7 +1673,9 @@ libman_la_SOURCES = \
security.c \
security.h \
tempfile.c \
+ tempfile.h \
util.c \
+ util.h \
wordfnmatch.c \
wordfnmatch.h \
xregcomp.c \
@@ -1569,14 +1687,13 @@ libman_la_LIBADD = ../gl/lib/libgnu.la $(LTLIBOBJS) \
libman_la_LDFLAGS = \
-avoid-version -release $(VERSION) -rpath $(pkglibdir) \
-no-undefined \
- $(libpipeline_LIBS) \
$(libseccomp_LIBS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1600,9 +1717,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
@@ -1654,6 +1771,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-cleanup.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-debug.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-encodings.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-fatal.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-glcontainers.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-linelength.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-orderfiles.Plo@am__quote@ # am--include-marker
@@ -1720,6 +1838,13 @@ libman_la-encodings.lo: encodings.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libman_la-encodings.lo `test -f 'encodings.c' || echo '$(srcdir)/'`encodings.c
+libman_la-fatal.lo: fatal.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libman_la-fatal.lo -MD -MP -MF $(DEPDIR)/libman_la-fatal.Tpo -c -o libman_la-fatal.lo `test -f 'fatal.c' || echo '$(srcdir)/'`fatal.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libman_la-fatal.Tpo $(DEPDIR)/libman_la-fatal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fatal.c' object='libman_la-fatal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libman_la-fatal.lo `test -f 'fatal.c' || echo '$(srcdir)/'`fatal.c
+
libman_la-glcontainers.lo: glcontainers.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libman_la-glcontainers.lo -MD -MP -MF $(DEPDIR)/libman_la-glcontainers.Tpo -c -o libman_la-glcontainers.lo `test -f 'glcontainers.c' || echo '$(srcdir)/'`glcontainers.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libman_la-glcontainers.Tpo $(DEPDIR)/libman_la-glcontainers.Plo
@@ -1847,7 +1972,6 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
@@ -1928,6 +2052,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libman_la-cleanup.Plo
-rm -f ./$(DEPDIR)/libman_la-debug.Plo
-rm -f ./$(DEPDIR)/libman_la-encodings.Plo
+ -rm -f ./$(DEPDIR)/libman_la-fatal.Plo
-rm -f ./$(DEPDIR)/libman_la-glcontainers.Plo
-rm -f ./$(DEPDIR)/libman_la-linelength.Plo
-rm -f ./$(DEPDIR)/libman_la-orderfiles.Plo
@@ -1987,6 +2112,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libman_la-cleanup.Plo
-rm -f ./$(DEPDIR)/libman_la-debug.Plo
-rm -f ./$(DEPDIR)/libman_la-encodings.Plo
+ -rm -f ./$(DEPDIR)/libman_la-fatal.Plo
-rm -f ./$(DEPDIR)/libman_la-glcontainers.Plo
-rm -f ./$(DEPDIR)/libman_la-linelength.Plo
-rm -f ./$(DEPDIR)/libman_la-orderfiles.Plo
diff --git a/lib/README b/lib/README
index 884b4338..3055cf5b 100644
--- a/lib/README
+++ b/lib/README
@@ -1,21 +1,21 @@
-These library source files have various authors but are all covered by
-either the GNU General Public License or the GNU Lesser General Public
-License, and are freely distributable under their terms and conditions.
+These library source files have various authors and specific licenses,
+but may all be used as part of a complete work that is distributed under
+the terms of the GNU General Public License version 2 or later.
-See the files ../docs/COPYING and ../docs/COPYING.LIB for relevant
-information.
+See the files ../COPYING and ../COPYING.LIB for relevant information.
-appendstr.c author - Markus Armbruster
+appendstr.* author - Markus Armbruster
cleanup.* author - Markus Armbruster, Colin Watson
-debug.c author - Colin Watson
+debug.* author - Colin Watson
encodings.* author - Colin Watson
glcontainers.* author - Colin Watson
linelength.* author - Martin Schulze, Jon Tombs, Colin Watson
+mp.h author - Simon Tatham
orderfiles.* author - Colin Watson
pathsearch.* author - Colin Watson
sandbox.* author - Colin Watson
security.* author - John W. Eaton, Wilf., Colin Watson
-tempfile.c author - Colin Watson
-util.c author - John W. Eaton, Wilf., Colin Watson
+tempfile.* author - Colin Watson
+util.* author - John W. Eaton, Wilf., Colin Watson
wordfnmatch.* author - Colin Watson
xregcomp.* author - Colin Watson
diff --git a/lib/appendstr.c b/lib/appendstr.c
index ef07ce88..21cdae1f 100644
--- a/lib/appendstr.c
+++ b/lib/appendstr.c
@@ -23,9 +23,13 @@
#include <string.h>
#include <stdarg.h>
+#include "xalloc.h"
+
#include "manconfig.h"
-/* append strings to first argument, which is realloced to the correct size
+#include "appendstr.h"
+
+/* append strings to first argument, which is realloced to the correct size
first arg may be NULL */
char *appendstr (char *str, ...)
{
diff --git a/lib/appendstr.h b/lib/appendstr.h
new file mode 100644
index 00000000..30b18b81
--- /dev/null
+++ b/lib/appendstr.h
@@ -0,0 +1,24 @@
+/* appendstr.h -- interface to appending to a dynamically allocated string
+ *
+ * Copyright (C) 1994 Markus Armbruster
+ * Copyright (C) 2022 Colin Watson
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Library Public License
+ * as published by the Free Software Foundation; either version 2, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.LIB. If not, write
+ * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
+ * 02139, USA.
+ */
+
+#include "attribute.h"
+
+NODISCARD extern char *appendstr (char *, ...) ATTRIBUTE_SENTINEL ();
diff --git a/lib/cleanup.c b/lib/cleanup.c
index cf8aec1c..6c7c18ae 100644
--- a/lib/cleanup.c
+++ b/lib/cleanup.c
@@ -30,6 +30,8 @@
#include <unistd.h>
#include <string.h>
+#include "xalloc.h"
+
#include "manconfig.h" /* for FATAL */
#include "cleanup.h"
@@ -215,7 +217,7 @@ push_cleanup (cleanup_fun fun, void *arg, int sigsafe)
} else {
new_stack = xnmalloc (nslots+1, sizeof (slot));
}
-
+
if (!new_stack) return -1;
stack = new_stack;
++nslots;
diff --git a/lib/debug.c b/lib/debug.c
index 53cefe9d..d55d8105 100644
--- a/lib/debug.c
+++ b/lib/debug.c
@@ -1,5 +1,6 @@
/*
* debug.c: debugging messages
+ *
* Copyright (C) 2007 Colin Watson.
*
* This file is part of man-db.
@@ -30,8 +31,12 @@
#include <string.h>
#include <errno.h>
+#include "attribute.h"
+
#include "manconfig.h"
+#include "debug.h"
+
bool debug_level = false;
void init_debug (void)
@@ -41,8 +46,8 @@ void init_debug (void)
debug_level = true;
}
-static void ATTRIBUTE_FORMAT_PRINTF (1, 0) vdebug (const char *message,
- va_list args)
+static void ATTRIBUTE_FORMAT ((__printf__, 1, 0)) vdebug (const char *message,
+ va_list args)
{
if (debug_level)
vfprintf (stderr, message, args);
diff --git a/lib/debug.h b/lib/debug.h
new file mode 100644
index 00000000..1421eea0
--- /dev/null
+++ b/lib/debug.h
@@ -0,0 +1,32 @@
+/*
+ * debug.h: interface to debugging messages
+ *
+ * Copyright (C) 2007-2022 Colin Watson.
+ *
+ * This file is part of man-db.
+ *
+ * man-db is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * man-db 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with man-db; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdbool.h>
+
+#include "attribute.h"
+
+extern bool debug_level; /* shows whether -d issued */
+extern void init_debug (void);
+extern void debug (const char *message, ...)
+ ATTRIBUTE_FORMAT ((__printf__, 1, 2));
+extern void debug_error (const char *message, ...)
+ ATTRIBUTE_FORMAT ((__printf__, 1, 2));
diff --git a/lib/encodings.c b/lib/encodings.c
index e8ad3381..0db5b8c0 100644
--- a/lib/encodings.c
+++ b/lib/encodings.c
@@ -29,19 +29,22 @@
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
-#include <assert.h>
+#include <locale.h>
+#include <ctype.h>
+#include "attribute.h"
#include "gettext.h"
#include "localcharset.h"
-#include <locale.h>
-#include <ctype.h>
+#include "xalloc.h"
+#include "xstrndup.h"
#include "manconfig.h"
-#include "pathsearch.h"
#include "pipeline.h"
+#include "debug.h"
#include "encodings.h"
+#include "pathsearch.h"
/* Due to historical limitations in groff (which may be removed in the
@@ -323,59 +326,6 @@ static struct less_charset_entry less_charset_table[] = {
static const char fallback_less_charset[] = "iso8859";
-/* Encoding conversions from groff-1.20/src/preproc/preconv/preconv.cpp.
- * I've only included those not already recognised by GNU libiconv.
- */
-struct conversion_entry {
- const char *from;
- const char *to;
-};
-
-static struct conversion_entry conversion_table[] = {
- { "chinese-big5", "Big5" },
- { "chinese-euc", "GB2312" },
- { "chinese-iso-8bit", "GB2312" },
- { "cn-gb-2312", "GB2312" },
- { "cp878", "KOI8-R" },
- { "cyrillic-iso-8bit", "ISO-8859-5" },
- { "cyrillic-koi8", "KOI8-R" },
- { "euc-china", "GB2312" },
- { "euc-japan", "EUC-JP" },
- { "euc-japan-1990", "EUC-JP" },
- { "euc-kr", "EUC-KR" },
- { "greek-iso-8bit", "ISO-8859-7" },
- { "iso-latin-1", "ISO-8859-1" },
- { "iso-latin-2", "ISO-8859-2" },
- { "iso-latin-5", "ISO-8859-9" },
- { "iso-latin-7", "ISO-8859-13" },
- { "iso-latin-9", "ISO-8859-15" },
- { "japanese-iso-8bit", "EUC-JP" },
- { "japanese-euc", "EUC-JP" },
- { "jis8", "EUC-JP" },
- { "korean-euc", "EUC-KR" },
- { "korean-iso-8bit", "EUC-KR" },
- { "latin-0", "ISO-8859-15" },
- { "latin-1", "ISO-8859-1" },
- { "latin-2", "ISO-8859-2" },
- { "latin-5", "ISO-8859-9" },
- { "latin-7", "ISO-8859-13" },
- { "mule-utf-16", "UTF-16" },
- { "mule-utf-16be", "UTF-16BE" },
- { "mule-utf-16-be", "UTF-16BE" },
- { "mule-utf-16be-with-signature", "UTF-16" },
- { "mule-utf-16le", "UTF-16LE" },
- { "mule-utf-16-le", "UTF-16LE" },
- { "mule-utf-16le-with-signature", "UTF-16" },
- { "mule-utf-8", "UTF-8" },
- { "utf-16-be", "UTF-16BE" },
- { "utf-16be-with-signature", "UTF-16" },
- { "utf-16-be-with-signature", "UTF-16" },
- { "utf-16-le", "UTF-16LE" },
- { "utf-16le-with-signature", "UTF-16" },
- { "utf-16-le-with-signature", "UTF-16" },
- { NULL, NULL }
-};
-
const char *groff_preconv = NULL;
/* Is the groff "preconv" helper available? If so, return its name.
@@ -409,7 +359,7 @@ const char *get_groff_preconv (void)
*
* The caller should free the returned string when it is finished with it.
*/
-char * _GL_ATTRIBUTE_MALLOC get_page_encoding (const char *lang)
+char * ATTRIBUTE_MALLOC get_page_encoding (const char *lang)
{
const struct directory_entry *entry;
const char *dot;
@@ -522,7 +472,8 @@ const char *get_source_encoding (const char *lang)
return fallback_source_encoding;
}
-const char *get_canonical_charset_name (const char *charset)
+const char * ATTRIBUTE_NONNULL ((1)) ATTRIBUTE_RETURNS_NONNULL
+ get_canonical_charset_name (const char *charset)
{
const struct charset_alias_entry *entry;
char *charset_upper = xstrdup (charset);
@@ -542,7 +493,7 @@ const char *get_canonical_charset_name (const char *charset)
}
/* Return the current locale's character set. */
-const char *get_locale_charset (void)
+const char * ATTRIBUTE_RETURNS_NONNULL get_locale_charset (void)
{
const char *charset;
char *saved_locale;
@@ -562,10 +513,9 @@ const char *get_locale_charset (void)
setlocale (LC_CTYPE, saved_locale);
free (saved_locale);
- if (charset && *charset)
- return get_canonical_charset_name (charset);
- else
- return NULL;
+ if (!charset || !*charset)
+ charset = "ANSI_X3.4-1968";
+ return get_canonical_charset_name (charset);
}
/* Find a locale with this character set. This is a non-portable operation,
@@ -724,7 +674,7 @@ const char *get_default_device (const char *charset_from_locale,
}
/* Is this a known *roff device name? */
-bool _GL_ATTRIBUTE_PURE is_roff_device (const char *device)
+bool ATTRIBUTE_PURE is_roff_device (const char *device)
{
const struct device_entry *entry;
@@ -784,7 +734,7 @@ const char *get_roff_encoding (const char *device, const char *source_encoding)
/* Find the output encoding that this device will produce, or NULL if it
* will simply pass through the input encoding.
*/
-const char * _GL_ATTRIBUTE_PURE get_output_encoding (const char *device)
+const char * ATTRIBUTE_PURE get_output_encoding (const char *device)
{
const struct device_entry *entry;
@@ -796,8 +746,7 @@ const char * _GL_ATTRIBUTE_PURE get_output_encoding (const char *device)
}
/* Return the value of LESSCHARSET appropriate for this locale. */
-const char * _GL_ATTRIBUTE_PURE get_less_charset (
- const char *charset_from_locale)
+const char * ATTRIBUTE_PURE get_less_charset (const char *charset_from_locale)
{
const struct less_charset_entry *entry;
@@ -815,8 +764,7 @@ const char * _GL_ATTRIBUTE_PURE get_less_charset (
/* Return the value of JLESSCHARSET appropriate for this locale. May return
* NULL.
*/
-const char * _GL_ATTRIBUTE_PURE get_jless_charset (
- const char *charset_from_locale)
+const char * ATTRIBUTE_PURE get_jless_charset (const char *charset_from_locale)
{
const struct less_charset_entry *entry;
@@ -830,104 +778,3 @@ const char * _GL_ATTRIBUTE_PURE get_jless_charset (
return NULL;
}
-
-/* Convert Emacs-style coding tags to ones that libiconv understands. */
-static char *convert_encoding (char *encoding)
-{
- size_t encoding_len = strlen (encoding);
- const struct conversion_entry *entry;
-
-#define STRIP(s, l) do { \
- if (encoding_len > (l) && \
- !strcasecmp (encoding + encoding_len - (l), (s))) \
- encoding[encoding_len - (l)] = '\0'; \
-} while (0)
-
- STRIP ("-dos", 4);
- STRIP ("-mac", 4);
- STRIP ("-unix", 5);
-
-#undef STRIP
-
- for (entry = conversion_table; entry->from; ++entry)
- if (!strcasecmp (entry->from, encoding)) {
- free (encoding);
- return xstrdup (entry->to);
- }
-
- return encoding;
-}
-
-/* Inspect the first line of data in a pipeline for preprocessor encoding
- * declarations.
- *
- * If to_encoding and modified_line are both non-NULL, and if the encoding
- * declaration in the input does not match to_encoding, then return an
- * encoding declaration line modified to refer to the given to_encoding in
- * *modified_line. The caller should free *modified_line.
- */
-char *check_preprocessor_encoding (pipeline *p, const char *to_encoding,
- char **modified_line)
-{
- char *pp_encoding = NULL;
- const char *line = pipeline_peekline (p);
- const char *directive = NULL, *directive_end, *pp_search;
- size_t pp_encoding_len = 0;
-
- /* Some people use .\" incorrectly. We allow it for encoding
- * declarations but not for preprocessor declarations.
- */
- if (line &&
- (STRNEQ (line, PP_COOKIE, 4) || STRNEQ (line, ".\\\" ", 4))) {
- const char *newline = strchr (line, '\n');
-
- directive = line + 4;
- directive_end = newline ? newline : strchr (directive, '\0');
- pp_search = memmem (directive, directive_end - directive,
- "-*-", 3);
- }
-
- if (directive && pp_search) {
- pp_search += 3;
- while (pp_search && pp_search < directive_end && *pp_search) {
- while (*pp_search == ' ')
- ++pp_search;
- if (STRNEQ (pp_search, "coding:", 7)) {
- const char *pp_encoding_allow;
- pp_search += 7;
- while (*pp_search == ' ')
- ++pp_search;
- pp_encoding_allow = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789-_/:.()";
- pp_encoding_len = strspn (pp_search,
- pp_encoding_allow);
- pp_encoding = xstrndup (pp_search,
- pp_encoding_len);
- pp_encoding = convert_encoding (pp_encoding);
- debug ("preprocessor encoding: %s\n",
- pp_encoding);
- break;
- } else {
- pp_search = memchr (pp_search, ';',
- directive_end - pp_search);
- if (pp_search)
- ++pp_search;
- }
- }
- }
-
- if (to_encoding && modified_line &&
- pp_encoding && strcasecmp (pp_encoding, to_encoding)) {
- assert (directive_end);
- assert (pp_search);
- *modified_line = xasprintf
- ("%.*s%s%.*s\n",
- (int) (pp_search - line), line,
- to_encoding,
- (int) (directive_end - (pp_search + pp_encoding_len)),
- pp_search + pp_encoding_len);
- }
-
- return pp_encoding;
-}
diff --git a/lib/encodings.h b/lib/encodings.h
index 85346484..6de48f72 100644
--- a/lib/encodings.h
+++ b/lib/encodings.h
@@ -36,5 +36,3 @@ const char *get_roff_encoding (const char *device,
const char *get_output_encoding (const char *device);
const char *get_less_charset (const char *locale_charset);
const char *get_jless_charset (const char *locale_charset);
-char *check_preprocessor_encoding (struct pipeline *p, const char *to_code,
- char **modified_line);
diff --git a/lib/fatal.c b/lib/fatal.c
new file mode 100644
index 00000000..b2b78954
--- /dev/null
+++ b/lib/fatal.c
@@ -0,0 +1,48 @@
+/*
+ * fatal.c: fatal error helper
+ *
+ * Copyright (C) 2022 Colin Watson.
+ *
+ * This file is part of man-db.
+ *
+ * man-db is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * man-db 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with man-db; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "verror.h"
+
+#include "manconfig.h"
+
+#include "fatal.h"
+
+void fatal (int errnum, const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+ verror (FATAL, errnum, format, ap);
+ va_end (ap);
+
+ /* Never reached, because verror exits if given a non-zero status,
+ * but the compiler may not be able to prove that.
+ */
+ abort ();
+}
diff --git a/lib/fatal.h b/lib/fatal.h
new file mode 100644
index 00000000..7cc299e9
--- /dev/null
+++ b/lib/fatal.h
@@ -0,0 +1,26 @@
+/*
+ * fatal.h: interface to fatal error helper
+ *
+ * Copyright (C) 2022 Colin Watson.
+ *
+ * This file is part of man-db.
+ *
+ * man-db is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * man-db 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with man-db; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "attribute.h"
+
+_Noreturn void fatal (int errnum, const char *format, ...)
+ ATTRIBUTE_FORMAT ((__printf__, 2, 3));
diff --git a/lib/glcontainers.c b/lib/glcontainers.c
index cbd635cf..4cbe4bae 100644
--- a/lib/glcontainers.c
+++ b/lib/glcontainers.c
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <string.h>
+#include "attribute.h"
#include "gl_xlist.h"
#include "gl_xmap.h"
#include "gl_xset.h"
@@ -37,12 +38,12 @@
#include "glcontainers.h"
-bool _GL_ATTRIBUTE_PURE string_equals (const void *s1, const void *s2)
+bool ATTRIBUTE_PURE string_equals (const void *s1, const void *s2)
{
return STREQ ((const char *) s1, (const char *) s2);
}
-size_t _GL_ATTRIBUTE_PURE string_hash (const void *s)
+size_t ATTRIBUTE_PURE string_hash (const void *s)
{
return hash_pjw_bare (s, strlen ((const char *) s));
}
diff --git a/lib/glcontainers.h b/lib/glcontainers.h
index a60bf2e3..56ae0993 100644
--- a/lib/glcontainers.h
+++ b/lib/glcontainers.h
@@ -30,6 +30,8 @@
#include "gl_map.h"
#include "gl_set.h"
+#include "mp.h"
+
/* These types are compatible with those required by Gnulib container
* initialisation.
*/
@@ -48,27 +50,19 @@ gl_set_t new_string_set (gl_set_implementation_t implementation);
/* Iterator macros. */
-#define GL_LIST_FOREACH_START(list, item) \
- do { \
- gl_list_iterator_t list##_iter = gl_list_iterator (list); \
- gl_list_node_t list##_node; \
- while (gl_list_iterator_next (&list##_iter, \
- (const void **) &item, \
- &list##_node))
-
-#define GL_LIST_FOREACH_END(list) \
- gl_list_iterator_free (&list##_iter); \
- } while (0)
-
-#define GL_MAP_FOREACH_START(map, key, value) \
- do { \
- gl_map_iterator_t map##_iter = gl_map_iterator (map); \
- while (gl_map_iterator_next (&map##_iter, \
- (const void **) &key, \
- (const void **) &value))
+#define GL_LIST_FOREACH(list, item) \
+ MPP_DECLARE (1, gl_list_iterator_t list##_iter = gl_list_iterator (list)) \
+ MPP_DECLARE (2, gl_list_node_t list##_node) \
+ MPP_WHILE (3, gl_list_iterator_next (&list##_iter, \
+ (const void **) &item, \
+ &list##_node)) \
+ MPP_FINALLY (4, gl_list_iterator_free (&list##_iter))
-#define GL_MAP_FOREACH_END(map) \
- gl_map_iterator_free (&map##_iter); \
- } while (0)
+#define GL_MAP_FOREACH(map, key, value) \
+ MPP_DECLARE (1, gl_map_iterator_t map##_iter = gl_map_iterator (map)) \
+ MPP_WHILE (2, gl_map_iterator_next (&map##_iter, \
+ (const void **) &key, \
+ (const void **) &value)) \
+ MPP_FINALLY (3, gl_map_iterator_free (&map##_iter))
#endif /* MAN_GLCONTAINERS_H */
diff --git a/lib/mp.h b/lib/mp.h
new file mode 100644
index 00000000..df31eaed
--- /dev/null
+++ b/lib/mp.h
@@ -0,0 +1,483 @@
+/*
+ * mp.h: header file providing macros for 'metaprogramming' custom
+ * loop constructions in standard C.
+ *
+ * Accompanies the article on the web at
+ * https://www.chiark.greenend.org.uk/~sgtatham/mp/
+ */
+
+/*
+ * mp.h is copyright 2012 Simon Tatham.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * $Id$
+ */
+
+/*
+ * Macros beginning with 'MPI_' are internal to this header file, and
+ * intended only to be used by other macros defined _in_ this header
+ * file. Do not refer to them externally.
+ */
+
+/* Standard trickery to allow us to macro-expand and then token-paste */
+#define MPI_TOKPASTEINNER(x,y) x ## y
+#define MPI_TOKPASTE(x,y) MPI_TOKPASTEINNER(x,y)
+
+/* Method of constructing line-unique labels */
+#define MPI_LABEL(id1,id2) \
+ MPI_TOKPASTE(MPI_LABEL_ ## id1 ## _ ## id2 ## _, __LINE__)
+
+/*
+ * Macros beginning with 'MPP_' and 'MPS_' are building blocks
+ * intended for metaprogrammers to make useful control constructions
+ * from.
+ *
+ * The prefixes distinguish their syntactic role. MPP_ macros are
+ * statement _prefixes_; you would typically build a custom control
+ * structure by defining a macro expanding to a sequence of them. MPS_
+ * macros are actual statements, which you might use in the various
+ * parameters of MPP_ macros that are expected to be statement-shaped.
+ */
+
+/*
+ * Safety considerations:
+ *
+ * - All of these macros are C89-safe, except for MPP_DECLARE if you
+ * pass an actual declaration and not just an assignment, since
+ * that one relies on the C99 (and C++) extension of being able to
+ * write a declaration in the initialisation clause of a for
+ * statement.
+ *
+ * - None of these macros uses switch, so case labels from a switch
+ * outside the whole lot may be written inside the suffixed
+ * statement/block.
+ *
+ * - All of these constructions use 'goto' with labels constructed
+ * programmatically, using __LINE__ to make them unique between
+ * multiple invocations of the same loop macro. So don't put two
+ * loop macros defined using these building blocks on the same
+ * source line.
+ *
+ * - All of these constructions can be prefixed to something that is
+ * syntactically a single C statement, and generate something that
+ * is also a single C statement. So they're if-else safe - you can
+ * use an unbraced one of these constructs followed by an unbraced
+ * statement within the then-clause of an outer if, and the else
+ * will still bind to what it looks as if it ought to.
+ *
+ * - Controlling what happens if the user writes a 'break' in the
+ * suffixed statement is unavoidably rather fiddly. The macros
+ * below fall into a few categories:
+ *
+ * + naturally transparent to 'break' (MPP_BEFORE, MPP_IF). Macros
+ * of this type will not affect the semantics of 'break' in the
+ * suffixed statement at all - it will terminate the next
+ * innermost loop or switch outside the construction.
+ *
+ * + artificially transparent to 'break', by means of deliberately
+ * catching and 'rethrowing' it. (MPP_BREAK_{THROW,CATCH};
+ * MPP_BREAK_HANDLER; MPP_FINALLY.) These macros will propagate
+ * a break outwards to the next containing loop, but in order to
+ * do so they require that there _be_ a next containing loop,
+ * since their expansion can't avoid including a break statement
+ * which they themselves do not wrap in a loop. So you should
+ * only use these when you know there is a containing loop (e.g.
+ * because MPP_WHILE or MPP_DO_WHILE precedes them in your
+ * construction).
+ *
+ * + loop constructions. (MPP_WHILE and MPP_DO_WHILE). These
+ * macros give 'break' the obvious semantics of terminating the
+ * loop they define.
+ *
+ * + break-unsafe macros, which have to include a C looping
+ * construction to do something not essentially loopy, and hence
+ * have the unfortunate side effect of causing 'break' to only
+ * terminate the suffixed statement itself. On the other hand,
+ * they can be used in contexts where there is no surrounding
+ * loop at all (which is why I don't just fix them to contain a
+ * built-in MPP_BREAK_{THROW,CATCH}).
+ *
+ * If you are using these macros to build a looping construct, then
+ * you will probably include an MPP_WHILE or MPP_DO_WHILE in your
+ * stack, and you'll want 'break' to terminate that. So you just
+ * need to be sure that break is correctly propagated from the
+ * suffixed statement back to that loop, which you can do by
+ * sticking to the break-transparent macros where possible and
+ * using MPP_BREAK_{THROW,CATCH} to bypass any break-unsafe macro
+ * such as MPP_DECLARE that you might need to use. Having done
+ * that, 'break' will do what the user expects.
+ *
+ * But if you're using the macros to wrap some context around a
+ * statement you still intend to be executed only once, there will
+ * be unavoidable side effects on 'break': you can't use the
+ * artificially break-unsafe macros because the user might use your
+ * construction in a context with no surrounding loop at all, so
+ * you must stick to the naturally break-transparent and the
+ * break-unsafe, and there aren't enough of the former to be really
+ * useful. So you must just live with 'break' acquiring unhelpful
+ * behaviour inside such a macro.
+ *
+ * - Almost none of these macros is transparent to 'continue'. The
+ * naturally break-transparent MPP_BEFORE is, but none of the rest
+ * can possibly be, because as soon as you include any loop
+ * construction in the stuff being prefixed to a statement, you
+ * introduce the invariant that 'continue' is equivalent to jumping
+ * to the end of the suffixed statement or block. This is not too
+ * bad if you're defining a custom loop construction (it was quite
+ * likely the behaviour you wanted for continue anyway), but if you
+ * were trying to use MPP_DECLARE and/or MPP_BEFORE_AND_AFTER to
+ * wrap a statement in some context but still only execute it once,
+ * you'd have to be aware of that limitation.
+ *
+ * - MPP_FINALLY and MPP_BREAK_HANDLER can only catch non-local exits
+ * from the block _by break_. They are not true C++ try/finally, so
+ * they can't catch other kinds of exit such as return, goto,
+ * longjmp or exit.
+ *
+ * - Finally, it almost goes without saying, but don't forget that
+ * snippets of code you use as parameters to these macros must
+ * avoid using commas not contained inside parentheses, or else the
+ * C preprocessor will consider the comma to end that macro
+ * parameter and start the next one. If there is any reason you
+ * really need an unbracketed comma, you can work around this by
+ * one of two methods:
+ * - define a macro that expands to a comma ('#define COMMA ,')
+ * and then use that macro in place of commas in your macro
+ * argument. It won't be expanded to an actual comma until after
+ * the argument-separation has finished.
+ * - if you're allowed to use C99, define a variadic macro that
+ * expands to its unmodified input argument list ('#define
+ * WRAP(...) __VA_ARGS__') and then enclose comma-using code in
+ * WRAP(). Again, this will protect the commas for just long
+ * enough.
+ */
+
+/*
+ * MPP_BEFORE: run the code given in the argument 'before' and then
+ * the suffixed statement.
+ *
+ * 'before' should have the syntactic form of one or more declarations
+ * and statements, except that a trailing semicolon may be omitted.
+ * Any declarations will be in scope only within 'before', not within
+ * the suffixed statement.
+ *
+ * This macro, unusually among the collection, is naturally
+ * transparent to 'break' and also transparent to 'continue'.
+ */
+#define MPP_BEFORE(labid,before) \
+ if (1) { \
+ before; \
+ goto MPI_LABEL(labid, body); \
+ } else \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_AFTER: run the suffixed statement, and then the code given in
+ * the argument 'after'.
+ *
+ * 'after' should have the syntactic form of one or more declarations
+ * and statements, except that a trailing semicolon may be omitted.
+ * Any declaration in 'after' will be in scope only within 'after'.
+ *
+ * This macro is break-unsafe - it causes a 'break' to terminate the
+ * suffixed statement only. If you need different behaviour, you can
+ * use MPP_BREAK_CATCH and MPP_BREAK_THROW to pass a break past it -
+ * but beware that in that case the 'after' clause will not be
+ * executed, so MPP_FINALLY or MPP_BREAK_HANDLER may be useful too.
+ */
+#define MPP_AFTER(labid,after) \
+ if (1) \
+ goto MPI_LABEL(labid, body); \
+ else \
+ while (1) \
+ if (1) { \
+ after; \
+ break; \
+ } else \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_DECLARE: run the 'declaration' argument before the suffixed
+ * statement. The argument may have the form of either a C expression
+ * (e.g. an assignment) or a declaration; if the latter, it will be in
+ * scope within the suffixed statement.
+ *
+ * This macro is break-unsafe - it causes a 'break' to terminate the
+ * suffixed statement only. If you need different behaviour, you can
+ * use MPP_BREAK_CATCH and MPP_BREAK_THROW to pass a break past it.
+ */
+#define MPP_DECLARE(labid, declaration) \
+ if (0) \
+ ; \
+ else \
+ for (declaration;;) \
+ if (1) { \
+ goto MPI_LABEL(labid, body); \
+ MPI_LABEL(labid, done): break; \
+ } else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, done); \
+ else \
+ MPI_LABEL(labid, body):
+/* (The 'if(0) ; else' at the start of the above is just in case we
+ * encounter an old-style compiler that considers variables declared
+ * in for statements to have scope extending beyond the for statement.
+ * Putting another layer outside the 'for' ensures that the variable's
+ * scope is constrained to _that_ layer even if not to the for itself,
+ * and it doesn't leak into the calling scope. */
+
+/*
+ * MPP_WHILE: run the suffixed statement within a 'while (condition)'
+ * loop.
+ *
+ * In fact, just writing 'while (condition)' works fine for this, but
+ * it's nice to make it look like the rest of these macros!
+ *
+ * This macro defines an actual loop, and 'break' in the suffixed
+ * statement terminates that loop as you would expect.
+ */
+#define MPP_WHILE(labid, condition) \
+ while (condition)
+
+/*
+ * MPP_DO_WHILE: run the suffixed statement within a loop with the
+ * semantics of 'do suffixed-statement while (condition)'.
+ *
+ * This macro defines an actual loop, and 'break' in the suffixed
+ * statement terminates that loop as you would expect.
+ */
+#define MPP_DO_WHILE(labid, condition) \
+ if (1) \
+ goto MPI_LABEL(labid, body); \
+ else \
+ while (condition) \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_IF: run the suffixed statement only if 'condition' is true.
+ *
+ * This macro is naturally transparent to 'break' and also transparent
+ * to 'continue'.
+ */
+#define MPP_IF(labid, condition) \
+ if (!(condition)) \
+ ; \
+ else
+
+/*
+ * MPP_BREAK_THROW and MPP_BREAK_CATCH: propagate 'break' control flow
+ * transfers past other prefixes that mess about with them.
+ *
+ * Write an MPP_BREAK_CATCH, then other metaprogramming prefixes from
+ * this collection, and then an MPP_BREAK_THROW with the same label
+ * id. If the statement following the MPP_BREAK_THROW terminates by
+ * 'break', then the effect will be as if the MPP_BREAK_CATCH had
+ * terminated by 'break', regardless of how the in-between prefixes
+ * would have handled a 'break'.
+ *
+ * These macros are artificially transparent to 'break': they pass
+ * break through, but include a 'break' statement at the top level of
+ * MPP_BREAK_CATCH, so that must always be contained inside some loop
+ * or switch construction.
+ *
+ * We also provide MPS_BREAK_THROW, which is a statement-type macro
+ * that manufactures a break event and passes it to a specified
+ * MPP_BREAK_CATCH.
+ */
+#define MPP_BREAK_CATCH(labid) \
+ if (0) \
+ MPI_LABEL(labid, catch): break; \
+ else
+
+#define MPP_BREAK_THROW(labid) \
+ if (1) { \
+ goto MPI_LABEL(labid, body); \
+ MPI_LABEL(labid, finish):; \
+ } else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, catch); \
+ else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, finish); \
+ else \
+ MPI_LABEL(labid, body):
+
+#define MPS_BREAK_THROW(labid) goto MPI_LABEL(labid, catch)
+
+/*
+ * MPP_BREAK_HANDLER: handle a 'break' in the suffixed statement by
+ * executing the provided handler code and then terminating as if by
+ * break.
+ *
+ * 'handler' should have the syntactic form of one or more
+ * declarations and statements, except that a trailing semicolon may
+ * be omitted.
+ *
+ * This macro is artificially transparent to 'break': it passes break
+ * through, but includes a 'break' statement at the top level, so it
+ * must always be contained inside some loop or switch construction.
+ */
+#define MPP_BREAK_HANDLER(labid, handler) \
+ if (1) { \
+ goto MPI_LABEL(labid, body); \
+ MPI_LABEL(labid, break): \
+ {handler;} \
+ break; \
+ MPI_LABEL(labid, finish):; \
+ } else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, break); \
+ else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, finish); \
+ else \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_FINALLY: execute the suffixed statement, and execute the
+ * provided 'finally' clause after it finishes. If it terminates by
+ * 'break', execute the same 'finally' clause but propagate the break
+ * to the containing statement.
+ *
+ * 'finally' should have the syntactic form of one or more
+ * declarations and statements, except that a trailing semicolon may
+ * be omitted.
+ *
+ * The 'finally' argument will be double-expanded. Of course it'll
+ * only be executed once in any given run, so that's not a concern for
+ * function side effects, but don't do anything fiddly like declaring
+ * a static variable to which you return a pointer and then expecting
+ * the pointer to be the same no matter which copy of 'finally' it
+ * came from.
+ *
+ * This macro is artificially transparent to 'break': it passes break
+ * through, but includes a 'break' statement at the top level, so it
+ * must always be contained inside some loop or switch construction.
+ */
+#define MPP_FINALLY(labid, finally) \
+ if (1) { \
+ goto MPI_LABEL(labid, body); \
+ MPI_LABEL(labid, break): \
+ {finally;} \
+ break; \
+ MPI_LABEL(labid, finish): \
+ {finally;} \
+ } else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, break); \
+ else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, finish); \
+ else \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_BREAK_STOP: handle a 'break' in the suffixed statement by
+ * executing the provided handler code and then terminating as if
+ * normally.
+ *
+ * 'handler' should have the syntactic form of one or more
+ * declarations and statements, except that a trailing semicolon may
+ * be omitted.
+ */
+#define MPP_BREAK_STOP(labid, handler) \
+ if (1) { \
+ goto MPI_LABEL(labid, body); \
+ MPI_LABEL(labid, break): \
+ {handler;} \
+ MPI_LABEL(labid, finish):; \
+ } else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, break); \
+ else \
+ while (1) \
+ if (1) \
+ goto MPI_LABEL(labid, finish); \
+ else \
+ MPI_LABEL(labid, body):
+
+/*
+ * MPP_ELSE_ACCEPT, MPS_MAIN_INVOKE, MPS_ELSE_INVOKE: arrange to
+ * accept an optional 'else' clause after the suffixed statement, and
+ * provide two statement macros which jump to the main clause and the
+ * else clause. The main (non-else) clause will be be executed in the
+ * default case, and can be invoked again using MPS_MAIN_INVOKE;
+ * MPS_ELSE_INVOKE will invoke the else clause.
+ *
+ * Like MPP_BREAK_THROW and MPP_BREAK_CATCH, these macros should be
+ * used in groups with the same label id, so as to match them up to
+ * each other. MPS_ELSE_INVOKE and MPS_MAIN_INVOKE will go to the
+ * appropriate clauses corresponding to the MPP_ELSE_ACCEPT with the
+ * same id.
+ */
+#define MPP_ELSE_ACCEPT(labid) \
+ if (1) \
+ goto MPI_LABEL(labid, body); \
+ else \
+ MPI_LABEL(labid, else): \
+ if (0) \
+ MPI_LABEL(labid, body):
+
+#define MPS_MAIN_INVOKE(labid) \
+ goto MPI_LABEL(labid, body)
+
+#define MPS_ELSE_INVOKE(labid) \
+ goto MPI_LABEL(labid, else)
+
+/*
+ * MPP_ELSE_GENERAL: like MPP_ELSE_ACCEPT, but also lets you provide a
+ * snippet of code that will be run after the else clause terminates
+ * and one which will be run after the else clause breaks.
+ *
+ * You can use MPS_MAIN_INVOKE and MPS_ELSE_INVOKE with this as well
+ * as with MPP_ELSE_ACCEPT.
+ *
+ * Will mess up what happens after the main body, so you'll probably
+ * want to follow this macro with others such as MPP_AFTER and
+ * something to catch break in the main body too.
+ */
+#define MPP_ELSE_GENERAL(labid, after, breakhandler) \
+ if (1) \
+ goto MPI_LABEL(labid, body); \
+ else \
+ while (1) \
+ if (1) { \
+ {breakhandler;} \
+ break; \
+ } else \
+ while (1) \
+ if (1) { \
+ {after;} \
+ break; \
+ } else \
+ MPI_LABEL(labid, else): \
+ if (0) \
+ MPI_LABEL(labid, body):
diff --git a/lib/orderfiles.c b/lib/orderfiles.c
index bc12c88a..05bafe9e 100644
--- a/lib/orderfiles.c
+++ b/lib/orderfiles.c
@@ -44,10 +44,12 @@
#include <string.h>
#include <unistd.h>
+#include "attribute.h"
#include "gl_hash_map.h"
#include "gl_rbtree_list.h"
#include "gl_xlist.h"
#include "gl_xmap.h"
+#include "xalloc.h"
#include "manconfig.h"
@@ -104,7 +106,7 @@ void order_files (const char *dir, gl_list_t *basenamesp)
physical_offsets = gl_map_create_empty (GL_HASH_MAP, string_equals,
string_hash, NULL, plain_free);
sorted_basenames = new_string_list (GL_RBTREE_LIST, false);
- GL_LIST_FOREACH_START (basenames, name) {
+ GL_LIST_FOREACH (basenames, name) {
struct {
struct fiemap fiemap;
struct fiemap_extent extent;
@@ -134,7 +136,7 @@ void order_files (const char *dir, gl_list_t *basenamesp)
close (fd);
gl_sortedlist_add (sorted_basenames, compare_physical_offsets,
xstrdup (name));
- } GL_LIST_FOREACH_END (basenames);
+ }
gl_map_free (physical_offsets);
physical_offsets = NULL;
close (dir_fd);
@@ -160,18 +162,19 @@ void order_files (const char *dir, gl_list_t *basenamesp)
/* While we can't actually order the files, we can at least ask the
* kernel to preload them.
*/
- GL_LIST_FOREACH_START (basenames, name) {
+ GL_LIST_FOREACH (basenames, name) {
int fd = openat (dir_fd, name, O_RDONLY | O_NONBLOCK);
if (fd >= 0) {
posix_fadvise (fd, 0, 0, POSIX_FADV_WILLNEED);
close (fd);
}
- } GL_LIST_FOREACH_END (basenames);
+ }
close (dir_fd);
}
#else
-void order_files (const char *dir _GL_UNUSED, gl_list_t *basenamesp _GL_UNUSED)
+void order_files (const char *dir MAYBE_UNUSED,
+ gl_list_t *basenamesp MAYBE_UNUSED)
{
}
#endif
diff --git a/lib/pathsearch.c b/lib/pathsearch.c
index c733c3a7..34eac082 100644
--- a/lib/pathsearch.c
+++ b/lib/pathsearch.c
@@ -24,6 +24,8 @@
# include "config.h"
#endif /* HAVE_CONFIG_H */
+#include <assert.h>
+#include <errno.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
@@ -32,10 +34,16 @@
#include <sys/stat.h>
#include <unistd.h>
+#include "gettext.h"
+#define _(String) gettext (String)
+
+#include "xalloc.h"
#include "xgetcwd.h"
#include "xvasprintf.h"
#include "manconfig.h"
+
+#include "fatal.h"
#include "pathsearch.h"
static bool pathsearch (const char *name, const mode_t bits)
@@ -70,10 +78,14 @@ static bool pathsearch (const char *name, const mode_t bits)
if (!*element) {
if (!cwd)
cwd = xgetcwd ();
+ if (!cwd)
+ fatal (errno,
+ _("can't determine current directory"));
element = cwd;
}
filename = xasprintf ("%s/%s", element, name);
+ assert (filename);
if (stat (filename, &st) == -1) {
free (filename);
continue;
@@ -116,6 +128,9 @@ bool directory_on_path (const char *dir)
if (!*element) {
if (!cwd)
cwd = xgetcwd ();
+ if (!cwd)
+ fatal (errno,
+ _("can't determine current directory"));
element = cwd;
}
diff --git a/lib/sandbox.c b/lib/sandbox.c
index d934a0f9..bfda5e30 100644
--- a/lib/sandbox.c
+++ b/lib/sandbox.c
@@ -1,6 +1,6 @@
/*
* sandbox.c: Process sandboxing
- *
+ *
* Copyright (C) 2017 Colin Watson.
*
* This file is part of man-db.
@@ -63,10 +63,14 @@
# include <seccomp.h>
#endif /* HAVE_LIBSECCOMP */
-#include "manconfig.h"
+#include "attribute.h"
+#include "xalloc.h"
+#include "xstrndup.h"
-#include "error.h"
+#include "manconfig.h"
+#include "debug.h"
+#include "fatal.h"
#include "sandbox.h"
struct man_sandbox {
@@ -190,7 +194,13 @@ static bool can_load_seccomp (void)
if (nr == __NR_SCMP_ERROR) \
break; \
if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, 0) < 0) \
- error (FATAL, errno, "can't add seccomp rule"); \
+ fatal (errno, "can't add seccomp rule"); \
+ } while (0)
+
+#define SC_ALLOW_PERMISSIVE(name) \
+ do { \
+ if (permissive) \
+ SC_ALLOW (name); \
} while (0)
#define SC_ALLOW_ARG_1(name, cmp1) \
@@ -199,7 +209,7 @@ static bool can_load_seccomp (void)
if (nr == __NR_SCMP_ERROR) \
break; \
if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, 1, cmp1) < 0) \
- error (FATAL, errno, "can't add seccomp rule"); \
+ fatal (errno, "can't add seccomp rule"); \
} while (0)
#define SC_ALLOW_ARG_2(name, cmp1, cmp2) \
@@ -209,7 +219,7 @@ static bool can_load_seccomp (void)
break; \
if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, \
2, cmp1, cmp2) < 0) \
- error (FATAL, errno, "can't add seccomp rule"); \
+ fatal (errno, "can't add seccomp rule"); \
} while (0)
/* Create a seccomp filter.
@@ -231,10 +241,13 @@ static scmp_filter_ctx make_seccomp_filter (int permissive)
#endif /* O_TMPFILE */
;
+ if (!can_load_seccomp ())
+ return NULL;
+
debug ("initialising seccomp filter (permissive: %d)\n", permissive);
ctx = seccomp_init (SCMP_ACT_ERRNO (ENOSYS));
if (!ctx)
- error (FATAL, errno, "can't initialise seccomp filter");
+ fatal (errno, "can't initialise seccomp filter");
/* Allow sibling architectures for x86, since people sometimes mix
* and match architectures there for performance reasons.
@@ -362,16 +375,16 @@ static scmp_filter_ctx make_seccomp_filter (int permissive)
SC_ALLOW ("fstatfs64");
SC_ALLOW ("ftruncate");
SC_ALLOW ("ftruncate64");
- if (permissive) SC_ALLOW ("futimesat");
+ SC_ALLOW_PERMISSIVE ("futimesat");
SC_ALLOW ("getcwd");
SC_ALLOW ("getdents");
SC_ALLOW ("getdents64");
- if (permissive) SC_ALLOW ("link");
- if (permissive) SC_ALLOW ("linkat");
+ SC_ALLOW_PERMISSIVE ("link");
+ SC_ALLOW_PERMISSIVE ("linkat");
SC_ALLOW ("lstat");
SC_ALLOW ("lstat64");
- if (permissive) SC_ALLOW ("mkdir");
- if (permissive) SC_ALLOW ("mkdirat");
+ SC_ALLOW_PERMISSIVE ("mkdir");
+ SC_ALLOW_PERMISSIVE ("mkdirat");
SC_ALLOW ("mmap");
SC_ALLOW ("mmap2");
SC_ALLOW ("munmap");
@@ -410,24 +423,24 @@ static scmp_filter_ctx make_seccomp_filter (int permissive)
}
SC_ALLOW ("readlink");
SC_ALLOW ("readlinkat");
- if (permissive) SC_ALLOW ("rename");
- if (permissive) SC_ALLOW ("renameat");
- if (permissive) SC_ALLOW ("renameat2");
- if (permissive) SC_ALLOW ("rmdir");
+ SC_ALLOW_PERMISSIVE ("rename");
+ SC_ALLOW_PERMISSIVE ("renameat");
+ SC_ALLOW_PERMISSIVE ("renameat2");
+ SC_ALLOW_PERMISSIVE ("rmdir");
SC_ALLOW ("stat");
SC_ALLOW ("stat64");
SC_ALLOW ("statfs");
SC_ALLOW ("statfs64");
SC_ALLOW ("statx");
- if (permissive) SC_ALLOW ("symlink");
- if (permissive) SC_ALLOW ("symlinkat");
- if (permissive) SC_ALLOW ("truncate");
- if (permissive) SC_ALLOW ("truncateat");
- if (permissive) SC_ALLOW ("unlink");
- if (permissive) SC_ALLOW ("unlinkat");
- if (permissive) SC_ALLOW ("utime");
- if (permissive) SC_ALLOW ("utimensat");
- if (permissive) SC_ALLOW ("utimes");
+ SC_ALLOW_PERMISSIVE ("symlink");
+ SC_ALLOW_PERMISSIVE ("symlinkat");
+ SC_ALLOW_PERMISSIVE ("truncate");
+ SC_ALLOW_PERMISSIVE ("truncateat");
+ SC_ALLOW_PERMISSIVE ("unlink");
+ SC_ALLOW_PERMISSIVE ("unlinkat");
+ SC_ALLOW_PERMISSIVE ("utime");
+ SC_ALLOW_PERMISSIVE ("utimensat");
+ SC_ALLOW_PERMISSIVE ("utimes");
/* systemd: SystemCallFilter=@io-event */
SC_ALLOW ("_newselect");
@@ -584,12 +597,14 @@ static void _sandbox_load (man_sandbox *sandbox, int permissive) {
if (can_load_seccomp ()) {
scmp_filter_ctx ctx;
- debug ("loading seccomp filter (permissive: %d)\n",
- permissive);
if (permissive)
ctx = sandbox->permissive_ctx;
else
ctx = sandbox->ctx;
+ if (!ctx)
+ return;
+ debug ("loading seccomp filter (permissive: %d)\n",
+ permissive);
if (seccomp_load (ctx) < 0) {
if (errno == EINVAL || errno == EFAULT) {
/* The kernel doesn't give us particularly
@@ -606,14 +621,13 @@ static void _sandbox_load (man_sandbox *sandbox, int permissive) {
/* Don't try this again. */
seccomp_filter_unavailable = 1;
} else
- error (FATAL, errno,
- "can't load seccomp filter");
+ fatal (errno, "can't load seccomp filter");
}
}
}
#else /* !HAVE_LIBSECCOMP */
-static void _sandbox_load (man_sandbox *sandbox _GL_UNUSED,
- int permissive _GL_UNUSED)
+static void _sandbox_load (man_sandbox *sandbox MAYBE_UNUSED,
+ int permissive MAYBE_UNUSED)
{
}
#endif /* HAVE_LIBSECCOMP */
@@ -641,8 +655,10 @@ void sandbox_free (void *data) {
man_sandbox *sandbox = data;
#ifdef HAVE_LIBSECCOMP
- seccomp_release (sandbox->ctx);
- seccomp_release (sandbox->permissive_ctx);
+ if (sandbox->ctx)
+ seccomp_release (sandbox->ctx);
+ if (sandbox->permissive_ctx)
+ seccomp_release (sandbox->permissive_ctx);
#endif /* HAVE_LIBSECCOMP */
free (sandbox);
diff --git a/lib/sandbox.h b/lib/sandbox.h
index a838e0e4..cb482ec2 100644
--- a/lib/sandbox.h
+++ b/lib/sandbox.h
@@ -1,6 +1,6 @@
/*
* sandbox.h: Interface to process sandboxing
- *
+ *
* Copyright (C) 2017 Colin Watson.
*
* This file is part of man-db.
diff --git a/lib/security.c b/lib/security.c
index 55f2d85d..676e6d79 100644
--- a/lib/security.c
+++ b/lib/security.c
@@ -1,6 +1,6 @@
/*
- * security.c: Routines to aid secure uid operations
- *
+ * security.c: Routines to aid secure uid operations
+ *
* Copyright (C) 1994, 1995 Graeme W. Wilford. (Wilf.)
* Copyright (C) 2001, 2003, 2004, 2007, 2010, 2011 Colin Watson.
*
@@ -20,7 +20,7 @@
* along with man-db; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
- * Mon Aug 8 20:35:30 BST 1994 Wilf. (G.Wilford@ee.surrey.ac.uk)
+ * Mon Aug 8 20:35:30 BST 1994 Wilf. (G.Wilford@ee.surrey.ac.uk)
*/
#ifdef HAVE_CONFIG_H
@@ -35,15 +35,18 @@
#include <errno.h>
#include <sys/types.h>
+#include "attribute.h"
+#include "error.h"
#include "gettext.h"
#define _(String) gettext (String)
#include "manconfig.h"
-#include "error.h"
-#include "cleanup.h"
#include "pipeline.h"
+#include "cleanup.h"
+#include "debug.h"
+#include "fatal.h"
#include "security.h"
#ifdef MAN_OWNER
@@ -76,7 +79,7 @@ static int priv_drop_count = 0;
static void gripe_set_euid (void)
{
- error (FATAL, errno, _("can't set effective uid"));
+ fatal (errno, _("can't set effective uid"));
}
#endif /* MAN_OWNER */
@@ -95,7 +98,7 @@ void init_security (void)
#endif /* MAN_OWNER */
}
-bool _GL_ATTRIBUTE_PURE running_setuid (void)
+bool ATTRIBUTE_PURE running_setuid (void)
{
#ifdef MAN_OWNER
return ruid != euid;
@@ -122,8 +125,8 @@ struct passwd *get_man_owner (void)
}
#endif /* MAN_OWNER */
-/*
- * function to gain user privs by either (a) dropping effective privs
+/*
+ * function to gain user privs by either (a) dropping effective privs
* completely (saved ids) or (b) reversing euid w/ uid.
* Ignore if superuser.
*/
@@ -143,7 +146,7 @@ void drop_effective_privs (void)
#endif /* MAN_OWNER */
}
-/*
+/*
* function to (re)gain setuid privs by (a) setting euid from suid or (b)
* (re)reversing uid w/ euid. Ignore if superuser.
*/
@@ -169,7 +172,7 @@ void regain_effective_privs (void)
}
/* Pipeline command pre-exec hook to permanently drop privileges. */
-void drop_privs (void *data _GL_UNUSED)
+void drop_privs (void *data MAYBE_UNUSED)
{
#ifdef MAN_OWNER
if (idpriv_drop ())
diff --git a/lib/tempfile.c b/lib/tempfile.c
index 91ee0fb1..f4a291c1 100644
--- a/lib/tempfile.c
+++ b/lib/tempfile.c
@@ -24,6 +24,7 @@
# include "config.h"
#endif /* HAVE_CONFIG_H */
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -32,6 +33,8 @@
#include "manconfig.h"
+#include "tempfile.h"
+
static const char *path_search (void)
{
const char *dir = NULL;
@@ -73,6 +76,7 @@ char *create_tempdir (const char *template)
if (!dir)
return NULL;
created_dirname = xasprintf ("%s/%sXXXXXX", dir, template);
+ assert (created_dirname);
if (!mkdtemp (created_dirname))
return NULL;
return created_dirname;
diff --git a/lib/tempfile.h b/lib/tempfile.h
new file mode 100644
index 00000000..1a4a64ce
--- /dev/null
+++ b/lib/tempfile.h
@@ -0,0 +1,24 @@
+/* tempfile.h: interface to temporary directory creation
+ *
+ * Copyright (C) 2001-2022 Colin Watson.
+ *
+ * This file is part of man-db.
+ *
+ * man-db is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * man-db 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with man-db; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "attribute.h"
+
+NODISCARD extern char *create_tempdir (const char *template);
diff --git a/lib/util.c b/lib/util.c
index 580cafd0..88ff28ad 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -35,6 +35,7 @@
# include "config.h"
#endif /* HAVE_CONFIG_H */
+#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
@@ -44,16 +45,21 @@
#include <unistd.h>
#include <locale.h>
+#include "attribute.h"
#include "stat-time.h"
#include "timespec.h"
+#include "xalloc.h"
+#include "xstrndup.h"
#include "xvasprintf.h"
#include "gettext.h"
#include "manconfig.h"
+#include "debug.h"
#include "error.h"
#include "pipeline.h"
+#include "util.h"
/*
* Does file a have a different timestamp to file b?
@@ -163,6 +169,7 @@ int remove_directory (const char *directory, int recurse)
if (STREQ (entry->d_name, ".") || STREQ (entry->d_name, ".."))
continue;
path = xasprintf ("%s/%s", directory, entry->d_name);
+ assert (path);
if (stat (path, &st) == -1) {
free (path);
closedir (handle);
@@ -193,7 +200,7 @@ int remove_directory (const char *directory, int recurse)
/* Returns an allocated copy of s, with leading and trailing spaces
* removed.
*/
-char * _GL_ATTRIBUTE_MALLOC trim_spaces (const char *s)
+char * ATTRIBUTE_MALLOC trim_spaces (const char *s)
{
int length;
while (*s == ' ')
@@ -211,7 +218,7 @@ char *lang_dir (const char *filename)
const char *sm; /* the second "/man?/" dir */
ld = xstrdup ("");
- if (!filename)
+ if (!filename)
return ld;
/* Check whether filename is in a man page hierarchy. */
diff --git a/lib/util.h b/lib/util.h
new file mode 100644
index 00000000..48c98440
--- /dev/null
+++ b/lib/util.h
@@ -0,0 +1,31 @@
+/*
+ * util.h
+ *
+ * Copyright (C) 1990, 1991 John W. Eaton.
+ * Copyright (C) 1994, 1995 Graeme W. Wilford. (Wilf.)
+ * Copyright (C) 2001-2022 Colin Watson.
+ *
+ * This file is part of man-db.
+ *
+ * man-db is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * man-db 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with man-db; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+extern int is_changed (const char *fa, const char *fb);
+extern int is_directory (const char *path);
+extern char *escape_shell (const char *unesc);
+extern int remove_directory (const char *directory, int recurse);
+extern char *trim_spaces (const char *s);
+extern char *lang_dir (const char *filename);
+extern void init_locale (void);
diff --git a/lib/wordfnmatch.c b/lib/wordfnmatch.c
index 613035b2..b073a88d 100644
--- a/lib/wordfnmatch.c
+++ b/lib/wordfnmatch.c
@@ -29,6 +29,7 @@
#include <ctype.h>
#include "fnmatch.h"
+#include "xalloc.h"
#include "manconfig.h"
diff --git a/lib/xregcomp.c b/lib/xregcomp.c
index cd6ed9de..d8e1f180 100644
--- a/lib/xregcomp.c
+++ b/lib/xregcomp.c
@@ -24,6 +24,8 @@
# include "config.h"
#endif /* HAVE_CONFIG_H */
+#include <stddef.h>
+
#include "regex.h"
#include "gettext.h"
@@ -32,7 +34,8 @@
#include "manconfig.h"
-#include "error.h"
+#include "fatal.h"
+#include "xalloc.h"
#include "xregcomp.h"
void xregcomp (regex_t *preg, const char *regex, int cflags)
@@ -44,6 +47,6 @@ void xregcomp (regex_t *preg, const char *regex, int cflags)
errstrsize = regerror (err, preg, NULL, 0);
errstr = xmalloc (errstrsize);
regerror (err, preg, errstr, errstrsize);
- error (FATAL, 0, _("fatal: regex `%s': %s"), regex, errstr);
+ fatal (0, _("fatal: regex `%s': %s"), regex, errstr);
}
}