Separate from the process as it is only vaguely related and adding
unused user information to in-memory process contexts was extra code.
Windows support uses the SID as the user ID, as it matches the idea
of an identifer uniquely identifying a user or a group.
Windows is simpler than Unix in that it doesn't require fork just
just to set a working directory; it's more complex in that arguments
must be manually quoted rather than passed as an array.
- Set to use static or dynamic libraries at top level.
- Compiler configuration for MSVC and MinGW.
- Copy rather than create symlink for aliases on Windows.
Current implementation encodes auxiliary files into base64 string,
and pass it through system's base64 decoding to recreate files on
ninja build process.
This has two main disadvantages,
1. When auxiliary files are large, invocation call will expand
very large and shell will reject executing them.
2. base64 may not be compatible. (e.g. xcbuild's base64 encoded
data is not properly decoded by linux's base64 utility)
Instead, after build.ninja file has been written, also write
auxiliary file chunks in temporary directory with its hash included
in its filename. Ninja caches hashes of its execution command to determine
changes to the rule, so the actual rebuild logic is unchanged.
Sometime, xcbuild will be symlinked to different location.
If the xcbuild is symlinked, try to resolve symlinks and
and find relevent builtin tools in symlink source directory.
Swift modules and objc bridging headers needs to be present
before begining objc source compilation. Defer objc and other clang
compilation process until swift module compilation and other artifacts
copying is finished
- Fix `Exit` command in PlistBuddy to actually exit.
- Fix `Key:` syntax in PlistBuddy to append to arrays.
- Fix `Set Key:0` syntax in PlistBuddy to overwrite, not insert.
- Fix PlistBuddy to correctly initialize new property lists: only
write to disk on `Save` and start out with a dictionary.
- Fix crashes with out-of-bounds array indexes in PlistBuddy.
- Add `Import`, `Copy`, and `Revert` commands to PlistBuddy.
If target environment creation fails, this indicates a serious error
in the build environment. Continuing is likely to end up printing
success despite the build not finishing as expected.