Since I do not yet have write access to oink svn, I have been doing all of my development in ad-hoc repositories within the svn checkout. This made it rather hard to collaborate with others. I finally got sick of the situation (and stumbled upon hgsvn) and converted all 11 svn repositories to mercurial. To my surprise, mercurial even let me merge my repositories while preserving history (hg has yet to fail me!).
oink uses svn-externals to aggregate the repositories into a single checkout. hg doesn’t have anything similar, so to checkout all 11 repositories use a script:
Released Differences from Oink Mainline
- New oink tool – prcheck: ensures that bool-like integer typedefs behave like bools
- New oink tool – squash: source refactoring tool. This is now deprecated since most of the code in it dealt with working around elsa limitations to do with macro expansion & lack of precise locations. The patching engine used in squash lives on to provide a simple refactoring API for use in other tools (like prcheck).
- Minor grammar changes to parse more of Mozilla
- Compilation fixes for OSX
- Elsa fixes to parse OSX headers
- make -j support for elsa
- end-of-ast-node location support for elkhound & elsa
- preprocessor expansion markup support for elsa
- Amazing new version of MCPP capable of preprocessing mozilla while outputting refactoring-friendly annotations.
- Web front-end for squash which will likely be refactored to be tool-agnostic.
- Front-end to run patch-producing tools in parallel for multi-core machines
- squash will be split up into a library with each major feature ripped out into a standalone tool. Two tools coming soon:outparam rewriter & class member renamer.
- RAD for static analysis: oink tool templates to make it trivial to write custom new tools with minimal amount of boilerplate
Some time in the Future
- Collaboration with the author of Olmar to provide an OCaml API for Elsa. If everything goes as expected it will be possible to write analyses that are more powerful and more concise than DeHydra ones except they will perform at C/C++ speeds. Plus it should be possible to perform them from a native interactive OCaml toplevel. Most of this work already exists in bits and pieces. It’s a matter of adding some AST transformations, fixing a few issues and tying it all together.
- MapReduce inspired front-end: generic framework for executing transformations/analyses in-parallel and Mozilla-wide without blowing the 32bit address space (as it typical when static analysis tools meet Mozilla).