util.h: Add misc functions.

Introduce multiple utility functions that will be used
by future patches.

- IsAbsolutePath() returns true if a path is absolute
  for the current platform.

- GetCurrentDir() returns the path to the current directory.

- GetCurrentExecutableDir() returns the path of the current
  executable, which will be used in unit-tests in future
  patches.

- GetLastErrorString(DWORD) returns a Win32 error string for a
  specific error code.

- Similarly Win32Fatal(const char*, DWORD, const char*) is used
  to retrieve a Win32 error message for a specific error code.

- ErrnoFatal() is a variant of Fatal() that prints strerror(errno)
  (similar to Win32Fatal(), but ErrnoFatal() also works on Win32).

- StringFormat() and StringAppendFormat() are used to
  return formatted std::string instances, or append formatted
  content to one.

Fuchsia-Topic: advanced-ipc
Original-Change-Id: Iba0ff0f6a534df373ba9720c45ecce905391c904
Original-Change-Id: I2535cb53e3f1b048d3fa245799515b909ec97392
Original-Change-Id: I18f486a9e2c01f0260b097c0451046117af38034
Original-Change-Id: I33e5d24c2ebb109b7698e935afa0f1c66bdf2f2a
Original-Change-Id: Idcbe4702e29ace896cc36df39aca6e964a6a0e8d
Original-Change-Id: I762cd7cff1989adeb3e1ae53e9119e82e4a50b3d
Original-Change-Id: I2e6e54d04f4f12ae88186d08e53ef81a58519d5b
Original-Change-Id: Ic666d6fcc8cdb684aff5d8d44e5fbc81ed9ff198
Change-Id: I4282242f64f1b03d431b9382aab727bbd32118d1
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/github.com/ninja-build/ninja/+/970035
Reviewed-by: Tyler Mandry <tmandry@google.com>
Commit-Queue: David Turner <digit@google.com>
Reviewed-by: David Fang <fangism@google.com>
3 files changed
tree: 96dc3da9d95ed940d473b107e1e5c2694b3b3578
  1. .github/
  2. doc/
  3. misc/
  4. src/
  5. windows/
  6. .clang-format
  7. .clang-tidy
  8. .editorconfig
  9. .gitignore
  10. appveyor.yml
  11. CMakeLists.txt
  12. configure.py
  13. CONTRIBUTING.md
  14. COPYING
  15. README.fuchsia
  16. README.md
  17. RELEASING.md
README.md

Ninja

Ninja is a small build system with a focus on speed. https://ninja-build.org/

See the manual or doc/manual.asciidoc included in the distribution for background and more details.

Binaries for Linux, Mac and Windows are available on GitHub. Run ./ninja -h for Ninja help.

Installation is not necessary because the only required file is the resulting ninja binary. However, to enable features like Bash completion and Emacs and Vim editing modes, some files in misc/ must be copied to appropriate locations.

If you're interested in making changes to Ninja, read CONTRIBUTING.md first.

Building Ninja itself

You can either build Ninja via the custom generator script written in Python or via CMake. For more details see the wiki.

Python

./configure.py --bootstrap

This will generate the ninja binary and a build.ninja file you can now use to build Ninja with itself.

CMake

cmake -Bbuild-cmake
cmake --build build-cmake

The ninja binary will now be inside the build-cmake directory (you can choose any other name you like).

To run the unit tests:

./build-cmake/ninja_test