Pork: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
m (add link for elsa and Elsa and Elkhound)
Line 19: Line 19:


* [[DeHydra]] is a scriptable static analysis tool. It is useful for finding patterns in the codebase. It has been used to find bugs, produce class diagrams and to infer auto-refactoring candidates in the code.
* [[DeHydra]] is a scriptable static analysis tool. It is useful for finding patterns in the codebase. It has been used to find bugs, produce class diagrams and to infer auto-refactoring candidates in the code.
* [[Dehydra GCC]] Is a version of DeHydra built as a GCC plugin.


* [[Outparamdel]] rewrites code using outparameters to utilize the return value instead. [http://blog.mozilla.com/tglek/2007/08/06/outparams-take-2/ Blog entry]
* [[Outparamdel]] rewrites code using outparameters to utilize the return value instead. [http://blog.mozilla.com/tglek/2007/08/06/outparams-take-2/ Blog entry]
Line 31: Line 33:


* [[PorkBarrel]] is a multiplexer(ala make -j) for the pork tools. It can combine patch output for patch-producing tools and save per-file output for DeHydra. The repository also contains a frontend to do nightly runs of prcheck.
* [[PorkBarrel]] is a multiplexer(ala make -j) for the pork tools. It can combine patch output for patch-producing tools and save per-file output for DeHydra. The repository also contains a frontend to do nightly runs of prcheck.
 
=== Differences from Mainstream ===
=== Differences from Mainstream ===
In addition to adding more oink tools, pork has some differences from [http://www.cs.berkeley.edu/~smcpeak/elkhound/ Elsa and Elkhound].
In addition to adding more oink tools, pork has some differences from [http://www.cs.berkeley.edu/~smcpeak/elkhound/ Elsa and Elkhound].

Revision as of 21:46, 3 January 2008

Pork is a set of tools built around the elsa C/C++ parser. The primary focus of pork is to provide automated refactoring (Gecko:DeCOMtamination) and static analysis tools for Mozilla2. Pork announcement.

To install the tools on your regular machine, follow Static Analysis/Installing the Oink Stack

Pork is a fork of oink. In the future pork should become a development branch for oink.

More info for pork can be found on Taras' blog.

Requirements

  • GCC 3.4.x or older that can successfully build Mozilla. 64bit Ubuntu, 32bit RHEL/CentOS are known to work. 32bit Ubuntu/Debian feature a linker bug that prevents Mozilla from building with gcc 3.4.6.
  • MCPP is required for refactoring tools
  • SpiderMonkey is required by DeHydra
  • Bison and Flex
  • patchutils are recommended to manage manual and automatic patches
  • MQ extension for hg is recommended. Alternatively, quilt can be used instead.

Pork Tools

Pork is broken down into tools that focus on a specific tasks. The tools can rarely be combined and thus should be applied incrementally.

  • DeHydra is a scriptable static analysis tool. It is useful for finding patterns in the codebase. It has been used to find bugs, produce class diagrams and to infer auto-refactoring candidates in the code.
  • Dehydra GCC Is a version of DeHydra built as a GCC plugin.
  • Prcheck is a static analysis tool which produces patches as output. It is useful for correcting bugs that resulting PRBool behaving more like an int than a C++ bool. Blog entry
  • Squash is now obsolete. It was primarily written to explore how elsa can be utilized to assist with Gecko:DeCOMtamination. Many rewriting strategies and patching code were first implemented in squash.
  • PorkVM is a CentOS virtual machine image with a presetup pork + moz checkout.
  • PorkBarrel is a multiplexer(ala make -j) for the pork tools. It can combine patch output for patch-producing tools and save per-file output for DeHydra. The repository also contains a frontend to do nightly runs of prcheck.

Differences from Mainstream

In addition to adding more oink tools, pork has some differences from Elsa and Elkhound.

  • Elkhound has been extended to provide end-of-node position information
  • Elsa mods:
    • Expression AST nodes were modified to include end-of-node info + associated bugfixes
    • Elsa has been extended to support MCPP's macro-undo(-K) mode. Additional APIs were added to convert post-preprocessing source coordinates into pre-preprocessing ones