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