
Building Firefox-2.0.0.12 from source, for testing Helgrind
-----------------------------------------------------------

wget
ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.12/source/firefox-2.0.0.12-source.tar.bz2

bzip2 -dc firefox-2.0.0.12-source.tar.bz2 | tar xvf -

mv mozilla firefox-2.0.0.12

mkdir InstFirefox20012
export XYZZYFOOBAR=`pwd`/InstFirefox20012

cd firefox-2.0.0.12

./configure --prefix=$XYZZYFOOBAR --enable-application=browser \
    --enable-optimize="-O -g"

make -j 2
make install

cd ../InstFirefox20012

MOZ_NO_REMOTE=1 NO_EM_RESTART=1 \
LD_LIBRARY_PATH=`pwd`/lib/firefox-2.0.0.12:\
`pwd`/lib/firefox-2.0.0.12/components:\
`pwd`/lib/firefox-2.0.0.12/plugins \
/home/sewardj/VgTRUNK/hgdev/Inst/bin/valgrind --tool=helgrind \
--trace-children=no -v ./lib/firefox-2.0.0.12/firefox-bin

# start and then quit firefox a couple of times before measuring
# it, analysing results, etc.  This is because (I think) the new
# build is probably a different version from whatever you used 
# before and so on the first run, the new build wants to mess with
# ~/.mozilla (or something) and that makes it take much longer than
# subsequent runs.

# Patch the recycling allocator thusly (is this still necessary) ?


$ diff -U3 ./xpcom/ds/nsRecyclingAllocator.cpp-ORIG ./xpcom/ds/nsRecyclingAllocator.cpp
--- ./xpcom/ds/nsRecyclingAllocator.cpp-ORIG    2008-03-14 19:09:17.000000000 +0100
+++ ./xpcom/ds/nsRecyclingAllocator.cpp 2008-03-14 19:39:34.000000000 +0100
@@ -156,7 +156,7 @@
         mLock = nsnull;
     }
 }
-
+#include "/home/sewardj/VgTRUNK/hgde2/Inst/include/valgrind/helgrind.h"
 // Allocation and free routines
 void*
 nsRecyclingAllocator::Malloc(PRSize bytes, PRBool zeroit)
@@ -169,7 +169,7 @@
     if (freeBlock)
     {
         void *data = DATA(freeBlock);
-
+if (bytes > 0) VALGRIND_HG_CLEAN_MEMORY(data,bytes);
         if (zeroit)
             memset(data, 0, bytes);
         return data;



Building OpenOffice 2.4/3.0 from source
---------------------------------------

svn co svn://svn.gnome.org/svn/ooo-build/trunk ooo-build

cd ooo-build

export ARCH_FLAGS="-g -O"
export DOWNLOADCACHE=~/DOWNLOADS/OOo

#export ARCH_FLAGS="-g -O -fno-inline -fno-inline-functions"  
# very slow, and not helpful

./autogen.sh --with-distro=SUSE-11.0
   --disable-gstreamer --disable-mono

#  --with-max-jobs=2 --with-num-cpus=2 sounds good on paper, but often
#  cause the build to fail
# --with-alloc=system is used by default

./download

make

# make now runs the 'inner' configure (of OOo proper) and
# invariably fails.  To fix, install 987,654,321 packages you never 
# heard of before, that OOo absolutely needs, and go back to the
# autogen step.  You probably need to do this ten times or more.
#
#   configure: error: \genbrk\ not found in $PATH, install the icu 
#   development tool \genbrk""
#
# means you have to install packages: icu libicu-devel

# eventually you might get through the inner configure.  After
# a couple of hours of flat out computation on both cores of
# a fast Core 2, the build might complete successfully.

# in the likely event of even all that not working, go on to #go-oo
# at irc.freenode.org and ask questions

# eventually ...

./bin/ooinstall ~/OOoBuild/Inst01
cd ~/OOoBuild/Inst01
valgrind -v ./program/soffice.bin


# Hacking OOo

# Use two shells, (C)ompile and (R)un.  In (C):
#
cd build/ooh680-m12
. ./LinuxX86Env.Set.sh  (or ". ./LinuxX86-64Env.Set.sh")
./solenv/bin/linkoo ~/OOoBuild/Inst01
#
# This replaces all the .so's in the install tree with symlinks 
# back into the build tree, so you can then re-run without 
# having to endlessly reinstall.  It also creates 'ooenv' in
# ~/OOoBuild/Inst01/program, which needs to be sourced
# once before running.
#
# So having changed something in OOo, eg in svx/, do:
#
(cd svx && build)
#
# Meanwhile in the (R)un shell:
source ooenv  # just once!
# appears to complain aobut "ulimit -c", but OK nevertheless

valgrind [args] ./soffice.bin


## More notes, 2 May 08
export DOWNLOADCACHE=~/DOWNLOADS/OOo to cache downloaded tarballs
##export CONFIGURE_FLAGS=--disable-mediawiki is needed for dev300-m10
##or not -- causes the build to fail later.  Don't use this.


# These are packages I had to install on a fairly vanilla OpenSUSE
# 10.3 in order to get a build working

perl-Archive-Zip-1.20
cups-devel-1.2.12
libjpeg-devel-6.2.0
libxslt-devel
  libgcrypt-devel
  liggpg-error-devel
  libxml2-devel
  readline-devel
python-devel
  blt
  python-tk
libcurl-devel
  libidn-devel
boost-devel
unixODBC-devel
mozilla-xulrunner181-devel
  mozilla-nspr-devel
  mozilla-nss-devel
  mozilla-xulrunner181
neon-devel
gnome-vfs2-devel
  avahi-devel
  dbus-1-devel
  dbus-1-glib
  gconf2-devel
  hal-devel
  indent
  libblkid-devel
  libbonobo-devel
  libcom_err-devel
  libext2fs-devel
  libidl-devel
  libusb-devel
  libuuid-devel
  orbit2-devel
  popt-devel
qt3-devel
  liblcms-devel
  libmnt-devel

export QTDIR=/usr/lib/qt3

kdebase3-devel
  (tons of stuff)

