====================
 Installing M2Crypto
====================

:Maintainer: Heikki Toivonen
:Web-Site: http://wiki.osafoundation.org/bin/view/Projects/MeTooCrypto

.. contents::


Pre-requisites
----------------

The following software packages are pre-requisites:

- **Python 2.3 or newer**
- **OpenSSL 0.9.7 or newer**
- **SWIG 1.3.24 or newer**


Installing on Unix-like systems, including Cygwin
-------------------------------------------------

::

    $ tar zxf m2crypto-0.17.tar.gz
    $ cd m2crypto-0.17
    $ python setup.py build
    $ python setup.py install

If you have installed setuptools you can also optionally run tests like this:

    $ python setup.py test

This assumes OpenSSL is installed in /usr. You can provide an alternate
OpenSSL prefix location with --openssl option to build command. Other
commands accept standard options if you need them.


Differences when installing on Windows
--------------------------------------

Before building from source, you need to install OpenSSL's include files,
import libraries and DLLs. By default setup.py assumes that OpenSSL include
files are in ``c:\pkg\openssl\include``, and the import libraries 
in ``c:\pkg\openssl\lib``. As with other platforms, you can specify a different
OpenSSL location with --openssl option.

Using OpenSSL 0.9.8 on Windows requires Python be built with applink.c 
(add an include statement in python.c).  This is not a requirement for 
Linux or MacOSX.  (applink.c is provided by OpenSSL.)


MSVC++
~~~~~~~~

setup.py is already configured to work with MSVC++ by default.

With MSVC++, the OpenSSL DLLs, as built, are named ``libeay32.dll``
and ``ssleay32.dll``. Install these somewhere on your PATH; for example 
in ``c:\bin``, together with ``openssl.exe``. 

For MSVC++, the import libraries, as built by OpenSSL, are named
``libeay32.lib`` and ``ssleay32.lib``.


MINGW
~~~~~~~

.. NOTE:: 
   The following instructions for building M2Crypto with MINGW are from 
   M2Crypto 0.12. These instructions should continue to work for this release,
   although I have not tested them.

Read Sebastien Sauvage's webpage:

     http://sebsauvage.net/python/mingw.html

For mingw32, the OpenSSL import libraries are named ``libeay32.a`` and
``libssl32.a``. You may need to edit setup.py file for these.

You'll also need to create ``libpython2[123].a``, depending on your version
of Python.

OpenSSL DLLs for mingw32 are named ``libeay32.dll`` and ``libssl32.dll``.
Install these somewhere on your PATH; for example in
``c:\bin``, together with ``openssl.exe``.

Build M2Crypto:

    python setup.py build -cmingw32
    python setup.py install


BC++
~~~~~~

.. NOTE:: 
   The following instructions for building M2Crypto with MSVC++ 6.0 and
   BC++ 5.5 free compiler suite are from M2Crypto 0.10. These instructions
   should continue to work for this release, although I have not tested
   them.

For BC++ these files are created from the MSVC++-built ones using the
tool ``coff2omf.exe``. I call them ``libeay32_bc.lib`` and
``ssleay32_bc.lib``, respectively. You will need to edit setup.py file 
for these.

You'll also need Python's import library, e.g., ``python22.lib``, to
be the BC++-compatible version; i.e., create ``python22_bc.lib`` from
``python22.lib``, save a copy of ``python22.lib`` (as ``python22_vc.lib``,
say), then rename ``python22_bc.lib`` to ``python22.lib``.


Now you are ready to build M2Crypto. Do one of the following::

    python setup.py build
    python setup.py build -cbcpp

Then,

::

    python setup.py install


MacOSX
------

Follow the standard instructions to build and install M2Crypto.  
However, should you encounter difficulties, you may want to consider 
the following possibilities.

  - Distutils for Python 2.5 now provides support for universal 
    builds (ppc and i386) and Distutils requires a recent version 
    of Xcode.  See http://developer.apple.com/tools/download/

  - OpenSSL 0.9.7l gets installed in /usr with Apple's Security 
    Update 2006-007.  If you need features in OpenSSL 0.9.8, you 
    should consider installing 0.9.8 in /usr/local.  The commands 
    are:
    
      OpenSSL:
        ./config shared --prefix=/usr/local
        make
        make test
        sudo make install     [or... install_sw]
        
      M2Crypto:
        python setup.py build --openssl=/usr/local
        sudo python setup.py install --openssl=/usr/local



