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