Example Python extension for Windows NT
=======================================

This directory contains everything needed (except for the Python
distribution!) to build a Python extension module using Microsoft VC++.
Notice that you need to use the same compiler version that was used to build
Python itself.

The simplest way to build this example is to use the distutils script
'setup.py'.  To do this, simply execute:

  % python setup.py install

after everything builds and installs, you can test it:

  % python -c "import example; example.foo()"
  Hello, world

See setup.py for more details.  alternatively, see below for instructions on
how to build inside the Visual Studio environment.

Visual Studio Build Instructions
================================

These are instructions how to build an extension using Visual C++.  The
instructions and project files have not been updated to the latest VC
version.  In general, it is recommended you use the 'setup.py' instructions
above.

It has been tested with VC++ 7.1 on Python 2.4.  You can also use earlier
versions of VC to build Python extensions, but the sample VC project file
(example.dsw in this directory) is in VC 7.1 format.

COPY THIS DIRECTORY!
--------------------
This "example_nt" directory is a subdirectory of the PC directory, in order
to keep all the PC-specific files under the same directory.  However, the
example_nt directory can't actually be used from this location.  You first
need to copy or move it up one level, so that example_nt is a direct
sibling of the PC\ and Include\ directories.  Do all your work from within
this new location -- sorry, but you'll be sorry if you don't.

OPEN THE PROJECT
----------------
From VC 7.1, use the
    File -> Open Solution...
dialog (*not* the "File -> Open..." dialog!).  Navigate to and select the
file "example.sln", in the *copy* of the example_nt directory you made
above.
Click Open.

BUILD THE EXAMPLE DLL
---------------------
In order to check that everything is set up right, try building:

1. Select a configuration.  This step is optional.  Do
       Build -> Configuration Manager... -> Active Solution Configuration
   and select either "Release" or "Debug".
   If you skip this step, you'll use the Debug configuration by default.

2. Build the DLL.  Do
       Build -> Build Solution
   This creates all intermediate and result files in a subdirectory which
   is called either Debug or Release, depending on which configuration you
   picked in the preceding step.

TESTING THE DEBUG-MODE DLL
--------------------------
Once the Debug build has succeeded, bring up a DOS box, and cd to
example_nt\Debug.  You should now be able to repeat the following session
("C>" is the DOS prompt, ">>>" is the Python prompt) (note that various
debug output from Python may not match this screen dump exactly):

    C>..\..\PCbuild\python_d
    Adding parser accelerators ...
    Done.
    Python 2.2c1+ (#28, Dec 14 2001, 18:06:39) [MSC 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import example
    [7052 refs]
    >>> example.foo()
    Hello, world
    [7052 refs]
    >>>

TESTING THE RELEASE-MODE DLL
----------------------------
Once the Release build has succeeded, bring up a DOS box, and cd to
example_nt\Release.  You should now be able to repeat the following session
("C>" is the DOS prompt, ">>>" is the Python prompt):

    C>..\..\PCbuild\python
    Python 2.2c1+ (#28, Dec 14 2001, 18:06:04) [MSC 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import example
    >>> example.foo()
    Hello, world
    >>>

Congratulations!  You've successfully built your first Python extension
module.

CREATING YOUR OWN PROJECT
-------------------------
Choose a name ("spam" is always a winner :-) and create a directory for
it.  Copy your C sources into it.  Note that the module source file name
does not necessarily have to match the module name, but the "init" function
name should match the module name -- i.e. you can only import a module
"spam" if its init function is called "initspam()", and it should call
Py_InitModule with the string "spam" as its first argument (use the minimal
example.c in this directory as a guide).  By convention, it lives in a file
called "spam.c" or "spammodule.c".  The output file should be called
"spam.dll" or "spam.pyd" (the latter is supported to avoid confusion with a
system library "spam.dll" to which your module could be a Python interface)
in Release mode, or spam_d.dll or spam_d.pyd in Debug mode.

Now your options are:

1) Copy example.sln and example.vcproj, rename them to spam.*, and edit them
by hand.

or

2) Create a brand new project; instructions are below.

In either case, copy example_nt\example.def to spam\spam.def, and edit the
new spam.def so its second line contains the string "initspam".  If you
created a new project yourself, add the file spam.def to the project now.
(This is an annoying little file with only two lines.  An alternative
approach is to forget about the .def file, and add the option
"/export:initspam" somewhere to the Link settings, by manually editing the
"Project -> Properties -> Linker -> Command Line -> Additional Options"
box).

You are now all set to build your extension, unless it requires other
external libraries, include files, etc.  See Python's Extending and
Embedding manual for instructions on how to write an extension.


CREATING A BRAND NEW PROJECT
----------------------------
Use the
    File -> New -> Project...
dialog to create a new Project Workspace.  Select "Visual C++ Projects/Win32/
Win32 Project", enter the name ("spam"), and make sure the "Location" is
set to parent of the spam directory you have created (which should be a direct
subdirectory of the Python build tree, a sibling of Include and PC).
In "Application Settings", select "DLL", and "Empty Project".  Click OK.

You should now create the file spam.def as instructed in the previous
section. Add the source files (including the .def file) to the project,
using "Project", "Add Existing Item".

Now open the
    Project -> spam properties...
dialog.  (Impressive, isn't it? :-) You only need to change a few
settings.  Make sure "All Configurations" is selected from the "Settings
for:" dropdown list.  Select the "C/C++" tab.  Choose the "General"
category in the popup menu at the top.  Type the following text in the
entry box labeled "Addditional Include Directories:"

    ..\Include,..\PC

Then, choose the "General" category in the "Linker" tab, and enter
    ..\PCbuild
in the "Additional library Directories" box.

Now you need to add some mode-specific settings (select "Accept"
when asked to confirm your changes):

Select "Release" in the "Configuration" dropdown list.  Click the
"Link" tab, choose the "Input" Category, and append "python24.lib" to the
list in the "Additional Dependencies" box.

Select "Debug" in the "Settings for:" dropdown list, and append
"python24_d.lib" to the list in the Additional Dependencies" box.  Then
click on the C/C++ tab, select "Code Generation", and select
"Multi-threaded Debug DLL" from the "Runtime library" dropdown list.

Select "Release" again from the "Settings for:" dropdown list.
Select "Multi-threaded DLL" from the "Use run-time library:" dropdown list.

That's all <wink>.
