[Python-checkins] CVS: python/dist/src/PC/example_nt example.dsp,1.2,1.3 example.dsw,1.1,1.2 readme.txt,1.6,1.7 example.mak,1.3,NONE

Tim Peters python-dev@python.org
Sun, 2 Jul 2000 16:18:46 -0700


Update of /cvsroot/python/python/dist/src/PC/example_nt
In directory slayer.i.sourceforge.net:/tmp/cvs-serv23043/python/dist/src/PC/example_nt

Modified Files:
	example.dsp example.dsw readme.txt 
Removed Files:
	example.mak 
Log Message:
The example_nt directory was old enough to vote.  Frank Stajano
pointed out some of the problems he had following the instructions,
and I stumbled into the others:  MSVC has changed in several
respects, Python has changed the directories into which it builds
its own Windows outputs, and we grew the unusual scheme of
appending "_d" to the names of debug-mode output files.

This should all work with VC6 + CVS Python now.  Some other Windows
geek please confirm!  And the less you know, the better <0.5 wink>.

Explanations and examples for versions of MSVC before 6, and
versions of Python before 2.0b1, have been removed, because
they're too different and so confuse life.  This last step I OK'ed
with Guido first (indeed, 'twas his idea!).


Index: example.dsp
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/example_nt/example.dsp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** example.dsp	1997/12/11 04:06:04	1.2
--- example.dsp	2000/07/02 23:18:42	1.3
***************
*** 1,4 ****
  # Microsoft Developer Studio Project File - Name="example" - Package Owner=<4>
! # Microsoft Developer Studio Generated Build File, Format Version 5.00
  # ** DO NOT EDIT **
  
--- 1,4 ----
  # Microsoft Developer Studio Project File - Name="example" - Package Owner=<4>
! # Microsoft Developer Studio Generated Build File, Format Version 6.00
  # ** DO NOT EDIT **
  
***************
*** 18,27 ****
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
! !MESSAGE "example - Win32 Release" (based on\
!  "Win32 (x86) Dynamic-Link Library")
  !MESSAGE "example - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
  !MESSAGE 
  
  # Begin Project
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
--- 18,27 ----
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
! !MESSAGE "example - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
  !MESSAGE "example - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
  !MESSAGE 
  
  # Begin Project
+ # PROP AllowPerConfigDependencies 0
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
***************
*** 71,75 ****
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
  # ADD BASE MTL /nologo /D "_DEBUG" /win32
  # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
--- 71,75 ----
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
! # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
  # ADD BASE MTL /nologo /D "_DEBUG" /win32
  # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

Index: example.dsw
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/example_nt/example.dsw,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** example.dsw	1997/12/11 03:43:29	1.1
--- example.dsw	2000/07/02 23:18:43	1.2
***************
*** 1,8 ****
! Microsoft Developer Studio Workspace File, Format Version 5.00
  # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
  
  ###############################################################################
  
! Project: "example"=".\example.dsp" - Package Owner=<4>
  
  Package=<5>
--- 1,8 ----
! Microsoft Developer Studio Workspace File, Format Version 6.00
  # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
  
  ###############################################################################
  
! Project: "example"=.\example.dsp - Package Owner=<4>
  
  Package=<5>

Index: readme.txt
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/example_nt/readme.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** readme.txt	1997/12/11 04:01:25	1.6
--- readme.txt	2000/07/02 23:18:43	1.7
***************
*** 2,98 ****
  =======================================
  
! This directory contains everything you need to build a Python
! extension module using Microsoft VC++ ("Developer Studio") version 4.x
! or 5.x, except for the Python distribution.  It has been tested with
! VC++ 4.2 on Python 1.5a3, and with VC++ 5.0 on Python 1.5b2.
! 
! 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.)
! 
! When using the VC++ 4.x project (makefile), it is 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".  If
! you have problems with this file, the best thing to do is to delete it
! from the project and add it again.
! 
! When using the VC++ 5.x project (workspace), the build results of
! Python are assumed to be in ..\PCbuild.  Since the provided VC++ 5.x
! project and workspace files have a different structure (to support
! separate "release" and "debug" builds), the example project and
! workspace match this structure.
! 
! In order to use the example project from VC++ 4.x, 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.
  
! From VC+ 5.x, do the same except don't change the pattern, and select
! the example.dsw workspace file.
  
  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.
- 
- 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
- 	>>>
- 
- When using VC++ 5.x, issue these commands:
- 
- 	C> ..\..\PCbuild\Release\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).  (When using VC++
! 5.x, you can clone example.dsp and example.dsw in a similar way.)
  
  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.  (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 Options" box).
  
  You are now all set to build your extension, unless it requires other
--- 2,114 ----
  =======================================
  
! This directory contains everything needed (except for the Python
! distribution!) to build a Python extension module using Microsoft VC++
! ("Developer Studio") version 6.  It has been tested with VC++ 6.0 on Python
! 2.0b1.  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 6
! 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 6.x, use the
!     File -> Open Workspace...
! dialog (*not* the "File -> Open..." dialog!).  Navigate to and select the
! file "example.dsw".  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 -> Select Active Configuration...
!    and select either "example - Win32 Release" or "example - Win32 Debug".
!    If you skip this step, you'll use the Debug configuration by default.
! 
! 2. Build the DLL.  Do
!        Build -> Build example_d.dll
!    in Debug mode, or
!        Build -> Build example.dll
!    in Release mode.
!    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.0b1 (#0, Jul  1 2000, 11:29:37) [MSC 32 bit (Intel)] on win32
!     Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
!     Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)
!     >>> import example
!     [8830 refs]
!     >>> example.foo()
!     Hello, world
!     [8830 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.0b1 (#0, Jul  1 2000, 11:28:35) [MSC 32 bit (Intel)] on win32
!     Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
!     Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)
!     >>> 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.dsw and example.dsp, 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 Options" box).
  
  You are now all set to build your extension, unless it requires other
***************
*** 101,148 ****
  
  
! Creating a brand new project
  ----------------------------
! 
! If you don't feel comfortable with editing Makefiles or project and
! workspace files, 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
! 
! Next, for both configurations, select the "Link" tab, choose the
! "General" category, and add "python15.lib" to the end of the
! "Object/library modules" box.
! 
! Then, separately for the Release and Debug configurations, choose the
! "Input" category in the Link tab, and enter "..\PCbuild\Release" or
! "..\PCbuild\Debug", respectively, in the "Additional library path"
! box.
! 
! Finally, you must change the run-time library.  This must also 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.)
! 
--- 117,165 ----
  
  
! CREATING A BRAND NEW PROJECT
  ----------------------------
! Use the
!     File -> New... -> Projects
! dialog to create a new Project Workspace.  Select "Win32 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, a sibling of Inclue and PC).  Select Win32 as the
! platform (in my version, this is the only choice).  Make sure the "Create
! new workspace" radio button is selected.  Click OK.
! 
! Now open the
!     Project -> Settings...
! 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 "Preprocessor"
! 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 "Input" category in the Link tab, and enter
!     ..\PCbuild
! in the "Additional library path:" box.
! 
! Now you need to add some mode-specific settings:
! 
! Select "Win32 Release" in the "Settings for:" dropdown list.  Click the
! "Link" tab, choose the "Input" Category, and append "python20.lib" to the
! list in the "Object/library modules:" box.
! 
! Select "Win32 Debug" in the "Settings for:" dropdown list, and append
! "python20_d.lib" to the list in the "Object/library modules:" box.  Then
! click on the C/C++ tab, select "Code Generation" from the "Category:"
! dropdown list, and select "Debug Multithreaded DLL" from the "Use run-time
! library:" dropdown list.
! 
! Select "Win32 Release" again from the "Settings for:" dropdown list.
! Select "Multithreaded DLL" from the "Use run-time library:" dropdown list.
! 
! That's all <wink>.
! 
! You should now create the file spam.def as instructed in the previous
! section.  Then 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.)