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.
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.
build: Simplify "nothing to do" condition
If there are no jobs scheduled, then there are no non-phony jobs
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.
tool: Allow running 'list' subtool with no build manifest
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.
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.
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