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 '@'!).
…ncluded. 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.
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