Firefox 64 bit (Ubuntu)

I wanted to test the latest Firefox but for the love of whoever you want, I wasn't able to find a 64bit build in Mozilla's site. I could choose between lots of languages, but I couldn't choose between 32 and 64 bits-- their detection system insisted in providing the 32 bits builds. Bad, bad UI design!

But I managed to find how to build it from source. It turned out to be quite simple, it's all in one page. With the Ubuntu instructions only, it gets reduced to this:

sudo apt-get build-dep firefox
sudo apt-get install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libxt-dev libiw-dev mesa-common-dev autoconf2.13

hg clone # this step might take quite a while
cd mozilla-central

# Setup a basic mozconfig file
echo '. $topsrcdir/browser/config/mozconfig' > mozconfig                      # let's build Firefox...
echo 'mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-ff-release' >> mozconfig   # this directory...
# Parallel compilation is a nice speedup.
echo 'mk_add_options MOZ_MAKE_FLAGS="-j4"' >> mozconfig

# Build
make -f

And to update:

cd /path/to/mozilla-central

# Get the latest source
hg pull -r default
hg update

# Build
make -f

It didn't take much time to build (less than 20 minutes). I can't remember how much time did Chrome take the last time I tried, I should repeat it if only for curiosity sake.

And now I have a custom build, aptly named Minefield!

Firefox 3.7

Still, it's slower than Chrome in the tests I have ran (Javascript intensive tests, like experiments). What a pity, the promised speed improvements made me want to go back to Firefox :-(

In their defence, it built without complaining about any missing and/or almost impossible to fulfill dependency. Which is something you can't say about every open source project, unfortunately.

I'll keep an eye on it, now that I know how to get my own builds...

UPDATE: if the build breaks for whatever the reason and you get errors such as these:

nsFileChannel.cpp:(.text+0xaa3): undefined reference to `nsBaseContentStream::AsyncWait(nsIInputStreamCallback*, unsigned int, unsigned int, nsIEventTarget*)'
../../netwerk/protocol/file/libnkfile_s.a(nsFileChannel.o): In function `nsFileUploadContentStream::Release()':
nsFileChannel.cpp:(.text+0x9d1): undefined reference to `nsBaseContentStream::Release()'
../../netwerk/protocol/file/libnkfile_s.a(nsFileChannel.o): In function `nsFileUploadContentStream::AddRef()':
nsFileChannel.cpp:(.text+0x9d7): undefined reference to `nsBaseContentStream::AddRef()'
../../netwerk/protocol/file/libnkfile_s.a(nsFileChannel.o): In function `nsFileUploadContentStream::QueryInterface(nsID const&, void**)':
nsFileChannel.cpp:(.text+0x9dd): undefined reference to `nsBaseContentStream::QueryInterface(nsID const&, void**)'
../../netwerk/protocol/file/libnkfile_s.a(nsFileChannel.o): In function `nsBaseContentStream::~nsBaseContentStream()':
nsFileChannel.cpp:(.text._ZN19nsBaseContentStreamD2Ev[nsBaseContentStream::~nsBaseContentStream()]+0x3): undefined reference to `vtable for nsBaseContentStream'
/usr/bin/ld.bfd.real: ../../netwerk/protocol/file/libnkfile_s.a(nsFileChannel.o): relocation R_X86_64_PC32 against undefined hidden symbol `vtable for nsBaseContentStream' can not be used when making a shared object
/usr/bin/ld.bfd.real: final link failed: Bad value
collect2: ld returned 1 exit status
make[5]: *** [] Error 1
make[5]: Leaving directory `/home/sole/Applications/mozilla/mozilla-central/objdir-ff-release/toolkit/library'
make[4]: *** [libs_tier_platform] Error 2
make[4]: Leaving directory `/home/sole/Applications/mozilla/mozilla-central/objdir-ff-release'
make[3]: *** [tier_platform] Error 2
make[3]: Leaving directory `/home/sole/Applications/mozilla/mozilla-central/objdir-ff-release'
make[2]: *** [default] Error 2
make[2]: Leaving directory `/home/sole/Applications/mozilla/mozilla-central/objdir-ff-release'
make[1]: *** [realbuild] Error 2
make[1]: Leaving directory `/home/sole/Applications/mozilla/mozilla-central'
make: *** [build] Error 2```

just delete the objdir-mozilla directory and try with make again.

Another solution is to delete .a files from the build directory:

find . -name "*.a" --delete