Make build deterministic by sorting files and optionally fixing timestamps
These changes make Messages build in a deterministic fashion if the environment variable SOURCE_DATE_EPOCH
is set, this is a partial implementation of the SOURCE_DATE_EPOCH
specification.
Whilst Filecore keeps directories sorted this is not required of RISC OS filing systems, so file order can change between builds. Some filing systems use randomised hash tables, and parallel builds (RiscOS/Utilities/Release/srcbuild!4) can also randomise file order.
- Utility executables are removed, and instead built from source.
- ScanRes source has been reformatted using Artistic Style so that it is consistent, with the goal of minimising change.
- Compiler warnings have been suppressed.
- Files are output in sorted order.
- Timestamps are set to 0 (00:00 1st January 1900 UTC) if
SOURCE_DATE_EPOCH
is set. - Plenty of typos have been corrected.
Also see tbaldwin/Messages!1 to fully support the SOURCE_DATE_EPOCH
specification, allowing the timestamp to be chosen.
Together with routines on WordV and FileV (example) to prevent timestamps being included a RISC OS build is completely deterministic depending only on the source and DDE version (and build path).
If committed immediately before RiscOS/Env!4 can partially protect against the hazard of losing dynamic dependencies.