| 1 | wxWidgets for Motif installation |
| 2 | -------------------------------- |
| 3 | |
| 4 | IMPORTANT NOTE: |
| 5 | |
| 6 | If you experience problems installing, please re-read these |
| 7 | instructions and other related files (todo.txt, bugs.txt and |
| 8 | osname.txt for your platform if it exists) carefully before |
| 9 | mailing wx-users or the author. Preferably, try to fix the |
| 10 | problem first and then send a patch to the author. |
| 11 | |
| 12 | When sending bug reports tell us what version of wxWidgets you are |
| 13 | using (including the beta) and what compiler on what system. One |
| 14 | example: wxMotif 2.8.1, gcc 2.95.4, Redhat 6.1 |
| 15 | |
| 16 | First steps |
| 17 | ----------- |
| 18 | |
| 19 | - Prerequisites: Motif 1.2 or above, or Lesstif. Motif 2.0 and |
| 20 | above may also be suitable. |
| 21 | |
| 22 | - Download wxX11-x.y.z.tgz, where x.y.z is the version number. |
| 23 | (wxMotif is included in the wxX11 distribution). |
| 24 | Download documentation in a preferred format, such as |
| 25 | wxWidgets-HTML.zip or wxWidgets-PDF.zip. |
| 26 | |
| 27 | - Make a directory such as ~/wx and unarchive the files into this |
| 28 | directory. |
| 29 | |
| 30 | - It is recommended that you install bison and flex; using yacc |
| 31 | and lex may require tweaking of the makefiles. You also need |
| 32 | libXpm (see comments in the Notes section below) if you want to have |
| 33 | XPM support in wxWidgets (recommended). |
| 34 | |
| 35 | - You can now use configure to build wxWidgets and the samples. |
| 36 | |
| 37 | Using configure is the only way to build the library. If it doesn't |
| 38 | work for you for whatever reason, please report it (together with detailed |
| 39 | information about your platform and the (relevant part of) contents of |
| 40 | config.log file) to wx-dev@lists.wxwidgets.org. |
| 41 | |
| 42 | |
| 43 | COMPILING USING CONFIGURE |
| 44 | ========================= |
| 45 | |
| 46 | * The simplest case |
| 47 | ------------------- |
| 48 | |
| 49 | If you compile wxWidgets on Linux for the first time and don't like to read |
| 50 | install instructions just do (in the base dir): |
| 51 | |
| 52 | > ./configure --with-motif |
| 53 | > make |
| 54 | > su <type root password> |
| 55 | > make install |
| 56 | > ldconfig |
| 57 | > exit |
| 58 | |
| 59 | Afterwards you can continue with |
| 60 | |
| 61 | > make |
| 62 | > su <type root password> |
| 63 | > make install |
| 64 | > ldconfig |
| 65 | > exit |
| 66 | |
| 67 | If you want to remove wxWidgets on Unix you can do this: |
| 68 | |
| 69 | > su <type root password> |
| 70 | > make uninstall |
| 71 | > ldconfig |
| 72 | > exit |
| 73 | |
| 74 | * The expert case |
| 75 | ----------------- |
| 76 | |
| 77 | If you want to do some more serious cross-platform programming with wxWidgets, |
| 78 | such as for GTK and Motif, you can now build two complete libraries and use |
| 79 | them concurrently. For this end, you have to create a directory for each build |
| 80 | of wxWidgets - you may also want to create different versions of wxWidgets |
| 81 | and test them concurrently. Most typically, this would be a version configured |
| 82 | with --enable-debug and one without. |
| 83 | |
| 84 | For building three versions (one GTK, one Motif and a debug version of the GTK |
| 85 | source) you'd do this: |
| 86 | |
| 87 | mkdir buildmotif |
| 88 | cd buildmotif |
| 89 | ../configure --with-motif |
| 90 | make |
| 91 | cd .. |
| 92 | |
| 93 | mkdir buildgtk |
| 94 | cd buildgtk |
| 95 | ../configure --with-gtk |
| 96 | make |
| 97 | cd .. |
| 98 | |
| 99 | mkdir buildgtkd |
| 100 | cd buildgtkd |
| 101 | ../configure --with-gtk --enable-debug |
| 102 | make |
| 103 | cd .. |
| 104 | |
| 105 | Note that since wxWidgets-2.6.0 you can install all those libraries |
| 106 | concurrently, you just need to pass the appropriate flags when using them. |
| 107 | |
| 108 | * The simplest errors |
| 109 | --------------------- |
| 110 | |
| 111 | You get errors during compilation: The reason is that you probably have a |
| 112 | broken compiler. GCC 2.8 and earlier versions and egcs are likely to cause |
| 113 | problems due to incomplete support for C++ and optimisation bugs. Best to use |
| 114 | GCC 2.95 or later. |
| 115 | |
| 116 | You get immediate segfault when starting any sample or application: This is |
| 117 | either due to having compiled the library with different flags or options than |
| 118 | your program - typically you might have the __WXDEBUG__ option set for the |
| 119 | library but not for your program - or due to using a compiler with optimisation |
| 120 | bugs. |
| 121 | |
| 122 | * The simplest program |
| 123 | ---------------------- |
| 124 | |
| 125 | Now create your super-application myfoo.app and compile anywhere with |
| 126 | |
| 127 | g++ myfoo.cpp `wx-config --libs --cxxflags` -o myfoo |
| 128 | |
| 129 | * General |
| 130 | --------- |
| 131 | |
| 132 | The Unix variants of wxWidgets use GNU configure. If you have problems with |
| 133 | your make use GNU make instead. |
| 134 | |
| 135 | If you have general problems with installation, see the wxWidgets website at |
| 136 | |
| 137 | http://www.wxwidgets.org/ |
| 138 | |
| 139 | for newest information. If you still don't have any success, please send a bug |
| 140 | report to one of our mailing lists (see my homepage) INCLUDING A DESCRIPTION OF |
| 141 | YOUR SYSTEM AND YOUR PROBLEM, SUCH AS YOUR VERSION OF MOTIF, WXMOTIF, WHAT |
| 142 | DISTRIBUTION YOU USE AND WHAT ERROR WAS REPORTED. I know this has no effect, |
| 143 | but I tried... |
| 144 | |
| 145 | * GUI libraries |
| 146 | --------------- |
| 147 | |
| 148 | wxWidgets/Motif requires the Motif library to be installed on your system. As |
| 149 | an alternative, you may also use the free library "lesstif" which implements |
| 150 | most of the Motif API without the licence restrictions of Motif. |
| 151 | |
| 152 | You can get the newest version of the Lesstif from the lesstif homepage at: |
| 153 | |
| 154 | http://www.lesstif.org/ |
| 155 | |
| 156 | * Additional libraries |
| 157 | ---------------------- |
| 158 | |
| 159 | wxWidgets/Motif requires a thread library and X libraries known to work with |
| 160 | threads. This is the case on all commercial Unix-Variants and all |
| 161 | Linux-Versions that are based on glibc 2 except RedHat 5.0 which is broken in |
| 162 | many aspects. As of writing this, virtually all Linux distributions have |
| 163 | correct glibc 2 support. |
| 164 | |
| 165 | You can disable thread support by running |
| 166 | |
| 167 | ./configure --disable-threads |
| 168 | make |
| 169 | su <type root password> |
| 170 | make install |
| 171 | ldconfig |
| 172 | exit |
| 173 | |
| 174 | * Building wxMotif on OS/2 |
| 175 | -------------------------- |
| 176 | |
| 177 | Please send comments and question about the OS/2 installation |
| 178 | to Stefan Neis <Stefan.Neis@t-online.de> and patches to |
| 179 | the wxWidgets mailing list. |
| 180 | |
| 181 | In the following list, the version numbers indicate the configuration that |
| 182 | was actually used by myself, newer version should cause no problems and |
| 183 | even older ones are expected to work most of the time. |
| 184 | |
| 185 | You'll need OS/2 Warp (4.51) or eCS(1.0), X-Free86/2 (3.3.6 or newer), |
| 186 | Lesstif (0.92.7 or newer), emx (0.9d fix 4), a Unix like shell (pdksh-5.2.14 |
| 187 | or ash), Autoconf (2.57), GNU file utilities (3.13), GNU text utilities (1.19), |
| 188 | GNU shell utilites (1.12), m4 (1.4), sed (2.05), grep (2.0), Awk (3.0.3), |
| 189 | GNU Make (3.75). |
| 190 | |
| 191 | Preferably, you should have Posix/2 installed and C(PLUS)_INCLUDE_PATH and |
| 192 | LIBRARY_PATH set up accordingly, however, wxGTK will even work without it. |
| 193 | Presence of Posix/2 will be auto-detected. |
| 194 | |
| 195 | Open an OS/2 prompt and switch to the directory above. |
| 196 | Set MAKESHELL or MAKE_SHELL (which one is needed depends on the version of |
| 197 | make) to a Unix like shell, e.g. |
| 198 | SET MAKESHELL=ash |
| 199 | If you have a really deficient version of GNU make, it might even be |
| 200 | necessary to set SHELL or even COMSPEC to a unix like shell as well. |
| 201 | Depending on your installation you might want to also set INSTALL, for me |
| 202 | it tends to try to use the system's tcpip\pcomos\install.exe which causes |
| 203 | problems, e.g. |
| 204 | SET INSTALL=<path_to_src_directory>/install-sh -c |
| 205 | |
| 206 | Notice that the delivered configure scripts are fully OS/2 aware, so you |
| 207 | can simply run |
| 208 | ash -c "configure --with-motif" |
| 209 | and make and possibly make install as described above. |
| 210 | |
| 211 | To verify Lesstif installation, configure will try to compile a |
| 212 | sample program that requires X headers/libraries to be either |
| 213 | available via C_INCLUDE_PATH and LIBRARY_PATH or you need to |
| 214 | explicitly set CFLAGS prior to running configure. |
| 215 | |
| 216 | * Building wxMotif on SGI |
| 217 | ------------------------- |
| 218 | |
| 219 | Using the SGI native compilers, it is recommended that you |
| 220 | also set CFLAGS and CXXFLAGS before running configure. These |
| 221 | should be set to : |
| 222 | |
| 223 | CFLAGS="-mips3 -n32" |
| 224 | CXXFLAGS="-mips3 -n32" |
| 225 | |
| 226 | This is essential if you want to use the resultant binaries |
| 227 | on any other machine than the one it was compiled on. If you |
| 228 | have a 64bit machine (Octane) you should also do this to ensure |
| 229 | you don't accidently build the libraries as 64bit (which is |
| 230 | untested). |
| 231 | |
| 232 | The SGI native compiler support has only been tested on Irix 6.5. |
| 233 | |
| 234 | * Building wxMotif on Cygwin |
| 235 | ---------------------------- |
| 236 | |
| 237 | The normal build instructions should work fine on Cygwin. The one difference |
| 238 | with Cygwin is that when using the "--enable-shared" configure option (which |
| 239 | is the default) the API is exported explicitly using __declspec(dllexport) |
| 240 | rather than all global symbols being available. |
| 241 | |
| 242 | This shouldn't make a difference using the library and should be a little |
| 243 | more efficient. However if an export attribute has been missed somewhere you |
| 244 | will see linking errors. If this happens then you can work around the |
| 245 | problem by setting LDFLAGS=-Wl,--export-all-symbols. Please also let us know |
| 246 | about it on the wx-dev mailing list. |
| 247 | |
| 248 | * Create your configuration |
| 249 | --------------------------- |
| 250 | |
| 251 | Usage: |
| 252 | ./configure [options] |
| 253 | |
| 254 | If you want to use system's C and C++ compiler, |
| 255 | set environment variables CXX and CC as |
| 256 | |
| 257 | % setenv CC cc |
| 258 | % setenv CXX CC |
| 259 | % ./configure options |
| 260 | |
| 261 | to see all the options please use: |
| 262 | |
| 263 | ./configure --help |
| 264 | |
| 265 | The basic philosophy is that if you want to use different |
| 266 | configurations, like a debug and a release version, |
| 267 | or use the same source tree on different systems, |
| 268 | you have only to change the environment variable OSTYPE. |
| 269 | (Sadly this variable is not set by default on some systems |
| 270 | in some shells - on SGI's for example). So you will have to |
| 271 | set it there. This variable HAS to be set before starting |
| 272 | configure, so that it knows which system it tries to |
| 273 | configure for. |
| 274 | |
| 275 | Configure will complain if the system variable OSTYPE has |
| 276 | not been defined. And Make in some circumstances as well... |
| 277 | |
| 278 | |
| 279 | * General options |
| 280 | ------------------- |
| 281 | |
| 282 | Given below are the commands to change the default behaviour, |
| 283 | i.e. if it says "--disable-threads" it means that threads |
| 284 | are enabled by default. |
| 285 | |
| 286 | Many of the configure options have been thoroughly tested |
| 287 | in wxWidgets snapshot 6, but not yet all (ODBC not). |
| 288 | |
| 289 | You have to add --with-motif on platforms, where Motif is |
| 290 | not the default (on Linux, configure will default to GTK). |
| 291 | |
| 292 | --with-motif Use either Motif or Lesstif |
| 293 | Configure will look for both. |
| 294 | |
| 295 | The following options handle the kind of library you want to build. |
| 296 | |
| 297 | --disable-threads Compile without thread support. Threads |
| 298 | support is also required for the |
| 299 | socket code to work. |
| 300 | |
| 301 | --disable-shared Do not create shared libraries. |
| 302 | |
| 303 | --enable-monolithic Build wxWidgets as single library instead |
| 304 | of as several smaller libraries (which is |
| 305 | the default since wxWidgets 2.5.0). |
| 306 | |
| 307 | --disable-optimise Do not optimise the code. Can |
| 308 | sometimes be useful for debugging |
| 309 | and is required on some architectures |
| 310 | such as Sun with gcc 2.8.X which |
| 311 | would otherwise produce segvs. |
| 312 | |
| 313 | --enable-profile Add profiling info to the object |
| 314 | files. Currently broken, I think. |
| 315 | |
| 316 | --enable-no_rtti Enable compilation without creation of |
| 317 | C++ RTTI information in object files. |
| 318 | This will speed-up compilation and reduce |
| 319 | binary size. |
| 320 | |
| 321 | --enable-no_exceptions Enable compilation without creation of |
| 322 | C++ exception information in object files. |
| 323 | This will speed-up compilation and reduce |
| 324 | binary size. Also fewer crashes during the |
| 325 | actual compilation... |
| 326 | |
| 327 | --enable-no_deps Enable compilation without creation of |
| 328 | dependency information. |
| 329 | |
| 330 | --enable-permissive Enable compilation without checking for strict |
| 331 | ANSI conformance. Useful to prevent the build |
| 332 | dying with errors as soon as you compile with |
| 333 | Solaris' ANSI-defying headers. |
| 334 | |
| 335 | --enable-mem_tracing Add built-in memory tracing. |
| 336 | |
| 337 | --enable-dmalloc Use the dmalloc memory debugger. |
| 338 | Read more at www.letters.com/dmalloc/ |
| 339 | |
| 340 | --enable-debug Equivalent to --enable-debug_info plus |
| 341 | --enable-debug-flag. |
| 342 | |
| 343 | --enable-debug_info Add debug info to object files and |
| 344 | executables for use with debuggers |
| 345 | such as gdb (or its many frontends). |
| 346 | |
| 347 | --enable-debug_flag Define __DEBUG__ and __WXDEBUG__ when |
| 348 | compiling. This enable wxWidgets' very |
| 349 | useful internal debugging tricks (such |
| 350 | as automatically reporting illegal calls) |
| 351 | to work. Note that program and library |
| 352 | must be compiled with the same debug |
| 353 | options. |
| 354 | |
| 355 | * Feature Options |
| 356 | ----------------- |
| 357 | |
| 358 | Many of the configure options have been thoroughly tested |
| 359 | in wxWidgets snapshot 6, but not yet all (ODBC not). |
| 360 | |
| 361 | When producing an executable that is linked statically with wxGTK |
| 362 | you'll be surprised at its immense size. This can sometimes be |
| 363 | drastically reduced by removing features from wxWidgets that |
| 364 | are not used in your program. The most relevant such features |
| 365 | are |
| 366 | |
| 367 | --without-libpng Disables PNG image format code. |
| 368 | |
| 369 | --without-libjpeg Disables JPEG image format code. |
| 370 | |
| 371 | --without-odbc Disables ODBC code. |
| 372 | |
| 373 | --without-libtiff Disables TIFF image format code. |
| 374 | |
| 375 | --without-expat Disable XML classes based on Expat parser. |
| 376 | |
| 377 | --disable-threads Disables threads. Will also |
| 378 | disable sockets. |
| 379 | |
| 380 | --disable-sockets Disables sockets. |
| 381 | |
| 382 | --disable-dnd Disables Drag'n'Drop. |
| 383 | |
| 384 | --disable-clipboard Disables Clipboard. |
| 385 | |
| 386 | --disable-streams Disables the wxStream classes. |
| 387 | |
| 388 | --disable-file Disables the wxFile class. |
| 389 | |
| 390 | --disable-textfile Disables the wxTextFile class. |
| 391 | |
| 392 | --disable-intl Disables the internationalisation. |
| 393 | |
| 394 | --disable-validators Disables validators. |
| 395 | |
| 396 | --disable-accel Disables accel. |
| 397 | |
| 398 | Apart from disabling certain features you can very often "strip" |
| 399 | the program of its debugging information resulting in a significant |
| 400 | reduction in size. |
| 401 | |
| 402 | Please see the output of "./configure --help" for comprehensive list |
| 403 | of all configurable options. |
| 404 | |
| 405 | |
| 406 | * Compiling |
| 407 | ----------- |
| 408 | |
| 409 | The following must be done in the base directory (e.g. ~/wxMotif |
| 410 | or ~/wxWin or whatever) |
| 411 | |
| 412 | Now the makefiles are created (by configure) and you can compile |
| 413 | the library by typing: |
| 414 | |
| 415 | make |
| 416 | |
| 417 | make yourself some coffee, as it will take some time. On an old |
| 418 | Pentium 200 around 40 minutes. During compilation, you may get a few |
| 419 | warning messages depending in your compiler. |
| 420 | |
| 421 | If you want to be more selective, you can change into a specific |
| 422 | directory and type "make" there. |
| 423 | |
| 424 | Then you may install the library and its header files under |
| 425 | /usr/local/include/wx and /usr/local/lib respectively. You |
| 426 | have to log in as root (i.e. run "su" and enter the root |
| 427 | password) and type |
| 428 | |
| 429 | make install |
| 430 | |
| 431 | You can remove any traces of wxWidgets by typing |
| 432 | |
| 433 | make uninstall |
| 434 | |
| 435 | If you want to save disk space by removing unnecessary |
| 436 | object-files: |
| 437 | |
| 438 | make clean |
| 439 | |
| 440 | in the various directories will do the work for you. |
| 441 | |
| 442 | * Creating a new Project |
| 443 | ------------------------ |
| 444 | |
| 445 | 1) The first way uses the installed libraries and header files |
| 446 | automatically using wx-config |
| 447 | |
| 448 | g++ myfoo.cpp `wx-config --libs` `wx-config --cxxflags` -o myfoo |
| 449 | |
| 450 | Using this way, a make file for the minimal sample would look |
| 451 | like this |
| 452 | |
| 453 | CXX = g++ |
| 454 | |
| 455 | minimal: minimal.o |
| 456 | $(CXX) -o minimal minimal.o `wx-config --libs` |
| 457 | |
| 458 | minimal.o: minimal.cpp |
| 459 | $(CXX) `wx-config --cxxflags` -c minimal.cpp -o minimal.o |
| 460 | |
| 461 | clean: |
| 462 | rm -f *.o minimal |
| 463 | |
| 464 | If your application uses only some of wxWidgets libraries, you can |
| 465 | specify required libraries when running wx-config. For example, |
| 466 | `wx-config --libs=html,core` will only output link command to link |
| 467 | with libraries required by core GUI classes and wxHTML classes. See |
| 468 | the manual for more information on the libraries. |
| 469 | |
| 470 | 2) The other way creates a project within the source code |
| 471 | directories of wxWidgets. For this endeavour, you'll need |
| 472 | GNU autoconf version 2.14 and add an entry to your Makefile.in |
| 473 | to the bottom of the configure.in script and run autoconf |
| 474 | and configure before you can type make. |
| 475 | |
| 476 | * Further notes by Julian Smart |
| 477 | --------------------------------- |
| 478 | |
| 479 | - You may find the following script useful for compiling wxMotif, |
| 480 | especially if installing from zips (which don't preserve file |
| 481 | permissions). Make this script executable with the command |
| 482 | chmod a+x makewxmotif. |
| 483 | |
| 484 | -------:x-----Cut here-----:x----- |
| 485 | # makewxmotif |
| 486 | # Sets permissions (in case we extracted wxMotif from zip files) |
| 487 | # and makes wxMotif. |
| 488 | # Call from top-level wxWidgets directory. |
| 489 | # Note that this uses standard (but commonly-used) configure options; |
| 490 | # if you're feeling brave, you may wish to compile with threads: |
| 491 | # if they're not supported by the target platform, they will be disabled |
| 492 | # anyhow |
| 493 | # -- Julian Smart |
| 494 | chmod a+x configure config.sub config.guess |
| 495 | ./configure --with-shared --with-motif --with-debug_flag --with-debug_info --enable-debug --without-threads --without-sockets --without-odbc |
| 496 | make |
| 497 | -------:x-----Cut here-----:x----- |
| 498 | |
| 499 | This script will build wxMotif using shared libraries. If you want to build |
| 500 | a static wxWidgets library, use --disable-shared. |
| 501 | |
| 502 | Troubleshooting |
| 503 | --------------- |
| 504 | |
| 505 | - Solaris compilation with gcc: if the compiler has problems with the variable |
| 506 | argument functions, try putting the gcc fixinclude file paths early in the |
| 507 | include path. |
| 508 | |
| 509 | - If you operator-related compile errors or strange memory problems |
| 510 | (for example in deletion of string arrays), set wxUSE_GLOBAL_MEMORY_OPERATORS |
| 511 | and wxUSE_MEMORY_TRACING to 0 in setup.h, and recompile. |
| 512 | |
| 513 | - If you get an internal compiler error in gcc, turn off optimisations. |
| 514 | |
| 515 | - Problems with XtDestroyWidget crashing in ~wxWindow have been |
| 516 | reported on SGI IRIX 6.4. This has not yet been resolved, so |
| 517 | any advice here would be very welcome. See bugs.txt for a |
| 518 | possible temporary workaround (comment out the final |
| 519 | XtDestroyWidget from ~wxWindow in window.cpp). |
| 520 | |
| 521 | - Some compilers, such as Sun C++, may give a lot of warnings about |
| 522 | virtual functions being hidden. Please ignore these, it's correct C++ syntax. |
| 523 | If you find any incorrect instances, though, such as a |
| 524 | missing 'const' in an overridden function, please let us know. |
| 525 | |
| 526 | Other Notes |
| 527 | ----------- |
| 528 | |
| 529 | - Using configure will create a release build of the library by |
| 530 | default: it's recommended to use --enable-debug configure switch |
| 531 | while developing your application. To compile in non-debug mode, use |
| 532 | --disable-debug configure switch. |
| 533 | |
| 534 | Bug reports |
| 535 | ----------- |
| 536 | |
| 537 | Please send bug reports with a description of your environment, |
| 538 | compiler and the error message(s) to the wxwin-developers mailing list at: |
| 539 | |
| 540 | wx-dev@lists.wxwidgets.org |
| 541 | |
| 542 | Julian Smart, Robert Roebling and Vadim Zeitlin, November 1999. |
| 543 | |