These are the instructions for building PyXPCOM.
- PyXPCOM requires Python 2.3 or later (Python 2.3 and 2.4 have both been recently tested).
- PyXPCOM requires access to a shared Python library.
For Linux users, the build script should check if you have a suitable shared library version of Python. Jump to Compiling Mozilla, and if you receive an error telling you a shared Python can not be located, then you'll need to compile Python with
--enable-shared as outlined below.
Recent Fedora and Ubuntu builds
These distributions generally have a shared Python already available.
Building a shared Python library seems to only be possible with
python-2.3* or later, so you'll need to upgrade if you're using
python-2.2* or earlier. For ebuilds
python-2.3* and later the shared library is built and installed by default.
Python built from ports (
lang/python24) already provides a shared Python library.
Mac OS X
For OS X 10.3 and 10.4 users, the Python 2.3 Framework is already available. If you want to build against Python 2.4, you will need to build your own from source, build via DarwinPorts or Fink, or install either MacPython or ActivePython. You can then skip to Compiling Mozilla. If you want to distribute your application, you might prefer to use the built-in Python 2.3 Framework at first, since embedding the Python Framework into an application bundle may take some non-standard customizations to the Python build scripts.
The official Python installer for Windows installs the shared version of the the library automatically, so Windows users can simply install Python and skip to Compiling Mozilla.
If you don't use any of the above systems, get the latest stable Python source tarball from python.org and do:
tar xjf Python-2.4.2.tar.bz2 cd Python-2.4.2 ./configure --enable-shared --prefix=/usr # Adjust --prefix to install over your current Python make sudo make install
You should be familiar with the Mozilla Build Instructions.
- Download or build the XULRunner SDK (requires the 10.0.2 XULRunner SDK version).
- Make a pyxpcom directory and cd to it: mkdir pyxpcom; cd pyxpcom
- Get the PyXPCOM source code using Mercurial:
hg clone http://hg.mozilla.org/pyxpcom src
Generate the src configure script: cd src;autoconf2.13; cd ..
- Make a PyXPCOM build directory:
mkdir build; cd build
Newer compilers seems to have some issues, adding CXXFLAGS='-std=c++0x' to make can help. Currently known working on compilers gcc 4.4.3 and g++ 4.4.3.
Last trunk seems to have some issues with PYTHON_SO not being set somehow, solved by adding-DPYTHON_SO=\"libpythondotted.version.so"\ to CXXFLAGS.
Some linux distribution require a --prefix=/usr.
Some pythons require the installed modules in dist-packages instead of site-packages, do a
sed -i -e 's/site-packages/dist-packages/' xpcom/Makefile , before running make install.
Nominating the Python version
The configure script will attempt to locate a Python version to use. In most cases, all you need to do is ensure the Python version you wish to use is on your PATH before configuring Mozilla.
Alternatively, you can also set a
PYTHON environment variable that points to a Python executable (not a directory - it must be a Python executable). If set, the configure script will use the Python pointed to by the variable.
You can confirm what Python is being used by carefully watching the configure process. You should see a message similar to:
Building PyXPCOM using Python-2.4 from c:/Python24
Windows/MSVC users: make sure you don't use cygwin's Python. It is likely to cause compilation errors later.
First test your fresh PyXPCOM build from within Mozilla's runtime environment.
Linux and OS X:
cd suite-debug/dist/bin export PYTHONPATH=$PYTHONPATH:$HOME/mozilla/suite-debug/dist/bin/python # Adjust this to your PyXPCOM build path ./run-mozilla.sh ./seamonkey -chrome chrome://pyxultest/content
cd dist\bin set PYTHONPATH=%PYTHONPATH%;C:\mozilla\dist\bin\python seamonkey.exe -chrome chrome://pyxultest/content
A window with controls should pop up. Run the tests it contains.
In the same directory you can also perform a simple test of the Python
xpcom module from a standalone Python environment.
Linux and OS X:
export MOZILLA_FIVE_HOME=$HOME/mozilla/suite-debug/dist/bin # Adjust this to your Mozilla build path export LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME python -c 'from xpcom import components; print components.classes["@mozilla.org/file/local;1"]'
set PATH=%PATH%;C:\mozilla\dist\bin set MOZILLA_FIVE_HOME=C:\mozilla\dist\bin set LD_LIBRARY_PATH=%MOZILLA_FIVE_HOME% python -c "from xpcom import components; print components.classes['@mozilla.org/file/local;1']"
You should see output similar to the following:
Type Manifest File: /home/you/mozilla/suite-debug/dist/bin/components/xpti.dat <xpcom.components._Class instance at 0xb7c1be8c> nsStringStats => mAllocCount: 431 => mReallocCount: 270 => mFreeCount: 423 -- LEAKED 8 !!! => mShareCount: 450 => mAdoptCount: 0 => mAdoptFreeCount: 0
If you see Python error messages instead, make sure
$PYTHONPATH is still set the same as in the first test.