Example Python extension for Windows NT
=======================================

This directory contains everything you need to build a Python
extension module using Microsoft VC++ 4.x ("Developer Studio"), except
for the Python distribution.  It has been tested most recently with
version 4.2.

The "example_nt" subdirectory should be an immediate subdirectory of
the Python source directory -- a direct sibling of Include and PC, in
particular, which are referenced as "..\Include" and "..\PC".  In
other words, it should *not* be used "as is".  Copy or move it up one
level or you will regret it!  (This is done to keep all the PC
specific files inside the PC subdirectory of the distribution, where
they belong.)

It is also assumed that the build results of Python are in the
directory ..\vc40.  In particular, the python15.lib file is referred
to as "..\vc40\python15.lib".

In order to use the example project from Developer Studio, use the
"File->Open Workspace..." dialog (*not* the "File->Open..." dialog!).
Change the pattern to "*.mak" and select the file "example.mak".  Now
choose "File->Save All" and the othe project files will be created.

In order to check that everything is set up right, try building:
choose "Build->Build example.dll".  This creates all intermediate and
result files in a subdirectory which is called either Debug or Release
depending on which configuration you have chosen (as distributed,
Debug is selected as the default configuration).

Once the build has succeeded, test the resulting DLL.  In a DOS
command window, chdir to that directory.  You should now be able to
repeat the following session "(C>" is the DOS prompt, ">>>" is the
Python prompt):

	C> ..\..\vc40\python.exe
	>>> import example
	>>> example.foo()
	Hello, world
	>>>


Creating the project
--------------------

There are two ways to use this example to create a project for your
own module.  First, 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.  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).

Now your options are:

1) Clone example.mak.  Start by copying example_nt\example.mak to
spam\spam.mak.  Do a global edit on spam.mak, replacing all
occurrences of the string "example" by "spam", and all occurrences of
"DEP_CPP_EXAMP" by something like "DEP_CPP_SPAM".  You can now use
this makefile to create a project file by opening it as a workspace
(you have to change the pattern to *.mak first).

2) Create a brand new project; instructions are below.

In both cases, copy example_nt\example.def to spam\spam.def, and edit
spam\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.

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
----------------------------

If you don't feel comfortable with editing Makefiles, you can create a
brand new project from scratch easily.

Use the "File->New..." dialog to create a new Project Workspace.
Select Dynamic-Link Library, enter the name ("spam"), and make sure
the "Location" is set to the spam directory you have created (which
should be a direct subdirectory of the Python build tree).  Select
Win32 as the platform (in my version, this is the only choice).  Click
"Create".

Now open the "Build->Settings..." dialog.  (Impressive, isn't it?  :-)
You only need to change a few settings.  Make sure you have both the
Debug and the Release configuration selected when you make the first
change.  Select the "C/C++" tab.  Choose the "Preprocessor" category
in the popup menu at the top.  Type the following text in the entry
box labeled "Addditional include directories:"

	..\Include,..\PC

You must also change the run-time library.  This must be done
separately for the Release and Debug configurations.  Choose the "Code
Generation" category in the C/C++ tab.  In the box labeled "Use
run-time library", choose "Multithreaded DLL" for the Release
configuration, and "Debug Multithreaded DLL" for the Debug
configuration.  That's all.

You should now first create the file spam.def as instructed in the
previous section.

Now chose the "Insert->Files into Project..." dialog.  Set the pattern
to *.* and select both spam.c and spam.def and click OK.  (Inserting
them one by one is fine too.)  Using the same dialog, choose the file
..\vc40\python15.lib and insert it into the project.
