From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from scc-mailout-kit-02.scc.kit.edu (scc-mailout-kit-02.scc.kit.edu [129.13.231.82]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id 58206fd8 for ; Tue, 13 Nov 2018 03:50:50 -0500 (EST) Received: from asta-nat.asta.uni-karlsruhe.de ([172.22.63.82] helo=hekate.usta.de) by scc-mailout-kit-02.scc.kit.edu with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (envelope-from ) id 1gMUPI-0006WJ-B4; Tue, 13 Nov 2018 09:50:49 +0100 Received: from donnerwolke.usta.de ([172.24.96.3]) by hekate.usta.de with esmtp (Exim 4.77) (envelope-from ) id 1gMUPH-0002fo-6q; Tue, 13 Nov 2018 09:50:47 +0100 Received: from athene.usta.de ([172.24.96.10]) by donnerwolke.usta.de with esmtp (Exim 4.84_2) (envelope-from ) id 1gMUPH-0005tP-1q; Tue, 13 Nov 2018 09:50:47 +0100 Received: from localhost (athene.usta.de [local]) by athene.usta.de (OpenSMTPD) with ESMTPA id 4eb1baa0; Tue, 13 Nov 2018 09:50:47 +0100 (CET) Date: Tue, 13 Nov 2018 09:50:46 +0100 From: Ingo Schwarze To: Michael Forney Cc: tech@mandoc.bsd.lv Subject: Re: [texi2mdoc] [PATCH] Use mtime of input file for date, and allow override from command-line Message-ID: <20181113085046.GB82487@athene.usta.de> References: X-Mailinglist: mandoc-tech Reply-To: tech@mandoc.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.0 (2017-02-23) Hi Michael, Michael Forney wrote on Mon, Nov 12, 2018 at 05:00:13PM -0800: > I'm using texi2mdoc to generate ffmpeg manuals, Just personally, or are you somehow affiliated with the ffmpeg project (beyond sending occasional patches) and is that project considering to use texi2mdoc(1)? > and thought it would be useful to be a bit smarter about choosing > the document date so that the output is reproducible. True. > This patch changes texi2mdoc to use the mtime of the input file if > given by name, falling back to the current time if reading from stdin > or stat fails. In either case, the date can be given explicitly with > the -d flag. I agree, that's the right thing too do, pod2mdoc(1) behaves in a similar way. So i committed your patch with minimal tweaks (sorting headers, sorting stack variables roughly by size, making the manual page more similar too pod2mdoc(1)), also tweaking two nits while here: %F was the wrong format for mdoc(7), and the usage string lacked blanks between option letters and option arguments. Thanks for the patch, Ingo Log Message: ----------- Add the -d option to specify the .Dd date, and fall back to the mtime before resorting to the current time. Patch from Michael Forney with minimal tweaks by me. While here, fix the date format, "%F" is wrong for mdoc(7). Change it to "%B %e, %Y" which isn't perfect due to the spurious blank before single-digit day numbers, but closer. Modified Files: -------------- texi2mdoc: extern.h main.c texi2mdoc.1 util.c Revision Data ------------- Index: texi2mdoc.1 =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/texi2mdoc.1,v retrieving revision 1.15 retrieving revision 1.16 diff -Ltexi2mdoc.1 -Ltexi2mdoc.1 -u -p -r1.15 -r1.16 --- texi2mdoc.1 +++ texi2mdoc.1 @@ -23,6 +23,7 @@ .Sh SYNOPSIS .Nm texi2mdoc .Op Fl C Ar dir +.Op Fl d Ar date .Op Fl I Ar dirs .Op Ar file .Sh DESCRIPTION @@ -47,6 +48,17 @@ node-level documents placed within which must exist. These are created as .Pa prefix-NNN.7 . +.It Fl d Ar date +Set the output document date in the +.Ic \&Dd +macro to +.Ar date , +to be specified in the format +.Dq Ar Month Day , Year . +If unspecified, +.Nm +uses the file modification date +or the current date when reading from standard input. .It Fl I Ar dirs Colon-separated directories to search for .Li @include Index: main.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/main.c,v retrieving revision 1.71 retrieving revision 1.72 diff -Lmain.c -Lmain.c -u -p -r1.71 -r1.72 --- main.c +++ main.c @@ -17,6 +17,9 @@ #if defined(__linux__) || defined(__MINT__) # define _GNU_SOURCE /* memmem */ #endif + +#include + #include #include #include @@ -26,6 +29,7 @@ #include #include #include +#include #include #include "extern.h" @@ -2341,9 +2345,12 @@ int main(int argc, char *argv[]) { struct texi texi; - int c; + char date[32]; + struct stat st; char *dirpath, *dir, *ccp; const char *progname, *Idir, *cp; + time_t t; + int c; progname = strrchr(argv[0], '/'); if (progname == NULL) @@ -2357,11 +2364,14 @@ main(int argc, char *argv[]) texi.seenvs = -1; Idir = NULL; - while (-1 != (c = getopt(argc, argv, "C:I:"))) + while (-1 != (c = getopt(argc, argv, "C:d:I:"))) switch (c) { case ('C'): texi.chapters = optarg; break; + case ('d'): + texi.date = optarg; + break; case ('I'): Idir = optarg; break; @@ -2393,16 +2403,29 @@ main(int argc, char *argv[]) *ccp = '\0'; texi.dirs = parsedirs(&texi, dir, Idir, &texi.dirsz); free(dirpath); + if (NULL == texi.date) { + t = stat(argv[0], &st) == 0 ? st.st_mtime : time(NULL); + strftime(date, sizeof(date), + "%B %e, %Y", localtime(&t)); + texi.date = date; + } parsefile(&texi, argv[0], 1); } else { texi.title = strdup("Unknown Manual"); texi.dirs = parsedirs(&texi, NULL, Idir, &texi.dirsz); + if (NULL == texi.date) { + t = time(NULL); + strftime(date, sizeof(date), + "%B %e, %Y", localtime(&t)); + texi.date = date; + } parsestdin(&texi); } texiexit(&texi); exit(EXIT_SUCCESS); usage: - fprintf(stderr, "usage: %s [-Cdir] [-Idirs] [file]\n", progname); + fprintf(stderr, "usage: %s [-C dir] [-d date] [-I dirs] [file]\n", + progname); return(EXIT_FAILURE); } Index: util.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/util.c,v retrieving revision 1.34 retrieving revision 1.35 diff -Lutil.c -Lutil.c -u -p -r1.34 -r1.35 --- util.c +++ util.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include "extern.h" @@ -1731,21 +1730,16 @@ texicache(struct texi *p, const char *bu * We use the title set with @settitle for the `Nd' description * and the source document filename (the first one as invoked on * the command line) for the title. - * The date is set to the current date. + * The date is set to the modification time of the input. */ void teximdocopen(struct texi *p, size_t *pos) { const char *cp; - time_t t; - char date[32]; - - t = time(NULL); - strftime(date, sizeof(date), "%F", localtime(&t)); p->seenvs = -1; teximacroopen(p, "Dd"); - texiputchars(p, date); + texiputchars(p, p->date); teximacroclose(p); teximacroopen(p, "Dt"); for (cp = p->title; '\0' != *cp; cp++) Index: extern.h =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/extern.h,v retrieving revision 1.29 retrieving revision 1.30 diff -Lextern.h -Lextern.h -u -p -r1.29 -r1.30 --- extern.h +++ extern.h @@ -422,6 +422,7 @@ struct texi { size_t valstackpos; /* position in valstack */ char *title; /* title of document */ char *subtitle; /* subtitle of document */ + char *date; /* date of document */ int secoffs; /* see sectioner() */ struct texidex *indexs; /* index entries */ size_t indexsz; /* entries in indexs */ -- To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv