Add macros to handle constructor functions on the compilers that support it
authorAlexander Larsson <alexl@redhat.com>
Wed, 21 Dec 2011 20:13:21 +0000 (21:13 +0100)
committerAlexander Larsson <alexl@redhat.com>
Fri, 13 Jan 2012 15:02:47 +0000 (16:02 +0100)
commit9ef4554a0b252b092ee0e6731305b829d088f0cc
tree6400b94dce418dd43c2594b093dc62dea8484c99
parent3db6241b12bccab05be6916e1f843091a3cea380
Add macros to handle constructor functions on the compilers that support it

This is only supported on some compilers, so we define G_HAS_CONSTRUCTORS
when it is supported. However, when it is supported we guarantee that
both constructors and destructors work, in executables as well as shared
libraries (including runtime unloading of shared libraries).

Usage is a bit unorthodox, as some compilers need to use #pragma to
implement constructors, and #pragma can't be used in macros.

The canonical way to use this:

  #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
  #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor)
  #endif
  G_DEFINE_CONSTRUCTOR(my_constructor)

  static void my_constructor (void)
  {
    ...

  #ifdef G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA
  #pragma G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(my_destructor)
  #endif
  G_DEFINE_DESTRUCTOR(my_destructor)

  static void my_destructor (void)
  {
    ...
glib/gmacros.h