?
Including the Trolltech QT4 Framework with Solaris
Stefan Teleman <Stefan.Teleman at Sun.COM>
27 November 2007
1. Summary and motivation
QT4 [1] is the next-generation cross-platform Application
Development Framework Toolkit developed and maintained by
Trolltech, ASA [3]. Trolltech's flagship product, QT4 is
written in C++, and represents the current research
and development achievements at Trolltech. [2]
QT4 is used as a Foundation Application Development
Framework in numerous and highly specialized software
development fields, such as: medical imaging, oil and gas
exploration, computer graphics animations, bio-genetics
research, chemistry and pharmaceutical research, and many
other fields of specialized technical computing.
QT4/X11 uses Xlib. It does not use Xt [ the X Toolkit ],
Motif, Athena, or any other toolkit.
QT/Jambi [4] is a complementary framework to QT4, written
in Java. QT/Jambi will be discussed in a separate ARC Case.
QT4 is supported on the following platforms:
- UNIX: Linux, Solaris, FreeBSD, HP-UX/PA-RISC,
HP-UX/Itanium, AIX and IRIX
- MS Windows: 2000, XP and Vista
- Macintosh: Mac OS X
This Fasttrack proposes the integration of the latest QT4
Release, QT 4.3.2.
This case seeks Micro/Patch release binding.
2. Technical issues
2.1. Key objects
The following table is an abbreviated enumeration of QT4's
delivered objects. For the purposes of maintaining brevity,
a full and complete list of all the objects delivered
by this QT4 Integration will be provided separately, as a
Supporting Materials Addendum to this ARC Case.
For the purposes of this ARC Case, it is to be assumed that,
for any 32-bit executable, or shared object, a corresponding
64-bit object will be delivered by this Integration, in the
Standard Solaris ISA directory location, unless the
functionality provided by the 64-bit object is unnecessary,
in which case the 64-bit object will be omitted from this
Integration.
/usr/qt4/4.3.2/bin/assistant
/usr/qt4/4.3.2/bin/designer
/usr/qt4/4.3.2/bin/linguist
/usr/qt4/4.3.2/bin/lrelease
/usr/qt4/4.3.2/bin/lupdate
/usr/qt4/4.3.2/bin/moc
/usr/qt4/4.3.2/bin/pixeltool
/usr/qt4/4.3.2/bin/qdbus
/usr/qt4/4.3.2/bin/qdbuscpp2xml
/usr/qt4/4.3.2/bin/qdbusviewer
/usr/qt4/4.3.2/bin/qdbusxml2cpp
/usr/qt4/4.3.2/bin/qmake
/usr/qt4/4.3.2/bin/qt3to4
/usr/qt4/4.3.2/bin/qtconfig
/usr/qt4/4.3.2/bin/qtdemo
/usr/qt4/4.3.2/bin/rcc
/usr/qt4/4.3.2/bin/uic
/usr/qt4/4.3.2/bin/uic3
/usr/qt4/4.3.2/doc/html/*.html
/usr/qt4/4.3.2/doc/html/images/*.png
/usr/qt4/4.3.2/include/Qt/
/usr/qt4/4.3.2/include/Qt3Support/
/usr/qt4/4.3.2/include/QtAssistant/
/usr/qt4/4.3.2/include/QtCore/
/usr/qt4/4.3.2/include/QtDBus/
/usr/qt4/4.3.2/include/QtDesigner/
/usr/qt4/4.3.2/include/QtGui/
/usr/qt4/4.3.2/include/QtNetwork/
/usr/qt4/4.3.2/include/QtOpenGL/
/usr/qt4/4.3.2/include/QtScript/
/usr/qt4/4.3.2/include/QtSql/
/usr/qt4/4.3.2/include/QtSvg/
/usr/qt4/4.3.2/include/QtTest/
/usr/qt4/4.3.2/include/QtUiTools/
/usr/qt4/4.3.2/include/QtXml/
/usr/qt4/4.3.2/lib/libQt3Support.so.4.3.2
/usr/qt4/4.3.2/lib/libQtAssistantClient.so.4.3.2
/usr/qt4/4.3.2/lib/libQtCore.so.4.3.2
/usr/qt4/4.3.2/lib/libQtDBus.so.4.3.2
/usr/qt4/4.3.2/lib/libQtDesigner.so.4.3.2
/usr/qt4/4.3.2/lib/libQtDesignerComponents.so.4.3.2
/usr/qt4/4.3.2/lib/libQtGui.so.4.3.2
/usr/qt4/4.3.2/lib/libQtNetwork.so.4.3.2
/usr/qt4/4.3.2/lib/libQtOpenGL.so.4.3.2
/usr/qt4/4.3.2/lib/libQtScript.so.4.3.2
/usr/qt4/4.3.2/lib/libQtSql.so.4.3.2
/usr/qt4/4.3.2/lib/libQtSvg.so.4.3.2
/usr/qt4/4.3.2/lib/libQtTest.so.4.3.2
/usr/qt4/4.3.2/lib/libQtXml.so.4.3.2
/usr/qt4/4.3.2/plugins/accessible/libqtaccessiblecompatwidgets.so
/usr/qt4/4.3.2/plugins/accessible/libqtaccessiblewidgets.so
/usr/qt4/4.3.2/plugins/codecs/libqcncodecs.so
/usr/qt4/4.3.2/plugins/codecs/libqjpcodecs.so
/usr/qt4/4.3.2/plugins/codecs/libqkrcodecs.so
/usr/qt4/4.3.2/plugins/codecs/libqtwcodecs.so
/usr/qt4/4.3.2/plugins/designer/libarthurplugin.so
/usr/qt4/4.3.2/plugins/designer/libcontainerextension.so
/usr/qt4/4.3.2/plugins/designer/libcustomwidgetplugin.so
/usr/qt4/4.3.2/plugins/designer/libqt3supportwidgets.so
/usr/qt4/4.3.2/plugins/designer/libtaskmenuextension.so
/usr/qt4/4.3.2/plugins/designer/libworldtimeclockplugin.so
/usr/qt4/4.3.2/plugins/iconengines/libqsvg.so
/usr/qt4/4.3.2/plugins/imageformats/libqgif.so
/usr/qt4/4.3.2/plugins/imageformats/libqjpeg.so
/usr/qt4/4.3.2/plugins/imageformats/libqmng.so
/usr/qt4/4.3.2/plugins/imageformats/libqsvg.so
/usr/qt4/4.3.2/plugins/imageformats/libqtiff.so
/usr/qt4/4.3.2/plugins/inputmethods/libqimsw-multi.so
/usr/qt4/4.3.2/plugins/sqldrivers/libqsqlite.so
/usr/qt4/4.3.2/plugins/sqldrivers/libqsqlmysql.so
/usr/qt4/4.3.2/plugins/sqldrivers/libqsqlodbc.so
/usr/qt4/4.3.2/plugins/sqldrivers/libqsqlpsql.so
/usr/qt4/4.3.2/share/mkspecs/solaris-cc/qmake.conf
/usr/qt4/4.3.2/share/mkspecs/solaris-cc/qplatformdefs.h
/usr/qt4/4.3.2/share/mkspecs/solaris-cc-64/qmake.conf
/usr/qt4/4.3.2/share/mkspecs/solaris-cc-64/qplatformdefs.h
QT4 is thread-safe, 64-bit clean and largefile aware. The 64-bit
QT4 libraries, the associated loadable shared objects [ plugins ]
and the necessary 64-bit executables will be delivered with this
Integration.
2.2. C++ ABI Considerations
The C++ ABI Considerations discussed in the QT3 ARC Case
[ PSARC/2007/TBD [QT3] apply. The PSARC Opinion from
PSARC/2002/348 [5] ] is to be considered the Defining
Reference for this ARC Case.
For the purposes of delivering and maintaining a coherent,
consistent and compatible C++ ABI, this Integration of QT4
will be built with the Sun Studio compiler suite, which has
maintained C++ ABI compatibility since Release 5.0
[ Workshop 5 ]. [7] [8]
The Sun Studio compilers are supported by Trolltech ASA.
2.3. Programmatic facilities
QT4 follows the "component object development model", suitable
for an object-oriented framework. This object-oriented approach
to component-driven development was discussed in PSARC/2007/TBD
[QT3] [3], and QT4 follows the same design approach. However,
QT4 adds new programmatic facilities, in comparison to QT3.
While QT3 exhibited a clear GUI/Client-side bias, QT4 delivers
Server-side programmatic facilities, in addition to the existing
Client-side facilities.
QT4 provides a rich feature set of client-server connectivity
and external component integration facilities: database
connectivity, either via UnixODBC [11] plugins, or via specific
database engine plugins: MySQL5 [12], PostgreSQL [13],
SQLite3 [14], printing [ via CUPS [10] ], and Desktop IPC
integration [ via D-BUS [15] ].
QT4 provides a QT3 compatibility layer, and a QT3 migration
toolkit. [5]
2.4. Language Bindings
QT4 is written in a subset of Standard C++ [8] which has been
known to be portable across all the platforms and compilers
supported by Trolltech ASA. Sun Studio is one of the supported
compiler sets.
2.5. Internationalization
QT4 supports Internationalization and multibyte characters
by default, via full Unicode [16] support [ QT4 supports
both Unicode and non-Unicode fonts]. The "linguist" QT4
application is an intuitive GUI application which reads
extracted source text, and provides context information ready
for translation. The "linguist" application will output a
translation file ready for internationalized application use.
QT4 provides on-the-spot editing support for the X Input
Method Extension.
2.6. Documentation
The canonical QT4 release delivers a complete documentation
set in HTML format. Unlike QT3, QT4 does not provide
documentation in UNIX Manual format. A generic UNIX man page
[ qt4.1qt and qt4.3qt ] documenting pointers to the installed
HTML Documentation will be provided with this Integration.
The HTML QT4 documentation is accessible either via a Web
Browser, or via QT4's 'assistant' application.
3. Interfaces
3.1. Interface Stability
QT4 maintains API and ABI compatibility between Micro Releases,
but not between Minor and/or Major Releases. However,
Trolltech ASA provides API and ABI compatibility guarantees
within the boundaries of a QT4 Micro Release. It is very likely
that several QT4 Integrations, which may be binary incompatible
with each other, will have to coexist: Developer Preview Releases
of QT 4.4 and QT 4.5/4.6 are already available for download from
Trolltech.
This Fasttrack proposes an overall "Uncommitted" Interface
Stability Classification for QT4. Considering the ABI Micro
Release Stability guarantee provided by Trolltech ASA, a
"Committed" Interface Stability Classification would have been
appropriate. However, QT4's dependency on
External/Evolving/Uncommitted Interfaces makes an overall
"Committed" Interface Classification inaproppriate.
Furthermore, QT4 will follow a directory layout structure
modeled after Perl 5 [ PSARC/1999/192 [7] ]:
/usr/qt4/[version]/bin
/usr/qt4/[version]/bin/${MACH64}/
/usr/qt4/[version]/lib
/usr/qt4/[version]/lib/${MACH64}/
/usr/qt4/[version]/include
[ ... ]
3.2. Imported Interfaces
QT4 imports interfaces from the Standard C Library, Standard
Math Library, and the POSIX Threads Library. In addition, QT4
imports Interfaces from the Standard C++ Library, the C++
Runtime Library, the Socket Library, the Network Services
Library, and a number of X11, OpenGL and graphics libraries
[ LibPNG, LibTIFF, LibJPEG, LibMNG ]. QT4 also imports
interfaces from CUPS [10] UnixODBC [11] and D-BUS [15].
Optionally, and a highly desirable feature set, QT4 can
directly import interfaces from MySQL5 [12], PostgreSQL [13]
and SQLite3 [14], bypassing UnixODBC [11] altogether.
NAME STABILITY NOTES
SUNWlibC Committed LSARC/2004/284
LibPNG Evolving LSARC/2003/085
LibTIFF Evolving LSARC/2003/085
LibJPEG Evolving LSARC/2003/085
LibMNG Uncommitted PSARC/2007/TBD
LibXPM Evolving PSARC/2001/060
Z-Lib Committed PSARC/2006/537
LibFreetype2 External LSARC/2005/397
LibFontconfig External LSARC/2003/273
LibXFT External LSARC/2003/274
LibX11 External LSARC/2004/685
LibXRender External LSARC/2004/685
LibXRandR External LSARC/2004/685
CUPS Uncommitted LSARC/2007/TBD
UnixODBC Uncommitted LSARC/2007/TBD
D-BUS External LSARC/2006/368
3.3. Exported Interfaces
For the purposes of this document, the abbreviation [$QT4]
refers to the toplevel directory location of a particular
QT4 [ Major.Minor.Micro ] Integration.
NAME STABILITY NOTES
SUNWqt432core Uncommitted Package Name
SUNWqt432demo Uncommitted Package Name
SUNWqt432doc Uncommitted Package Name
SUNWqt432usr Uncommitted Package Name
[$QT4]/bin/assistant Uncommitted Executable location
[$QT4]/bin/designer Uncommitted Executable location
[$QT4]/bin/linguist Uncommitted Executable location
[$QT4]/bin/lrelease Uncommitted Executable location
[$QT4]/bin/lupdate Uncommitted Executable location
[$QT4]/bin/moc Uncommitted Executable location
[$QT4]/bin/pixeltool Uncommitted Executable location
[$QT4]/bin/qdbus Uncommitted Executable location
[$QT4]/bin/qdbuscpp2xml Uncommitted Executable location
[$QT4]/bin/qdbusviewer Uncommitted Executable location
[$QT4]/bin/qdbusxml2cpp Uncommitted Executable location
[$QT4]/bin/qmake Uncommitted Executable location
[$QT4]/bin/qt3to4 Uncommitted Executable location
[$QT4]/bin/qtconfig Uncommitted Executable location
[$QT4]/bin/qtdemo Uncommitted Executable location
[$QT4]/bin/rcc Uncommitted Executable location
[$QT4]/bin/uic Uncommitted Executable location
[$QT4]/bin/uic3 Uncommitted Executable location
[$QT4]/bin/${MACH64}/designer Uncommitted Executable location
[$QT4]/bin/${MACH64}/pixeltool Uncommitted Executable location
[$QT4]/bin/${MACH64}/qdbus Uncommitted Executable location
[$QT4]/bin/${MACH64}/qdbuscpp2xml Uncommitted Executable
location
[$QT4]/bin/${MACH64}/qdbusviewer Uncommitted Executable
location
[$QT4]/bin/${MACH64}/qdbusxml2cpp Uncommitted Executable
location
[$QT4]/bin/${MACH64}/qt3to4 Uncommitted Executable location
[$QT4]/bin/${MACH64}/qtconfig Uncommitted Executable location
[$QT4]/bin/${MACH64}/qtdemo Uncommitted Executable location
[$QT4]/doc/html/*.html Uncommitted HTML Documentation
[$QT4]/doc/html/images/*.png Uncommitted Documentation Graphics
[$QT4]/include/Qt/ Uncommitted Header files
[$QT4]/include/Qt3Support/ Uncommitted Header files
[$QT4]/include/QtAssistant/ Uncommitted Header files
[$QT4]/include/QtCore/ Uncommitted Header files
[$QT4]/include/QtDBus/ Uncommitted Header files
[$QT4]/include/QtDesigner/ Uncommitted Header files
[$QT4]/include/QtGui/ Uncommitted Header files
[$QT4]/include/QtNetwork/ Uncommitted Header files
[$QT4]/include/QtOpenGL/ Uncommitted Header files
[$QT4]/include/QtScript/ Uncommitted Header files
[$QT4]/include/QtSql/ Uncommitted Header files
[$QT4]/include/QtSvg/ Uncommitted Header files
[$QT4]/include/QtTest/ Uncommitted Header files
[$QT4]/include/QtUiTools/ Uncommitted Header files
[$QT4]/include/QtXml/ Uncommitted Header files
[$QT4]/lib/libQt3Support.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQt3Support.so.4 Uncommitted SONAME
[$QT4]/lib/libQtAssistantClient.so.4.3.2 Shared Library
[$QT4]/lib/libQtAssistantClient.so.4 Uncommitted SONAME
[$QT4]/lib/libQtCore.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtCore.so.4 Uncommitted SONAME
[$QT4]/lib/libQtDBus.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtDBus.so.4 Uncommitted SONAME
[$QT4]/lib/libQtDesigner.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtDesigner.so.4 Uncommitted SONAME
[$QT4]/lib/libQtDesignerComponents.so.4.3.2 Uncommitted Shared
Library
[$QT4]/lib/libQtDesignerComponents.so.4 Uncommitted SONAME
[$QT4]/lib/libQtGui.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtGui.so.4 Uncommitted SONAME
[$QT4]/lib/libQtNetwork.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtNetwork.so.4 Uncommitted SONAME
[$QT4]/lib/libQtOpenGL.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtOpenGL.so.4 Uncommitted SONAME
[$QT4]/lib/libQtScript.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtScript.so.4 Uncommitted SONAME
[$QT4]/lib/libQtSql.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtSql.so.4 Uncommitted SONAME
[$QT4]/lib/libQtSvg.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtSvg.so.4 Uncommitted SONAME
[$QT4]/lib/libQtTest.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtTest.so.4 Uncommitted SONAME
[$QT4]/lib/libQtXml.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/libQtXml.so.4 Uncommitted SONAME
[$QT4]/lib/${MACH64}/*.so.4.3.2 Uncommitted Shared Library
[$QT4]/lib/${MACH64}/*.so.4 Uncommitted SONAME
[$QT4]/plugins/accessible/*.so Project Private QT4 Plugins
[$QT4]/plugins/codecs/*.so Project Private QT4 Plugins
[$QT4]/plugins/designer/*.so Project Private QT4 Plugins
[$QT4]/plugins/iconengines/*.so Project Private QT4 Plugins
[$QT4]/plugins/imageformats/*.so Project Private QT4 Plugins
[$QT4]/plugins/inputmethods/*.so Project Private QT4 Plugins
[$QT4]/plugins/sqldrivers/*.so Project Private QT4 Plugins
[$QT4]/plugins/${MACH64}/*/*.so Project Private QT4 Plugins
[$QT4]/share/mkspecs/solaris-cc/qmake.conf Uncommitted QT4
qmake compiler
configuration [ 32-bit ]
[$QT4]/share/mkspecs/solaris-cc/qplatformdefs.h Project Private QT4
Platform-specific header file
[$QT4]/share/mkspecs/solaris-cc-64/qmake.conf Uncommitted QT4
qmake compiler
configuration [ 64-bit ]
[$QT4]/share/mkspecs/solaris-cc-64/qplatformdefs.h Project Private
QT4
Platform-specific header file
[$QT4]/share/phrasebooks/danish.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/dutch.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/finnish.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/french.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/german.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/italian.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/japanese.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/norwegian.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/polish.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/russian.qph Project Private QT4
Phrasebook File
[$QT4]/share/phrasebooks/swedish.qph Project Private QT4
Phrasebook File
4. References
[1] http://trolltech.com/products/qt
[2] http://trolltech.com/pdf/qt43-whitepaper-a4.pdf
[3] http://trolltech.com/
[4] http://trolltech.com/products/qt/jambi/
[5] http://trolltech.com/products/qt/qt3
[6] http://www.opensolaris.org/os/community/arc/caselog/2002/
PSARC/2002/348
[7] http://www.opensolaris.org/os/community/arc/caselog/1999/
PSARC/1999/192
[8] http://www.open-std.org/jtc1/sc22/wg21/
[9] Sun C++ ABI 5.0:
LSARC/1994/323
LSARC/1997/150
LSARC/2000/211 et seq.
[10] http://www.cups.org/
[11] http://www.unixodbc.org/
[12] http://www.mysql.com/
[13] http://www.postgresql.org/
[14] http://www.sqlite.org/
[15] http://www.freedesktop.org/wiki/Software/dbus
[16] http://www.unicode.org/
--
Stefan Teleman
Sun Microsystems, Inc.
Stefan.Teleman at Sun.COM