'''Step-by-step guide to install Pyrex on Windows and compile your first extension'''

== A: Pyrex installation on Windows XP ==

=== step A.1 ===
Install [[http://www.python.org|Python]] (we used version 2.4.2)

=== step A.2 ===
Run the windows installer for [[http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/|Pyrex]] (e.g. `Pyrex-0.9.3.1.win32.exe`)

=== step A.3 ===
Install [[http://www.mingw.org/download.shtml|Mingw]], the gcc compiler for Windows (download and run {{{MinGW-5.1.2.exe}}} and choose only the "base tools": `mingw-runtime 3.9`, `w32api-3.6`, `binutils 2.15.91` and `gcc-core 3.4.2`.
Add Mingw path (`C:\MinGW\bin`) to the Windows `Path` environment variable. If you already have cygwin installed, add `C:\MinGW\bin` before the Cygwin path.

=== step A.4 ===
Edit the file `c:/Python2x/Lib/distutils/distutils.cfg` (if it does not exist, create it) and add the following lines:
{{{
[build]
compiler = mingw32
}}}

=== step A.5 ===
MinGW links with `msvcrt.dll` whereas the main Python distribution links with `msvcr71.dll` (due to Visual C++ 2003). It is not safe to mix and blend these two different C runtime libraries. In order to make minGW link with `msvcr71.dll`, edit the text file `c:\mingw\lib\gcc\mingw32\3.2.4\specs` and change `-lmsvcrt` to `-lmsvcr71`. 
-----------
== B: Create your first Pyrex module ==

=== step B.1 ===
Create a working directory (e.g. `D:\pyrex_module\`). Write a pyrex module and save it with a `pyx` extension (e.g. `primes.pyx`, code available [[http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/|here]])

=== step B.2 ===
Write the following python script and save it as `setup.py` in your working directory.

{{{
from distutils.core import setup
from distutils.extension import Extension
from Pyrex.Distutils import build_ext
setup(
  name = "PyrexGuide",
  ext_modules=[
    Extension("primes", ["primes.pyx"])
    ],
  cmdclass = {'build_ext': build_ext}
)
}}}

If you want to compile several modules, duplicate the line starting with `Extension` and replace `primes` by your module names.

=== step B.3 ===
In your working directory, create a batch file called `build_and_install.bat` containing the following lines. To run the batch, double-click the file. You will see many "Warning" messages during the building process: do not worry, it is normal.

{{{
C:\Python24\python.exe setup.py build_ext install
pause
}}}

=== step B.4 ===
Mission completed. The file `primes.pyd` (a Python Extension DLL) is now located in `C:\Python24\Lib\site-packages` and the `primes` module is available in Python. In your working directory, you can delete `primes.c` and the `build` folder created by the building process.

You can now test your new module at the python shell:

{{{
>>> import primes
>>> primes.primes(10)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
}}}