tech@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: Michael Forney <mforney@mforney.org>
To: tech@mandoc.bsd.lv
Subject: [texi2mdoc] [PATCH] Use mtime of input file for date, and allow override from command-line
Date: Mon, 12 Nov 2018 17:00:13 -0800	[thread overview]
Message-ID: <CAGw6cBuk7OKDpXt58w0+QdT0usm+AgE2=_EWhBMs7awBXwSeEA@mail.gmail.com> (raw)

Hi,

I'm using texi2mdoc to generate ffmpeg manuals, and thought it would
be useful to be a bit smarter about choosing the document date so that
the output is reproducible.

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.

Index: extern.h
===================================================================
RCS file: /cvs/texi2mdoc/extern.h,v
retrieving revision 1.29
diff -u -p -r1.29 extern.h
--- extern.h	12 Mar 2015 10:44:34 -0000	1.29
+++ extern.h	13 Nov 2018 00:53:02 -0000
@@ -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 */
Index: main.c
===================================================================
RCS file: /cvs/texi2mdoc/main.c,v
retrieving revision 1.71
diff -u -p -r1.71 main.c
--- main.c	19 Mar 2015 09:53:35 -0000	1.71
+++ main.c	13 Nov 2018 00:53:03 -0000
@@ -26,6 +26,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
+#include <time.h>
 #include <unistd.h>

 #include "extern.h"
@@ -2342,8 +2344,10 @@ main(int argc, char *argv[])
 {
 	struct texi	 texi;
 	int		 c;
-	char		*dirpath, *dir, *ccp;
+	char		*dirpath, *dir, *ccp, date[32];
 	const char	*progname, *Idir, *cp;
+	struct stat	 st;
+	time_t		 t;

 	progname = strrchr(argv[0], '/');
 	if (progname == NULL)
@@ -2357,11 +2361,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 +2400,26 @@ 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), "%F", 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), "%F", 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 [-Cdir] [-ddate] [-Idirs] [file]\n", progname);
 	return(EXIT_FAILURE);
 }
Index: texi2mdoc.1
===================================================================
RCS file: /cvs/texi2mdoc/texi2mdoc.1,v
retrieving revision 1.15
diff -u -p -r1.15 texi2mdoc.1
--- texi2mdoc.1	12 Mar 2015 04:24:19 -0000	1.15
+++ texi2mdoc.1	13 Nov 2018 00:53:03 -0000
@@ -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,10 @@ 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 to
+.Ar date
+instead of the modification time of the input file.
 .It Fl I Ar dirs
 Colon-separated directories to search for
 .Li @include
Index: util.c
===================================================================
RCS file: /cvs/texi2mdoc/util.c,v
retrieving revision 1.34
diff -u -p -r1.34 util.c
--- util.c	19 Mar 2015 09:53:36 -0000	1.34
+++ util.c	13 Nov 2018 00:53:03 -0000
@@ -25,7 +25,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <time.h>
 #include <unistd.h>

 #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++)
--
 To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv

             reply	other threads:[~2018-11-13  1:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-13  1:00 Michael Forney [this message]
2018-11-13  8:50 ` Ingo Schwarze
2018-11-13  9:12   ` Michael Forney
2018-11-13  9:20     ` Ingo Schwarze

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGw6cBuk7OKDpXt58w0+QdT0usm+AgE2=_EWhBMs7awBXwSeEA@mail.gmail.com' \
    --to=mforney@mforney.org \
    --cc=tech@mandoc.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).