diff --git a/am/cmacros.am b/am/cmacros.am index 4b4856051..8bd839c46 100644 --- a/am/cmacros.am +++ b/am/cmacros.am @@ -18,6 +18,8 @@ localedir = $(datadir)/locale +# NB: AM_CFLAGS may also be used by tools running on the build +# platform to create source files. AM_CPPFLAGS += -DLOCALEDIR=\"$(localedir)\" if ! HAVE_DOSISH_SYSTEM diff --git a/doc/Makefile.am b/doc/Makefile.am index 6d66679f3..ee8bca2ad 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -17,6 +17,10 @@ ## Process this file with automake to produce Makefile.in +AM_CPPFLAGS = + +include $(top_srcdir)/am/cmacros.am + examples = examples/README examples/scd-event examples/trustlist.txt \ examples/gpgconf.conf examples/pwpattern.list @@ -32,12 +36,12 @@ EXTRA_DIST = samplekeys.asc mksamplekeys \ gnupg-logo.eps gnupg-logo.pdf gnupg-logo.png gnupg-logo-tr.png\ gnupg-card-architecture.eps gnupg-card-architecture.png \ gnupg-card-architecture.pdf \ - FAQ gnupg7.texi \ + FAQ gnupg7.texi mkdefsinc.c defsincdate \ opt-homedir.texi see-also-note.texi specify-user-id.texi \ gpgv.texi yat2m.c ChangeLog-2011 whats-new-in-2.1.txt BUILT_SOURCES = gnupg-card-architecture.eps gnupg-card-architecture.png \ - gnupg-card-architecture.pdf + gnupg-card-architecture.pdf defsincdate info_TEXINFOS = gnupg.texi @@ -75,7 +79,7 @@ man_MANS = $(myman_pages) gnupg.7 watchgnupg_SOURCE = gnupg.texi -CLEANFILES = yat2m +CLEANFILES = yat2m mkdefsinc defs.inc DISTCLEANFILES = gnupg.tmp gnupg.ops yat2m-stamp.tmp yat2m-stamp \ $(myman_pages) gnupg.7 @@ -83,6 +87,10 @@ DISTCLEANFILES = gnupg.tmp gnupg.ops yat2m-stamp.tmp yat2m-stamp \ yat2m: yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c +mkdefsinc: mkdefsinc.c Makefile ../config.h + $(CC_FOR_BUILD) -I. -I.. -I$(srcdir) $(AM_CPPFLAGS) \ + -o $@ $(srcdir)/mkdefsinc.c + .fig.png: fig2dev -L png `test -f '$<' || echo '$(srcdir)/'`$< $@ @@ -97,7 +105,7 @@ yat2m: yat2m.c fig2dev -L pdf `test -f '$<' || echo '$(srcdir)/'`$< $@ -yat2m-stamp: $(myman_sources) +yat2m-stamp: $(myman_sources) defs.inc @rm -f yat2m-stamp.tmp @touch yat2m-stamp.tmp for file in $(myman_sources) ; do \ @@ -107,7 +115,7 @@ yat2m-stamp: $(myman_sources) yat2m-stamp: yat2m -$(myman_pages) gnupg.7 : yat2m-stamp +$(myman_pages) gnupg.7 : yat2m-stamp defs.inc @if test -f $@; then :; else \ trap 'rm -rf yat2m-stamp yat2m-lock' 1 2 13 15; \ if mkdir yat2m-lock 2>/dev/null; then \ @@ -120,11 +128,20 @@ $(myman_pages) gnupg.7 : yat2m-stamp fi; \ fi -# Make sure that gnupg.texi is touched if any other source file has -# been modified. This is required so that the version.texi magic -# updates the release date. -gnupg.texi : $(gnupg_TEXINFOS) - touch $(srcdir)/gnupg.texi +dist-hook: defsincdate + +defsincdate: $(gnupg_TEXINFOS) + : >defsincdate ; \ + if test -d $(top_srcdir)/.git; then \ + (cd $(srcdir) && git log -1 --format='%ct' \ + -- $(gnupg_TEXINFOS) 2>/dev/null) >>defsincdate; \ + fi + +defs.inc : defsincdate Makefile mkdefsinc + incd="`test -f defsincdate || echo '$(srcdir)/'`defsincdate"; \ + ./mkdefsinc -C $(srcdir) --date "`cat $$incd 2>/dev/null`" \ + $(gnupg_TEXINFOS) >$@ + online: gnupg.html gnupg.pdf set -e; \ diff --git a/doc/debugging.texi b/doc/debugging.texi index 35cb699f0..7965dbc8f 100644 --- a/doc/debugging.texi +++ b/doc/debugging.texi @@ -178,7 +178,7 @@ Pick the key which best matches the creation time and run the command @cartouche @smallexample - /usr/local/libexec/gpg-protect-tool --p12-export \ + @value{LIBEXECDIR}/gpg-protect-tool --p12-export \ ~/.gnupg/private-keys-v1.d/@var{foo} >@var{foo}.p12 @end smallexample @end cartouche @@ -193,7 +193,7 @@ To import the created file on the machine you use this command: @cartouche @smallexample - /usr/local/libexec/gpg-protect-tool --p12-import --store @var{foo}.p12 + @value{LIBEXECDIR}/gpg-protect-tool --p12-import --store @var{foo}.p12 @end smallexample @end cartouche diff --git a/doc/dirmngr.texi b/doc/dirmngr.texi index cf35c47ed..d62e2d59c 100644 --- a/doc/dirmngr.texi +++ b/doc/dirmngr.texi @@ -3,6 +3,8 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. +@include defs.inc + @node Invoking DIRMNGR @chapter Invoking DIRMNGR @cindex DIRMNGR command options @@ -143,8 +145,8 @@ running mode: @table @asis @item With @code{--daemon} given on the commandline -the directory named @file{/etc/gnupg} is used for configuration files -and @file{/var/cache/gnupg} for cached CRLs. +the directory named @file{@value{SYSCONFDIR}} is used for configuration files +and @file{@value{LOCALCACHEDIR}} for cached CRLs. @item Without @code{--daemon} given on the commandline the directory named @file{.gnupg} directly below the home directory @@ -456,7 +458,7 @@ These certificates are first tried before going out to the net to look for them. These certificates must also be @acronym{DER} encoded and suffixed with @file{.crt} or @file{.der}. -@item /var/run/gnupg +@item @value{LOCALRUNDIR} This directory is only used in the deprecated system daemon mode. It keeps the socket file for accessing @command{dirmngr} services. The name of the socket file will be @file{S.dirmngr}. Make sure that this @@ -465,7 +467,7 @@ the socket file and that eligible users may read and write to that socket. @item ~/.gnupg/crls.d -@itemx /var/cache/gnupg/crls.d +@itemx @value{LOCALCACHEDIR}/crls.d The first directory is used to store cached CRLs. The @file{crls.d} part will be created by dirmngr if it does not exists but you need to make sure that the upper directory exists. The second directory is diff --git a/doc/gnupg.texi b/doc/gnupg.texi index 2517a50ec..1fddeb007 100644 --- a/doc/gnupg.texi +++ b/doc/gnupg.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnupg.info -@include version.texi +@include defs.inc @settitle Using the GNU Privacy Guard @c A couple of macros with no effect on texinfo diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi index 307839275..e5701441f 100644 --- a/doc/gpg-agent.texi +++ b/doc/gpg-agent.texi @@ -2,6 +2,7 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. +@include defs.inc @node Invoking GPG-AGENT @chapter Invoking GPG-AGENT @@ -75,8 +76,8 @@ Please make sure that a proper pinentry program has been installed under the default filename (which is system dependent) or use the option @option{pinentry-program} to specify the full name of that program. It is often useful to install a symbolic link from the actual used -pinentry (e.g. @file{/usr/bin/pinentry-gtk}) to the expected -one (e.g. @file{/usr/bin/pinentry}). +pinentry (e.g. @file{@value{BINDIR}/pinentry-gtk}) to the expected +one (e.g. @file{@value{BINDIR}/pinentry}). @manpause @noindent @@ -580,7 +581,7 @@ It might even be advisable to change the permissions to read-only so that this file can't be changed inadvertently. As a special feature a line @code{include-default} will include a global -list of trusted certificates (e.g. @file{/etc/gnupg/trustlist.txt}). +list of trusted certificates (e.g. @file{@value{SYSCONFDIR}/trustlist.txt}). This global list is also used if the local list is not available. It is possible to add further flags after the @code{S} for use by the @@ -647,7 +648,7 @@ implicitly added to this list; i.e. there is no need to list them. @end table Note that on larger installations, it is useful to put predefined -files into the directory @file{/etc/skel/.gnupg/} so that newly created +files into the directory @file{@value{SYSCONFSKELDIR}} so that newly created users start up with a working configuration. For existing users the a small helper script is provided to create these files (@pxref{addgnupghome}). diff --git a/doc/gpg.texi b/doc/gpg.texi index 77072bd90..6fcfe5869 100644 --- a/doc/gpg.texi +++ b/doc/gpg.texi @@ -3,19 +3,14 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. +@include defs.inc + @node Invoking GPG @chapter Invoking GPG @cindex GPG command options @cindex command options @cindex options, GPG command -@c Begin algorithm defaults - -@set DEFSYMENCALGO AES128 - -@c End algorithm defaults - - @macro gpgname gpg2 @end macro @@ -180,7 +175,7 @@ decrypted via a secret key or a passphrase). @itemx -c @opindex symmetric Encrypt with a symmetric cipher using a passphrase. The default -symmetric cipher used is @value{DEFSYMENCALGO}, but may be chosen with the +symmetric cipher used is @value{GPGSYMENCALGO}, but may be chosen with the @option{--cipher-algo} option. This option may be combined with @option{--sign} (for a signed and symmetrically encrypted message), @option{--encrypt} (for a message that may be decrypted via a secret key @@ -1672,7 +1667,7 @@ file name. @item --dirmngr-program @var{file} @opindex dirmngr-program Specify a dirmngr program to be used for keyserver access. The -default value is @file{/usr/sbin/dirmngr}. This is only used as a +default value is @file{@value{BINDIR}/dirmngr}. This is only used as a fallback when the environment variable @code{DIRMNGR_INFO} is not set or a running dirmngr cannot be connected. @@ -2152,7 +2147,7 @@ to consider (e.g. @option{--symmetric}). @item --s2k-cipher-algo @code{name} @opindex s2k-cipher-algo Use @code{name} as the cipher algorithm used to protect secret keys. -The default cipher is @value{DEFSYMENCALGO}. This cipher is also used +The default cipher is @value{GPGSYMENCALGO}. This cipher is also used for symmetric encryption with a passphrase if @option{--personal-cipher-preferences} and @option{--cipher-algo} is not given. @@ -2939,8 +2934,8 @@ current home directory (@pxref{option --homedir}). @c man:.RE Note that on larger installations, it is useful to put predefined files -into the directory @file{/etc/skel/.gnupg/} so that newly created users -start up with a working configuration. +into the directory @file{@value{SYSCONFSKELDIR}} so that +newly created users start up with a working configuration. For existing users a small helper script is provided to create these files (@pxref{addgnupghome}). @@ -2993,10 +2988,10 @@ files; They all live in in the current home directory (@pxref{option You should backup all files in this directory and take care to keep this backup closed away. - @item /usr[/local]/share/gnupg/options.skel + @item @value{DATADIR}/options.skel The skeleton options file. - @item /usr[/local]/lib/gnupg/ + @item @value{LIBDIR}/ Default location for extensions. @end table diff --git a/doc/gpgsm.texi b/doc/gpgsm.texi index 1b57d1a2c..21e9372d2 100644 --- a/doc/gpgsm.texi +++ b/doc/gpgsm.texi @@ -2,6 +2,8 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. +@include defs.inc + @node Invoking GPGSM @chapter Invoking GPGSM @cindex GPGSM command options @@ -355,7 +357,7 @@ suite hack and may thus not be used in the file name. @item --dirmngr-program @var{file} @opindex dirmngr-program Specify a dirmngr program to be used for @acronym{CRL} checks. The -default value is @file{/usr/sbin/dirmngr}. This is only used as a +default value is @file{@value{BINDIR}/dirmngr}. This is only used as a fallback when the environment variable @code{DIRMNGR_INFO} is not set or a running dirmngr cannot be connected. @@ -819,7 +821,7 @@ mean that the certificate is trusted; in general the certificates listed in this file need to be listed also in @file{trustlist.txt}. This is a global file an installed in the data directory -(e.g. @file{/usr/share/gnupg/qualified.txt}). GnuPG installs a suitable +(e.g. @file{@value{DATADIR}/qualified.txt}). GnuPG installs a suitable file with root certificates as used in Germany. As new Root-CA certificates may be issued over time, these entries may need to be updated; new distributions of this software should come with an updated @@ -844,9 +846,9 @@ This is plain text file with a few help entries used with @command{gpg} and @command{gpgsm}. The standard file has English help texts; to install localized versions use filenames like @file{help.LL.txt} with LL denoting the locale. GnuPG comes with a set of predefined help -files in the data directory (e.g. @file{/usr/share/gnupg/help.de.txt}) +files in the data directory (e.g. @file{@value{DATADIR}/gnupg/help.de.txt}) and allows overriding of any help item by help files stored in the -system configuration directory (e.g. @file{/etc/gnupg/help.de.txt}). +system configuration directory (e.g. @file{@value{SYSCONFDIR}/help.de.txt}). For a reference of the help file's syntax, please see the installed @file{help.txt} file. @@ -857,7 +859,7 @@ This file is a collection of common certificates used to populated a newly created @file{pubring.kbx}. An administrator may replace this file with a custom one. The format is a concatenation of PEM encoded X.509 certificates. This global file is installed in the data directory -(e.g. @file{/usr/share/gnupg/com-certs.pem}). +(e.g. @file{@value{DATADIR}/com-certs.pem}). @end table diff --git a/doc/gpgv.texi b/doc/gpgv.texi index 0cb2360f8..8d7164ae0 100644 --- a/doc/gpgv.texi +++ b/doc/gpgv.texi @@ -6,6 +6,8 @@ @c This is included by tools.texi. @c +@include defs.inc + @c Begin GnuPG 1.x specific stuff @ifset gpgone @macro gpgvname diff --git a/doc/instguide.texi b/doc/instguide.texi index aff39556c..76d8de159 100644 --- a/doc/instguide.texi +++ b/doc/instguide.texi @@ -29,7 +29,7 @@ configured @command{gnupg} using: @end example This is to make sure that system wide configuration files are searched -in the directory @file{/etc/gnupg} and variable data below @file{/var}; +in the directory @file{/etc} and variable data below @file{/var}; the default would be to also install them below @file{/usr/local} where the binaries get installed. If you selected to use the @option{--prefix=/} you obviously don't need those option as they are diff --git a/doc/mkdefsinc.c b/doc/mkdefsinc.c new file mode 100644 index 000000000..c4f776f31 --- /dev/null +++ b/doc/mkdefsinc.c @@ -0,0 +1,306 @@ +/* mkdefsinc.c - Tool to create defs.inc + * Copyright (C) 2015 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* This tool needs to be build with command line supplied -D options + for the various directory variables. See ../am/cmacros.am. It is + easier to do this in build file than to use fragile make rules and + a template file. */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PGM "mkdefsinc" + +/* We include config.h after all include files because the config.h + values are not valid for the build platform but we need some values + nevertheless. */ +#include "config.h" + + +static int verbose; + + +/* The usual free wrapper. */ +static void +xfree (void *a) +{ + if (a) + free (a); +} + + +static char * +xmalloc (size_t n) +{ + char *p; + + p = malloc (n); + if (!p) + { + fputs (PGM ": out of core\n", stderr); + exit (1); + } + return p; +} + + +static char * +xstrdup (const char *string) +{ + char *p; + + p = xmalloc (strlen (string)+1); + strcpy (p, string); + return p; +} + + +/* Return a malloced string with the last modification date of the + FILES. Returns NULL on error. */ +static char * +get_date_from_files (char **files) +{ + const char *file; + const char *usedfile = NULL; + struct stat sb; + struct tm *tp; + int errors = 0; + time_t stamp = 0; + char *result; + + for (; (file = *files); files++) + { + if (!*file || !strcmp (file, ".") || !strcmp (file, "..")) + continue; + if (stat (file, &sb)) + { + fprintf (stderr, PGM ": stat failed for '%s': %s\n", + file, strerror (errno)); + errors = 1; + continue; + } + if (sb.st_mtime > stamp) + { + stamp = sb.st_mtime; + usedfile = file; + } + } + if (errors) + exit (1); + + if (usedfile) + fprintf (stderr, PGM ": taking date from '%s'\n", usedfile); + + tp = gmtime (&stamp); + if (!tp) + return NULL; + result = xmalloc (4+1+2+1+2+1); + snprintf (result, 4+1+2+1+2+1, "%04d-%02d-%02d", + tp->tm_year + 1900, tp->tm_mon+1, tp->tm_mday); + return result; +} + + + +int +main (int argc, char **argv) +{ + int last_argc = -1; + char *opt_date = NULL; + int monthoff; + char *p, *pend; + size_t n; + + /* Option parsing. */ + if (argc) + { + argc--; argv++; + } + while (argc && last_argc != argc ) + { + last_argc = argc; + if (!strcmp (*argv, "--")) + { + argc--; argv++; + break; + } + else if (!strcmp (*argv, "--help")) + { + fputs ("Usage: " PGM " [OPTION] [FILES]\n" + "Create defs.inc file.\nOptions:\n" + " -C DIR Change to DIR before doing anything\n" + " --date STRING Take publication date from STRING\n" + " --verbose Enable extra informational output\n" + " --help Display this help and exit\n" + , stdout); + exit (0); + } + else if (!strcmp (*argv, "--verbose")) + { + verbose = 1; + argc--; argv++; + } + else if (!strcmp (*argv, "-C")) + { + argc--; argv++; + if (argc) + { + if (chdir (*argv)) + { + fprintf (stderr, PGM ": chdir to '%s' failed: %s\n", + *argv, strerror (errno)); + exit (1); + } + argc--; argv++; + } + } + else if (!strcmp (*argv, "--date")) + { + argc--; argv++; + if (argc) + { + opt_date = xstrdup (*argv); + argc--; argv++; + } + } + else if (!strncmp (*argv, "--", 2)) + { + fprintf (stderr, PGM ": unknown option '%s'\n", *argv); + exit (1); + } + } + + if (opt_date && *opt_date) + { + time_t stamp; + struct tm *tp; + + if (*opt_date == '2' && strlen (opt_date) >= 10 + && opt_date[4] == '-' && opt_date[7] == '-') + { + opt_date[10] = 0; + } + else if ((stamp = strtoul (opt_date, NULL, 10)) > 0 + && (tp = gmtime (&stamp))) + { + p = xmalloc (4+1+2+1+2+1); + snprintf (p, 4+1+2+1+2+1, "%04d-%02d-%02d", + tp->tm_year + 1900, tp->tm_mon+1, tp->tm_mday); + xfree (opt_date); + opt_date = p; + } + else + { + fprintf (stderr, PGM ": bad date '%s'\n", opt_date); + exit (1); + } + } + else + { + xfree (opt_date); + opt_date = argc? get_date_from_files (argv) : NULL; + } + if (!opt_date) + { + opt_date = xstrdup ("unknown"); + monthoff = 0; + } + else + { + const char *month = "?"; + + switch (atoi (opt_date+5)) + { + case 1: month = "January"; break; + case 2: month = "February"; break; + case 3: month = "March"; break; + case 4: month = "April"; break; + case 5: month = "May"; break; + case 6: month = "June"; break; + case 7: month = "July"; break; + case 8: month = "August"; break; + case 9: month = "September"; break; + case 10: month = "October"; break; + case 11: month = "November"; break; + case 12: month = "December"; break; + } + n = strlen (opt_date) + strlen (month) + 2 + 1; + p = xmalloc (n); + snprintf (p, n, "%d %n%s %d", + atoi (opt_date+8), &monthoff, month, atoi (opt_date)); + xfree (opt_date); + opt_date = p; + } + + + fputs ("@c defs.inc -*- texinfo -*-\n" + "@c Common and build specific constants for the manuals.\n" + "@c This file has been created by " PGM ".\n", stdout); + + fputs ("\n@c Directories\n\n", stdout); + + fputs ("@set BINDIR " GNUPG_BINDIR "\n" + "@set LIBEXECDIR " GNUPG_LIBEXECDIR "\n" + "@set LIBDIR " GNUPG_LIBDIR "\n" + "@set DATADIR " GNUPG_DATADIR "\n" + "@set SYSCONFDIR " GNUPG_SYSCONFDIR "\n" + "@set LOCALSTATEDIR " GNUPG_LOCALSTATEDIR "\n" + "@set LOCALCACHEDIR " GNUPG_LOCALSTATEDIR + /* */ "/cache/" PACKAGE_NAME "\n" + "@set LOCALRUNDIR " GNUPG_LOCALSTATEDIR + /* */ "/run/" PACKAGE_NAME "\n" + , stdout); + + p = xstrdup (GNUPG_SYSCONFDIR); + pend = strrchr (p, '/'); + fputs ("@set SYSCONFSKELDIR ", stdout); + if (pend) + { + *pend = 0; + fputs (p, stdout); + } + fputs ("/skel/." PACKAGE_NAME "\n", stdout); + xfree (p); + + fputs ("\n@c Version information a la version.texi\n\n", stdout); + + printf ("@set UPDATED %s\n", opt_date); + printf ("@set UPDATED-MONTH %s\n", opt_date + monthoff); + printf ("@set EDITION %s\n", PACKAGE_VERSION); + printf ("@set VERSION %s\n", PACKAGE_VERSION); + + fputs ("\n@c Algorithm defaults\n\n", stdout); + + /* Fixme: Use a config.h macro here: */ + fputs ("@set GPGSYMENCALGO AES-128\n", stdout); + + + fputs ("\n" + "@c Loc" "al Variables:\n" + "@c buffer-read-only: t\n" + "@c End:\n", stdout); + + if (ferror (stdout)) + { + fprintf (stderr, PGM ": error writing to stdout: %s\n", strerror (errno)); + return 1; + } + + return 0; +} diff --git a/doc/opt-homedir.texi b/doc/opt-homedir.texi index 033a9016b..7bcce4637 100644 --- a/doc/opt-homedir.texi +++ b/doc/opt-homedir.texi @@ -18,5 +18,5 @@ empty file name @file{gpgconf.ctl} in the same directory as the tool directory; or, if @file{gpgconf.exe} has been installed directly below a directory named @file{bin}, its parent directory. You also need to make sure that the following directories exist and are writable: -@file{ROOT/home} for the GnuPG home and @file{ROOT/var/cache/gnupg} +@file{ROOT/home} for the GnuPG home and @file{ROOT@value{LOCALCACHEDIR}} for internal cache files. diff --git a/doc/scdaemon.texi b/doc/scdaemon.texi index 79a5fccd5..7f1058bd8 100644 --- a/doc/scdaemon.texi +++ b/doc/scdaemon.texi @@ -2,6 +2,8 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. +@include defs.inc + @node Invoking SCDAEMON @chapter Invoking the SCDAEMON @cindex SCDAEMON command options @@ -469,8 +471,8 @@ make much sense expect for system services, but in this case no regular user accounts are hosted on the machine. A client connects to the SC-Daemon by connecting to the socket named -@file{/var/run/scdaemon/socket}, configuration information is read from -@var{/etc/scdaemon.conf} +@file{@value{LOCALRUNDIR}/scdaemon/socket}, configuration information +is read from @var{@value{SYSCONFDIR}/scdaemon.conf} Each connection acts as one session, SC-Daemon takes care of synchronizing access to a token between sessions. diff --git a/doc/tools.texi b/doc/tools.texi index 7bf5066bf..a067eb66f 100644 --- a/doc/tools.texi +++ b/doc/tools.texi @@ -2,6 +2,8 @@ @c This is part of the GnuPG manual. @c For copying conditions, see the file GnuPG.texi. +@include defs.inc + @node Helper Tools @chapter Helper Tools diff --git a/doc/yat2m.c b/doc/yat2m.c index 86c3c7081..e2ab86ea1 100644 --- a/doc/yat2m.c +++ b/doc/yat2m.c @@ -1367,7 +1367,7 @@ parse_file (const char *fname, FILE *fp, char **section_name, int in_pause) } if (!incfp) - err ("can't open include file '%s':%s", + err ("can't open include file '%s': %s", incname, strerror (errno)); else {