]> Lady’s Gitweb - Shushe/blobdiff - README.markdown
Drop CKSUM and SRCTIME params; add as attributes
[Shushe] / README.markdown
index f6874eaf462c9e275226568fea09f06fd7f1de42..e70361e3160b68b98656993439f61f38f36d5f52 100644 (file)
@@ -23,26 +23,10 @@ It makes things easier by :⁠—
 It aims to do this with zero dependencies beyond the programs already
   installed on your computer†.
 
 It aims to do this with zero dependencies beyond the programs already
   installed on your computer†.
 
-† The only non‐Posix programs‡ required (other than G·N·U Make itself,
-    and optionally Git) are those provided by `libxml2` and `libxslt`.
-On most operating systems, these libraries come pre·installed, but on
-  Linux machines the commandline utilities are often packaged
-  separately (as **`libxml2-utils`** and **`xsltproc`**), which may
-  still need to be installed.
-Additionally, not all Linux distributions bundle all necessary Posix
-  programs; on Debian (for example) you may need to separately install
-  **`sharutils`** for `uudecode` and `uuencode` and **`pax`** for
-  archiving.
-
-‡ This make·file also currently depends on non‐Posix `stat` but
-  attempts to handle both the G·N·U and B·S·D variants.
-It expects `xargs` to accept a `-0` option, which, while widely
-  supported, is not a part of the Posix standard.
-
-**Note:**
-⛩️📰 书社 requires functionality present in G·N·U Make 3.81 or later,
-  and will not work in previous versions, or with other implementations
-  of Make.
+† Assuming an operating system with a fairly featureful, and
+  Posix‐compliant, development setup (e·g, Macintosh ≥ version 10.8).
+In fact, on Linux you will probably need to install a few programs:
+  `libxml2-utils`, `xsltproc`, `sharutils`, and `pax`.
 
 ## Nomenclature
 
 
 ## Nomenclature
 
@@ -64,6 +48,98 @@ The name <i lang="cmn-Hans">书社</i> was chosen to play on this pun, as
 In Ascii environments, ⛩️📰 书社 should be written `Shushe`, following
   the pinyin transliteration.
 
 In Ascii environments, ⛩️📰 书社 should be written `Shushe`, following
   the pinyin transliteration.
 
+## Prerequisites
+
+In most cases, ⛩️📰 书社 aims to require only functionality which is
+  present in all Posix‐compliant (`POSIX.1-2001`) operating systems.
+There are a few exceptions.
+Details on particular programs are given below; if a program is not
+  listed, it is assumed that any Posix‐compliant implementation will
+  work.
+
+### `diff`
+
+This is a Posix utility, but ⛩️📰 书社 depends on functionality
+  introduced after `POSIX.1-2001` (the `-u` option, introduced in
+  `POSIX.1-2008`).
+Macintosh systems somewhat interestingly implement this option
+  correctly in legacy mode (`COMMAND_MODE=legacy`) but incorrectly by
+  default (despite claiming `POSIX.1-2008` conformance for this
+  utility).
+[Note this erroneous comment claiming nanosecond & timezone are
+  extensions rather than standardized.][rdar-92753335]
+Despite this, the default Macintosh implementation will still work with
+  ⛩️📰 书社, with the caveat that the timestamp will only include a
+  fractional component when a Posix⹀compliant (e·g, Macintosh legacy or
+  G·N·U) implementation is used.
+
+### `file`
+
+This is a Posix utility, but it was considered optional in
+  `POSIX.1-2001` (altho it was made mandatory in `POSIX.1-2008`) and
+  ⛩️📰 书社 currently depends on unspecified behaviour.
+It requires support for the following additional options :⁠—
+
+- **`-C`**, when supplied with `-m`, must be useable to compile a
+    `.mgc` magicfile for use with future invocations of `file`.
+
+- **`--files-from`** must be useable to provide a file that `file`
+    should read file·names from, and `-` must be useable in this
+    context to specify the standard input.
+
+- **`--mime-type`** must cause `file` to print the internet media type
+    of the file with no charset parameter.
+
+- **`--separator`** must be useable to set the separator that `file`
+    uses to separate file names from types.
+
+These options are implemented by the
+  [Fine Free File Command](https://darwinsys.com/file/), which is used
+  by most operating systems.
+
+### `git`
+
+This is not a Posix utility.
+Usage of `git` is optional, but recommended (and activated by default).
+To disable it, set `GIT=`.
+
+### `make`
+
+This is a Posix utility, but it is considered an optional Software
+  Development utility and ⛩️📰 书社 currently depends on unspecified
+  behaviour.
+⛩️📰 书社 requires specifically the G·N·U version of `make`, and
+  depends on functionality present in version 3.81 or later.
+It is not expected to work in previous versions, or with other
+  implementations of Make.
+
+### `pax`
+
+This is a Posix utility, but it is not included in the Linux Standard
+  Base or installed by default in many distributions.
+⛩️📰 书社 only requires support for the `ustar` format.
+
+### `uudecode` and `uuencode`
+
+These are Posix utilities, but they were considered optional in
+  `POSIX.1-2001` (altho they are made mandatory in `POSIX.1-2008`) and
+  they are not included in the Linux Standard Base or installed by
+  default in many distributions.
+The G·N·U [Sharutils](https://www.gnu.org/software/sharutils/) package
+  provides one implementation.
+
+### `xmlcatalog` and `xmllint`
+
+These are not a Posix utilities.
+They are a part of `libxml2`, but may need to be installed separately
+  on some platforms (e·g by the name `libxml2-utils`).
+
+### `xsltproc`
+
+This is not a Posix utility.
+It is a part of `libxslt`, but may need to be installed separately on
+  some platforms.
+
 ## Basic Usage
 
 Place source files in `sources/` and run `make install` to compile
 ## Basic Usage
 
 Place source files in `sources/` and run `make install` to compile
@@ -126,10 +202,11 @@ In every case, you may supply your own implementation by overriding the
 
 - `awk`
 - `cat`
 
 - `awk`
 - `cat`
+- `cd`
 - `cksum`
 - `cp`
 - `date`
 - `cksum`
 - `cp`
 - `date`
-- `echo`
+- `diff`
 - `file`
 - `find`
 - `git` (optional; set `GIT=` to disable)
 - `file`
 - `find`
 - `git` (optional; set `GIT=` to disable)
@@ -143,13 +220,12 @@ In every case, you may supply your own implementation by overriding the
 - `rm`
 - `sed`
 - `sleep`
 - `rm`
 - `sed`
 - `sleep`
-- `stat` (BSD *or* GNU)
 - `test`
 - `touch`
 - `tr`
 - `uuencode`
 - `uudecode`
 - `test`
 - `touch`
 - `tr`
 - `uuencode`
 - `uudecode`
-- `xargs` (requires support for `-0`)
+- `xargs`
 - `xmlcatalog` (provided by `libxml2`)
 - `xmllint` (provided by `libxml2`)
 - `xsltproc` (provided by `libxslt`)
 - `xmlcatalog` (provided by `libxml2`)
 - `xmllint` (provided by `libxml2`)
 - `xsltproc` (provided by `libxslt`)
@@ -207,6 +283,8 @@ The following additional variables can be used to control the behaviour
     those which end with a cloparen, and those which contain a hash,
     buck, percent, asterisk, colon, semi, eroteme, bracket, backslash,
     or pipe.
     those which end with a cloparen, and those which contain a hash,
     buck, percent, asterisk, colon, semi, eroteme, bracket, backslash,
     or pipe.
+  It is important that these rules not produce any output, as anything
+    printed to `stdout` will be considered a result of the find.
 
 - **`EXTRAFINDRULES`:**
   The value of this variable is appended to `FINDRULES` by default, to
 
 - **`EXTRAFINDRULES`:**
   The value of this variable is appended to `FINDRULES` by default, to
@@ -238,8 +316,13 @@ The following additional variables can be used to control the behaviour
     enable additional transforms without overriding the existing ones.
 
 - **`XMLTYPES`:**
     enable additional transforms without overriding the existing ones.
 
 - **`XMLTYPES`:**
-  A white·space‐separated list of media types to consider X·M·L
-    (default: `application/xml text/xml`).
+  A white·space‐separated list of media types or media type suffixes to
+    consider X·M·L (default: `application/xml text/xml +xml`).
+
+- **`FINALIZE`:**
+  A program to run on (unspecial) X·M·L files after they are
+    transformed (default: `xmllint --nonet --nsclean`).
+  This variable can be used for postprocessing.
 
 - **`THISREV`:**
   The current version of ⛩️📰 书社 (default: derived from the current
 
 - **`THISREV`:**
   The current version of ⛩️📰 书社 (default: derived from the current
@@ -249,6 +332,15 @@ The following additional variables can be used to control the behaviour
   The current version of the source files (default: derived from the
     current git tag/branch/commit).
 
   The current version of the source files (default: derived from the
     current git tag/branch/commit).
 
+- **`QUIET`:**
+  If this variable has a value, informative messages will not be
+    printed (default: empty).
+  Informative messages print to stderr, not stdout, so disabling them
+    usually shouldn’t be necessary.
+  This does not (cannot) disable messages from Make itself, for which
+    the `-s`, `--silent` ∕ `--quiet` Make option is more likely to be
+    useful.
+
 - **`VERBOSE`:**
   If this variable has a value, every recipe instruction will be
     printed when it runs (default: empty).
 - **`VERBOSE`:**
   If this variable has a value, every recipe instruction will be
     printed when it runs (default: empty).
@@ -281,11 +373,11 @@ Source files whose media type does not have an associated X·S·L·T
   contain Ascii white·space, colons (`:`), semis (`;`), pipes (`|`),
   bucks (`$`), percents (`%`), hashes (`#`), asterisks (`*`), brackets
   (`[` or `]`), erotemes (`?`), backslashes (`\`), or control
   contain Ascii white·space, colons (`:`), semis (`;`), pipes (`|`),
   bucks (`$`), percents (`%`), hashes (`#`), asterisks (`*`), brackets
   (`[` or `]`), erotemes (`?`), backslashes (`\`), or control
-  characters, must not begin with a hyphen‐minus (`-`), and must not
-  end with a cloparen (`)`).**
+  characters, must not begin with a hyphen‐minus (`-`), and must not end
+  with a cloparen (`)`).**
 The former characters have the potential to conflict with make syntax,
 The former characters have the potential to conflict with make syntax,
-  a leading hyphen‐minus is confusable for a command‐line argument, and
-  trailing cloparen [activates a bug in G·N·U Make
+  a leading hyphen‐minus is confusable for a commandline argument, and a
+  trailing cloparen [activates a bug in G·N·U Make
   3.81](https://stackoverflow.com/questions/17148468/capturing-filenames-including-parentheses-with-gnu-makes-wildcard-function#comment24825307_17148894).
 
 ## Parsers
   3.81](https://stackoverflow.com/questions/17148468/capturing-filenames-including-parentheses-with-gnu-makes-wildcard-function#comment24825307_17148894).
 
 ## Parsers
@@ -375,8 +467,17 @@ It is **strongly recommended** that auxillary templates in parsers be
 ⛩️📰 书社 will add a few attributes to the output of the parsing step,
   namely :⁠—
 
 ⛩️📰 书社 will add a few attributes to the output of the parsing step,
   namely :⁠—
 
-- A `@书社:cksum` attribute on toplevel result elements, giving the
-    `cksum` checksum of the corresponding source file.
+- For toplevel result elements :⁠—
+
+  - A `@书社:cksum` attribute giving the `cksum` checksum of the
+      corresponding source file.
+
+  - A `@书社:mtime` attribute giving the last modified time of the
+      corresponding source file.
+
+  - A `@书社:identifier` attribute giving the ⛩️📰 书社 identifier
+      (i·e, starting with `about:shushe?`) of the corresponding source
+      file.
 
 - For the elements which result from parsing plaintext `<html:script>`
     elements :⁠—
 
 - For the elements which result from parsing plaintext `<html:script>`
     elements :⁠—
@@ -496,9 +597,6 @@ The following params are made available globally in parsers and
 - **`BUILDTIME`:**
   The current time.
 
 - **`BUILDTIME`:**
   The current time.
 
-- **`CKSUM`:**
-  The checksum of the source file (⅌ `cksum`).
-
 - **`IDENTIFIER`:**
   The ⛩️📰 书社 identifier of the source file (a u·r·i beginning with
     `about:shushe`).
 - **`IDENTIFIER`:**
   The ⛩️📰 书社 identifier of the source file (a u·r·i beginning with
     `about:shushe`).
@@ -506,16 +604,13 @@ The following params are made available globally in parsers and
 - **`SRCREV`:**
   The value of the `SRCREV` variable (if present).
 
 - **`SRCREV`:**
   The value of the `SRCREV` variable (if present).
 
-- **`SRCTIME`:**
-  The time at which the source file was last modified.
-
 - **`THISREV`:**
   The value of the `THISREV` variable (if present).
 
 The following params are only available in transforms :⁠—
 
 - **`THISREV`:**
   The value of the `THISREV` variable (if present).
 
 The following params are only available in transforms :⁠—
 
-- **`CATALOG`:**
-  The path of the catalog file (within `BUILDDIR`).
+- **`METADATA`:**
+  The path of the metadata file (within `BUILDDIR`).
 
 - **`PATH`:**
   The path of the output file (within `DESTDIR`).
 
 - **`PATH`:**
   The path of the output file (within `DESTDIR`).
@@ -613,6 +708,13 @@ They are :⁠—
     non X·M·L output types, ⁊·c).
   Other child elements will be ignored.
 
     non X·M·L output types, ⁊·c).
   Other child elements will be ignored.
 
+  If the `<书社:archive>` element is given an `@书社:expanded`
+    attribute, rather than producing a tarball ⛩️📰 书社 will output
+    the directory which expanding the tarball would produce.
+  This mechanism can be used to generate multiple files from a single
+    source, provided all of the files are contained with·in the same
+    directory.
+
 - **`<书社:base64-binary>`:**
   The text nodes in the transformation result will, after removing all
     Ascii whitespace, be treated as a Base·64 string, which is then
 - **`<书社:base64-binary>`:**
   The text nodes in the transformation result will, after removing all
     Ascii whitespace, be treated as a Base·64 string, which is then
@@ -631,3 +733,4 @@ Most source files are licensed under the terms of the <cite>Mozilla
 
 [REUSE]: <https://reuse.software/spec/>
 [draft-phillips-record-jar-01]: <https://datatracker.ietf.org/doc/html/draft-phillips-record-jar-01>
 
 [REUSE]: <https://reuse.software/spec/>
 [draft-phillips-record-jar-01]: <https://datatracker.ietf.org/doc/html/draft-phillips-record-jar-01>
+[rdar-92753335]: <https://github.com/apple-oss-distributions/patch_cmds/blob/5084833f90df1b0e0924ea56f94c0199b3b8bbc6/diff/diffreg.c#L1800-L1808>
This page took 0.029036 seconds and 4 git commands to generate.