~mcf/samurai

log: Use fgets instead of getline
manual: Update list of supported commands
Add micro version number to --version output

Some projects, such as qtwebengine, parse the output of --version,
and are tripped up by a version string with only two components.
scan: Allow stray indented but otherwise empty lines

This is not very common, but ninja accepts this and it has shown
up in at least one project.
env: Fix const-ness of cycle sentinel

The intent was to make the pointer itself const so that it could
be added to the read-only data section.
Drop now-unused outer evalstring structure
env: Use sentinel in tree node to detect cycles

This allows us to make evalstring a plain linked list and drop the
outer structure. Additionally, we can now distinguish between empty
and unset rule bindings when evaluating an edge variable.
scan: Use an array instead of linked list for path list
parse: Check for non-empty command/rspfile/rspfile_content

This matches ninja behavior and prevents the possibility of a rule
with an empty (NULL) command string.

Fixes #68.
build: Return early when there is no work to do

Otherwise, we have ntotal=0 when we call formatstatus() to verify
that NINJA_STATUS is valid, causing a SIGFPE if it contains %p.

Fixes #69.
build: Simplify "nothing to do" condition

If there are no jobs scheduled, then there are no non-phony jobs
scheduled either.
tool: Remove now unnecessary check for description
util: Check for NULL string in writefile

This check was there previously, but was removed in f549b757 with
the addition of a check during parse that every rule has rspfile
if and only if it has rspfile_content. However, this fails to
consider the possibility of those variables coming from the edge
or global environment. So, re-add the check.

Fixes #67.
tool: Allow running 'list' subtool with no build manifest
Remove build.ninja

build.ninja uses hard-coded compiler flags, and was only meant as
a self-test to show that samu works. It is not intended to be used
by distributions packaging samurai.

This was useful early in samurai's development but isn't any longer,
so remove it.

Fixes #63.
build: Don't try to print phony edges during dry-run

This causes a segfault since phony edges have no command. It also
messes up the nstarted/nfinished counts.

Fixes #66.
build: Print "nothing to do" when only phony jobs are scheduled

This matches ninja behavior and avoids the potentially confusing
empty output for such cases.
Makefile: Add `all` target
build: Skip timing status specifier if clock_gettime fails

Otherwise, we may end up with a division by zero.
Document commands subtool
Next