source: trunk/README.OS2@ 1040

Last change on this file since 1040 was 1040, checked in by Dmitry A. Kuminov, 14 years ago

OS/2: Updated xsystray install steps in README.OS2.

File size: 32.9 KB
Line 
1This is Qt version 4.6.3 for OS/2 and eCS.
2
3This document contains a brief information on the OS/2 version of the Qt
4library. Please read it carefully before starting your work. You may also
5visit the project page at
6
7 http://svn.netlabs.org/qt4/wiki
8
9to get more information and the latest news and also to report bugs.
10
11To get a brief list of OS/2-specific changes from release to release
12please see the CHANGES.OS2 file included in this distribution.
13
14Please note that this version is binary incompatible with previous versions of
15Qt 4 for OS/2! This is not a behavior of the original Qt library (where versions
16with the same major number are usually binary compatible), but it is due to the
17fact that we continue to add missing features to the OS/2 version ot Qt and this
18cannot be done witout breaking the binary compatibility. On practice, this means
19that you need to recompile your applications with the new version of the Qt
20library in order to make them work with it.
21
22
23
24REQUIREMENTS
25
26In order to compile the Qt library and Qt-based applications, you will need
27the following tools:
28
29 - One of the OS/2 Warp 4, OS/2 Warp 4.5 or eComStation operating systems.
30
31 - GCC compiler version 4.4.2 for OS/2, patched OpenWatcom linker and
32 GNU Make 3.81beta1 or above. The GCC compiler must be set up to use the
33 OpenWatcom linker for linking.
34
35 If you do not have a working GCC environment with the above requirements, it
36 is recommended to download a ready-to-use GCC 4.2.2 distribution from here:
37
38 ftp://ftp.netlabs.org/pub/qt4/gcc-4_4_2-complete-20091205.zip
39
40 This distribution includes all tools necessary to compile and build the Qt
41 library from the source code. Just follow the installation instructions
42 contained in the README file inside this ZIP archive to set up the GCC
43 environment.
44
45 Please note that starting from Qt 4.6.2, support for GCC 3.3.5 and earlier
46 versions of the compiler has been dropped and the Qt library will most
47 likely not build if you use one of these compilers. Later versions prior to
48 GCC 4.4.2 may work but they are not tested and not supported.
49
50 - IBM RC (Resource Compiler) Version 5.00.007 (comes with OS/2 Toolkit 4.5)
51 or Version 4.00.011 (comes with eCS 2.0). Other versions may not work
52 correctly.
53
54There is also a set of optional tools which are necessary to enable the selected
55features of the Qt library. If these tools are missing, the Qt configuration
56script (discussed in section "COMPILING QT" below) will automatically disable
57the corresponding feature:
58
59 - Perl 5.8.2 or above. This is required if you want to perform a shadow build
60 of the Qt library (which is a recommended way to go). Please refer to
61 section "COMPILING QT" for more information about shadow builds. Recent
62 builds of Perl for OS/2 are available here:
63
64 http://os2ports.smedley.info/index.php?page=perl
65
66 - MAPSYM 4.00.000 (Oct 4 2001) to enable generation of symbol (.SYM) files for
67 DLLs and executables. This tool comes with OS/2 Toolkit 4.5. Note that other
68 versions of this tool may not work correctly.
69
70 - LxLite 1.3.3 or above (not tested) to enable the compression of DLLs and
71 executables (which saves hard disk space and application startup time). If
72 you use a recent version of eComStation (e.g. 2.0 rc6) you will already have
73 LxLite installed. Otherwise, you may take it from here:
74
75 http://www.os2site.com/sw/util/archiver/lxlt133.zip
76
77 - CUPS 1.3.11 or later to support printing in Qt. The CUPS libraries are
78 available at:
79
80 http://download.smedley.info/cups-1.3.11-os2-20090807.zip
81
82 Linking against eCUPS also requires pthread.lib:
83
84 http://web.os2power.com/download/lib/pthread-20100217-os2.zip
85
86 - OpenSSL 0.9.8o or later to support OpenSSL in Qt. The OpenSSL libraries are
87 available at:
88
89 http://bauxite.sakura.ne.jp/tmp/os2/openssl-1.0.0a-os2knix-20100706-runtime.zip
90 http://bauxite.sakura.ne.jp/tmp/os2/openssl-1.0.0a-os2knix-20100706-dev.zip
91
92 - MySQL 5.1 or later for the MySQL Qt plugin. The MySQL libraries are
93 available at:
94
95 http://download.smedley.info/mysql-5.1.51-os2-20101001.zip
96
97 Note that you will also need the above OpenSSL libraries and pthread.lib to
98 be able to use this MySQL build. The MySQL Qt plugin itself will require
99 OpenSSL DLLs in your LIBPATH at runtime.
100
101 - PostgersSQL 9.0.1 or later to support the PostgresSQL Qt plugin. The
102 PostgresSQL libraries are available at:
103
104 http://download.smedley.info/postgresql-9.0.1-os2-20101108.zip
105
106 Note that you will also need libc064x.dll for this PostgresSQL build:
107
108 http://download.smedley.info/libc064x.zip
109
110 Note that you will also need the above OpenSSL libraries and pthread.lib to
111 be able to use this PostgresSQL build. The PostgresSQL Qt plugin itself will
112 require OpenSSL DLLs in your LIBPATH at runtime.
113
114
115
116SETTING UP THE ENVIRONMENT
117
118First of all, make sure that your GCC environment is set up and meets the
119specified requirements. To perform a quick check, you may run the following
120command:
121
122 gcc --version && make --version && wl /version
123
124If the setup is done properly, it will print the versions of the key tools
125to the console.
126
127The next step is to set up the Qt environment. If you installed the Qt
128development libraries from the WPI archive (refer to section "USING OFFICIAL
129BINARY QT ARCHIVES" below for more details about existing WPI archives), you
130will only need to run the supplied "QtEnv.cmd" script which will do all the
131setup job for you. The script is located in the directory where you installed
132the developmnent libraries (or in the WPS folder created by the WPI installer).
133Execute this script in a command line session to make it ready for building
134Qt 4 applications (for example, using the "qmake" command follwed by "make"
135for applications based on qmake project files which most of them are). If you
136go that way, you may skip the rest of this section and proceed directly to
137section "USING OFFICIAL BINARY QT ARCHIVES" below.
138
139If you use the full source code ZIP distribution of the Qt library or work
140directly with the Qt SVN tree, you will need to set up the environment yourself
141by performing the following steps:
142
143 - Add the "bin" subdirectory of the directory where you unpacked the Qt4
144 source tree to PATH and BEGINLIBPATH, like this:
145
146 set PATH=D:\Coding\Qt4\bin;%PATH%
147 set BEGINLIBPATH=D:\Coding\Qt4\bin;%BEGINLIBPATH%
148
149 - Add the system DLLs to the GCC library path with the following command:
150
151 set LIBRARY_PATH=C:\OS2\DLL;C:\MPTN\DLL;%LIBRARY_PATH%
152
153 where C: is your boot drive.
154
155 - Make sure CMD.EXE is your command line processor (the generated makefiles
156 will rely on its 'copy', 'if' and other commands). If you have a Unix shell
157 (SH.EXE) in your environment, you may need to force GNU make to use CMD.EXE
158 by executing the followingn command:
159
160 set MAKESHELL=C:\OS2\CMD.EXE
161
162 where C: is your boot drive.
163
164Note that the QTDIR environment variable used in previous Qt versions is not
165used in Qt4 anymore. Therefore, there is no need to set this variable
166explicitly.
167
168There is also no need to set the QMAKESPEC variable explicitly. If it is absent,
169qmake will use the specification stored in the <Qt4_Home>/mkspecs/default
170directory, which on OS/2 always refers to the "os2-g++" specification, the only
171one supported at the present time.
172
173NOTE:
174
175 It is especially important to make sure that there are no traces of any
176 other Watcom or OpenWatcom installation in the environment where you build
177 Qt as it will interfere with the patched OpenWatcom linker we use. This
178 basically means removing all environment variables containing "WATCOM" in
179 their names and also removing references to all those Watcom installations
180 from PATH.
181
182
183
184SETTING UP OPTIONAL TOOLS
185
186The following list describes the steps necessary to set up the optional tools
187that the Qt library depends on:
188
189 - Unzip the CUPS libraries to some directory and set the following environment
190 variables to tell the Qt configure script its location:
191
192 set CUPS_INCLUDEPATH=<path_to_CUPS>\include
193 set CUPS_LIBS=-L<path_to_CUPS>\lib -llibcups.a -L<path_to_pthread> -lpthread.lib
194
195 - Unzip the OpenSSL libraries to some directory and set the following
196 environment variables to tell the Qt configure script its location:
197
198 set OPENSSL_INCLUDEPATH=<path_to_OpenSSL>\include
199 set OPENSSL_LIBS=
200
201 Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (if they
202 are not already in your LIBPATH) so that Qt applications can find them at
203 runtime:
204
205 set BEGINLIBPATH=<path_to_OpenSSL>\dll;%BEGINLIBPATH%
206
207 - Unzip the MySQL archive to some directory and set the following environment
208 variables to tell the Qt configure script the library location:
209
210 set MYSQL_INCLUDEPATH=<path_to_MySQL>\include'
211 set MYSQL_LIBS=-L<path_to_MySQL>\lib -lmysqlclient_r -L<path_to_OpenSSL>\lib -llibssl -llibcrypto -L<path_to_pthread> -lpthread
212
213 Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (as
214 described above) because the MySQL plugin links statically to them and Qt
215 will not be able to load it otherwise.
216
217 - Unzip the PostgresSQL archive to some directory and set the following
218 environment variables to tell the Qt configure script the library location:
219
220 set PSQL_INCLUDEPATH=<path_to_PostgresSQL>\include'
221 set PSQL_LIBS=-L<path_to_PostgresSQL>\lib -llibpq -L<path_to_OpenSSL>\lib -llibssl -llibcrypto -L<path_to_pthread> -lpthread
222
223 Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (as
224 described above) because the PostgresSQL plugin links statically to them and
225 Qt will not be able to load it otherwise.
226
227Note that you need to make sure that OpenSSL DLLs are in BEGINLIBPATH or in
228LIBPATH before Qt attempts to load the SQL plugins for the first time. If it
229fails to load them, it will cache a failure and will not retry even if the
230plugins can be loaded later. To fix that, you need to delete the file
231%HOME%\.config\Trolltech.ini where this cache is stored.
232
233
234
235COMPILING QT
236
237You should skip this section if you installed the Qt development libraries using
238the WPI archive (that already contains compiled release versions of the
239libraries) and proceed directly to the next section.
240
241When the environment is set up as described above, you may build the Qt library.
242There are two distinct ways of doing this: in the source tree or in a separate
243directory of your choice. In the first case, all results of the build process
244(intermediate object files as well as final executables and DLLs) will be placed
245right in the source tree. In the second case, they will be placed in the
246separate directory -- this is called a shadow build.
247
248Shadow builds are the recommended way to go because they keep the source
249directories clean and also allow to use the same source tree for creating any
250number of builds, each with its own build options.
251
252To perform a shadow build, do the following steps:
253
254 1. Create a directory outside the Qt4 source tree.
255
256 2. Go to that directory.
257
258 3. Type:
259
260 <source_tree>\configure.cmd
261
262 where <source_tree> is the directory containing the Qt4 source tree. This
263 will create all necessary configuration files, headers, Makefiles and will
264 also build the qmake tool which is necessary to control the rest of the
265 build process (note that building qmake will take some time).
266
267 4. Once the configure process is finished, type:
268
269 make
270
271 Note that by the default the shadow build will produce the release version of
272 the Qt library. This may be changed by passing command line options to
273 configure.cmd at step 3. For example, the debug build can be requested using
274 the '-debug' option. For a full list of options supported by configure.cmd,
275 type:
276
277 configure.cmd -h
278
279To perform a normal build, you execute 'configure.cmd' followed by 'make' right
280in the directory containing the Qt4 source tree. The default in this case is to
281build both the debug and release versions of the Qt library.
282
283Please keep in mind that in case of the dual debug and release build (where both
284flavors are stored in the same build directory), only DLL and LIB files will be
285separated (because the debug versions of them will have the 'd' suffix in the
286file name). Executable files are normally taken from the release build but,
287since the file names are identical, sometimes they may be overwritten by the
288debug versions (e.g. when you rebuild parts of the library later). For this
289reason, performing dual builds is not recommended.
290
291The Qt library is huge so the build process will take several hours (or even
292several dozen of hours) depending on your hardware and configure options.
293
294Once the library is successfully built, you may try to compile the demos and
295examples by visiting the individual example subdirectories in the source tree
296and typing 'qmake' followed by 'make'.
297
298NOTE:
299
300 This version of Qt for OS/2 includes the Extended system tray plugin for
301 XCenter/eCenter which is necessary to enable Qt support for the special
302 notification area on the XCenter/eCenter panel (called the "system tray")
303 which is used by many long-running applications to display their status.
304 In order to activate this support, you need to install this plugin to your
305 XCenter or eCenter. The plugin is split in two DLLs, the plugin DLL and
306 the API DLL. Both are built as part of the normal build process and can be
307 found in the "src\3rdparty\os2\xsystray\tmp\dist" subdirectory of the Qt
308 build tree. In order to install them, do the following:
309
310 a. Copy "plugin\xsystray.dll" to "<XWorkplace_install>\plugins\xcenter\"
311 (on eComStation, this will be "C:\ecs\system\ewps\plugins\xcenter\"
312 where C: is your boot drive).
313
314 b. Copy "apilib\xsystray.dll" to a directory listed in LIBPATH.
315
316 b. Restart WPS.
317
318 c. Add the "Extended system tray" widget to the XCenter/eCenter panel using
319 the XCenter context menu ('Create new widget').
320
321 Note that if you upgrade from the previous version of the plugin then
322 please unlock xsystray.dll in the target folder using the UNLOCK.EXE
323 utility (which you can find in the LxLite package, for example) before
324 performing step a., otherwise the copy operation will fail.
325
326IMPORTANT NOTE:
327
328 Please take into account that the Qt library you build on your own as
329 described above is NOT intended for wide distribution with Qt applications
330 you port or create. Such private Qt builds help you develop Qt applications
331 (because you can easily debug your program and parts of the Qt framework at
332 the source level) but being widely distributed they will create a so-called
333 DLL hell when a program running on a user computer crashes because it picks
334 up a wrong build of the Qt library. This will happen because even a single
335 change to Qt configuration options may make your build binary incompatible
336 with another build. And even if you convince the user to isolate different
337 DLLs (using LIBPATHSTRICT and BEGINLIBPATH) it will create another major
338 problem: two different Qt applications will load two different copies of Qt
339 into memory which will create an unnecessary overhead by doubling the
340 amount of used system resources.
341
342 In order to nicely solve this problem, netlabs.org provides the official
343 binary builds of the Qt library distributed as WPI archives which are
344 described in the next section.
345
346
347
348USING OFFICIAL BINARY QT ARCHIVES
349
350For your convenience, netlabs.org provides the following binary distributions
351of the Qt library (where X_Y_Z is the Qt version number) distributed as WPI
352archives:
353
354 qt-lib-X_Y_Z.wpi - Runtime DLLs and binaries ("lib" archive)
355 qt-dev-X_Y_Z.wpi - Development libraries, tools and headers ("dev" archive)
356
357These archives are called the official binary archives of the Qt library for
358OS/2. An official binary archive contains the most complete Qt build that
359enables all features of the Qt library and includes all standard Qt plugins
360implemented for the OS/2 platform at the time of the release.
361
362The "lib" archive contains the release versions of DLLs (and may contain a few
363helper binaries) necessary to run applications created using the Qt framework.
364This package is usually installed by end users together with Qt applications
365they want to use.
366
367The "dev" archive contains pre-built release versions of import libraries and
368a complete set of C++ include headers of the Qt framework. This package is used
369by developers and porters of Qt applications to build release versions of the
370applications that are binary compatibie with the Qt runtime provided by the
371official "lib" archive described above. Using the "dev" package requires the
372same environment as described in section "SETTING UP THE ENVIRONMET" above.
373
374Please note again that the "dev" archive is intended to make a final release
375build of the Qt application which you do when you decide to ship a new version
376to the end users -- makes sure that the deployed application will share the same
377Qt runtime with other Qt applications. However, for daily work it is highly
378recommended that you build the debug version of the Qt library yourself (using
379the full source code ZIP archive or directly from SVN) as described in section
380"COMPILING QT").
381
382Besides the "lib" and the "dev" archives, the following official archives exist
383that you may also find useful:
384
385 qt-examples-X_Y_Z.wpi - Demo and example sources ("examples")
386
387The "examples" archive contains the source code and compiled binaries of the
388demo and example applications shipped with Qt. They serve as a good
389demonstration of the Qt library features and it is recommended to look at them.
390The binaries are compiled using the official "lib" archive. Please note that
391some demos and examples may miss from the arcvhice since not all features have
392been implemented in the OS/2 version of Qt yet.
393
394NOTE:
395
396 All .DLL and .EXE files of the official binary build contain a DESCRIPTION
397 string with the vendor field set to "netlabs.org" (by contrast, all custom
398 Qt builds will set the vendor field to what the USER environment variable
399 contains or to "anonymous" if USER is not set). Please note that you must
400 NOT set vendor to "netlabs.org" when creating your own builds of the Qt
401 library because it will make it difficult to identify various distributions
402 and track possible problems with the builds.
403
404
405
406QMAKE CONFIG OPTIONS
407
408The following CONFIG options of the qmake tool have a special meaning in OS/2:
409
410 windows Turns on generation of PM (WINDOWAPI) executables. By
411 default, this option is set for release builds that link
412 to the Qt GUI library.
413
414 console Turns on generation of text mode (WINDOWCOMPAT) executables.
415 By default, this option is set when setting the "windows"
416 option is not appropriate (see above).
417
418In addition, qmake recognizes the following OS/2-specific CONFIG options:
419
420 map Turns on generation of the .map files for executables and
421 DLLs. Note that this option is not set by default.
422
423 sym Turns on generation of the .sym files for executables and
424 DLLs. The option is turned on by default if configure.cmd
425 is able to find the MAPSYM tool in PATH.
426
427 exepack Turns on compression for executables and DLLs. The option is
428 turned on by default for release builds if configure.cmd
429 is able to find a compression tool (LxLite) in PATH.
430
431 highmem Turns on high memory usage for dynamically allocated memory
432 in DLLs and executables. When this option is set, a special
433 compiler flag (-Zhigh-mem for GCC) is used to enable high
434 memory support in the C library (LIBC). This option is set
435 by default so that all Qt DLLs and Qt applications built
436 with qmake are enabled for high memory. Note that high
437 memory support must be enabled for all LIBC-based DLLs
438 linked to the executable as well as for the executable
439 itself: high memory usage will be disabled if one of them
440 votes against it.
441
442 export_all Cause the linker to export all public symbols in a generated
443 DLL. By default (when this option is absent), only the
444 symbols marked with the __declspec(dllexport) compiler
445 directive in the source files.
446
447
448
449PRINTING SUPPORT
450
451Starting with version 4.6.2, Qt for OS/2 supports printing through the CUPS
452framework (provided that this support is enabled when building Qt, see the
453respective sections in the beginning of this document). The OS/2 implementation
454of the CUPS framework is provided by the eCUPS package available at
455http://svn.netlabs.org/ecups/.
456
457The Qt Runtime detects the presence of eCUPS in the system on the fly and talks
458to the CUPS daemon directly, bypassing the standard OS/2 printing subsystem.
459This means that in order to print from Qt applications, you don't need to create
460and configure printer objects using the standard OS/2 system printer setup
461procedure -- you only need to install eCUPS and configure your printers in
462there. Please refer to the eCUPS user manual to obtain the detailed instructions
463on how to configure CUPS printers.
464
465
466
467FILE WATCHING FUNCTION
468
469Qt supports a mechanism of notifying Qt applications about changes to the file
470system, such as creating files or directories, changing their attributes or
471deleting them, even if these changes are performed outside Qt applications. In
472particular, this is used in standard Qt open file dialogs where you can
473instantly observe changes made to the directory contents by third-party
474applications running in the background.
475
476In order to support this functionality on OS/2, Qt relies on the file watching
477mechanism provided by the Presentation Manager. This mechanism is a global
478system resource so that only one process may use it at a time. In a standard
479installation of OS/2 or eComStation this resource is exclusively used by the
480Workplace Shell and is not available to other applications. In order to overcome
481this limitation, a respective function was included to xWorkplace, the famous
482WPS extension (which lives inside the WPS process), starting with version 1.0.8.
483This function allows any number of other processes to receive notifications
484about file system changes and it gets utilized by Qt as well.
485
486If an earlier version of xWorkplace is installed on the user system, or if no
487xWorkplace extension is present at all, Qt uses its own method of detecting
488file system changes which is based on polling the directory contents in regular
489intervals. While this method works well for a small number of watched
490directories with just few files in them, it may significantly slow down the
491system if you work with a directory containing thousands of files.