Installing Dehydra

Prerequisites

  • Mercurial 1.0 is needed to access source repositories. Make sure that the mq extension is enabled.
  • SpiderMonkey provides scripting capabilities for Dehydra.
  • GCC 4.5, with the package gcc-4.5-plugin-dev installed. (Alternately, build from source)
  • A modern Linux distribution. Dehydra is not supported on Mac OS X.

Building SpiderMonkey

It is recommended that you use SpiderMonkey revision AURORA_BASE_20110705 when building Dehydra.

cd $HOME
hg clone http://hg.mozilla.org/mozilla-central/
cd mozilla-central
hg update AURORA_BASE_20110705
cd js/src
autoconf-2.13
mkdir $HOME/obj-js
cd $HOME/obj-js
$HOME/mozilla-central/js/src/configure --enable-optimize --disable-debug
make

It has to be checked whether later/newer branches (like AURORA_BASE_20120131) are working, too.

Please also note that autoconf v2.13 is really needed: it does not work with e.g. v2.68.

There is no need for some installation after make.

You can skip the next section "Building GCC 4.5" if you are using gcc 4.6 or above.

Building GCC 4.5

For Treehydra's process_tree_decl to work, when compiling with g++, you must use a patched GCC 4.5 before building Dehydra.

cd $HOME
# obtain GCC 4.5.3 (see http://gcc.gnu.org/mirrors.html for alternate mirrors)
wget http://www.netgull.com/gcc/releases/gcc-4.5.3/gcc-4.5.3.tar.bz2
tar -jxvf gcc-4.5.3.tar.bz2

# apply PLUGIN_FINISH_DECL patch
wget https://bug559964.bugzilla.mozilla.o....cgi?id=457606 -O finish_decl.diff
cd gcc-4.5.3
patch -p0 < ../finish_decl.diff

# build GCC
cd ..
mkdir gcc-objdir
mkdir gcc-dist

cd gcc-objdir
../gcc-4.5.3/configure --disable-bootstrap --enable-languages=c,c++ --prefix=$PWD/../gcc-dist
make
make install

Building Dehydra and Treehydra

Building Dehydra requires SpiderMonkey development headers from the previous step. CXX should point to your copy of GCC 4.5.

It is recommended to get the latest Dehydra sources by checking out from Mercurial. (Obsolete Dehydra releases can be found on the Mozilla ftp site.)

hg clone http://hg.mozilla.org/rewriting-and-analysis/dehydra/
cd dehydra
export CXX=/usr/bin/g++
./configure \
   --js-headers=$HOME/obj-js/dist/include \
   --js-libs=$HOME/obj-js
make

# run dehydra and treehydra tests
make check

Usage

Dehydra checking can be performed directly within the Mozilla build. To enable static checking of a Mozilla build, see Building with static checking.

To run Dehydra manually using G++, add the -fplugin and -fplugin-arg-gcc_dehydra-script/-fplugin-arg-gcc_treehydra-script flags to specify the location of the plugin and the location of the analysis script:

g++ -quiet -fplugin=$HOME/dehydra/gcc_dehydra.so -fplugin-arg-gcc_dehydra-script=$DEHYDRA_SCRIPT \
  -fshort-wchar $CPPFILE -S -o /dev/null

For example, in the tests directory created by the installation procedure, I can run a Dehydra script 'a.js' on a Mozilla file like this:

g++ -quiet -fplugin=../gcc_dehydra.so \
-fplugin-arg=a.js -fshort-wchar -fpreprocessed \
/home/dmandelin/builds/dehydra-gcc/browser/app/nsBrowserApp.ii -o /dev/null

The -fshort-wchar is required for running against Firefox, but not necessarily for other codebases.

To generate preprocessed Mozilla source files (*.ii), see the Pork Install Instructions.

See Also