GNOME Goal: Clean up GLib and GTK+ includes

Summary

GTK+ is moving toward a model where it is only allowed to include the 'toplevel' headers. The goal is to make all GNOME modules comply with this. Only these header can be directly included:

  • <glib.h>, <gio.h>, <glib-object.h>, <gmodule.h>, <glib/gi18n-lib.h> or <glib/gi18n.h>, <glib/gprintf.h>, <glib/gstdio.h>

  • <gdk/gdk.h>, <gdk-pixbuf/gdk-pixbuf.h>, <gdk/gdkkeysyms.h>, <gdk/gdkx.h>

  • <gtk/gtk.h>, <gtk/gtkunixprint.h>

See the Glib documentation and GTK+ documentation for more info.

Guidelines

Compile your application with:

  make CFLAGS+="-DG_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"

Recognizing a module affected by this goal

  1. If the module doesn't contain any compiled C code, or is not using GLib or GTK+, it is not affected.
  2. Compile the module with its default options, until it builds successfully.
  3. Once it builds, build it with the G_DISABLE_SINGLE_INCLUDES, GDK_PIXBUF_DISABLE_SINGLE_INCLUDES and GTK_DISABLE_SINGLE_INCLUDES flags.

  4. If the compiler gives you an error about an include, the module is affected by this goal and must be corrected.

It is also easy to spot affected modules just by reviewing the include statements that you find by running grep "^#include" over the sources and scanning the results.

Comments

{i} Add your comments about this goal here

What are the rules for what files may be included and where are the rules documented? "See if it compiles" is awful documentation! For example, <glib.h> does not include <glib/gi18n-lib.h> so there is little choice but to include it directly. -- MortenWelinder

What about <glib-object.h> ? -- YuFeng

  • Can you please come up with more than two words? --AndreKlapper

Status of this goal

{i} Tip: If you choose to work on a module, create the bug report on the GNOME bugzilla and mark it as blocking this tracker bug.

State

Markup

todo

<: #ff8080> todo

patch

<: #ffc849> [[GnomeBug:xxxxx|patch]

done

<: #80ff80> [[GnomeBug:xxxxx|done]

not needed

<: #80ff80> not needed

Above are the states and corresponding markup to update the modules state table below.

Tarball

Status

Desktop

alacarte

not needed

brasero

not needed

bug-buddy

not needed

cheese

done

control-center

done

dasher

not needed

dconf

not needed

deskbar-applet

done

ekiga

done

empathy

done

eog

done

epiphany

done

evince

not needed

evolution-data-server

not needed

evolution

done

evolution-exchange

not needed

evolution-mapi

not needed

evolution-webcal

done

file-roller

done

gcalctool

done

gconf-editor

done

gdm

done

gedit

done

gnome-applets

done

gnome-backgrounds

not needed

gnome-bluetooth

done

gnome-desktop

not needed

gnome-desktop-sharp

not needed

gnome-disk-utility

done

gnome-doc-utils

not needed

gnome-games

done

gnome-icon-theme

done

gnome-keyring

not needed

gnome-netstatus

done

gnome-nettool

done

gnome-mag

done

gnome-media

done

gnome-menus

done

gnome-panel

done

gnome-power-manager

done

gnome-python-desktop

not needed

gnome-screensaver

done

gnome-session

done

gnome-settings-daemon

done

gnome-speech

done

gnome-system-monitor

done

gnome-system-tools

done

gnome-terminal

done

gnome-themes

done

gnome-user-docs

not needed

gnome-user-share

not needed

gnome-utils

done

gnome-volume-manager

not needed

gok

not needed

gstreamer

not needed

gst-plugins

done

gtk-engines

done

gtkhtml

not needed

gtksourceview

done

gucharmap

done

gvfs

done

hamster-applet

done

libgail-gnome

done

libgnomekbd

done

libgnome-keyring

not needed

libgtop

done

libgweather

done

liboobs

not needed

librsvg

done

libsoup

done

libwnck

done

metacity

done

mousetweaks

not needed

nautilus

done

nautilus-sendto

not needed

orca

not needed

pygtksourceview

not needed

seahorse

done

seahorse-plugins

done

sound-juicer

done

swfdec-gnome

not needed

tomboy

done

totem

done

totem-pl-parser

not needed

vinagre

not needed

vino

done

vte

done

yelp

done

zenity

done

Desktop (to be deprecated)

libgnomeprint

not needed

libgnomeprintui

done

Platform

GConf

not needed

at-spi

not needed

atk

done

gail

done

glib

not needed

gtk+

not needed

gtk-doc

done

pango

not needed

pkgconfig

not needed

Platform (to be deprecated)

ORBit2

done

audiofile

not needed

esound

not needed

gnome-mime-data

not needed

gnome-vfs

done

libIDL

not needed

libart_lgpl

not needed

libbonobo

done

libbonoboui

done

libglade

done

libgnome

done

libgnomecanvas

done

libgnomeui

done

Admin

pessulus

not needed

sabayon

not needed

Development Tools

accerciser

not needed

anjuta

done

devhelp

done

gdl

done

glade3

done

gnome-devel-docs

not needed

Bindings (C++)

glibmm

done

pangomm

not needed

gtkmm

done

libglademm

not needed

gconfmm

done

libgnomecanvasmm

not needed

libgnome-vfsmm

not needed

libgnomemm

not needed

libgnomeuimm

done

libxml++

not needed

Bindings (java)

glib-java (jg-common)

done

libgtk-java

not needed

libgnome-java

not needed

libgconf-java

not needed

libglade-java

not needed

Bindings (mono)

gtk-sharp

to do

Bindings (perl)

Glib

not needed

Gtk2

not needed

Gtk2-GladeXML

not needed

Gnome2-GConf

not needed

Gnome2-Canvas

not needed

Gnome2-VFS

not needed

Gnome2

not needed

Bindings (python)

pygobject

done

pygtk

done

pyorbit

not needed

GnomePython

not needed

Mobile

GConf (dbus-based)

not needed

clutter-gst

not needed

External Dependencies

avahi

to do

cairo

to do

cairomm

to do

clutter

to do

clutter-gtk

done

fixed in git master

conduit

to do

dbus

to do

dbus-glib

to do

dbus-python

to do

desktop-file-utils

to do

DeviceKit-disks

to do

DeviceKit-power

to do

enchant

to do

expat

to do

farsight2

to do

fontconfig

to do

gamin

to do

gmime

to do

gnutls

to do

gpgme

to do

gtk-vnc

to do

hal

to do

hicolor-icon-theme

to do

icon-naming-utils

to do

intltool

to do

iso-codes

to do

libatasmart

to do

libcanberra

to do

libchamplain

to do

libcolorblind

to do

libcroco

to do

libgda

done

libgdata

not needed

libggz, ggz-client-libs

to do

libgpg-error

to do

libgcrypt

to do

libgsf

to do

libical

to do

libmapi

to do

libmusicbrainz

to do

libnotify

done

liboil

to do

libproxy

to do

libtasn1

to do

libunique

not needed

libxklavier

to do

libxml2

not needed

libxslt

to do

Mono.Addins

to do

mozilla (firefox)

to do

ndesk-dbus

to do

ndesk-dbus-glib

to do

nspr

to do

nss

to do

opal

to do

PackageKit

to do

pkg-config

to do

polkit-gtk

done

pulseaudio

to do

poppler

done

pycairo

to do

ptlib

to do

Python

to do

rarian

to do

shared-mime-info

to do

sqlite

to do

startup-notification

to do

swfdec

to do

system-tools-backends

to do

telepathy-glib

done

telepathy-mission-control

patch

tracker

done

vala

not needed

WebKit

done

Other

atomix

not needed

balsa

done

banshee

done

banter

not needed

beagle

done

contact-lookup-applet

done

dia

done

eggcups

not needed

eggcups has been replaced by system-config-printer

fast-user-switch-applet

done

f-spot

done

gnome-blog

not needed

gnome-build

done

gnome-cups-manager

done

gnome-main-menu

done

gnome-mud

done

GParted

not needed

GNOME Phone Manager

done

Gnumeric

done

gossip

done

gthumb

done

gtranslator

done

leafpad

patch

libbtctl

done

libgoffice

done

libgsf

done

modest

done

nautilus-cd-burner

done

nautilus-vcs

to do

nemiver

done

NetworkManager

done

ontv

not needed

planner

done

tinymail

done

rhythmbox

done

xchat-gnome

to do

Initiatives/GnomeGoals/CleanupGTKIncludes (last edited 2013-12-18 13:44:51 by LuisMenina)