Both clang and gcc understand -fdiagnostics-color, so use that flag name.
(This will disable colored diagnostics for clangs older than LLVM 3.3,
but that is several years old by now.)
It was only needed by gtest, which is no longer used.
(Intesting note: I checked when the -lpthread flag was added, and it's
been around since the first revision of build.ninja, which used to be
checked in before configure.py existed. Back then, it looks like '@' was
used to dereference built-in variables, and build outputs were also
prefixed by '@'!).
Instead of bootstrapping through a separate script, instead make
configure.py able to either generate a build.ninja *or* just execute
all the computed commands to build a ninja binary.
No behavior change on most platforms. On solaris, -t browse was compiled in
in ninja.cc but browse.cc wasn't compiled in, which probably means that building
on Solaris didn't work. It might be better now.
This also makes browse.cc automatically not included in bootstrap builds;
previously this was done manually through the NINJA_BOOTSTRAP check.
"SunOS" and "Solaris" are the same thing these days, so make them go
down the same code paths. In particular, the browse feature was omitted
on solaris but not sunos5, causing trouble for some folks (see #838).
When using an open-source clang on OS X, one has to pass an isysroot
flag so that it can find system headers (stdio.h), like so:
CXX=path/to/clang++ CFLAGS="-isysroot $(xcrun -show-sdk-path)" ./configure.py
Previously, configure.py wouldn't quote envvars containing spaces, so
it'd rerun this as
CXX=path/to/clang++ CFLAGS=-isysroot /sysroot/path ./configure.py
which would then die because /sysroot/path wasn't excecutable.
Ninja currently uses googletest for testing. That makes building
ninja_test somewhat annoying since it requires that one passes
--with-gtest PATH to configure. It turns out just implementing the bits
of googletest that ninja uses needs about the same amount of code than
making the --with-gtest flag in configure.py work and making googletest
print test results in a way we want (!)
In addition to making configuration simpler, this also makes compiling
tests much faster: On my system, touching src/build_test.cc (the slowest
file to build in ninja) and rebuilding ninja_tests is twice as fast than
without this patch. Building all is noticeably faster too: 5.6s with
this patch, 9.1s without this patch (38% faster).
The most noticeable things missing: EXPECT_* and ASSERT_* don't support
streaming notes to them with operator<<, and for failing tests the lhs
and rhs are not printed. That's so that this header does not have to
include sstream, which slows down building ninja_test almost 20%.
If this turns out to be annoying, we can maybe add it.
All modern Linux kernels have ppoll() but sometimes
you might want to compile on something ancient.
This patch adds the possibility to force the use
of pselect() instead by passing --force-pselect
to bootstrap/configure.
The use of ppoll() is still default for Linux
and OpenBSD
Tests always need GTEST_HAS_RTTI=0 set, but the code was only
setting it in the --with-gtest branch. Instead always use the
test-specific cflags when compiling test code.