[Xfce4-commits] <exo:master> Revert "Remove visibility and use the linker for this."

Nick Schermer noreply at xfce.org
Thu Oct 22 11:18:01 CEST 2009


Updating branch refs/heads/master
         to 79244fdc4a95cfc222f9bd4bcead92ba23e741a4 (commit)
       from 553391277c847b5e0ba24b5112e377327c4212ae (commit)

commit 79244fdc4a95cfc222f9bd4bcead92ba23e741a4
Author: Nick Schermer <nick at xfce.org>
Date:   Thu Oct 22 11:13:50 2009 +0200

    Revert "Remove visibility and use the linker for this."
    
    This reverts commit ed7589d185b6c9d305a87039422b08c02df5251f.

 configure.in.in                         |   30 ++++
 exo/Makefile.am                         |   19 ++-
 exo/exo-binding.c                       |    6 +
 exo/exo-cell-renderer-ellipsized-text.c |    6 +
 exo/exo-cell-renderer-icon.c            |    6 +
 exo/exo-config.c                        |    6 +
 exo/exo-execute.c                       |    6 +
 exo/exo-gdk-pixbuf-extensions.c         |    6 +
 exo/exo-gobject-extensions.c            |    6 +
 exo/exo-gtk-extensions.c                |    6 +
 exo/exo-icon-bar.c                      |    6 +
 exo/exo-icon-chooser-dialog.c           |    6 +
 exo/exo-icon-chooser-model.c            |   30 +++--
 exo/exo-icon-chooser-model.h            |   14 +-
 exo/exo-icon-view.c                     |    6 +
 exo/exo-job.c                           |    7 +
 exo/exo-mount-point.c                   |    6 +
 exo/exo-private.c                       |    1 +
 exo/exo-private.h                       |    6 +-
 exo/exo-simple-job.c                    |    5 +
 exo/exo-string.c                        |    6 +
 exo/exo-thumbnail-preview.c             |   12 +-
 exo/exo-thumbnail-preview.h             |   10 +-
 exo/exo-thumbnail.c                     |    6 +
 exo/exo-thumbnail.h                     |   13 +-
 exo/exo-toolbars-editor-dialog.c        |    6 +
 exo/exo-toolbars-editor.c               |    6 +
 exo/exo-toolbars-model.c                |    6 +
 exo/exo-toolbars-private.c              |    5 +
 exo/exo-toolbars-private.h              |   12 +-
 exo/exo-toolbars-view.c                 |    6 +
 exo/exo-tree-view.c                     |    6 +
 exo/exo-utils.c                         |    7 +
 exo/exo-wrap-table.c                    |    6 +
 exo/exo-xsession-client.c               |    6 +
 exo/exo.symbols                         |  253 ++++++++++++++++++++++---------
 exo/make-exo-alias.pl                   |  155 +++++++++++++++++++
 python/Makefile.am                      |    2 +
 38 files changed, 591 insertions(+), 116 deletions(-)

diff --git a/configure.in.in b/configure.in.in
index 76f24fa..b405820 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -306,6 +306,36 @@ dnl *** Check for linker optimizations ***
 dnl **************************************
 XDT_FEATURE_LINKER_OPTS()
 
+dnl ****************************************
+dnl *** Check for ELF visibility support ***
+dnl ****************************************
+AC_ARG_ENABLE([visibility], AC_HELP_STRING([--disable-visibility], [Do not use ELF visibility attributes]), [], [enable_visibility=yes])
+have_gnuc_visibility=no
+if test x"$enable_visibility" != x"no"; then
+  dnl Check whether the compiler supports the visibility attribute
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wall -Werror"
+  AC_MSG_CHECKING([whether $CC supports the GNUC visibility attribute])
+  AC_COMPILE_IFELSE(AC_LANG_SOURCE(
+  [
+    void __attribute__ ((visibility("default"))) test_default (void) {}
+    void __attribute__ ((visibility("hidden"))) test_hidden (void) {}
+    int main (int argc, char **argv) { test_default (); test_hidden (); return 0; }
+  ]),
+  [
+    have_gnuc_visibility=yes
+    AC_MSG_RESULT([yes])
+  ],
+  [
+    AC_MSG_RESULT([no])
+  ])
+  CFLAGS="$save_CFLAGS"
+fi
+if test x"$have_gnuc_visibility" = x"yes"; then
+  CPPFLAGS="$CPPFLAGS -DHAVE_GNUC_VISIBILITY"
+fi
+AM_CONDITIONAL([HAVE_GNUC_VISIBILITY], [test x"$have_gnuc_visibility" = x"yes"])
+
 dnl *************************************
 dnl *** Compensate for broken gtk-doc ***
 dnl *************************************
diff --git a/exo/Makefile.am b/exo/Makefile.am
index cc6125d..f1e67d2 100644
--- a/exo/Makefile.am
+++ b/exo/Makefile.am
@@ -40,6 +40,8 @@ libexo_built_public_sources =						\
 
 libexo_built_sources =							\
 	$(libexo_built_public_sources)					\
+	exo-alias.h							\
+	exo-aliasdef.c							\
 	exo-enum-types.c						\
 	exo-marshal.c							\
 	exo-marshal.h
@@ -136,8 +138,16 @@ DISTCLEANFILES =							\
 BUILT_SOURCES =								\
 	$(libexo_built_sources)
 
+if HAVE_GNUC_VISIBILITY
 TESTS =									\
 	abicheck.sh
+endif
+
+exo-alias.h: make-exo-alias.pl exo.symbols
+	$(AM_V_GEN) $(PERL) $(srcdir)/make-exo-alias.pl < $(srcdir)/exo.symbols > exo-alias.h
+
+exo-aliasdef.c: make-exo-alias.pl exo.symbols
+	$(AM_V_GEN) $(PERL) $(srcdir)/make-exo-alias.pl -def < $(srcdir)/exo.symbols > exo-aliasdef.c
 
 exo-enum-types.h: stamp-exo-enum-types.h
 	@true
@@ -154,12 +164,12 @@ stamp-exo-enum-types.h: $(libexo_headers) Makefile
 
 exo-enum-types.c: $(libexo_headers) Makefile
 	$(AM_V_GEN) ( cd $(srcdir) && glib-mkenums \
-		--fhead "#undef GTK_DISABLE_DEPRECATED\n#define GTK_ENABLE_BROKEN\n#include <exo/exo.h>\n" \
+		--fhead "#undef GTK_DISABLE_DEPRECATED\n#define GTK_ENABLE_BROKEN\n#include <exo/exo.h>\n#include <exo/exo-alias.h>\n" \
 		--fprod "\n/* enumerations from \"@filename@\" */" \
 		--vhead "GType\n at enum_name@_get_type (void)\n{\n\tstatic GType type = 0;\n\tif (type == 0) {\n\tstatic const G at Type@Value values[] = {"\
 		--vprod "\t{ @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
 		--vtail "\t{ 0, NULL, NULL }\n\t};\n\ttype = g_ at type@_register_static (\"@EnumName@\", values);\n  }\n\treturn type;\n}\n" \
-		--ftail "\n#define __EXO_ENUM_TYPES_C__\n" \
+		--ftail "\n#define __EXO_ENUM_TYPES_C__\n#include <exo/exo-aliasdef.c>\n" \
 		$(libexo_headers) ) >> xgen-eetc \
 	&& cp xgen-eetc exo-enum-types.c \
 	&& rm -f xgen-eetc
@@ -190,6 +200,9 @@ dist-hook: all
 EXTRA_DIST = 								\
 	abicheck.sh							\
 	exo.symbols							\
-	exo-marshal.list
+	exo-alias.h							\
+	exo-aliasdef.c							\
+	exo-marshal.list						\
+	make-exo-alias.pl
 
 # vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
diff --git a/exo/exo-binding.c b/exo/exo-binding.c
index 2418943..ad8a1b4 100644
--- a/exo/exo-binding.c
+++ b/exo/exo-binding.c
@@ -27,6 +27,7 @@
 #include <exo/exo-binding.h>
 #include <exo/exo-gobject-extensions.h>
 #include <exo/exo-private.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-binding
@@ -591,3 +592,8 @@ exo_mutual_binding_unbind (ExoMutualBinding *binding)
 {
   g_signal_handler_disconnect (binding->reverse.dst_object, binding->direct.handler);
 }
+
+
+
+#define __EXO_BINDING_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-cell-renderer-ellipsized-text.c b/exo/exo-cell-renderer-ellipsized-text.c
index cb72375..cb9bae6 100644
--- a/exo/exo-cell-renderer-ellipsized-text.c
+++ b/exo/exo-cell-renderer-ellipsized-text.c
@@ -26,6 +26,7 @@
 
 #include <exo/exo-cell-renderer-ellipsized-text.h>
 #include <exo/exo-private.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-cell-renderer-ellipsized-text
@@ -368,3 +369,8 @@ exo_cell_renderer_ellipsized_text_new (void)
 {
   return g_object_new (EXO_TYPE_CELL_RENDERER_ELLIPSIZED_TEXT, NULL);
 }
+
+
+
+#define __EXO_CELL_RENDERER_ELLIPSIZED_TEXT_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-cell-renderer-icon.c b/exo/exo-cell-renderer-icon.c
index a4e4d83..d2a624f 100644
--- a/exo/exo-cell-renderer-icon.c
+++ b/exo/exo-cell-renderer-icon.c
@@ -29,6 +29,7 @@
 #include <exo/exo-gdk-pixbuf-extensions.h>
 #include <exo/exo-private.h>
 #include <exo/exo-thumbnail.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-cell-renderer-icon
@@ -566,3 +567,8 @@ exo_cell_renderer_icon_new (void)
 {
   return g_object_new (EXO_TYPE_CELL_RENDERER_ICON, NULL);
 }
+
+
+
+#define __EXO_CELL_RENDERER_ICON_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-config.c b/exo/exo-config.c
index 0408d1b..169f346 100644
--- a/exo/exo-config.c
+++ b/exo/exo-config.c
@@ -25,6 +25,7 @@
 #endif
 
 #include <exo/exo-config.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-config
@@ -116,3 +117,8 @@ exo_check_version (guint required_major,
 {
   return NULL;
 }
+
+
+
+#define __EXO_CONFIG_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-execute.c b/exo/exo-execute.c
index 03e2892..22c94ff 100644
--- a/exo/exo-execute.c
+++ b/exo/exo-execute.c
@@ -23,6 +23,7 @@
 #endif
 
 #include <exo/exo-execute.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-execute
@@ -224,3 +225,8 @@ exo_execute_terminal_shell_on_screen (const gchar *command_line,
 
   return exo_execute_preferred_application_on_screen ("TerminalEmulator", command_line, working_directory, envp, screen, error);
 }
+
+
+
+#define __EXO_EXECUTE_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-gdk-pixbuf-extensions.c b/exo/exo-gdk-pixbuf-extensions.c
index 16ba708..c4301f8 100644
--- a/exo/exo-gdk-pixbuf-extensions.c
+++ b/exo/exo-gdk-pixbuf-extensions.c
@@ -60,6 +60,7 @@
 
 #include <exo/exo-gdk-pixbuf-extensions.h>
 #include <exo/exo-private.h>
+#include <exo/exo-alias.h>
 
 /* use g_open() on win32 */
 #if defined(G_OS_WIN32)
@@ -902,3 +903,8 @@ err3: /* we failed for some reason */
 
   return pixbuf;
 }
+
+
+
+#define __EXO_GDK_PIXBUF_EXTENSIONS_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-gobject-extensions.c b/exo/exo-gobject-extensions.c
index b473685..ce4a6a9 100644
--- a/exo/exo-gobject-extensions.c
+++ b/exo/exo-gobject-extensions.c
@@ -25,6 +25,7 @@
 #endif
 
 #include <exo/exo-gobject-extensions.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-gobject-extensions
@@ -65,3 +66,8 @@ exo_g_value_transform_negate (const GValue  *src_value,
 
   return FALSE;
 }
+
+
+
+#define __EXO_GOBJECT_EXTENSIONS_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-gtk-extensions.c b/exo/exo-gtk-extensions.c
index 7e316ff..3e88eba 100644
--- a/exo/exo-gtk-extensions.c
+++ b/exo/exo-gtk-extensions.c
@@ -31,6 +31,7 @@
 #include <exo/exo-gtk-extensions.h>
 #include <exo/exo-private.h>
 #include <exo/exo-thumbnail-preview.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-gtk-extensions
@@ -234,3 +235,8 @@ exo_gtk_url_about_dialog_hook (GtkAboutDialog *about_dialog,
   /* cleanup */
   g_free (uri);
 }
+
+
+
+#define __EXO_GTK_EXTENSIONS_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-icon-bar.c b/exo/exo-icon-bar.c
index f58aaee..95f1a40 100644
--- a/exo/exo-icon-bar.c
+++ b/exo/exo-icon-bar.c
@@ -29,6 +29,7 @@
 #include <exo/exo-marshal.h>
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-icon-bar
@@ -1882,3 +1883,8 @@ exo_icon_bar_set_active_iter (ExoIconBar  *icon_bar,
       gtk_tree_path_free (path);
     }
 }
+
+
+
+#define __EXO_ICON_BAR_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-icon-chooser-dialog.c b/exo/exo-icon-chooser-dialog.c
index fc1abca..4136de2 100644
--- a/exo/exo-icon-chooser-dialog.c
+++ b/exo/exo-icon-chooser-dialog.c
@@ -42,6 +42,7 @@
 #include <exo/exo-icon-chooser-model.h>
 #include <exo/exo-icon-view.h>
 #include <exo/exo-private.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-icon-chooser-dialog
@@ -659,3 +660,8 @@ exo_icon_chooser_dialog_set_icon (ExoIconChooserDialog *icon_chooser_dialog,
 
   return FALSE;
 }
+
+
+
+#define __EXO_ICON_CHOOSER_DIALOG_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-icon-chooser-model.c b/exo/exo-icon-chooser-model.c
index 871acab..008eae6 100644
--- a/exo/exo-icon-chooser-model.c
+++ b/exo/exo-icon-chooser-model.c
@@ -32,6 +32,7 @@
 #include <exo/exo-icon-chooser-model.h>
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 
 
@@ -39,7 +40,7 @@ typedef struct _ExoIconChooserModelItem ExoIconChooserModelItem;
 
 
 
-static void               exo_icon_chooser_model_tree_model_init   (GtkTreeModelIface         *iface);
+static void               exo_icon_chooser_model_tree_model_init    (GtkTreeModelIface         *iface);
 static void               exo_icon_chooser_model_finalize           (GObject                   *object);
 static GtkTreeModelFlags  exo_icon_chooser_model_get_flags          (GtkTreeModel              *tree_model);
 static gint               exo_icon_chooser_model_get_n_columns      (GtkTreeModel              *tree_model);
@@ -117,13 +118,13 @@ static const gchar CONTEXT_NAMES[][14] =
 
 
 
-G_DEFINE_TYPE_WITH_CODE (ExoIconChooserModel, _exo_icon_chooser_model, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (ExoIconChooserModel, exo_icon_chooser_model, G_TYPE_OBJECT,
   G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, exo_icon_chooser_model_tree_model_init))
 
 
 
 static void
-_exo_icon_chooser_model_class_init (ExoIconChooserModelClass *klass)
+exo_icon_chooser_model_class_init (ExoIconChooserModelClass *klass)
 {
   GObjectClass *gobject_class;
 
@@ -134,14 +135,6 @@ _exo_icon_chooser_model_class_init (ExoIconChooserModelClass *klass)
 
 
 static void
-_exo_icon_chooser_model_init (ExoIconChooserModel *model)
-{
-  model->stamp = g_random_int ();
-}
-
-
-
-static void
 exo_icon_chooser_model_tree_model_init (GtkTreeModelIface *iface)
 {
   iface->get_flags = exo_icon_chooser_model_get_flags;
@@ -161,6 +154,14 @@ exo_icon_chooser_model_tree_model_init (GtkTreeModelIface *iface)
 
 
 static void
+exo_icon_chooser_model_init (ExoIconChooserModel *model)
+{
+  model->stamp = g_random_int ();
+}
+
+
+
+static void
 exo_icon_chooser_model_finalize (GObject *object)
 {
   ExoIconChooserModel *model = EXO_ICON_CHOOSER_MODEL (object);
@@ -178,7 +179,7 @@ exo_icon_chooser_model_finalize (GObject *object)
   g_list_foreach (model->items, (GFunc) exo_icon_chooser_model_item_free, NULL);
   g_list_free (model->items);
 
-  (*G_OBJECT_CLASS (_exo_icon_chooser_model_parent_class)->finalize) (object);
+  (*G_OBJECT_CLASS (exo_icon_chooser_model_parent_class)->finalize) (object);
 }
 
 
@@ -638,3 +639,8 @@ _exo_icon_chooser_model_get_iter_for_icon_name (ExoIconChooserModel *model,
 
   return FALSE;
 }
+
+
+
+#define __EXO_ICON_CHOOSER_MODEL_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-icon-chooser-model.h b/exo/exo-icon-chooser-model.h
index 6c60167..117dbd2 100644
--- a/exo/exo-icon-chooser-model.h
+++ b/exo/exo-icon-chooser-model.h
@@ -34,7 +34,7 @@ G_BEGIN_DECLS
 typedef struct _ExoIconChooserModelClass ExoIconChooserModelClass;
 typedef struct _ExoIconChooserModel      ExoIconChooserModel;
 
-#define EXO_TYPE_ICON_CHOOSER_MODEL             (_exo_icon_chooser_model_get_type ())
+#define EXO_TYPE_ICON_CHOOSER_MODEL             (exo_icon_chooser_model_get_type ())
 #define EXO_ICON_CHOOSER_MODEL(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_ICON_CHOOSER_MODEL, ExoIconChooserModel))
 #define EXO_ICON_CHOOSER_MODEL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_ICON_CHOOSER_MODEL, ExoIconChooserModelClass))
 #define EXO_IS_ICON_CHOOSER_MODEL(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_ICON_CHOOSER_MODEL))
@@ -86,14 +86,14 @@ typedef enum
   EXO_ICON_CHOOSER_MODEL_N_COLUMNS,
 } ExoIconChooserModelColumn;
 
-GType                  _exo_icon_chooser_model_get_type               (void) G_GNUC_CONST;
+G_GNUC_INTERNAL GType                  exo_icon_chooser_model_get_type                (void) G_GNUC_CONST;
 
-ExoIconChooserModel   *_exo_icon_chooser_model_get_for_widget         (GtkWidget           *widget) G_GNUC_WARN_UNUSED_RESULT;
-ExoIconChooserModel   *_exo_icon_chooser_model_get_for_icon_theme     (GtkIconTheme        *icon_theme) G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_INTERNAL ExoIconChooserModel   *_exo_icon_chooser_model_get_for_widget         (GtkWidget           *widget) G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_INTERNAL ExoIconChooserModel   *_exo_icon_chooser_model_get_for_icon_theme     (GtkIconTheme        *icon_theme) G_GNUC_WARN_UNUSED_RESULT;
 
-gboolean               _exo_icon_chooser_model_get_iter_for_icon_name (ExoIconChooserModel *model,
-                                                                       GtkTreeIter         *iter,
-                                                                       const gchar         *icon_name) ;
+G_GNUC_INTERNAL gboolean               _exo_icon_chooser_model_get_iter_for_icon_name (ExoIconChooserModel *model,
+                                                                                       GtkTreeIter         *iter,
+                                                                                       const gchar         *icon_name) ;
 
 G_END_DECLS
 
diff --git a/exo/exo-icon-view.c b/exo/exo-icon-view.c
index 8b9ac11..7a64a65 100644
--- a/exo/exo-icon-view.c
+++ b/exo/exo-icon-view.c
@@ -47,6 +47,7 @@
 #include <exo/exo-marshal.h>
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-icon-view
@@ -8431,3 +8432,8 @@ exo_icon_view_search_timeout_destroy (gpointer user_data)
 {
   EXO_ICON_VIEW (user_data)->priv->search_timeout_id = 0;
 }
+
+
+
+#define __EXO_ICON_VIEW_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-job.c b/exo/exo-job.c
index 6f8c10b..3060330 100644
--- a/exo/exo-job.c
+++ b/exo/exo-job.c
@@ -31,6 +31,7 @@
 #include <exo/exo-job.h>
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-job
@@ -677,3 +678,9 @@ exo_job_send_to_mainloop (ExoJob        *job,
   return g_io_scheduler_job_send_to_mainloop (job->priv->scheduler_job, func, user_data,
                                               destroy_notify);
 }
+
+
+
+
+#define __EXO_JOB_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-mount-point.c b/exo/exo-mount-point.c
index 63324a1..67c886f 100644
--- a/exo/exo-mount-point.c
+++ b/exo/exo-mount-point.c
@@ -70,6 +70,7 @@
 #include <exo/exo-mount-point.h>
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-mount-point
@@ -589,3 +590,8 @@ exo_mount_point_list_matched (ExoMountPointMatchMask mask,
 
   return mount_points;
 }
+
+
+
+#define __EXO_MOUNT_POINT_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-private.c b/exo/exo-private.c
index a8d2aed..88fb18f 100644
--- a/exo/exo-private.c
+++ b/exo/exo-private.c
@@ -33,6 +33,7 @@
 
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 
 
diff --git a/exo/exo-private.h b/exo/exo-private.h
index 055739f..30656de 100644
--- a/exo/exo-private.h
+++ b/exo/exo-private.h
@@ -68,10 +68,10 @@ G_BEGIN_DECLS
 #define g_value_get_object(v)   (((const GValue *) (v))->data[0].v_pointer)
 #endif
 
-void  _exo_i18n_init                    (void);
+G_GNUC_INTERNAL void  _exo_i18n_init                    (void);
 
-void  _exo_gtk_widget_send_focus_change (GtkWidget         *widget,
-                                         gboolean           in);
+G_GNUC_INTERNAL void  _exo_gtk_widget_send_focus_change (GtkWidget         *widget,
+                                                         gboolean           in);
 
 G_END_DECLS
 
diff --git a/exo/exo-simple-job.c b/exo/exo-simple-job.c
index 5265541..0e01386 100644
--- a/exo/exo-simple-job.c
+++ b/exo/exo-simple-job.c
@@ -38,6 +38,7 @@
 #include <exo/exo-job.h>
 #include <exo/exo-private.h>
 #include <exo/exo-simple-job.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-simple-job
@@ -279,3 +280,7 @@ exo_simple_job_launch (ExoSimpleJobFunc func,
   /* launch the job */
   return exo_job_launch (EXO_JOB (simple_job));
 }
+
+
+#define __EXO_SIMPLE_JOB_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-string.c b/exo/exo-string.c
index e49d4ce..d7a6bca 100644
--- a/exo/exo-string.c
+++ b/exo/exo-string.c
@@ -35,6 +35,7 @@
 #endif
 
 #include <exo/exo-string.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-string
@@ -428,3 +429,8 @@ exo_str_looks_like_an_uri (const gchar *str)
 
   return FALSE;
 }
+
+
+
+#define __EXO_STRING_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-thumbnail-preview.c b/exo/exo-thumbnail-preview.c
index c477b69..565b2d8 100644
--- a/exo/exo-thumbnail-preview.c
+++ b/exo/exo-thumbnail-preview.c
@@ -41,6 +41,7 @@
 #include <exo/exo-thumbnail-preview.h>
 #include <exo/exo-thumbnail.h>
 #include <exo/exo-utils.h>
+#include <exo/exo-alias.h>
 #include <exo/exo-string.h>
 
 
@@ -66,19 +67,19 @@ struct _ExoThumbnailPreview
 
 
 
-G_DEFINE_TYPE (ExoThumbnailPreview, _exo_thumbnail_preview, GTK_TYPE_FRAME)
+G_DEFINE_TYPE (ExoThumbnailPreview, exo_thumbnail_preview, GTK_TYPE_FRAME)
 
 
 
 static void
-_exo_thumbnail_preview_class_init (ExoThumbnailPreviewClass *klass)
+exo_thumbnail_preview_class_init (ExoThumbnailPreviewClass *klass)
 {
 }
 
 
 
 static void
-_exo_thumbnail_preview_init (ExoThumbnailPreview *thumbnail_preview)
+exo_thumbnail_preview_init (ExoThumbnailPreview *thumbnail_preview)
 {
   GtkWidget *button;
   GtkWidget *label;
@@ -379,3 +380,8 @@ _exo_thumbnail_preview_set_uri (ExoThumbnailPreview *thumbnail_preview,
   gtk_label_set_text (GTK_LABEL (thumbnail_preview->size_label), (size_name != NULL) ? size_name : "");
   g_free (size_name);
 }
+
+
+
+#define __EXO_THUMBNAIL_PREVIEW_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-thumbnail-preview.h b/exo/exo-thumbnail-preview.h
index d407566..0bcdbab 100644
--- a/exo/exo-thumbnail-preview.h
+++ b/exo/exo-thumbnail-preview.h
@@ -34,19 +34,19 @@ G_BEGIN_DECLS
 typedef struct _ExoThumbnailPreviewClass ExoThumbnailPreviewClass;
 typedef struct _ExoThumbnailPreview      ExoThumbnailPreview;
 
-#define EXO_TYPE_THUMBNAIL_PREVIEW            (_exo_thumbnail_preview_get_type ())
+#define EXO_TYPE_THUMBNAIL_PREVIEW            (exo_thumbnail_preview_get_type ())
 #define EXO_THUMBNAIL_PREVIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_THUMBNAIL_PREVIEW, ExoThumbnailPreview))
 #define EXO_THUMBNAIL_PREVIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_THUMBNAIL_PREVIEW, ExoThumbnailPreviewClass))
 #define EXO_IS_THUMBNAIL_PREVIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_THUMBNAIL_PREVIEW))
 #define EXO_IS_THUMBNAIL_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_THUMBNAIL_PREVIEW))
 #define EXO_THUMBNAIL_PREVIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_THUMBNAIL_PREVIEW, ExoThumbnailPreviewClass))
 
-GType      _exo_thumbnail_preview_get_type (void) G_GNUC_CONST;
+G_GNUC_INTERNAL GType      exo_thumbnail_preview_get_type  (void) G_GNUC_CONST;
 
-GtkWidget *_exo_thumbnail_preview_new      (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_INTERNAL GtkWidget *_exo_thumbnail_preview_new      (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
 
-void       _exo_thumbnail_preview_set_uri  (ExoThumbnailPreview *thumbnail_preview,
-                                            const gchar         *uri);
+G_GNUC_INTERNAL void       _exo_thumbnail_preview_set_uri  (ExoThumbnailPreview *thumbnail_preview,
+                                                            const gchar         *uri);
 
 G_END_DECLS
 
diff --git a/exo/exo-thumbnail.c b/exo/exo-thumbnail.c
index 4bd74ab..7aba2f9 100644
--- a/exo/exo-thumbnail.c
+++ b/exo/exo-thumbnail.c
@@ -54,6 +54,7 @@
 #include <exo/exo-gdk-pixbuf-extensions.h>
 #include <exo/exo-private.h>
 #include <exo/exo-thumbnail.h>
+#include <exo/exo-alias.h>
 
 /* use g_rename() and g_unlink() on win32 */
 #if defined(G_OS_WIN32)
@@ -292,3 +293,8 @@ _exo_thumbnail_get_for_uri (const gchar     *uri,
 
   return thumbnail;
 }
+
+
+
+#define __EXO_THUMBNAIL_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-thumbnail.h b/exo/exo-thumbnail.h
index 220ccb8..96dadbf 100644
--- a/exo/exo-thumbnail.h
+++ b/exo/exo-thumbnail.h
@@ -44,13 +44,12 @@ typedef enum /*< skip >*/
   EXO_THUMBNAIL_SIZE_LARGE  = 256,
 } ExoThumbnailSize;
 
-GdkPixbuf *_exo_thumbnail_get_for_file (const gchar     *filename,
-                                        ExoThumbnailSize size,
-                                        GError         **error) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-
-GdkPixbuf *_exo_thumbnail_get_for_uri  (const gchar     *uri,
-                                        ExoThumbnailSize size,
-                                        GError         **error) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_INTERNAL GdkPixbuf *_exo_thumbnail_get_for_file (const gchar     *filename,
+                                                        ExoThumbnailSize size,
+                                                        GError         **error) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
+G_GNUC_INTERNAL GdkPixbuf *_exo_thumbnail_get_for_uri  (const gchar     *uri,
+                                                        ExoThumbnailSize size,
+                                                        GError         **error) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
 
 G_END_DECLS
 
diff --git a/exo/exo-toolbars-editor-dialog.c b/exo/exo-toolbars-editor-dialog.c
index de00f95..dbb11bf 100644
--- a/exo/exo-toolbars-editor-dialog.c
+++ b/exo/exo-toolbars-editor-dialog.c
@@ -38,6 +38,7 @@
 #include <exo/exo-string.h>
 #include <exo/exo-toolbars-editor.h>
 #include <exo/exo-toolbars-editor-dialog.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-toolbars-editor-dialog
@@ -172,3 +173,8 @@ exo_toolbars_editor_dialog_new_with_model (GtkUIManager     *ui_manager,
 
   return GTK_WIDGET (dialog);
 }
+
+
+
+#define __EXO_TOOLBARS_EDITOR_DIALOG_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-toolbars-editor.c b/exo/exo-toolbars-editor.c
index b35a6f1..0beecf7 100644
--- a/exo/exo-toolbars-editor.c
+++ b/exo/exo-toolbars-editor.c
@@ -39,6 +39,7 @@
 #include <exo/exo-string.h>
 #include <exo/exo-toolbars-editor.h>
 #include <exo/exo-toolbars-private.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-toolbars-editor
@@ -724,3 +725,8 @@ exo_toolbars_editor_set_ui_manager (ExoToolbarsEditor *editor,
 
   exo_toolbars_editor_update (editor);
 }
+
+
+
+#define __EXO_TOOLBARS_EDITOR_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-toolbars-model.c b/exo/exo-toolbars-model.c
index 743d4d0..c231131 100644
--- a/exo/exo-toolbars-model.c
+++ b/exo/exo-toolbars-model.c
@@ -37,6 +37,7 @@
 #include <exo/exo-string.h>
 #include <exo/exo-toolbars-model.h>
 #include <exo/exo-toolbars-private.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-toolbars-model
@@ -1420,3 +1421,8 @@ exo_toolbars_model_toolbar_nth (ExoToolbarsModel *model,
 
   return toolbar->name;
 }
+
+
+
+#define __EXO_TOOLBARS_MODEL_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-toolbars-private.c b/exo/exo-toolbars-private.c
index a9f237d..aa81128 100644
--- a/exo/exo-toolbars-private.c
+++ b/exo/exo-toolbars-private.c
@@ -26,6 +26,7 @@
 #endif
 
 #include <exo/exo-toolbars-private.h>
+#include <exo/exo-alias.h>
 
 
 
@@ -364,3 +365,7 @@ _exo_toolbars_unset_drag_cursor (GtkWidget *widget)
   if (G_LIKELY (widget->window != NULL))
     gdk_window_set_cursor (widget->window, NULL);
 }
+
+
+
+
diff --git a/exo/exo-toolbars-private.h b/exo/exo-toolbars-private.h
index f1244d1..df79ce3 100644
--- a/exo/exo-toolbars-private.h
+++ b/exo/exo-toolbars-private.h
@@ -32,14 +32,14 @@
 
 G_BEGIN_DECLS
 
-GdkPixbuf *_exo_toolbars_new_separator_pixbuf (void) G_GNUC_MALLOC;
-GtkWidget *_exo_toolbars_new_separator_image  (void) G_GNUC_MALLOC;
+G_GNUC_INTERNAL GdkPixbuf *_exo_toolbars_new_separator_pixbuf (void) G_GNUC_MALLOC;
+G_GNUC_INTERNAL GtkWidget *_exo_toolbars_new_separator_image  (void) G_GNUC_MALLOC;
 
-GtkAction *_exo_toolbars_find_action          (GtkUIManager *ui_manager,
-                                               const gchar  *name);
+G_GNUC_INTERNAL GtkAction *_exo_toolbars_find_action          (GtkUIManager *ui_manager,
+                                                               const gchar  *name);
 
-void       _exo_toolbars_set_drag_cursor      (GtkWidget    *widget);
-void       _exo_toolbars_unset_drag_cursor    (GtkWidget    *widget);
+G_GNUC_INTERNAL void       _exo_toolbars_set_drag_cursor      (GtkWidget    *widget);
+G_GNUC_INTERNAL void       _exo_toolbars_unset_drag_cursor    (GtkWidget    *widget);
 
 G_END_DECLS
 
diff --git a/exo/exo-toolbars-view.c b/exo/exo-toolbars-view.c
index 3caba15..7a43e8e 100644
--- a/exo/exo-toolbars-view.c
+++ b/exo/exo-toolbars-view.c
@@ -38,6 +38,7 @@
 #include <exo/exo-toolbars-editor.h>
 #include <exo/exo-toolbars-private.h>
 #include <exo/exo-toolbars-view.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-toolbars-view
@@ -1426,3 +1427,8 @@ exo_toolbars_view_set_ui_manager (ExoToolbarsView *view,
       exo_toolbars_view_construct (view);
     }
 }
+
+
+
+#define __EXO_TOOLBARS_VIEW_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-tree-view.c b/exo/exo-tree-view.c
index 167dd6e..2d2f6c7 100644
--- a/exo/exo-tree-view.c
+++ b/exo/exo-tree-view.c
@@ -27,6 +27,7 @@
 #include <exo/exo-string.h>
 #include <exo/exo-tree-view.h>
 #include <exo/exo-utils.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-tree-view
@@ -866,3 +867,8 @@ exo_tree_view_set_single_click_timeout (ExoTreeView *tree_view,
       g_object_notify (G_OBJECT (tree_view), "single-click-timeout");
     }
 }
+
+
+
+#define __EXO_TREE_VIEW_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-utils.c b/exo/exo-utils.c
index 81f8b1e..312a7ef 100644
--- a/exo/exo-utils.c
+++ b/exo/exo-utils.c
@@ -26,6 +26,7 @@
 #define G_IMPLEMENT_INLINES 1
 #define __EXO_UTILS_C__
 #include <exo/exo-utils.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-utils
@@ -162,3 +163,9 @@ exo_noop_false (void)
 {
   return FALSE;
 }
+
+
+
+#define __EXO_UTILS_C__
+#include <exo/exo-aliasdef.c>
+
diff --git a/exo/exo-wrap-table.c b/exo/exo-wrap-table.c
index 5c2ac00..a9c4390 100644
--- a/exo/exo-wrap-table.c
+++ b/exo/exo-wrap-table.c
@@ -27,6 +27,7 @@
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
 #include <exo/exo-wrap-table.h>
+#include <exo/exo-alias.h>
 
 /**
  * SECTION: exo-wrap-table
@@ -715,3 +716,8 @@ exo_wrap_table_set_homogeneous (ExoWrapTable *table,
       g_object_notify (G_OBJECT (table), "homogeneous");
     }
 }
+
+
+
+#define __EXO_WRAP_TABLE_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-xsession-client.c b/exo/exo-xsession-client.c
index c9a92a4..38ef9a3 100644
--- a/exo/exo-xsession-client.c
+++ b/exo/exo-xsession-client.c
@@ -35,6 +35,7 @@
 #include <exo/exo-private.h>
 #include <exo/exo-string.h>
 #include <exo/exo-xsession-client.h>
+#include <exo/exo-alias.h>
 
 #ifdef GDK_WINDOWING_X11
 #include <gdk/gdkx.h>
@@ -578,3 +579,8 @@ exo_xsession_client_set_restart_command (ExoXsessionClient *client,
                argv, argc);
 #endif
 }
+
+
+
+#define __EXO_XSESSION_CLIENT_C__
+#include <exo/exo-aliasdef.c>
diff --git a/exo/exo.symbols b/exo/exo.symbols
index f7f74ce..baeb58e 100644
--- a/exo/exo.symbols
+++ b/exo/exo.symbols
@@ -18,7 +18,24 @@
  * Boston, MA 02111-1307, USA.
  */
 
-/* exo-binding */
+/* This file lists all exported symbols. It is used to generate
+ * the gobject.def file used to control exports on Windows and the
+ * exo-alias.h/exo-aliasdef.c files used to avoid PLT entries for 
+ * internal uses of exported functions (see make-exo-alias.pl).
+ * 
+ * Every symbol must be included in the right
+ * #ifdef IN_HEADER(sym) #endif and
+ * #ifdef IN_SOURCE(sym) #endif sections. 
+ */
+
+#ifdef ALL_FILES
+#define IN_HEADER(x) 1
+#define IN_SOURCE(x) 1
+#endif
+
+/* exo-binding functions */
+#if IN_HEADER(__EXO_BINDING_H__)
+#if IN_SOURCE(__EXO_BINDING_C__)
 exo_binding_new
 exo_binding_new_full
 exo_binding_new_with_negation
@@ -27,52 +44,90 @@ exo_mutual_binding_new
 exo_mutual_binding_new_full
 exo_mutual_binding_new_with_negation
 exo_mutual_binding_unbind
+#endif
+#endif
 
-/* exo-cell-renderer-ellipsized-text */
-exo_cell_renderer_ellipsized_text_get_type
-exo_cell_renderer_ellipsized_text_new
+/* ExoCellRendererEllipsizedText methods */
+#if IN_HEADER(__EXO_CELL_RENDERER_ELLIPSIZED_TEXT_H__)
+#if IN_SOURCE(__EXO_CELL_RENDERER_ELLIPSIZED_TEXT_C__)
+exo_cell_renderer_ellipsized_text_get_type G_GNUC_CONST
+exo_cell_renderer_ellipsized_text_new G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-cell-renderer-icon */
-exo_cell_renderer_icon_get_type
-exo_cell_renderer_icon_new
+/* ExoCellRendererIcon methods */
+#if IN_HEADER(__EXO_CELL_RENDERER_ICON_H__)
+#if IN_SOURCE(__EXO_CELL_RENDERER_ICON_C__)
+exo_cell_renderer_icon_get_type G_GNUC_CONST
+exo_cell_renderer_icon_new G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-config */
+/* exo-config variables */
+#if IN_HEADER(__EXO_CONFIG_H__)
+#if IN_SOURCE(__EXO_CONFIG_C__)
+#ifdef INCLUDE_VARIABLES
 exo_major_version
 exo_minor_version
 exo_micro_version
+#endif
 exo_check_version
+#endif
+#endif
 
-/* exo-enum-types */
-exo_icon_view_drop_position_get_type
-exo_icon_view_layout_mode_get_type
-exo_mount_point_flags_get_type
-exo_toolbars_model_flags_get_type
+/* exo-enum-types functions */
+#if IN_HEADER(__EXO_ENUM_TYPES_H__)
+#if IN_SOURCE(__EXO_ENUM_TYPES_C__)
+exo_icon_view_drop_position_get_type G_GNUC_CONST
+exo_icon_view_layout_mode_get_type G_GNUC_CONST
+exo_mount_point_flags_get_type G_GNUC_CONST
+exo_toolbars_model_flags_get_type G_GNUC_CONST
+#endif
+#endif
 
-/* exo-execute */
+/* exo-execute functions */
+#if IN_HEADER(__EXO_EXECUTE_H__)
+#if IN_SOURCE(__EXO_EXECUTE_C__)
 exo_execute_preferred_application
 exo_execute_preferred_application_on_screen
 exo_execute_terminal_shell
 exo_execute_terminal_shell_on_screen
+#endif
+#endif
 
-/* exo-gdk-pixbuf-extensions */
-exo_gdk_pixbuf_colorize
-exo_gdk_pixbuf_frame
-exo_gdk_pixbuf_lucent
-exo_gdk_pixbuf_spotlight
-exo_gdk_pixbuf_scale_down
-exo_gdk_pixbuf_scale_ratio
-exo_gdk_pixbuf_new_from_file_at_max_size
+/* exo-gdk-pixbuf-extensions functions */
+#if IN_HEADER(__EXO_GDK_PIXBUF_EXTENSIONS_H__)
+#if IN_SOURCE(__EXO_GDK_PIXBUF_EXTENSIONS_C__)
+exo_gdk_pixbuf_colorize G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_frame G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_lucent G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_spotlight G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_scale_down G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_scale_ratio G_GNUC_WARN_UNUSED_RESULT
+exo_gdk_pixbuf_new_from_file_at_max_size G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-gobject-extensions */
+/* exo-gobject-extensions functions */
+#if IN_HEADER(__EXO_GOBJECT_EXTENSIONS_H__)
+#if IN_SOURCE(__EXO_GOBJECT_EXTENSIONS_C__)
 exo_g_value_transform_negate
+#endif
+#endif
 
-/* exo-gtk-extensions */
+/* exo-gtk-extensions functions */
+#if IN_HEADER(__EXO_GTK_EXTENSIONS_H__)
+#if IN_SOURCE(__EXO_GTK_EXTENSIONS_C__)
 exo_gtk_object_destroy_later
 exo_gtk_file_chooser_add_thumbnail_preview
 exo_gtk_url_about_dialog_hook
+#endif
+#endif
 
-/* exo-icon-bar */
-exo_icon_bar_get_type
+/* ExoIconBar methods */
+#if IN_HEADER(__EXO_ICON_BAR_H__)
+#if IN_SOURCE(__EXO_ICON_BAR_C__)
+exo_icon_bar_get_type G_GNUC_CONST
 exo_icon_bar_new
 exo_icon_bar_new_with_model
 exo_icon_bar_get_model
@@ -87,15 +142,23 @@ exo_icon_bar_get_active
 exo_icon_bar_set_active
 exo_icon_bar_get_active_iter
 exo_icon_bar_set_active_iter
+#endif
+#endif
 
-/* exo-icon-chooser */
-exo_icon_chooser_dialog_get_type
-exo_icon_chooser_dialog_new
-exo_icon_chooser_dialog_get_icon
+/* ExoIconChooserDialog methods */
+#if IN_HEADER(__EXO_ICON_CHOOSER_DIALOG_H__)
+#if IN_SOURCE(__EXO_ICON_CHOOSER_DIALOG_C__)
+exo_icon_chooser_dialog_get_type G_GNUC_CONST
+exo_icon_chooser_dialog_new G_GNUC_MALLOC G_GNUC_NULL_TERMINATED G_GNUC_WARN_UNUSED_RESULT
+exo_icon_chooser_dialog_get_icon G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
 exo_icon_chooser_dialog_set_icon
+#endif
+#endif
 
-/* exo-icon-view */
-exo_icon_view_get_type
+/* ExoIconView methods */
+#if IN_HEADER(__EXO_ICON_VIEW_H__)
+#if IN_SOURCE(__EXO_ICON_VIEW_C__)
+exo_icon_view_get_type G_GNUC_CONST
 exo_icon_view_new
 exo_icon_view_new_with_model
 exo_icon_view_get_model
@@ -156,62 +219,95 @@ exo_icon_view_get_search_equal_func
 exo_icon_view_set_search_equal_func
 exo_icon_view_get_search_position_func
 exo_icon_view_set_search_position_func
+#endif
+#endif
 
-/* exo-job */
+/* exo-job functions */
+#if IN_HEADER(__EXO_JOB_H__)
+#if IN_SOURCE(__EXO_JOB_C__)
 exo_job_cancel
 exo_job_emit
 exo_job_get_cancellable
-exo_job_get_type
+exo_job_get_type G_GNUC_CONST
 exo_job_info_message
 exo_job_is_cancelled
 exo_job_launch
 exo_job_percent
 exo_job_send_to_mainloop
 exo_job_set_error_if_cancelled
+#endif
+#endif
 
-/* exo-mount-point */
-exo_mount_point_get_type
-exo_mount_point_dup
+/* exo-mount-point functions */
+#if IN_HEADER(__EXO_MOUNT_POINT_H__)
+#if IN_SOURCE(__EXO_MOUNT_POINT_C__)
+exo_mount_point_get_type G_GNUC_CONST
+exo_mount_point_dup G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
 exo_mount_point_free
-exo_mount_point_list_matched
+exo_mount_point_list_matched G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-utils */
-exo_noop
-exo_noop_one
-exo_noop_zero
-exo_noop_null
-exo_noop_true
-exo_noop_false
+/* exo-utils functions */
+#if IN_HEADER(__EXO_UTILS_H__)
+#if IN_SOURCE(__EXO_UTILS_C__)
+exo_noop G_GNUC_PURE
+exo_noop_one G_GNUC_PURE
+exo_noop_zero G_GNUC_PURE
+exo_noop_null G_GNUC_PURE
+exo_noop_true G_GNUC_PURE
+exo_noop_false G_GNUC_PURE
+#ifdef INCLUDE_INTERNAL_SYMBOLS
 exo_atomic_inc
 exo_atomic_dec
+#endif
+#endif
+#endif
 
-/* exo-simple-job */
-exo_simple_job_get_type
-exo_simple_job_launch
+/* exo-simple-job functions */
+#if IN_HEADER(__EXO_SIMPLE_JOB_H__)
+#if IN_SOURCE(__EXO_SIMPLE_JOB_C__)
+exo_simple_job_get_type G_GNUC_CONST
+exo_simple_job_launch G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-string */
-exo_str_elide_underscores
+/* exo-string functions */
+#if IN_HEADER(__EXO_STRING_H__)
+#if IN_SOURCE(__EXO_STRING_C__)
+exo_str_elide_underscores G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
 exo_str_is_equal
-exo_str_replace
-exo_str_looks_like_an_uri
-exo_strdup_strftime
-exo_strndupv
+exo_str_replace G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_strdup_strftime G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+exo_strndupv G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT
+#endif
+#endif
 
-/* exo-toolbars-editor-dialog */
-exo_toolbars_editor_dialog_get_type
+/* ExoToolbarsEditorDialog methods */
+#if IN_HEADER(__EXO_TOOLBARS_EDITOR_DIALOG_H__)
+#if IN_SOURCE(__EXO_TOOLBARS_EDITOR_DIALOG_C__)
+exo_toolbars_editor_dialog_get_type G_GNUC_CONST
 exo_toolbars_editor_dialog_new_with_model
+#endif
+#endif
 
-/* exo-toolbars-editor */
-exo_toolbars_editor_get_type
+/* ExoToolbarsEditor methods */
+#if IN_HEADER(__EXO_TOOLBARS_EDITOR_H__)
+#if IN_SOURCE(__EXO_TOOLBARS_EDITOR_C__)
+exo_toolbars_editor_get_type G_GNUC_CONST
 exo_toolbars_editor_new
 exo_toolbars_editor_new_with_model
 exo_toolbars_editor_get_model
 exo_toolbars_editor_set_model
 exo_toolbars_editor_get_ui_manager
 exo_toolbars_editor_set_ui_manager
+#endif
+#endif
 
-/* exo-toolbars-model */
-exo_toolbars_model_get_type
+/* ExoToolbarsModel methods */
+#if IN_HEADER(__EXO_TOOLBARS_MODEL_H__)
+#if IN_SOURCE(__EXO_TOOLBARS_MODEL_C__)
+exo_toolbars_model_get_type G_GNUC_CONST
 exo_toolbars_model_new
 exo_toolbars_model_set_actions
 exo_toolbars_model_get_actions
@@ -235,9 +331,13 @@ exo_toolbars_model_n_items
 exo_toolbars_model_item_nth
 exo_toolbars_model_n_toolbars
 exo_toolbars_model_toolbar_nth
+#endif
+#endif
 
-/* exo-toolbars-view */
-exo_toolbars_view_get_type
+/* ExoToolbarsView methods */
+#if IN_HEADER(__EXO_TOOLBARS_VIEW_H__)
+#if IN_SOURCE(__EXO_TOOLBARS_VIEW_C__)
+exo_toolbars_view_get_type G_GNUC_CONST
 exo_toolbars_view_new
 exo_toolbars_view_new_with_model
 exo_toolbars_view_get_editing
@@ -246,29 +346,42 @@ exo_toolbars_view_get_model
 exo_toolbars_view_set_model
 exo_toolbars_view_get_ui_manager
 exo_toolbars_view_set_ui_manager
+#endif
+#endif
 
-/* exo-tree-view */
-exo_tree_view_get_type
-exo_tree_view_new
+#if IN_HEADER(__EXO_TREE_VIEW_H__)
+#if IN_SOURCE(__EXO_TREE_VIEW_C__)
+exo_tree_view_get_type G_GNUC_CONST
+exo_tree_view_new G_GNUC_MALLOC
 exo_tree_view_get_single_click
 exo_tree_view_set_single_click
 exo_tree_view_get_single_click_timeout
 exo_tree_view_set_single_click_timeout
+#endif
+#endif
 
-/* exo-wrap-table */
-exo_wrap_table_get_type
-exo_wrap_table_new
+#if IN_HEADER(__EXO_WRAP_TABLE_H__)
+#if IN_SOURCE(__EXO_WRAP_TABLE_C__)
+exo_wrap_table_get_type G_GNUC_CONST
+exo_wrap_table_new G_GNUC_MALLOC
 exo_wrap_table_get_col_spacing
 exo_wrap_table_set_col_spacing
 exo_wrap_table_get_row_spacing
 exo_wrap_table_set_row_spacing
 exo_wrap_table_get_homogeneous
 exo_wrap_table_set_homogeneous
+#endif
+#endif
 
-/* exo-xsession-client */
-exo_xsession_client_get_type
+/* ExoXsessionClient methods */
+#if IN_HEADER(__EXO_XSESSION_CLIENT_H__)
+#if IN_SOURCE(__EXO_XSESSION_CLIENT_C__)
+exo_xsession_client_get_type G_GNUC_CONST
 exo_xsession_client_new_with_group
 exo_xsession_client_get_group
 exo_xsession_client_set_group
 exo_xsession_client_get_restart_command
 exo_xsession_client_set_restart_command
+#endif
+#endif
+
diff --git a/exo/make-exo-alias.pl b/exo/make-exo-alias.pl
new file mode 100644
index 0000000..f17ff01
--- /dev/null
+++ b/exo/make-exo-alias.pl
@@ -0,0 +1,155 @@
+#!/usr/bin/env perl -w
+#
+# Copyright (c) 2004 The GLib Development Team.
+# Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+my $option_def = 0;
+
+if (($#ARGV >= 0) && ($ARGV[0] eq "-def"))
+  {
+    shift;
+    $option_def = 1;
+  }
+
+print <<EOF;
+/* Generated by make-exo-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+EOF
+
+if ($option_def)
+  {
+    print <<EOF
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#undef IN_SOURCE
+#define IN_SOURCE defined
+
+EOF
+  }
+else
+  {
+    print <<EOF
+#define IN_HEADER defined
+#define IN_SOURCE(x) 1
+
+EOF
+  }
+
+my $in_comment = 0;
+my $in_skipped_section = 0;
+
+while (<>)
+  {
+    # ignore empty lines
+    next if /^\s*$/;
+
+    # skip comments
+    if ($_ =~ /^\s*\/\*/)
+      {
+        $in_comment = 1;
+      }
+    
+    if ($in_comment)
+      {
+        if ($_ =~  /\*\/\s$/)
+          {
+            $in_comment = 0;
+          }
+        next;
+      }
+
+    # handle ifdefs
+    if ($_ =~ /^\#endif/)
+      {
+        if (!$in_skipped_section)
+          {
+            print $_;
+          }
+
+        $in_skipped_section = 0;
+        next;
+      }
+
+    if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
+      {
+        $in_skipped_section = 1;
+      }
+
+    if ($in_skipped_section)
+      {
+        next;
+      }
+
+    if ($_ =~ /^\#ifn?def\s+G/)
+      {
+        print $_;
+        next;
+      }
+   
+    if ($_ =~ /^\#if.*(IN_SOURCE|IN_HEADER)/)
+      {
+        print $_;
+        next;
+      }
+
+    chop;
+    my $line = $_;
+    my @words;
+    my $attributes = "";
+
+    @words = split (/ /, $line);
+    my $symbol = shift (@words);
+    chomp ($symbol);
+    my $alias = "IA__".$symbol;
+    
+    # Drop any Win32 specific .def file syntax,  but keep attributes
+    foreach $word (@words)
+      {
+        $attributes = "$attributes $word" unless $word eq "PRIVATE";
+      }
+    
+    if (!$option_def)
+      {
+        print <<EOF
+extern __typeof ($symbol) $alias __attribute((visibility("hidden")))$attributes;
+\#define $symbol $alias
+
+EOF
+      }
+    else
+      {
+        print <<EOF
+\#undef $symbol 
+extern __typeof ($symbol) $symbol __attribute((alias("$alias"), visibility("default")));
+
+EOF
+      }
+  }
+
+print <<EOF;
+
+#endif /* HAVE_GNUC_VISIBILITY */
+EOF
+
+
diff --git a/python/Makefile.am b/python/Makefile.am
index 6b25f8e..157fa0b 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -69,7 +69,9 @@ CLEANFILES =								\
 	exo.c								\
 	expected-abi
 
+if HAVE_GNUC_VISIBILITY
 TESTS =									\
 	abicheck.sh
+endif
 
 # vi:set ts=8 sw=8 noet ai nocindent syntax=automake:



More information about the Xfce4-commits mailing list