Purify (tm) and Quantify (tm) are commercial software quality
assurance tools available from Rational Software Corporation
<http://www.rational.com/>.  Purify is essentially a memory access
verifier and leak detector; Quantify is a C level profiler.  The rest
of this file assumes you generally know how to use Purify and
Quantify, and that you have installed valid licenses for these
products.  If you haven't installed such licenses, you can ignore the
following since it won't help you a bit!

You can easily build a Purify or Quantify instrumented version of the
Python interpreter by passing the PURIFY variable to the make command
at the top of the Python tree:

    make PURIFY=purify

This assumes that the `purify' program is on your $PATH.  Note that
you cannot both Purify and Quantify the Python interpreter (or any
program for that matter) at the same time.  If you want to build a
Quantify'd interpreter, do this:

    make PURIFY=quantify

When running the regression test (make test), I have found it useful
to set my PURIFYOPTIONS environment variable using the following
(bash) shell function.  Check out the Purify documentation for
details:

p() {
  chainlen='-chain-length=12'
  ignoresigs='-ignore-signals="SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGTRAP,SIGAVRT,SIGEMT,SIGFPE,SIGKILL,SIGBUS,SIGSEGV,SIGPIPE,SIGTERM,SIGUSR1,SIGUSR2,SIGPOLL,SIGXCPU,SIGXFSZ,SIGFREEZE,SIGTHAW,SIGRTMIN,SIGRTMAX"'
  followchild='-follow-child-processes=yes'
  threads='-max-threads=50'
  export PURIFYOPTIONS="$chainlen $ignoresigs $followchild $threads"
  echo $PURIFYOPTIONS
}

Note that you may want to crank -chain-length up even further.  A
value of 20 should get you the entire stack up into the Python C code
in all situations.

With the regression test on a fatly configured interpreter
(i.e. including as many modules as possible in your Modules/Setup
file), you'll probably get a gabillion UMR errors, and a few MLK
errors.  I think most of these can be safely suppressed by putting the
following in your .purify file:

    suppress umr ...; "socketmodule.c"
    suppress umr ...; time_strftime
    suppress umr ...; "dbmmodule.c"
    suppress umr ...; "gdbmmodule.c"
    suppress umr ...; "grpmodule.c"
    suppress umr ...; "nismodule.c"
    suppress umr ...; "pwdmodule.c"

This will still leave you with just a few UMR, mostly in the readline
library, which you can safely ignore.  A lot of work has gone into
Python 1.5 to plug as many leaks as possible.

Using Purify or Quantify in this way will give you coarse grained
reports on the whole Python interpreter.  You can actually get more
fine grained control over both by linking with the optional `pure'
module, which exports (most of) the Purify and Quantify C API's into
Python.  To link in this module (it must be statically linked), edit
your Modules/Setup file for your site, and rebuild the interpreter.
You might want to check out the comments in the Modules/puremodule.c
file for some idiosyncrasies.

Using this module, you can actually profile or leak test a small
section of code, instead of the whole interpreter.  Using this in
conjuction with pdb.py, dbx, or the profiler.py module really gives
you quite a bit of introspective power.

Naturally there are a couple of caveats.  This has only been tested
with Purify 4.0.1 and Quantify 2.1-beta on Solaris 2.5.  Purify 4.0.1
does not work with Solaris 2.6, but Purify 4.1 which reportedly will,
is currently in beta test.  There are funky problems when Purify'ing a 
Python interpreter build with threads.  I've had a lot of problems
getting this to work, so I generally don't build with threads when I'm 
Purify'ing.  If you get this to work, let us know!

-Barry Warsaw <bwarsaw@cnri.reston.va.us>
