Build system, except for basic commands like cc
,
(POSIX) make
, requires at least:
bsdtar
¶GNU tar, available by default on GNU OSes, brings many complications in
build-related scripts, because it is unable to decompress stdin data on
the fly. Many GNU/Linux distributions have libarchive-tools
package, containing libarchive-based bsdtar
utility, that
perfectly deals with any compressed archive transparently.
Utilities for making and checking .meta4 files. They are just a wrapper over XML and external hasher commands interoperation. They also can be used for downloading.
Shell scripts are hard to write in a portable way. For example there is
no way to know file’s size using POSIX-compatible utilities solely,
except for feeding through wc -c
. There is no way to get
file’s mtime
, as stat
’s options are completely
different on BSD and GNU systems. Only small subset of features is
common among sed
, awk
, grep
utilities.
There is no reliable portable way of using sed -i
for example.
That is why the only sane option is Perl in most cases. Its interpreter is minimalistic enough and tend to be included even in OpenWRT distributions. It behaves the same way on all widespread OSes (no zoo of loosely compatible dialects).
redo
started to be used in the project due to its built-in
ability of using locks to prevent concurrent building of the same
target. skelbins have to be installed to permanent paths, so concurrent
builds will ruin them. redo
contains atomic reliable writes of
the target’s result. And by definition it has dependency tracking of the
targets. All of that greatly reduces the skel’s code size. And as an
unexpected feature you get ability to parallelise your builds.
goredo is recommended implementation, being very fast and having largest integration test suite.
setlock
, lockf
, flock
¶setlock
from daemontools
, or
lockf
from BSD, or
flock
from GNU.
At least for building supplementary utilities. And, obviously, if you build Go-related software. Actually Go-written utilities can be replaced and no Go dependency will be required at all.
fetch
, or GNU Wget, or cURLAlthough meta4ra
can be used instead all of them.