Best (GTK+) programming practices

Code style

Vim

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; coding: utf-8 -*-

Emacs

GTK+

Autotools

Good example: http://git.gnome.org/cgit/gnome-power-manager/tree/configure.ac

  • Use AM_SILENT_RULES

m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])

Compilation warnings

See this blog post: http://blogs.gnome.org/otte/2008/12/22/warning-options/

Use gnome-common compilation warnings:

GNOME_COMPILE_WARNINGS(maximum)

GNOME_COMPILE_WARNINGS(maximum)

if test "$GCC" = "yes"; then
        WARNINGFLAGS="$WARNINGFLAGS -Wall"
        WARNINGFLAGS="$WARNINGFLAGS -Wextra"                         #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Waggregate-return"
        WARNINGFLAGS="$WARNINGFLAGS -Wcast-align"
        WARNINGFLAGS="$WARNINGFLAGS -Wcast-align -Wno-uninitialized"
        WARNINGFLAGS="$WARNINGFLAGS -Wclobbered"
        WARNINGFLAGS="$WARNINGFLAGS -Wdeclaration-after-statement"
        WARNINGFLAGS="$WARNINGFLAGS -Wempty-body"
        WARNINGFLAGS="$WARNINGFLAGS -Werror"
        WARNINGFLAGS="$WARNINGFLAGS -Wformat-nonliteral"
        WARNINGFLAGS="$WARNINGFLAGS -Wformat-security"
        WARNINGFLAGS="$WARNINGFLAGS -Wignored-qualifiers"
        WARNINGFLAGS="$WARNINGFLAGS -Winit-self"
        WARNINGFLAGS="$WARNINGFLAGS -Winline"
        WARNINGFLAGS="$WARNINGFLAGS -Winvalid-pch"                   #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wlogical-op"                    #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-declarations"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-format-attribute"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-include-dirs"
#       WARNINGFLAGS="$WARNINGFLAGS -Wmissing-noreturn"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-parameter-type"
        WARNINGFLAGS="$WARNINGFLAGS -Wmissing-prototypes"            #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-missing-field-initializers" #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-strict-aliasing"
        WARNINGFLAGS="$WARNINGFLAGS -Wnested-externs"                #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wno-unused-parameter"           #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wold-style-definition"          #Company
        WARNINGFLAGS="$WARNINGFLAGS -Woverride-init"
        WARNINGFLAGS="$WARNINGFLAGS -Wpacked" #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wpointer-arith"
        WARNINGFLAGS="$WARNINGFLAGS -Wredundant-decls"
        WARNINGFLAGS="$WARNINGFLAGS -Wreturn-type"
        WARNINGFLAGS="$WARNINGFLAGS -Wshadow"
#       WARNINGFLAGS="$WARNINGFLAGS -Wsign-compare"
        WARNINGFLAGS="$WARNINGFLAGS -Wswitch-default"                #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Wswitch-enum"
        WARNINGFLAGS="$WARNINGFLAGS -Wsync-nand"                     #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wtype-limits"
        WARNINGFLAGS="$WARNINGFLAGS -Wundef"                         #Company
#       WARNINGFLAGS="$WARNINGFLAGS -Wuninitialized"
        WARNINGFLAGS="$WARNINGFLAGS -Wunsafe-loop-optimizations"     #Company
        WARNINGFLAGS="$WARNINGFLAGS -Wwrite-strings"
else
        WARNINGFLAGS=""
        WARNINGFLAGS=""
fi
AC_SUBST(WARNINGFLAGS)
AC_SUBST(WARNINGFLAGS)

Also, Company gcc warnings from http://cgit.freedesktop.org/swfdec/swfdec/tree/configure.ac#n32 and AS_COMPILER_FLAGS macro from http://cgit.freedesktop.org/swfdec/swfdec/tree/m4/as-compiler-flag.m4

GTK+ 3 compilant

Use GNOME_MAINTAINER_MODE_DEFINES macro:

GNOME_COMMON_INIT
GNOME_MAINTAINER_MODE_DEFINES

Manual method

  • Single includes

CPPFLAGS="${CPPFLAGS} -DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"

CPPFLAGS="${CPPFLAGS} -DG_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
  • Use accesor functions instead direct access by default:

CPPFLAGS="${CPPFLAGS} -DGSEAL_ENABLE"

JavierJardon/BestPractices (last edited 2010-08-25 15:08:43 by JavierJardon)