Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         gobject-introspection and gir-repository
    1.2. Name of Document Author/Supplier:
         Author:  Brian Cameron
    1.3  Date of This Document:
        13 August, 2009
4. Technical Description

1. Introduction

   1.1. Project/Component Working Name:
        gobject-introspection and gir-repostiory

   1.2. Name of Document Author/Supplier:
        Brian Cameron

   1.3. Date of This Document:
        08/07/2009

   1.4. Name of Major Document Customer(s)/Consumer(s):
        1.4.1. The PAC or CPT you expect to review your project:
               Solaris PAC

        1.4.2. The ARC(s) you expect to review your project:
               LSARC

        1.4.3. The Director/VP who is "Sponsoring" this project:
               Robert O'Dea

        1.4.4. The name of your business unit:
               Software - OPG

   1.5. Email Aliases:
        1.5.1. Responsible Manager: 
               leo.binchy at sun.com

        1.5.2. Responsible Engineer:
               brian.cameron at sun.com

        1.5.3  Marketing Manager:
               glynn.foster at sun.com

        1.5.4. Interest List: 
               desktop-discuss at opensolaris.org 

2. Project Summary
   2.1. Project Description:

        The goal of gobject-introspection is to describe the APIs and collect
        them in a uniform, machine readable format.

        Historically in GNOME, the core platform has been relatively binding
        friendly, but there are several details not captured in the C+GObject
        layer that bindings have needed. For example, reference counting
        semantics and the item type inside GLists. Up until now various
        language bindings such as Python, Mono, java-gnome etc. had duplicated
        copies of hand-maintained metadata, and this led to a situation where
        bindings tended to lag behind until these manual fixups were done, or
        were simply wrong, and your application would crash when calling a more
        obscure function.

        The introspection project solves this by putting all of the metadata
        inside the GObject library itself, using annotations in the comments.
        This will lead to less duplicate work from binding authors, and a more
        reliable experience for binding consumers.

        Additionally, because the introspection build process will occur inside
        the GObject libraries themselves, a goal is to encourage GObject
        authors to consider shaping their APIs to be more binding friendly from
        the start, rather than as an afterthought. 
         
4. Technical Description:
   4.1. Details:

        Note that gobject-introspection and gir-repository are not currently
        used by the GNOME 2.28 stack.  They are used by clutter version 1.0,
        but nothing in the GNOME 2.28 stack currently uses clutter.  Providing
        these libraries in a GNOME 2.28 timeframe is useful only for making
        it possible for developers to build and test programs like GNOME Shell
        and libchamplain which are expected to be introduced in the next 
        release of GNOME.

        gobject-introspection provides:

        * An XML format called GIR containing introspection information
        * python package to create and parse the GIR format
        * scanner to generate GIR format from C source and headers
        * a typelib similar to xpcom/msole which stores the information on disk
          in a binary format
        * a compiler to compile the typelib from a xml format (and vice versa)
        * C library to read the typelib 

        The gobject-introspection module installs:
        * typelib files to /usr/lib/girepository-1.0
        * GIR files to /usr/share/gir-1.0

        for the following modules:
        * OpenGL
        * Glib
        * cairo
        * fontconfig
        * freetype2
        * libxml2
        * xfixes
        * xft
        * xlib

        Note that only the glib GIR and typelib files are built by the
        gobject-introspection module.  The other modules are supported with
        static files.

   4.1.1 GIR XML Format

        The core of the GObject-introspection is an XML format which is called
        GIR (GObject Introspection Repository) which contains the API
        introspection metadata for a library or interface entity.  The purpose
        of it is to provide a common structure to access the complete available
        API that a library or other unit of code exports. It is meant to be
        language agnostic using namespaces to separate core, language or
        library specific functionality. There are currently only C based tools
        that work on the format, but it's meant to be usable to use in other
        situations, for instance to/from another set of languages.

        GIR currently contains three different XML namespaces:

        * core: contains features available in popular programming languages:
                classes, methods, functions, interfaces, properties, strings,
                enums etc.
        * c:    contains features specific to the C language: identifiers,
                symbol names, C types
        * glib: contains features specific to GLib/GObject: signal, GType,
                flags, paramspec

        The separation of different data in different namespaces allow you to
        reuse it allows you to arbitrarily extend the metadata available in
        different languages.

   4.1.2 Typelib

        The typelib is a to disk version of the GIR designed to be fast, memory
        efficient and complete enough so that language bindings can be written
        on top of it without other sources of information. It is normally
        compiled from a GIR when a library/program is installed and accessed
        from the language binding or another application who wishes to use the
        information.

   4.1.3 Tools
   
        * g-ir-compiler - A typelib compiler.  It converts one or more GIR
                          files into one or more typelib files.  It can emit
                          either raw typelib files (default) or C code if the
                          --code argument is used. 
        * g-ir-generate - A GIR generator, using the repository API.  It 
                          generates GIR files from a raw typlib or a shared
                          library.
        * g-ir-scanner  - Generates GIR XML files by parsing headers and
                          introspecting GObject based libraries.  It is 
                          usually invoked during the normal build step for a
                          project and the information is saved to disk and
                          later installed so language bindings and other
                          applications can use it.  Header files and source
                          files are passed in arguments on the command line.
                          Currently only C-based libraries are supported by
                          the scanner.     

   4.1.4 API Library

        gobject-introspection also includes a C based library called
        libgirepository which provides an API to access to the typelib
        metadata. It also contains an API to invoke functions, given the
        function info object. The implementation is based on libffi.

   4.1.5 API Library

        A separate module called gir-repository provides typelib and GIR files
        for many libraries available in the GNOME stack which library bindings
        can depend upon.  This module is temporary, since these .gir files will
        eventually migrate to their respective upstream modules.

   4.1.6 gir-repostiory

        The gir-repository module installs:
        * typelib files to /usr/lib/girepository-1.0
        * GIR files to /usr/share/gir-1.0

        for the following modules:
        * ATK
        * avahi
        * babl
        * clutter, clutter-gtk, clutter-cairo, clutter-json
        * D-Bus
        * GConf
        * GDK, GDK-pixbuf, GTK
        * gnio (not currently available on Solaris)
        * gnome-keyring
        * gnome-menu
        * goocanvas (not currently available on Solaris)
        * GStreamer
        * gssdp (not currently available on Solaris)
        * gtksourceview
        * libnautilus-extension
        * libnotify
        * libunique
        * libwnck
        * pango
        * poppler
        * libsoup
        * VTE
        * webkit (LSARC 2009/409)

        It only installs the files for the modules which are available on the
        system.

        gir-repostitory also installs a handful of helper libraries to build
        and use typelibs.

   4.2. Interfaces:
        
      Exported Interfaces                 Stability         Comments
      ----------------------------------  ----------------  -------------

      The gobject-introspection module exports these interfaces:

      /usr/bin/g-ir-compiler              Uncommitted       Compiler
      /usr/bin/g-ir-generate              Uncommitted       GIR Generator
      /usr/bin/g-ir-scanner               Uncommitted       GIR XML Generator
      /usr/lib/libgirepository-1.0.so     Uncommitted       Library API
      /usr/lib/libgirepository-everything-1.0.so
                                          Uncommitted       Library used for
                                                            testing bindings
                                                            for completeness.
      /usr/lib/girepository-1.0           Uncommitted       Repository of
                                                            typelib files for
                                                            libraries
      /usr/lib/gobject-introspection/giscanner
                                          Project Private   Implementation of
                                                            g-ir-scanner   
      /usr/lib/pkgconfig/gobject-introspection-1.0.pc
                                          Uncommitted       object-introspection
                                                            pc file
      /usr/include/object-introspection/girepository.h
                                          Uncommitted       header file
      /usr/include/object-introspection/girffi.h
                                          Uncommitted       header file
      /usr/share/gir-1.0/                 Uncommitted       Repository of GIR
                                                            files for libraries.
      /usr/share/man/man1/g-ir-compiler.1 Uncommitted       Man page
      /usr/share/man/man1/g-ir-generate.1 Uncommitted       Man page
      /usr/share/man/man1/g-ir-scanner.1  Uncommitted       Man page

      The gir-repository module exports these additional interfaces:

      /usr/lib/libgirepo-Clutter-custom.so
                                          Volatile          Helper library
                                                            for building
                                                            typelibs
      /usr/lib/libgirepo-DBus-custom.so   Volatile          ""
      /usr/lib/libgirepo-Gdk-custom.so    Volatile          ""
      /usr/lib/libgirepo-Gtk-custom.so    Volatile          ""

      Imported Interfaces      Stability          Comments
      --------------------     ---------------    -----------------------

      gobject-introspection imports:

      glib                     Committed          LSARC 2006/202
      libffi                   Volatile           PSARC 2008/542

      gir-repository imports:

      ATK                      Committed          LSARC 2006/202
      avahi                    Volatile           LSARC 2006/455
      babl                     Volatile           LSARC 2008/702
      clutter                  Volatile           LSARC 2008/426
      D-Bus                    Volatile           LSARC 2006/368
      GConf                    Volatile           LSARC 2006/202
      GDK, GDK-pixbuf, GTK     Committed          LSARC 2006/202
      gnome-keyring            Volatile           LSARC 2008/430
      gnome-menu               Volatile           LSARC 2007/146
      GStreamer                Volatile           LSARC 2006/202
      gtksourceview            Volatile           LSARC 2007/146
      libnautilus-extension    Volatile           LSARC 2006/202
      libnotify                Volatile           LSARC 2007/137
      libunique                Volatile           LSARC 2009/142
      libwnck                  Volatile           LSARC 2006/202
      pango                    Committed          LSARC 2006/202
      poppler                  Volatile           LSARC 2007/146
      libsoup                  Project Private    LSARC 2003/298
      VTE                      Volatile           LSARC 2006/202
      webkit                   Uncommitted        LSARC 2009/409

   4.3. Doc Impact:

        Man pages are provided with gobject-introspection

   4.4. Packaging & Delivery:
        
        SUNWgobject-introspection, SUNWgobject-introspection-devel,
        SUNWgir-repository

   4.5. Dependencies:

        None.

   4.6. L10N Impact:

        The Desktop team and the G11N team are working together to evaluate and
        provide I18N/L10N support.

   4.7. Security Impact:

        None
       
5. Reference Documents:

   GObject Introspection Website
   http://live.gnome.org/GObjectIntrospection/

   GObject Introspection Tutorial
   http://live.gnome.org/GObjectIntrospection/FromHereToThere

   GObject Introspection Annotations
   http://live.gnome.org/GObjectIntrospection/Annotations


6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                Desktop
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to