Redo implementation in Bourne Shell

# The Arch Linux packaging for redo-sh sucks:

- The package description is wrong: redo-sh is written in POSIX sh, not Bash. How did this happen? I mean: The “sh” is even part of the name, what more could I have done to make this clear?
- The dependency on Bash is wrong. redo-sh depends on either BusyBox or both dash and GNU coreutils; at least that is how I tested it. Again, how you got Bash here is a mystery for me … did you test redo-sh with Bash as /bin/sh maybe and then just ran with it?
- The way the documentation is generated from `redo-sh.do` is a bit weird and likely to break. The shown version number is already wrong with your solution. In case you did not know: You can generate the file correctly by doing “redo redo-sh.html” – no sed tricks needed.

I sent an email to the maintainer on 2023-08-27. Nothing happened.

Greetings, the author of redo-sh

I have implemented the build system redo as designed by DJB in Bourne Shell. To understand how redo can be simpler, more flexible, more powerful and more reliable than make, read Introduction to redo and/or redo: a top-down software build system. The current version of redo is `$(redo-ifchange ./redo; ./redo --version 2>&1 | head -n1)`.

redo
  the main program
redo-always
  marks the current target as always needing to be rebuilt
redo-dot
  prints redo dependency graph in DOT format (example output, example rendering)
redo-ifchange
  adds dependencies for the current target (if a dependency changes, the target will be rebuilt)
redo-ifcreate
  adds non-existence dependencies for the current target (if a non-existence dependency is created, the target will be rebuilt)
redo-ood
  prints a list of all target files that are out of date
redo-targets
  prints a list of all target files that exist (a target is a file redo can build)
redo-sources
  prints a list of all source files that exist (a source is a dependency that is not a target)
redo-stamp
  detects if the current target has changed (see apenwarr's documentation)
redo-whichdo
  prints search paths for dofiles to build a redo target
redo-gcc
  automatically tracks dependencies and non-existence dependencies when compiling using gcc.

# Installation

To install redo, copy the redo executables and man pages (detached PGP signature) to a directory in your \$PATH. For example, if `/usr/local/bin` exists, is listed in your \$PATH and can be written to by the current user, the following commands will install redo:

`

    wget http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz
    tar -moxzf redo-sh.tar.gz -C /usr/local

`

This website is hosted in Germany and German police is legally allowed to spread malware. I therefore strongly recommend to verify the PGP signature before installation to ensure that the redo release archive has not been tampered with. If you have gpg installed and trust my PGP signing key, the following commands will install redo only if the signature matches:

`

    wget http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz http://news.dieweltistgarnichtso.net/bin/archives/redo-sh.tar.gz.sig
    gpg --verify redo-sh.tar.gz.sig redo-sh.tar.gz && tar -moxzf redo-sh.tar.gz -C /usr/local

`

This implementation of redo depends only on GNU Core Utilities or BusyBox.