From: Lady <redacted>
Date: Tue, 2 Jan 2024 18:20:30 +0000 (-0500)
Subject: Provide $buildtime, $srctime, and $path variables
X-Git-Tag: 0.2.0^0
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/4a0e5671fe44e12a563c4b8403b87db66566f005

Provide $buildtime, $srctime, and $path variables
---

diff --git a/GNUmakefile b/GNUmakefile
index 6d68702..e862477 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -16,6 +16,7 @@ override define makefileinfo
 ║│                                                            │║
 ║│ • cat                                                      │║
 ║│ • cp                                                       │║
+║│ • date                                                     │║
 ║│ • echo                                                     │║
 ║│ • file                                                     │║
 ║│ • find                                                     │║
@@ -25,6 +26,7 @@ override define makefileinfo
 ║│ • rm                                                       │║
 ║│ • sed                                                      │║
 ║│ • sleep                                                    │║
+║│ • stat                                                     │║
 ║│ • test                                                     │║
 ║│ • touch                                                    │║
 ║│ • tr (requires support for `-d´)                           │║
@@ -79,6 +81,7 @@ endef
 # different implementation, you can override the appropriate variable.
 CAT := cat
 CP := cp
+DATE := date
 ECHO := echo
 FILE := file
 FIND := find
@@ -88,6 +91,7 @@ PRINTF := printf
 RM := rm
 SED := sed
 SLEEP := sleep
+STAT := stat
 TEST := test
 TOUCH := touch
 TR := tr
@@ -425,7 +429,7 @@ $(BUILDDIR)/transform.xslt: $(BUILDDIR)/transform.catalog $(THISDIR)/lib/catalog
 $(call compiled,$(compilablefiles)): $(BUILDDIR)/public/%: $$(call parsed,$(SRCDIR)/%) $(BUILDDIR)/transform.xslt $$(call parsed,$$(call dependencies,$(SRCDIR)/%))
 	$(silent)$(call ensuredirectory,$(dir $@))
 	@$(PRINTF) '%s\n' $(call quote,Compiling `$*´…)
-	$(silent)$(XSLTPROC) -o $(call quote,$@) --stringparam catalog 'catalog' $(call quote,$(BUILDDIR)/transform.xslt) $(call quote,$<)
+	$(silent)$(XSLTPROC) -o $(call quote,$@) --stringparam catalog 'catalog' --stringparam buildtime '$(shell TZ= $(DATE) '+%Y-%m-%dT%H:%M:%SZ')' --stringparam srctime '$(shell TZ= $(STAT) -f '%Sm' -t '%Y-%m-%dT%H:%M:%SZ' $(call quote,$(SRCDIR)/$*))' --stringparam path $(call quote,/$*) $(call quote,$(BUILDDIR)/transform.xslt) $(call quote,$<)
 $(call compiled,$(filter $(assetfiles),$(sourcefiles))): $(BUILDDIR)/public/%: $(SRCDIR)/%
 	@$(PRINTF) '%s\n' $(call quote,Compiling `$*´…)
 	$(silent)$(call ensuredirectory,$(dir $@))
diff --git a/README.markdown b/README.markdown
index 6870c4d..13cb1d6 100644
--- a/README.markdown
+++ b/README.markdown
@@ -93,6 +93,7 @@ In every case, you may supply your own implementation by overriding the
 
 - `cat`
 - `cp`
+- `date`
 - `echo`
 - `file`
 - `find`
@@ -102,6 +103,7 @@ In every case, you may supply your own implementation by overriding the
 - `rm`
 - `sed`
 - `sleep`
+- `stat`
 - `test`
 - `touch`
 - `tr` (requires support for `-d`)
@@ -312,6 +314,11 @@ The following are recommendations on effective creation of
 - Set `@exclude-result-prefixes` on the root `xslt:transform` element
     to reduce the number of declared namespaces in the final result.
 
+The params `$buildtime`, `$srctime`, and `$path` are available within
+  transforms and are initialized to the current time, the time that the
+  source file was last modified, and the path of the output file within
+  $(DESTDIR).
+
 ## Output Wrapping
 
 ⛩️📰 书社 will wrap the final output of the transforms in appropriate
diff --git a/lib/catalog2transform.xslt b/lib/catalog2transform.xslt
index 2a3bc71..65f5f0f 100644
--- a/lib/catalog2transform.xslt
+++ b/lib/catalog2transform.xslt
@@ -24,7 +24,10 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 	<namespace-alias stylesheet-prefix="xslt" result-prefix="#default"/>
 	<template match="/">
 		<xslt:transform exclude-result-prefixes="catalog exsl exslstr" version="1.0">
+			<xslt:param name="buildtime" select="'1972-12-31T00:00:00Z'"/>
 			<xslt:param name="catalog" select="'catalog'"/>
+			<xslt:param name="srctime" select="'1972-12-31T00:00:00Z'"/>
+			<xslt:param name="path" select="'/unknown'"/>
 			<xslt:variable name="书社:expansion">
 				<xslt:apply-templates select="/" mode="书社:expand"/>
 			</xslt:variable>
@@ -119,6 +122,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 					<xslt:copy-of select="html:html/@*"/>
 					<html:head>
 						<xslt:copy-of select="html:html/html:head/@*"/>
+						<html:script type="text/plain">
+							<xslt:text>buildtime=</xslt:text><xslt:value-of select="$buildtime"/><xslt:text>&#xA;</xslt:text>
+							<xslt:text>srctime=</xslt:text><xslt:value-of select="$srctime"/><xslt:text>&#xA;</xslt:text>
+							<xslt:text>path=</xslt:text><xslt:value-of select="$path"/><xslt:text>&#xA;</xslt:text>
+						</html:script>
 						<html:title>
 							<xslt:for-each select="exsl:node-set($metadata)/html:title">
 								<xslt:value-of select="."/>