]> git.saurik.com Git - wxWidgets.git/blame - wxPython/BUILD.unix.txt
Allow compiling when _WIN32_IE < 0x300
[wxWidgets.git] / wxPython / BUILD.unix.txt
CommitLineData
c368d904
RD
1Building wxPython on Unix or Unix-like Systems
2----------------------------------------------
3
4The basic steps for building wxPython for Unix or Unix-like systems
5are:
6
7 1. Compile and/or install glib and gtk+
8 2. Compile and/or install wxGTK
9 3. Compile and install wxPython
10
11We'll go into more detail of each of these steps below, but first a
12few bits of background information on tools.
13
14I use a tool called SWIG (http://www.swig.org) to help generate the
15C++ sources used in the wxPython extension module. However you don't
05d61b69
RD
16need to have SWIG unless you want to modify the *.i files. I've made
17several modifications to SWIG specific to wxPython's needs and so the
18modified sources are included in the wx CVS at .../wxPython/wxSWIG.
19If you need to modify the *.i files for wxPython then change to this
20directory and run:
21
22 configure
23 make
24
25(Do not run "make install" as wxswig is run in-place.) You'll then
9df61a29
RD
26need to change a flag in the setup.py script as described below so the
27wxPython build process will use SWIG if needed.
c368d904
RD
28
29I use the new Python Distutils tool to build wxPython. It is included
30with Python 2.0, but if you want to use Python 1.5.2 or 1.6 then
31you'll need to download and install Distutils 1.0 from
32http://www.python.org/sigs/distutils-sig/
33
c368d904
RD
34Okay, now on the the fun stuff...
35
36
371. Compile and/or install glib and gtk+
38---------------------------------------
39
40A. First of all, check and see if you've already got glib/gtk+ on your
41 system, all the Linux distributions I know of come with it, at
42 least as an option. Look for libglib.* and libgtk.* in your system's
43 standard library directories. You'll also need the headers and
44 config scripts in order to build things that use glib/gtk. Try
45 running gtk-config:
46
47 gtk-config --version
48
49 If you have version 1.2.5 or better then you're all set. You can
50 skip to step #2.
51
52B. If your system has a binary package mechanism, (RPMs, debs,
53 whatever...) check and see if binaries for glib abd gtk+ are
54 available. Be sure to get the runtime library package as well as
55 the development package, if they are separate. Install them with
56 your package tool, and skip to step #2.
57
58C. If all else fails, you can get the source code for glib and gtk+ at
59 http://www.gtk.org/. Fetch the latest of each in the 1.2.x
60 series. Compile and install each of them like this:
61
62 gzip -d [package].tar.gz | tar xvf -
63 cd [package]
64 ./configure
65 make
66 make install
67
68 The last step will probably have to be done as root. Also, if your
69 system needs anything done to update the dynamic loader for shared
70 libraries, (such as running ldconfig on Linux) then do it after
71 each library is installed.
72
73
74
752. Compile and/or install wxGTK
76-------------------------------
77
78A. You can find the sources and RPMs for wxGTK at
05d61b69
RD
79 http://wxwindows.org/, just follow the download links from the
80 nevigation panel. You can also check out a current snapshot of the
81 sources from the CVS server. (Some information about annonymous
82 CVS access is at http://wxwindows.org/cvs.htm.) The advantage of
83 using CVS is that you can easily update as soon as the developers
84 check in new sources or fixes. The advantage of using a released
85 version is that it usually has had more thorough testing done. You
86 can decide which method is best for you.
c368d904
RD
87
88B. You'll usually want to use a version of wxGTK that has the same
89 version number as the wxPython sources you are using. (Another
90 advantage of using CVS is that you'll get both at the same time.)
91
92C. If using the RPMs be sure to get both the wxGTK and wxGTK-devel
93 RPMs (at a minimum) and then install them as root.
94
95 rpm -Uhv wxGTK-2.2.2-0.i386.rpm wxGTK-devel-2.2.2-0.i386.rpm
96
97D. If using the sources (either from the tarball or from CVS) then
98 configure it like this:
99
100 cd wxWindows # or whatever your top-level directory is called
101 mkdir build
102 cd build
103 ../configure --with-gtk
104
105 There are gobs and gobs of options for the configure script, run
106 ../configure --help to see them all. I'll describe some that I find
107 useful here.
108
109 If you have OpenGL or compatible libraries installed, then add the
110 --with-opengl flag.
111
112 If you are on Solaris and are using a recent version of GCC, then
113 you'll probably want to add the --enable-permissive flag so the
114 compiler won't barf on your broken X11 header files.
115
116 To make a debugging version of wxGTK, add the --enable-debug flag.
117 This sets the -g flag for the compiler and also activates some
118 special debugging code in wxWindows by defining the __WXDEBUG__
119 macro. You'll get some extra asserts, failure logging, etc.
120
185d7c3e
RD
121 To make a static library and not make a shared library, use the
122 --disable-shared and --enable-static flags.
123
3930382b
RD
124 NOTE: There is a potential type mismatch between Python and wxGTK.
125 This happens if Python defines some flags that turn on 64-bit file
126 offset support and wxGTK does not. This causes some basic types,
127 like off_t, to be typedef'd differently causing the C++ method
128 signatures to be incompatible and giving link errors at runtime.
129 If you get errors upon running a wxPython script that looks
130 something like this:
131
132 SeekI_13wxInputStream10wxSeekMode: referenced symbol not found
133
134 then that is probably the issue. This can be fixed in the current
135 code by predefining these flags before wxGTK's configure is run,
136 for example:
137
138 export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DHAVE_LARGEFILE_SUPPORT"
139 export CXXFLAGS=$CFLAGS
140 ../configure --with-gtk --with-opengl --enable-debug
141
142 In the 2.3.3 final release there will be a real configure flag for
143 it, and it should be enabled by default. You will be able to use
144 --enable-largefile or --disable-largefile to control it. If you
145 still get this or a similar error with 2.3.3 then try disabling
146 largefile support in GTK.
f54a35fe 147
c368d904
RD
148E. Now just compile and install. You need to use GNU make, so if your
149 system has something else get GNU make and build and install it and
150 use it instead of your system's default make command.
151
152 make
153 make install
154
155 The last step will probably have to be done as root. Also, if your
156 system needs anything done to update the dynamic loader for shared
157 libraries, (such as running ldconfig on Linux) then do it now.
158
159F. You can test your build by changing to one of the directories under
160 build/samples or build/demos, running make and then running the
161 executable that is built.
162
163
164
1653. Compile and install wxPython
166-------------------------------
167
168A. You have the same options (and same advantages/disadvantages) for
169 getting the wxPython source, either a released snapshot or from
170 CVS. The released version file is named wxPython-[version].tar.gz
171 and is available at http://wxpython.org/download.php. If you want
172 to use CVS you'll find wxPython in the wxWindows CVS tree (see
173 above) in the wxWindows/wxPython directory.
174
175B. As mentioned previouslly, wxPython is built with the standard
176 Python Distutils tool. If you are using Python 2.0 or later you
177 are all set, otherwise you need to download and install Distutils
178 1.0 from http://www.python.org/sigs/distutils-sig/.
179
180 On Unix systems Distutils figures out what commands and flags to
181 use for the compiler and linker by looking in the Makefile that was
182 used to build Python itself. Most of the time this works okay. If
183 it doesn't, there doesn't seem to be a way to override the values
184 that Distutils uses without hacking either Distutils itself, or
185 Python's Makefile. (Complain to the distutils-sig about this
f54a35fe 186 please.) For example, on a Solaris system I had to edit
c368d904
RD
187 /usr/local/lib/python1.5/config/Makefile and replace
188
189 LDSHARED=ld -G
190
191 with
192
193 LDSHARED=gcc -G
194
195 This particular problem has been fixed in Python 1.6 and beyond,
196 but there may be similar issues on other platforms.
197
198 While we're on the subject of how Python was built... Since
199 wxPython is a C++ extension some platforms and/or compilers will
200 require that the Python executable was linked with the C++ linker
201 in order for everything to work correctly. If you build and
202 install Python yourself then this is easy to take care of,
203 otherwise you may have to mess with binary packages or bribe your
204 system administrator...
205
206 In my case on Solaris wxPython applications would core dump on
207 exit. The core file indicated that the fault happened after
f54a35fe
RD
208 _exit() was called and the run-time library was trying to execute
209 cleanup code. After relinking the Python executable the problem
210 went away. To build Python to link with the C++ linker do this:
c368d904
RD
211
212 cd Python-2.0 # wherever the root of the source tree is
213 rm python # in case it's still there from an old build
214 make LINKCC=g++ # or whatever your C++ command is
215 make install
216
3930382b
RD
217 I recently built Python 2.1.3 and Python 2.2.1 on Solaris and did
218 not have to resort to this workaround so apparently thigns are
219 getting better there. I will leave this note here though in case
220 there are similar issues elsewhere. However I did run into a
221 Python build issue that affects the wxPython build when attempting
222 to use SunCC instead of GNU gcc. See the note below titled
223 "Building with non-GNU compilers" if you are interested.
c368d904
RD
224
225C. Change to the root wxPython directory and look at the setup.py
226 file. This is the script that configures and defines all the
227 information that Distutils needs to build wxPython. There are some
228 options near the begining of the script that you may want or need
229 to change based on your system and what options you have selected
230 up to this point, (sources from tar.gz or from CVS, etc.) You can
231 either change these flags directly in setup.py or supply them on
232 the command-line.
233
234 BUILD_GLCANVAS Set to zero if you don't want to build the
235 Open GL canvas extension module. If you don't
236 have OpenGL or compatible libraries then you'll
237 need to set this to zero.
238
239 BUILD_OGL Set to zero if you don't want to build the
240 Object Graphics Library extension module.
241
242 BUILD_STC Set to zero if you don't want to build the
243 wxStyledTextCtrl (the Scintilla wrapper)
244 extension module.
245
246 USE_SWIG If you have edited any of the *.i files you
247 will need to set this flag to non-zero so SWIG
248 will be executed to regenerate the wrapper C++
249 and shadow python files.
250
251 IN_CVS_TREE If you are using the CVS version of the
252 wxWindows and wxPython sources then you will
253 need to set this flag to non-zero. This is
254 needed because some source files from the
255 wxWindows tree are copied to be under the
256 wxPython tree in order to keep Distutils happy.
257 With this flag set then setup.py will
258 automatically keep these copied sources up to
259 date if the original version is ever updated.
260 If you are using the tar.gz version of the
261 Python sources then these copied sources are
262 already present in your source tree.
263
264
265D. To build and install wxPython you simply need to execute the
266 setup.py script. If you have more than one version of Python
267 installed, be sure to execute setup.py with the version you want to
268 build wxPython for. Depending on the permissions on your
269 site-packages directory you may need to be root to run the install
270 command.
271
272 python setup.py build
273 python setup.py install
274
275E. At this point you should be able to change into the wxPython/demo
276 directory and run the demo:
277
278 python demo.py
279
280F. If you would like to make a test build that doesn't overwrite the
281 installed version of wxPython you can do so with this command
282 instead of the install command above:
283
284 python setup.py build_ext --inplace
285
286 This will build the wxPython package in the local wxPython
287 directory instead of installing it under your Python installation.
288 To run using this test version just add the base wxPython source
289 directory to the PYTHONPATH:
290
291 export PYTHONPATH=~/projects/wxWindows/wxPython
292 # or whatever is required for your shell
293 cd ~/projects/wxWindows/wxPython/demo
294 python demo.py
295
296
c368d904 297
3930382b
RD
2984. Building with non-GNU compilers
299----------------------------------
300
301As mentioned above Python's distutils uses whatever compiler Python
302was compiled with to compile extension modules. It also appears that
303distutils assumes that this compiler can compile C or C++ sources as
304distutils makes no differentiation between the two. For builds using
305GNU gcc and a few other compilers this is not an issue as they will
f1d193e7 306determine the type of source from the file extension. For SunCC (and
3930382b
RD
307probably other compilers that came from cfront) it won't work as the C
308compiler (cc) is totally separate from the C++ compiler (CC). This
309causes distutils to attempt to compile the wxPython sources with the C
310compiler, which won't work.
311
312There may be better ways to get around this, but here is the
313workaround I devised. I created a script that will execute either cc
314or CC based on the file extension given to it. If Python uses this
315script for its compiler then it will also be used by extensions built
316with distutils and everybody will be more or less happy. Here is a
317copy of the script I used. It was a fairly quick rush job so there
318are probably issues with it but it worked for me.
319
320 #!/bin/bash
321 #--------------------------------------------------------------
322 # Try to determine type of file being compiled and then
323 # launch cc for C sources or CC for C++.
324 #
325
326 args=$@
327 is_C=
328
329 for arg in $args; do
330
331 # is the arg a file that exists?
332 if [ -e $arg ]; then
333
334 # does it end in ".c"?
335 if [ "${arg:${#arg}-2}" == ".c" ]; then
336 is_C=yes
337 fi
338 fi
339 done
340
341 # if the flag wasn't set then assume C++ and execute CC,
342 # otherwise execute cc.
343 if [ -z $is_C ]; then
344 exec CC -w $@
345 else
346 exec cc -w $@
347 fi
348 #--------------------------------------------------------------
349
350I called it pycc, put it in ${prefix}/bin and set its execute
351permission bit.
352
353The next step is to configure and build Python such that it uses pycc
354as it's compiler. You can do that by setting CC in your environment
355before running configure, like this in bash:
356
5a6b32cc 357 export CC=pycc
3930382b
RD
358 configure
359
360After making and installing Python with this configuration you should
361be able to build wxPython as described in the steps above.
c368d904
RD
362
363-----------------
364robin@alldunn.com