?
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



Reply via email to