Augmented version to b5
[wxWidgets.git] / docs / gtk / install.txt
1 * The most simple case
2 -----------------------
3
4 If you compile wxWindows on Unix for the first time and don't 
5 like to read install instructions just do (in the base dir):
6
7 ./configure
8 make
9 su <type root password>
10 make install
11 ldconfig
12 exit
13
14
15 * The most simple errors
16 ------------------------
17
18 configure reports, that you don't have GTK 1.X installed
19 although you are certainly sure you have. Well, you have
20 installed it, but you also have another version of the
21 GTK installed, which you may need to removed including
22 other versions of glib (and its headers).
23
24 You get errors during compilation. The reason is that you
25 probably have a broken compiler, which includes almost
26 everything that is called gcc. If there is just any way
27 for you to use egcs, use egcs. We are sorry, but we cannot
28 fix gcc.
29
30 * The most simple program
31 -------------------------
32
33 Now create your super-application myfoo.app and compile anywhere 
34 with
35
36 g++ myfoo.cpp `wx-config --libs` `wx-config --cflags` -o myfoo
37
38 * General
39 -----------------------
40
41 The Unix variants of wxWindows use GNU configure. If you have 
42 problems with your make use GNU make instead.
43
44 If you have general problems with installation, read my 
45 homepage at 
46
47   http://wesley.informatik.uni-freiburg.de/~wxxt
48   
49 for newest information. If you still don't have any success,
50 please send a bug report to one of our mailing lists (see
51 my homepage) INCLUDING A DESCRIPTION OF YOUR SYSTEM AND 
52 YOUR PROBLEM, SUCH AS YOUR VERSION OF GTK, WXGTK, WHAT
53 DISTRIBUTION YOU USE AND WHAT ERROR WAS REPORTED. I know 
54 this has no effect, but I tried...
55
56 * GUI libraries
57 -----------------------
58
59 wxWindows/GTK requires the GTK+ library to be installed on your system.
60 It has to be a stable version, preferebly version 1.2.3. You can use
61 GTK 1.0.X in connection with wxWindows, but we don't support Drag'n'Drop
62 for GTK 1.0.X so you have to "configure --without-dnd". wxWindows does 
63 NOT work with the 1.1.X versions of the GTK+ library.
64
65 You can get the newest version of the GTK+ from the GTK homepage
66 at
67   http://www.gtk.org
68   
69 We also mirror GTK+ 1.2.1 at my ftp site soon. You'll find information
70 about downloading at my homepage.
71   
72 * Additional libraries
73 -----------------------
74
75 wxWindows/Gtk requires a thread library and X libraries
76 known to work with threads. This is the case on all
77 commercial Unix-Variants and all Linux-Versions that
78 are based on glibc 2 except RedHat 5.0 which is broken
79 in many aspects. As of writing this, these Linux 
80 distributions have correct glibc 2 support:
81
82  - RedHat 5.1
83  - Debian 2.0
84  - Stampede
85  - DLD 6.0
86  - SuSE 6.0
87  
88 You can enable thread support by running 
89
90 ./configure "--with-threads"
91 make clean
92 make
93 su <type root password>
94 make install
95 ldconfig
96 exit
97   
98 NB: DO NOT COMPILE WXGTK WITH GCC AND THREADS, SINCE
99 ALL PROGRAMS WILL CRASH UPON START-UP! Just always
100 use egcs and be happy.
101
102 * Create your configuration
103 -----------------------------
104
105 Usage:
106         ./configure options
107
108 If you want to use system's C and C++ compiler,
109 set environment variables CC and CCC as
110
111         % setenv CC cc
112         % setenv CCC CC
113         % ./configure options
114
115 Using the SGI native compilers, it is recommended that you
116 also set CFLAGS and CXXFLAGS before running configure. These 
117 should be set to :
118
119 CFLAGS="-mips3 -n32" 
120 CXXFLAGS="-mips3 -n32"
121
122 This is essential if you want to use the resultant binaries 
123 on any other machine than the one it was compiled on. If you 
124 have a 64bit machine (Octane) you should also do this to ensure 
125 you don't accidently build the libraries as 64bit (which is 
126 untested).
127
128 The SGI native compiler support has only been tested on Irix 6.5.
129
130 to see all the options please use:
131
132         ./configure --help
133
134 The basic philosophy is that if you want to use different
135 configurations, like a debug and a release version, 
136 or use the same source tree on different systems,
137 you have only to change the environment variable OSTYPE.
138 (Sadly this variable is not set by default on some systems
139 in some shells - on SGI's for example). So you will have to 
140 set it there. This variable HAS to be set before starting 
141 configure, so that it knows which system it tries to 
142 configure for.
143
144 Configure will complain if the system variable OSTYPE has 
145 not been defined. And Make in some circumstances as well...
146
147
148 * General options
149 -------------------
150
151 Normally, you won't have to choose a toolkit, because when
152 you download wxGTK, it will default to --with-gtk etc. But
153 if you use all of our CVS repository you have to choose a 
154 toolkit. You must do this by running configure with either of:
155
156         --with-gtk               Use the GIMP ToolKit (GTK)
157         
158         --with-motif             Use either Motif or Lesstif
159                                  Configure will look for both. 
160
161 The following options handle the kind of library you want to build.
162
163         --with-threads          Compile with thread support. Threads
164                                 support is also required for the
165                                 socket code to work.
166
167         --without-shared        Do not create shared libraries.
168
169         --without-optimise      Do not optimise the code. Can
170                                 sometimes be useful for debugging
171                                 and is required on some architectures
172                                 such as Sun with gcc 2.8.X which
173                                 would otherwise produce segvs.
174
175         --with-profile          Add profiling info to the object 
176                                 files. Currently broken, I think.
177                                 
178         --with-mem_tracing      Add built-in memory tracing. 
179                                 
180         --with-dmalloc          Use the dmalloc memory debugger.
181                                 Read more at www.letters.com/dmalloc/
182                                 
183         --with-debug_info       Add debug info to object files and
184                                 executables for use with debuggers
185                                 such as gdb (or its many frontends).
186
187         --with-debug_flag       Define __DEBUG__ and __WXDEBUG__ when
188                                 compiling. This enable wxWindows' very
189                                 useful internal debugging tricks (such
190                                 as automatically reporting illegal calls)
191                                 to work. Note that program and library
192                                 must be compiled with the same debug 
193                                 options.
194
195 * Feature Options
196 -------------------
197
198 When producing an executable that is linked statically with wxGTK
199 you'll be surprised at its immense size. This can sometimes be
200 drastically reduced by removing features from wxWindows that 
201 are not used in your program. The most relevant such features
202 are
203
204         --without-libpng        Disables PNG image format code.
205         
206         --without-libjpeg       Disables JPEG image format code.
207         
208         --without-odbc          Disables ODBC code.
209         
210         --without-wxresources   Disables the use of *.wxr type
211                                 resources.
212                 
213         --without-threads       Disables threads. Will also
214                                 disable sockets.
215
216         --without-sockets       Disables sockets.
217
218         --without-dnd           Disables Drag'n'Drop.
219         
220         --without-clipboard     Disables Clipboard.
221         
222         --without-serial        Disables object instance serialiasation.
223         
224         --without-streams       Disables the wxStream classes.
225         
226 Apart from disabling certain features you can very often "strip"
227 the program of its debugging information resulting in a significant
228 reduction in size.
229
230 * Compiling
231 -------------
232
233 The following must be done in the base directory (e.g. ~/wxGTK
234 or ~/wxWin or whatever)
235
236 Now the makefiles are created (by configure) and you can compile 
237 the library by typing:
238
239         make
240
241 make yourself some coffee, as it will take some time. On an old
242 386SX possibly week. During compilation, you'll get a few 
243 warning messages depending in your compiler.
244
245 if you want to be more selective:
246
247         make            will build only the base libraries
248         make samples    will build the samples
249         make user       will build everything in user
250
251 Then you may install the library and it's header files under
252 /usr/local/include/wx and /usr/local/lib respectively. You
253 have to log in as root (i.e. run "su" and enter the root
254 password) and type
255
256         make install    
257         
258 Depending on the configuration of some files, the libraries
259 and binaries will be placed in different directories.
260 The "global" binaries and libraries will be placed in:
261
262         bin/$(OSTYPE) and
263         lib/$(OSTYPE) respectively
264
265 "local" binaries and libraries will be placed in:
266
267         (basedir of that application)/$(OSTYPE).
268
269 This is also the place where all the object-files will go.
270 (Currently there arent any global binaries).
271
272 If you want to save disk space by removing unnecessary
273 object-files:
274
275          make clean
276
277 in the various directories will do the work for you.
278
279 * Creating a new Project
280 --------------------------
281
282 There are two ways to create your own project:
283
284 1) The first way uses the installed libraries and header files
285 automatically using wx-config
286
287 g++ myfoo.cpp `wx-config --libs` `wx-config --cflags` -o myfoo
288
289 Using this way, a make file for the minimal sample would look
290 like this
291
292 CC = g++
293
294 minimal: minimal.o
295     $(CC) -o minimal minimal.o `wx-config --libs` 
296
297 minimal.o: minimal.cpp mondrian.xpm
298     $(CC) `wx-config --cflags` -c minimal.cpp -o minimal.o
299
300 clean: 
301         rm -f *.o minimal
302
303 This is certain to become the standard way unless we decide
304 to sitch to tmake.
305
306 2) The other way creates a project within the source code 
307 directories of wxWindows: In this case I propose to put 
308 all contributed programs in the directory "/user", with a 
309 directory of its own.
310
311 This directory then should include the following files:
312
313 Makefile        (You can copy this one from any application in samples
314                  probably you will not need to edit this one. There is
315                  only one case where you might be interested in changing
316                  this file, but about that see later.)
317 Makefile.in     (This is the base application-Makefile template, from
318                  which the actual Makefile for each system is created.
319                  More about this later)
320
321 put ALL your source code along with all the other stuff you need for
322 your application in this directory (subdirectories are welcome).
323
324
325 ** Something about Makefiles
326 ------------------------------
327
328 On general principle it should only contain ONE line, which is as follows:
329
330         include ../../setup/general/makeapp
331
332 this will include all the necessary definitions for creating the applications
333
334 the only case where you might want to add another line is the following:
335 this version of configure also supports creation of source archives of the
336 application for easy distribution and updates to newer version of wxWindows.
337     For this purpose all files in the application-directory will be put into
338 a gziped tar-file in the full notation user/<your application>/*
339 if you want to include some other files that you want "more visible", like
340 a README.<yourApp> or a shell script for easy 
341 compilation/installation/distribution, then you have to add a variable
342
343         DISTRIBUTE_ADDITIONAL=<your files>
344
345 to the Makefile.
346 So it would look like this:
347
348         DISTRIBUTE_ADDITIONAL=README.TheApp
349         include ../../setup/general/makeapp
350
351 As we have already talked about distribution the command to create a 
352 distribution is:
353
354         make distrib
355
356 NOTE: If you are in the base directory of wxWindows it will create 
357 distribution packages for wxWindows as well as for all packages in the
358 user directory.
359     So if you want to create only packages for the files in user,
360 then go to the directory other and type:
361
362         make distrib
363
364 or if you only want one application to be created then
365 enter the specific directory and type there:
366 make distrib
367
368 All the distribution files will be put in the directory
369 distrib at the base of the wxWindows-tree (where also configure
370 and template.mak can be found).
371
372 ** Something about Makefile.in
373 --------------------------------
374
375 As you have already seen with Makefile, configure makes a lot of use
376 if the include statement in make to keep the Makefiles as simple as 
377 possible.
378
379 So basically there are only variables to define and then a include command.
380 Exception to this rule is if you have special rules for some stuff...
381 These rules should go AFTER the include statement!!!
382
383 so the general header looks like this:
384
385         # wxWindows base directory
386         WXBASEDIR=@WXBASEDIR@
387         # set the OS type for compilation
388         OS=@OS@
389         # compile a library only
390         RULE=bin
391
392 and the general footer will look like this:
393
394         # include the definitions now
395         include ../../../template.mak
396
397 the key variable is RULE, which defines what make should create
398 in this directory.
399
400 here are some examples:
401
402   RULE    description              
403   ===========================================================================
404   bin     creates a local binary (for a global binary prefix bin with g)
405           additional variables needed:
406                 BIN_TARGET      this gives the name of your application
407                 BIN_OBJ         this gives the object files needed to
408                                 link the application
409           optional variables are:
410                 BIN_SRC         this gives the list of c/c++ files for
411                                 which dependencies will be checked.
412                                 (This can be achieved with: make depend)
413                 BIN_LINK        this gives commands for additional
414                                 libraries needed to link the application
415   ---------------------------------------------------------------------------
416   bin2    creates two local binaries (for global binaries prefix bin2 with g)
417           in addition to the variables specified above you MUST also
418           provide the same variables with BIN2_ instead of BIN_
419   ---------------------------------------------------------------------------
420   lib     creates a local library (for a global binary prefix bin with g)
421           additional variables needed:
422                 LIB_TARGET      this gives the name of your library
423                 LIB_OBJ         this gives the object files needed for
424                                 the library to be build.
425           optional variables are:
426                 LIB_SRC         this gives the list of c/c++ files for
427                                 which dependencies will be checked.
428           libbin and libgbin are also possible and will need in addition
429           the variables from bin
430   ---------------------------------------------------------------------------
431   gslib   is similar to lib, but it creates a shared library if the system
432           supports it.
433           additional variables needed:
434                 LIB_MAJOR       major number of the shared library
435                 LIB_MINOR       minor number of the shared library
436   ---------------------------------------------------------------------------
437   other additional variables:
438
439           ADD_COMPILE      define additional includes/defines that
440                            are needed to compile the object files
441                            (if you need to reference some directory
442                            utils - like wxGrid -, then please 
443                            reference them with the variables defined
444                            in template.mak - e.g.: $(SRCDIR),$(UTILS),
445                            $(SAMPLES),$(OTHERS))
446
447           NEEDED_DEFINES   lists all the defines that HAVE to be set in
448                            /include/wx/setup.h to compile correctly.
449
450           SRC_DIR          lists all directories that are needed to
451                            compile. (i.e: lists all the directories,
452                            where there are source-files.) But it is 
453                            also needed to clean an object and for 
454                            machines, for which make does not support 
455                            VPATH
456
457 currently there are the following compiling rules provided:
458 object files are created for the following file extensions:
459 .c .cc .cpp
460
461 Please have a closer look at the Makefiles in this distribution.
462
463 * Platforms configure is working with
464 ---------------------------------------
465
466 Please report build succes on any machine. Especially non-
467 Linux operating systems (which I don't have).
468
469 Original author of the autoconf system for wxxt-1.66 and for this INSTALL
470 file:
471
472         Martin Sperl    sperl@dsn.ast.univie.ac.at
473         
474 Ported to wxGTK 0.1:
475
476         Wolfram Gloger  wmglo@dent.med.uni-muenchen.de
477
478 Thanks alot to both of them.
479
480 In the hope that it will be useful,
481
482         Robert Roebling roebling@sun2.ruf.uni-freiburg.de
483         
484