?
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



Reply via email to