?
Including the Trolltech QT3 Framework with Solaris
Stefan Teleman <Stefan.Teleman at Sun.COM>
25 November 2007
1. Summary and motivation
QT3 [1] is a cross-platform GUI Application Development
Framework Toolkit written in C++. QT3 is developed and
maintained by Trolltech, ASA. [2] QT3 provides application
developers with effective cross-platform abstractions of
the underlying operating system facilities. A direct
consequence of this high level of abstraction is the
ability of the application programmer to write truly
cross-platform portable code, and to follow the "component
driven development model".
QT3 is supported on the following platforms:
- UNIX: Linux, Solaris, HP-UX, Compaq Tru64 UNIX,
IBM AIX, SGI IRIX and a wide range of others
- MS Windows: 95, 98, NT 4.0, ME, 2000, and XP
- Macintosh: Mac OS X
- Embedded Systems: Linux platforms with framebuffer
support
This Fasttrack proposes the integration of the latest QT3
Release, QT 3.3.8.
This case seeks Micro/Patch release binding.
2. Technical issues
2.1. Key objects
/usr/qt3/bin/assistant
/usr/qt3/bin/designer
/usr/qt3/bin/linguist
/usr/qt3/bin/lrelease
/usr/qt3/bin/lupdate
/usr/qt3/bin/moc
/usr/qt3/bin/qembed
/usr/qt3/bin/qm2ts
/usr/qt3/bin/qmake
/usr/qt3/bin/qtconfig
/usr/qt3/bin/qtdemo
/usr/qt3/bin/uic
/usr/qt3/bin/${MACH64}/designer
/usr/qt3/bin/${MACH64}/qtdemo
/usr/qt3/include/*.h
/usr/qt3/include/private/*.h
/usr/qt3/lib/libdesignercore.prl
/usr/qt3/lib/libeditor.prl
/usr/qt3/lib/libqassistantclient.prl
/usr/qt3/lib/libqt-mt.prl
/usr/qt3/lib/libqt-mt.so.3.3.8
/usr/qt3/lib/libqt-mt.so.3.3 -> /usr/qt3/lib/libqt-mt.so.3.3.8
/usr/qt3/lib/libqt-mt.so.3 -> /usr/qt3/lib/libqt-mt.so.3.3.8
/usr/qt3/lib/libqt-mt.so -> /usr/qt3/lib/libqt-mt.so.3.3.8
/usr/qt3/lib/libqui.so.1.0.0
/usr/qt3/lib/libqui.so.1.0 -> /usr/qt3/lib/libqui.so.1.0.0
/usr/qt3/lib/libqui.so.1 -> /usr/qt3/lib/libqui.so.1.0.0
/usr/qt3/lib/libqui.so -> /usr/qt3/lib/libqui.so.1.0.0
/usr/qt3/lib/${MACH64}/libdesignercore.prl
/usr/qt3/lib/${MACH64}/libeditor.prl
/usr/qt3/lib/${MACH64}/libqassistantclient.prl
/usr/qt3/lib/${MACH64}/libqt-mt.prl
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3.8
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3 ->
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3.8
/usr/qt3/lib/${MACH64}/libqt-mt.so.3 ->
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3.8
/usr/qt3/lib/${MACH64}/libqt-mt.so ->
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3.8
/usr/qt3/lib/${MACH64}/libqui.so.1.0.0
/usr/qt3/lib/${MACH64}/libqui.so.1.0 ->
/usr/qt3/lib/${MACH64}/libqui.so.1.0.0
/usr/qt3/lib/${MACH64}/libqui.so.1 ->
/usr/qt3/lib/${MACH64}/libqui.so.1.0.0
/usr/qt3/lib/${MACH64}/libqui.so ->
/usr/qt3/lib/${MACH64}/libqui.so.1.0.0
/usr/qt3/plugins/designer/libcppeditor.so
/usr/qt3/plugins/designer/libdlgplugin.so
/usr/qt3/plugins/designer/libgladeplugin.so
/usr/qt3/plugins/designer/libkdevdlgplugin.so
/usr/qt3/plugins/designer/librcplugin.so
/usr/qt3/plugins/designer/libwizards.so
/usr/qt3/plugins/inputmethods/libqimsw-none.so
/usr/qt3/plugins/inputmethods/libqimsw-multi.so
/usr/qt3/plugins/inputmethods/libqsimple.so
/usr/qt3/plugins/inputmethods/libqxim.so
/usr/qt3/plugins/sqldrivers/libqsqlite.so
/usr/qt3/plugins/sqldrivers/libqsqlmysql.so
/usr/qt3/plugins/sqldrivers/libqsqlodbc.so
/usr/qt3/plugins/sqldrivers/libqsqlpsql.so
/usr/qt3/plugins/${MACH64}/designer/libcppeditor.so
/usr/qt3/plugins/${MACH64}/designer/libdlgplugin.so
/usr/qt3/plugins/${MACH64}/designer/libgladeplugin.so
/usr/qt3/plugins/${MACH64}/designer/libkdevdlgplugin.so
/usr/qt3/plugins/${MACH64}/designer/librcplugin.so
/usr/qt3/plugins/${MACH64}/designer/libwizards.so
/usr/qt3/plugins/${MACH64}/inputmethods/libqimsw-none.so
/usr/qt3/plugins/${MACH64}/inputmethods/libqimsw-multi.so
/usr/qt3/plugins/${MACH64}/inputmethods/libqsimple.so
/usr/qt3/plugins/${MACH64}/inputmethods/libqxim.so
/usr/qt3/plugins/${MACH64}/sqldrivers/libqsqlite.so
/usr/qt3/plugins/${MACH64}/sqldrivers/libqsqlmysql.so
/usr/qt3/plugins/${MACH64}/sqldrivers/libqsqlodbc.so
/usr/qt3/plugins/${MACH64}/sqldrivers/libqsqlpsql.so
/usr/qt3/share/mkspecs/solaris-cc/qmake.conf
/usr/qt3/share/mkspecs/solaris-cc/qplatformdefs.h
/usr/qt3/share/mkspecs/solaris-cc-64/qmake.conf
/usr/qt3/share/mkspecs/solaris-cc-64/qplatformdefs.h
/usr/qt3/share/phrasebooks/danish.qph
/usr/qt3/share/phrasebooks/dutch.qph
/usr/qt3/share/phrasebooks/finnish.qph
/usr/qt3/share/phrasebooks/french.qph
/usr/qt3/share/phrasebooks/german.qph
/usr/qt3/share/phrasebooks/italian.qph
/usr/qt3/share/phrasebooks/norwegian.qph
/usr/qt3/share/phrasebooks/russian.qph
/usr/qt3/share/phrasebooks/spanish.qph
/usr/qt3/share/phrasebooks/swedish.qph
/usr/qt3/share/templates/Configuration_Dialog.ui
/usr/qt3/share/templates/Dialog_with_Buttons_(Bottom).ui
/usr/qt3/share/templates/Dialog_with_Buttons_(Right).ui
/usr/qt3/share/templates/Tab_Dialog.ui
/usr/qt3/translations/assistant_de.qm
/usr/qt3/translations/qt_ar.qm
/usr/qt3/translations/qt_ca.qm
/usr/qt3/translations/qt_cs.qm
/usr/qt3/translations/qt_de.qm
/usr/qt3/translations/qt_es.qm
/usr/qt3/translations/qt_fr.qm
/usr/qt3/translations/qt_he.qm
/usr/qt3/translations/qt_it.qm
/usr/qt3/translations/qt_ja.qm
/usr/qt3/translations/qt_nb.qm
/usr/qt3/translations/qt_pt-br.qm
/usr/qt3/translations/qt_ru.qm
/usr/qt3/translations/qt_sk.qm
/usr/qt3/translations/qt_zh-cn.qm
/usr/qt3/translations/qt_zh-tw.qm
/usr/lib/pkgconfig/qt-mt.pc
/usr/lib/${MACH64}/pkgconfig/qt-mt.pc
/usr/share/doc/qt3/html/*.html
/usr/share/doc/qt3/html/*.png
/usr/share/man/man1/lrelease.1
/usr/share/man/man1/lupdate.1
/usr/share/man/man1/moc.1
/usr/share/man/man1/uic.1
/usr/share/man/man3qt/*.3qt
QT3 is thread-safe, 64-bit clean and largefile aware. The 64-bit
QT3 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++ Language Standard [ ISO/IEC 14882:2003 ] [4] did not
define an ABI for the C++ Programming Language. Although several
efforts aimed at defining a common C++ ABI have existed in
the past, no consensus was ever reached. As a direct result of
this lack of an unified C++ ABI, binary object code emitted by
different C++ compilers is not interchangeable, and is likely
to be binary incompatible across different C++ compilers, or
different C++ runtime environments. Simply put, binary object
code resulting from the compilation of C++ Language code is
dependent on, and tied to, the compiler emitting it, and to the
compiler which has emitted the binary object code for the C++
runtime, and for the Standard C++ Library.
For the purposes of delivering and maintaining a coherent,
consistent and compatible C++ ABI, this Integration of QT3
will be built with the Sun Studio compiler suite, which has
maintained ABI C++ ABI compatibility since Release 5.0
[ Workshop 5 ]. The Sun Studio compilers are supported by
Trolltech ASA.
2.3. Programmatic facilities
QT3 follows the "component object development model", suitable
for an object-oriented framework. In addition, QT3 has extended
the inherently statically typed C++ Object Model by implementing
the QObject base type as the "Root Object" of [ almost ] all
QT3 types. By design, and unlike Smalltalk or Java, C++ does
not provide a toplevel "object" type functioning as root of
the inheritance graph. The omission of this "root object" type
from the design of the C++ Language was intentional: one of
C++'s stated goals was type safety, and the implementation
of such an Object Type, if deemed necessary, was delegated to
the writer of the application, or framework. A direct consequence
of this design decision is that, in C++, object types are not
related to each other by language design [ unlike Smalltalk or
Java ]. As a result, in C++, object types can only "talk" to
their "relatives" if a relationship already exists [ which assumes
that the objects involved in sending or receiving messages are
related, or can type-convert ], or, absent such a relationship,
a message-passing facility between statically typed, unrelated
object types has been devised.
One approach to solving this problem is described in the "Design
Patterns [ GoF ] Book [6], and a canonical example of such
a double-dispatch implementation are the Mediator and Observer
Patterns.
The QT3 Object Model implements the "root object" pattern, and
the Message Passing facility is achieved via QT3's signal/slot
mechanism.
QT3's signal/slot mechanism is type safe: the method signature
of a signal must match the method signature of the receiving
slot. Method signature mismatches are detected by the compiler,
at compile-time. Signals and slots are loosely coupled: an Object
Type emitting a signal does not know, nor does it care, which
slot receives its signal: the connection between a signal and
a slot must be explicitly defined by the application. [7]
The runtime signal/slot type safety mechanism is enforced by
the supporting meta-object generated by the Meta-Object Compiler
[ moc ]. The Meta-Object Compiler generates additional methods
for each particular object type's signal/slot declarations.
2.4. Language Bindings
QT3 is written in a subset of Standard C++, which has been
known to be portable across all the platforms and compilers
supported by Trolltech.
2.5. Documentation
The canonical QT3 release contains documentation in UNIX
Manual format, as well as a complete documentation set in
HTML format. By default, the UNIX Manual format documentation
is delivered in Section 3qt of the Manual. This Integration
will maintain this Section Manual classification.
The HTML QT3 documentation is accessible either via a Web
Browser, or via QT3's 'assistant' executable.
3. Interfaces
3.1. Interface Stability
QT3 maintains API and ABI compatibility between Minor and Micro
Releases [ not between Major Releases ]. However, development
of QT3 has ceased, and QT3 is considered EOL by Trolltech ASA. [3]
For this reason, this case proposes an overall "Obsolete"
Interface Stability Classification for QT3. There are no plans
for ongoing Minor/Micro Release updates to this version of QT3,
except for routine patch maintenance updates, as required.
3.2. Imported Interfaces
QT3 imports interfaces from the Standard C Library, Standard
Math Library, and the POSIX Threads Library. In addition, QT3
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.
Optionally, QT3 imports interfaces from SCIM [ Smart Common
Input Method ]. [5]
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
SCIM 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
3.3. Exported Interfaces
NAME STABILITY NOTES
SUNWqt3core Obsolete Package Name
SUNWqt3usr Obsolete Package Name
SUNWqt3doc Obsolete Package Name
/usr/qt3/bin/assistant Obsolete Executable location
/usr/qt3/bin/designer Obsolete Executable location
/usr/qt3/bin/linguist Obsolete Executable location
/usr/qt3/bin/lrelease Obsolete Executable location
/usr/qt3/bin/lupdate Obsolete Executable location
/usr/qt3/bin/moc Obsolete Executable location
/usr/qt3/bin/qembed Obsolete Executable location
/usr/qt3/bin/qm2ts Obsolete Executable location
/usr/qt3/bin/qmake Obsolete Executable location
/usr/qt3/bin/qtconfig Obsolete Executable location
/usr/qt3/bin/qtdemo Obsolete Executable location
/usr/qt3/bin/uic Obsolete Executable location
/usr/qt3/bin/${MACH64}/designer Obsolete Executable location
/usr/qt3/bin/${MACH64}/qtdemo Obsolete Executable location
/usr/qt3/include/*.h Obsolete Header files
/usr/qt3/include/private/*.h Header files
/usr/qt3/lib/libdesignercore.prl Obsolete QT3 Project file
/usr/qt3/lib/libeditor.prl Obsolete QT3 Project file
/usr/qt3/lib/libqassistantclient.prl Obsolete QT3 Project file
/usr/qt3/lib/libqt-mt.prl Obsolete QT3 Project file
/usr/qt3/lib/libqt-mt.so.3.3.8 Obsolete Shared library
/usr/qt3/lib/libqt-mt.so.3.3 Obsolete Symbolic link
/usr/qt3/lib/libqt-mt.so.3 Obsolete Symbolic link
/usr/qt3/lib/libqt-mt.so Obsolete Symbolic link
/usr/qt3/lib/libqui.so.1.0.0 Obsolete Shared library
/usr/qt3/lib/libqui.so.1.0 Obsolete Symbolic link
/usr/qt3/lib/libqui.so.1 Obsolete Symbolic link
/usr/qt3/lib/libqui.so Obsolete Symbolic link
/usr/qt3/lib/${MACH64}/libdesignercore.prl Obsolete QT3
Project Fil
/usr/qt3/lib/${MACH64}/libeditor.prl Obsolete QT3
Project File
/usr/qt3/lib/${MACH64}/libqassistantclient.prl Obsolete QT3
Project File
/usr/qt3/lib/${MACH64}/libqt-mt.prl Obsolete QT3
Project File
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3.8 Obsolete Shared
library
/usr/qt3/lib/${MACH64}/libqt-mt.so.3.3 Obsolete
Symbolic link
/usr/qt3/lib/${MACH64}/libqt-mt.so.3 Obsolete
Symbolic link
/usr/qt3/lib/${MACH64}/libqt-mt.so Obsolete
Symbolic link
/usr/qt3/lib/${MACH64}/libqui.so.1.0.0 Obsolete Shared library
/usr/qt3/lib/${MACH64}/libqui.so.1.0 Obsolete Symbolic link
/usr/qt3/lib/${MACH64}/libqui.so.1 Obsolete Symbolic link
/usr/qt3/lib/${MACH64}/libqui.so Obsolete Symbolic link
/usr/qt3/plugins/designer/*.so Obsolete QT3 Plugin
/usr/qt3/plugins/inputmethods/*.so Obsolete QT3 Plugin
/usr/qt3/plugins/sqldrivers/*.so Obsolete QT3 Plugin
/usr/qt3/plugins/${MACH64}/designer/*.so Obsolete QT3
Plugin
/usr/qt3/plugins/${MACH64}/inputmethods/*.so Obsolete QT3
Plugin
/usr/qt3/plugins/${MACH64}/sqldrivers/*.so Obsolete QT3
Plugin
/usr/qt3/share/mkspecs/solaris-cc/qmake.conf Obsolete QT3
qmake
platform-specific configuration File
/usr/qt3/share/mkspecs/solaris-cc/qplatformdefs.h Obsolete
QT3
platform-specific header file
/usr/qt3/share/mkspecs/solaris-cc-64/qmake.conf Obsolete
QT3 qmake
platform-specific configuration File
/usr/qt3/share/mkspecs/solaris-cc-64/qplatformdefs.h Obsolete QT3
platform-specific header file
/usr/qt3/share/phrasebooks/*.qph Obsolete QT3 phrasebook
file
/usr/qt3/share/templates/*.ui Obsolete QT3 uic [ user
interface compiler ] file
/usr/qt3/translations/*.qm Obsolete QT3 message
translation file
/usr/lib/pkgconfig/qt-mt.pc Obsolete pkg-config file
/usr/lib/${MACH64}/pkgconfig/qt-mt.pc Obsolete pkg-config file
/usr/share/doc/qt3/html/*.html Obsolete HTML
Documentation
/usr/share/doc/qt3/html/*.png Obsolete HTML
Documentation ancillary graphics files
/usr/share/man/man1/lrelease.1 Obsolete UNIX Man page
/usr/share/man/man1/lupdate.1 Obsolete UNIX Man page
/usr/share/man/man1/moc.1 Obsolete UNIX Man page
/usr/share/man/man1/uic.1 Obsolete UNIX Man page
/usr/share/man/man3qt/*.3qt Obsolete UNIX Man page
4. References
[1] http://trolltech.com/products/qt/qt3
[2] http://trolltech.com/
[3] http://trolltech.com/products/qt/qt3
[4] http://www.open-std.org/jtc1/sc22/wg21/
[5] http://www.scim-im.org/
[6] http://en.wikipedia.org/wiki/Design_Patterns
http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612
[7] http://doc.trolltech.com/4.3/signalsandslots.html
--
Stefan Teleman
Sun Microsystems, Inc.
Stefan.Teleman at Sun.COM