1 Building wxPython on Win32
2 --------------------------
5 Building wxPython for use on win32 systems is a fairly simple process
6 consisting of just a few steps. However depending on where you get
7 your sources from and what your desired end result is, there are
8 several permutations of those steps. At a high level the basic steps
12 2. Build the wxWindows DLL
13 3. Build and Install wxPython
15 We'll go into more detail of each of these steps below, but first a
16 few bits of background information on tools.
18 I use a tool called SWIG (http://www.swig.org) to help generate the
19 C++ sources used in the wxPython extension module. However you don't
20 need to have SWIG unless you want to modify the *.i files. I've made
21 several modifications to SWIG specific to wxPython's needs and so the
22 modified sources are included in the wx CVS at.../wxPython/wxSWIG.
23 But because of the size and since most people won't need it my SWIG is
24 not included in the wxPythonSrc tarball. You'll need to get it from
25 CVS or a CVS snapshot.
27 If you need to modify the *.i files for wxPython then change to this
32 Then you'll need to change a flag in the setup.py script as described
33 below so the wxPython build process will use SWIG if needed.
35 I use the new Python Distutils tool to build wxPython. It is included
36 with Python 2.0, but if you want to use Python 1.5.2 or 1.6 then
37 you'll need to download and install Distutils 1.0 from
38 http://www.python.org/sigs/distutils-sig/
40 I use Microsoft Visual C++ 6.0 (5.0 with the service packs should work
41 also) to compile the wxPython C++ sources. Since I am using Distutils
42 it should be easier now to build with other win32 compilers such as
43 the free mingw32 or Borland compilers, but I havn't tried them yet.
44 If anybody wants to try it I'll take any required patches for the
45 setup script and for these instructions.
52 To build the version of wxWindows/wxPython that uses the unicode
53 version of the Win32 APIs, just follow the steps below with these
56 a. You'll need the MSLU runtime DLL and import lib. The former can
57 be downloaded from Microsoft, the latter is part of the latest
58 Platform SDK from Microsoft (see msdn.microsoft.com for
59 details). An alternative implementation of import lib can be
60 downloaded from http://libunicows.sourceforge.net
62 b. Add "UNICODE=1 MSLU=1" to the nmake command line when building
65 c. Add "UNICODE=1" to the setup.py commandline when building
68 d. See the notes in CHANGES.txt about unicode.
71 And now on to the fun stuff...
79 A. You can either use a tarball with the released version of the
80 source code for wxWindows/wxPython, or you can get current
81 development sources from the CVS repository. (Some information
82 about annonymous CVS access is at the http://wxwindows.org/cvs.htm
83 site.) The advantage of using CVS is that you can easily update as
84 soon as the developers check in new sources or fixes. The
85 advantage of using a released version is that it usually has had
86 more thorough testing done. You can decide which method is best
87 for you. The released version file is named
88 wxPythonSrc-[version].tar.gz and is available from the wxPython
89 website at http://wxpython.org/download.php. You can use WinZip to
90 unpack it if you don't have tar and gzip.
93 B. Once you get the sources be sure to put them in a path without a
94 space in it (i.e., NOT c:\Program Files\wx) and set an environment
95 variable named WXWIN to the top level directory. For example:
97 set WXWIN=c:\wx\wxPythonSrc-2.4.0.4
99 You'll probably want to add that line to your autoexec.bat or
100 System Properties depending on the type of system you are on.
103 C. Change to the %WXWIN%\include\wx\msw directory and copy setup0.h to
104 setup.h and then edit setup.h. This is how you control which parts
105 of wxWindows are compiled into or left out of the build, simply by
106 turning options on or off. I have the following differences from
107 the default setup0.h in my setup.h, but you can experiment with
108 other settings if you like:
111 WXWIN_COMPATIBILITY_2_2 0
112 wxDIALOG_UNIT_COMPATIBILITY 0
113 wxUSE_DEBUG_CONTEXT 1
114 wxUSE_MEMORY_TRACING 1
115 wxUSE_CMDLINE_PARSER 0
117 wxUSE_DIALUP_MANAGER 0
118 wxUSE_DYNAMIC_LOADER 0
126 Be sure that wxUSE_GLCANVAS is defined to be 0 as wxPython now
127 keeps its own copy of the glcanvas sources and expects that it is
128 not in the main library. This is done to reduce the number of
129 dependant DLLs on the core library and therefore help reduce
134 2. Build the wxWindows DLL
135 ---------------------------
137 A. Although MSVC project files are provided I always use the makefiles
138 to build wxWindows because by default the flags are compatible with
139 Python, (and I make sure they stay that way.) You would have to
140 edit the project files a bit to make it work otherwise.
143 B. There are three different types of wxWindows DLLs that can be
144 produced by the VC makefile simply by providing a flag on the nmake
145 command-line, I call the three types DEBUG, FINAL, and HYBRID.
146 Here are some more details:
148 DEBUG Specified with "FINAL=0" and produces a DLL named
149 wxmsw[version]d.dll. This DLL is compiled with full
150 debugging information and with the __WXDEBUG__ macro set,
151 which enables some debugging-only code in wxWindows such
152 as assertions and failure log messages. The /MDd flag is
153 used which means that it is linked with the debugging
154 version of the C runtime library and also that you must
155 use the debugging version of Python, (python_d.exe and
156 pythonXX_d.dll) which also means that all extensions
157 loaded by Python should also have the _d in the name.
158 With this option you can use the MSVC debugger to trace
159 though the Python interpreter, as well as the code for the
160 wxPython extension and the wxWindows DLL.
162 FINAL Specified with "FINAL=1" and produces a DLL named
163 wxmsw[version].dll. This DLL is compiled with optimizations
164 turned on and without debugging information and without
165 __WXDEBUG__. The /MD flag is used which means that you
166 can use this version with the standard python.exe.
168 HYBRID Specified with "FINAL=hybrid" and produces a DLL named
169 wxmsw[version]h.dll. This DLL is almost the same as the
170 FINAL version except the __WXDEBUG__ is used which means
171 that you will get extra runtime assertions and validations
172 from wxWindows. If any of these fail then they are turned
173 into a Python exception that you can catch and deal with
174 in your code. This is the version that I use when making
175 the binary installer for win32.
178 Since different DLL names and object file directories are used you
179 can build all three types if you like.
182 C. Change to the %WXWIN%\src\msw directory and type the following command,
183 using the value for FINAL that you want:
185 nmake -f makefile.vc dll FINAL=hybrid
187 Your machine will then crunch away for possibly a long time,
188 depending on your hardware, and when it's done you should have a
189 DLL and some library files in %WXWIN%\lib.
192 D. You'll either need to add %WXWIN%\lib to the PATH or copy the DLL
193 file to a directory already on the PATH so the DLL can be found at
194 runtime. Another option is to copy the DLL to the directory that
195 the wxPython pacakge is installed to, for example,
196 c:\Python22\lib\site-packages\wxPython.
199 E. You can test your build by changing to one of the directories under
200 %WXWIN%\samples or %WXWIN\demos and typing (using the right FINAL flag):
202 nmake -f makefile.vc FINAL=hybrid WXUSINGDLL=1
204 and then executing the resulting .exe file.
209 3. Build and Install wxPython
210 -----------------------------
212 A. As mentioned previouslly, wxPython is built with the standard
213 Python Distutils tool. If you are using Python 2.0 or later you
214 are all set, otherwise you need to download and install Distutils
215 1.0 from http://www.python.org/sigs/distutils-sig/.
218 B. Change to the root wxPython directory and look at the setup.py
219 file. This is the script that configures and defines all the
220 information that Distutils needs to build wxPython. There are some
221 options near the begining of the script that you may want or need
222 to change based on what options you have selected up to this point,
223 (type of DLL built, sources from tar.gz or from CVS, etc.) You can
224 either change these flags directly in setup.py or supply them on
227 BUILD_GLCANVAS Set to zero if you don't want to build the
228 Open GL canvas extension module.
230 BUILD_OGL Set to zero if you don't want to build the
231 Object Graphics Library extension module.
233 BUILD_STC Set to zero if you don't want to build the
234 wxStyledTextCtrl (the Scintilla wrapper)
237 USE_SWIG If you have edited any of the *.i files you
238 will need to set this flag to non-zero so SWIG
239 will be executed to regenerate the wrapper C++
240 and shadow python files.
245 C. To build and install wxPython you simply need to execute the
246 setup.py script. If you have more than one version of Python
247 installed, be sure to execute setup.py with the version you want to
250 Depending on what kind of wxWindows DLL you built there are
251 different command-line parameters you'll want to pass to setup (in
252 addition to possibly one or more of the above):
254 FINAL: python setup.py install
256 DEBUG: python setup.py build --debug install
258 HYBRID: python setup.py HYBRID=1 install
260 NOTE: If you get an internal compiler error from MSVC then you
261 need to edit setup.py and add in the /GX- flag that is normally
262 commented out. Just search for "GX-" and uncomment it so it is put
263 into the cflags list.
265 If you would like to install to someplace besides the Python
266 site-packages directory (such as to your home directory) then you
267 can add "--root=<path>" after the "install" command. To use
268 wxPython like this you'll need to ensure that the directory
269 containing wxPyrthon is contained in in the PYTHONPATH environment
273 D. At this point you should be able to change into the wxPython\demo
274 directory and run the demo:
279 E. If you would like to make a test build that doesn't overwrite the
280 installed version of wxPython you can do so with one of these
281 commands instead of the install command above:
283 FINAL: python setup.py build_ext --inplace
285 DEBUG: python setup.py build_ext --debug --inplace
287 HYBRID: python setup.py HYBRID=1 build_ext --inplace
289 This will build the wxPython package in the local wxPython
290 directory instead of installing it under your Python installation.
291 To run using this test version just add the base wxPython source
292 directory to the PYTHONPATH:
294 set PYTHONPATH=%WXDIR%\wxPython
295 cd %WXDIR%\wxPython\demo