summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2017-05-26 12:48:20 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2017-05-26 12:54:02 +0100
commited9e0a39129ba3e675933d1a1a4552a0a5fbbfc7 (patch)
treea30564d60a88d28a6877af456db4a425444e9dfe
parent8d1fcc8e4c1939d52fb7ae46c368ac803c6770d7 (diff)
downloadclutter-gtk-ed9e0a39129ba3e675933d1a1a4552a0a5fbbfc7.tar.gz
build: Use compiler annotations for visible symbols
Instead of using libtool, we should explicitly annotate the exported symbols in the library API.
-rw-r--r--clutter-gtk/Makefile.am5
-rw-r--r--clutter-gtk/gtk-clutter-actor.c4
-rw-r--r--clutter-gtk/gtk-clutter-actor.h6
-rw-r--r--clutter-gtk/gtk-clutter-embed.c2
-rw-r--r--clutter-gtk/gtk-clutter-embed.h6
-rw-r--r--clutter-gtk/gtk-clutter-texture.h7
-rw-r--r--clutter-gtk/gtk-clutter-util.c2
-rw-r--r--clutter-gtk/gtk-clutter-util.h4
-rw-r--r--clutter-gtk/gtk-clutter-version.h.in5
-rw-r--r--clutter-gtk/gtk-clutter-window.c2
-rw-r--r--clutter-gtk/gtk-clutter-window.h4
-rw-r--r--configure.ac30
12 files changed, 65 insertions, 12 deletions
diff --git a/clutter-gtk/Makefile.am b/clutter-gtk/Makefile.am
index 9dd9750..f84bf2c 100644
--- a/clutter-gtk/Makefile.am
+++ b/clutter-gtk/Makefile.am
@@ -13,6 +13,7 @@ AM_CPPFLAGS = \
-DPREFIX=\""$(prefix)"\" \
-DLIBDIR=\""$(libdir)"\" \
-DCLUTTER_GTK_COMPILATION \
+ $(CLUTTER_GTK_HIDDEN_VISIBILITY_CFLAGS) \
$(CLUTTER_GTK_DEPRECATED_CFLAGS) \
$(CLUTTER_GTK_DEBUG_CFLAGS) \
$(NULL)
@@ -46,9 +47,7 @@ source_h_private = \
# please, keep the list sorted alphabetically
libclutter_gtk_@CLUTTER_GTK_API_VERSION@_la_SOURCES = $(source_c) $(source_h) $(source_h_private)
libclutter_gtk_@CLUTTER_GTK_API_VERSION@_la_LIBADD = $(CLUTTER_GTK_DEPS_LIBS) $(LIBM)
-libclutter_gtk_@CLUTTER_GTK_API_VERSION@_la_LDFLAGS = \
- $(CLUTTER_GTK_LT_LDFLAGS) \
- -export-symbols-regex "^gtk_clutter.*"
+libclutter_gtk_@CLUTTER_GTK_API_VERSION@_la_LDFLAGS = $(CLUTTER_GTK_LT_LDFLAGS)
cluttergtkheadersdir = $(includedir)/clutter-gtk-@CLUTTER_GTK_API_VERSION@/clutter-gtk
diff --git a/clutter-gtk/gtk-clutter-actor.c b/clutter-gtk/gtk-clutter-actor.c
index bb1c1f0..3d11e14 100644
--- a/clutter-gtk/gtk-clutter-actor.c
+++ b/clutter-gtk/gtk-clutter-actor.c
@@ -35,11 +35,9 @@
* use #GtkClutterActor in a #ClutterStage handled by Clutter alone.
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
-#include "gtk-clutter-actor.h"
+#include "gtk-clutter-actor-internal.h"
#include "gtk-clutter-offscreen.h"
#include <math.h>
diff --git a/clutter-gtk/gtk-clutter-actor.h b/clutter-gtk/gtk-clutter-actor.h
index 603304f..2dd9725 100644
--- a/clutter-gtk/gtk-clutter-actor.h
+++ b/clutter-gtk/gtk-clutter-actor.h
@@ -30,6 +30,7 @@
#include <gtk/gtk.h>
#include <clutter/clutter.h>
+#include <clutter-gtk/gtk-clutter-version.h>
G_BEGIN_DECLS
@@ -76,10 +77,15 @@ struct _GtkClutterActorClass
void (*_clutter_gtk_reserved6) (void);
};
+CLUTTER_GTK_EXTERN
GType gtk_clutter_actor_get_type (void) G_GNUC_CONST;
+CLUTTER_GTK_EXTERN
ClutterActor *gtk_clutter_actor_new (void);
+CLUTTER_GTK_EXTERN
ClutterActor *gtk_clutter_actor_new_with_contents (GtkWidget *contents);
+CLUTTER_GTK_EXTERN
GtkWidget * gtk_clutter_actor_get_contents (GtkClutterActor *actor);
+CLUTTER_GTK_EXTERN
GtkWidget * gtk_clutter_actor_get_widget (GtkClutterActor *actor);
G_END_DECLS
diff --git a/clutter-gtk/gtk-clutter-embed.c b/clutter-gtk/gtk-clutter-embed.c
index 521afc9..0baa3d1 100644
--- a/clutter-gtk/gtk-clutter-embed.c
+++ b/clutter-gtk/gtk-clutter-embed.c
@@ -69,9 +69,7 @@
* subclassing #GtkClutterEmbed, to avoid breaking internal state.
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include <math.h>
#include <string.h>
diff --git a/clutter-gtk/gtk-clutter-embed.h b/clutter-gtk/gtk-clutter-embed.h
index e81ff17..3fcb41d 100644
--- a/clutter-gtk/gtk-clutter-embed.h
+++ b/clutter-gtk/gtk-clutter-embed.h
@@ -29,6 +29,7 @@
#include <gtk/gtk.h>
#include <clutter/clutter.h>
+#include <clutter-gtk/gtk-clutter-version.h>
G_BEGIN_DECLS
@@ -81,12 +82,17 @@ struct _GtkClutterEmbedClass
void (*_clutter_gtk_reserved6) (void);
};
+CLUTTER_GTK_EXTERN
GType gtk_clutter_embed_get_type (void) G_GNUC_CONST;
+CLUTTER_GTK_EXTERN
GtkWidget * gtk_clutter_embed_new (void);
+CLUTTER_GTK_EXTERN
ClutterActor *gtk_clutter_embed_get_stage (GtkClutterEmbed *embed);
+CLUTTER_GTK_EXTERN
void gtk_clutter_embed_set_use_layout_size (GtkClutterEmbed *embed,
gboolean use_layout_size);
+CLUTTER_GTK_EXTERN
gboolean gtk_clutter_embed_get_use_layout_size (GtkClutterEmbed *embed);
G_END_DECLS
diff --git a/clutter-gtk/gtk-clutter-texture.h b/clutter-gtk/gtk-clutter-texture.h
index a44c722..656c5b4 100644
--- a/clutter-gtk/gtk-clutter-texture.h
+++ b/clutter-gtk/gtk-clutter-texture.h
@@ -29,6 +29,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
#include <clutter/clutter.h>
+#include <clutter-gtk/gtk-clutter-version.h>
G_BEGIN_DECLS
@@ -91,19 +92,25 @@ struct _GtkClutterTextureClass
ClutterTextureClass parent_class;
};
+CLUTTER_GTK_EXTERN
GQuark gtk_clutter_texture_error_quark (void);
+CLUTTER_GTK_EXTERN
GType gtk_clutter_texture_get_type (void) G_GNUC_CONST;
+CLUTTER_GTK_EXTERN
ClutterActor * gtk_clutter_texture_new (void);
+CLUTTER_GTK_EXTERN
gboolean gtk_clutter_texture_set_from_pixbuf (GtkClutterTexture *texture,
GdkPixbuf *pixbuf,
GError **error);
+CLUTTER_GTK_EXTERN
gboolean gtk_clutter_texture_set_from_stock (GtkClutterTexture *texture,
GtkWidget *widget,
const gchar *stock_id,
GtkIconSize icon_size,
GError **error);
+CLUTTER_GTK_EXTERN
gboolean gtk_clutter_texture_set_from_icon_name (GtkClutterTexture *texture,
GtkWidget *widget,
const gchar *icon_name,
diff --git a/clutter-gtk/gtk-clutter-util.c b/clutter-gtk/gtk-clutter-util.c
index f4acfdf..40a6919 100644
--- a/clutter-gtk/gtk-clutter-util.c
+++ b/clutter-gtk/gtk-clutter-util.c
@@ -1,6 +1,4 @@
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include "gtk-clutter-util.h"
#include "gtk-clutter-offscreen.h"
diff --git a/clutter-gtk/gtk-clutter-util.h b/clutter-gtk/gtk-clutter-util.h
index 6621a2a..94227e8 100644
--- a/clutter-gtk/gtk-clutter-util.h
+++ b/clutter-gtk/gtk-clutter-util.h
@@ -28,17 +28,21 @@
#include <gtk/gtk.h>
#include <clutter/clutter.h>
+#include <clutter-gtk/gtk-clutter-version.h>
G_BEGIN_DECLS
+CLUTTER_GTK_EXTERN
ClutterInitError gtk_clutter_init (int *argc,
char ***argv) G_GNUC_WARN_UNUSED_RESULT;
+CLUTTER_GTK_EXTERN
ClutterInitError gtk_clutter_init_with_args (int *argc,
char ***argv,
const char *parameter_string,
GOptionEntry *entries,
const char *translation_domain,
GError **error) G_GNUC_WARN_UNUSED_RESULT;
+CLUTTER_GTK_EXTERN
GOptionGroup *gtk_clutter_get_option_group (void);
G_END_DECLS
diff --git a/clutter-gtk/gtk-clutter-version.h.in b/clutter-gtk/gtk-clutter-version.h.in
index ac20bba..eff81ff 100644
--- a/clutter-gtk/gtk-clutter-version.h.in
+++ b/clutter-gtk/gtk-clutter-version.h.in
@@ -102,6 +102,11 @@ G_BEGIN_DECLS
(CLUTTER_GTK_MAJOR_VERSION == (major) && CLUTTER_GTK_MINOR_VERSION > (minor)) || \
(CLUTTER_GTK_MAJOR_VERSION == (major) && CLUTTER_GTK_MINOR_VERSION == (minor) && CLUTTER_GTK_MICRO_VERSION >= (micro)))
+#ifndef CLUTTER_GTK_EXTERN
+#define CLUTTER_GTK_EXTERN extern
+#endif
+
+CLUTTER_GTK_EXTERN
gboolean gtk_clutter_check_version (guint major,
guint minor,
guint micro);
diff --git a/clutter-gtk/gtk-clutter-window.c b/clutter-gtk/gtk-clutter-window.c
index bfe5c95..3b85126 100644
--- a/clutter-gtk/gtk-clutter-window.c
+++ b/clutter-gtk/gtk-clutter-window.c
@@ -34,9 +34,7 @@
* gtk_clutter_window_get_stage().
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include "gtk-clutter-window.h"
#include "gtk-clutter-actor.h"
diff --git a/clutter-gtk/gtk-clutter-window.h b/clutter-gtk/gtk-clutter-window.h
index 8f5349c..dc0e36c 100644
--- a/clutter-gtk/gtk-clutter-window.h
+++ b/clutter-gtk/gtk-clutter-window.h
@@ -28,6 +28,7 @@
#include <gtk/gtk.h>
#include <clutter/clutter.h>
+#include <clutter-gtk/gtk-clutter-version.h>
G_BEGIN_DECLS
@@ -80,9 +81,12 @@ struct _GtkClutterWindowClass
void (*_clutter_gtk_reserved6) (void);
};
+CLUTTER_GTK_EXTERN
GType gtk_clutter_window_get_type (void) G_GNUC_CONST;
+CLUTTER_GTK_EXTERN
GtkWidget * gtk_clutter_window_new (void);
+CLUTTER_GTK_EXTERN
ClutterActor *gtk_clutter_window_get_stage (GtkClutterWindow *window);
G_END_DECLS
diff --git a/configure.ac b/configure.ac
index a5cc8a7..1d73705 100644
--- a/configure.ac
+++ b/configure.ac
@@ -89,6 +89,36 @@ PKG_CHECK_MODULES([CLUTTER_GTK_DEPS], [clutter-1.0 >= clutter_req_version gtk+-3
AC_SUBST([CLUTTER_GTK_DEPS_CFLAGS])
AC_SUBST([CLUTTER_GTK_DEPS_LIBS])
+CLUTTER_GTK_HIDDEN_VISIBILITY_CFLAGS=""
+case "$host" in
+ *-*-mingw*)
+ dnl on mingw32 we do -fvisibility=hidden and __declspec(dllexport)
+ AC_DEFINE([CLUTTER_GTK_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern],
+ [defines how to decorate public symbols while building])
+ CFLAGS="${CFLAGS} -fvisibility=hidden"
+ ;;
+ *)
+ dnl on other compilers, check if we can do -fvisibility=hidden
+ SAVED_CFLAGS="${CFLAGS}"
+ CFLAGS="-fvisibility=hidden"
+ AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
+ AC_TRY_COMPILE([], [return 0],
+ AC_MSG_RESULT(yes)
+ enable_fvisibility_hidden=yes,
+ AC_MSG_RESULT(no)
+ enable_fvisibility_hidden=no)
+ CFLAGS="${SAVED_CFLAGS}"
+
+ AS_IF([test "${enable_fvisibility_hidden}" = "yes"], [
+ AC_DEFINE([CLUTTER_GTK_EXTERN], [__attribute__((visibility("default"))) extern],
+ [defines how to decorate public symbols while building])
+ CLUTTER_GTK_HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"
+ ])
+ ;;
+esac
+AC_SUBST(CLUTTER_GTK_HIDDEN_VISIBILITY_CFLAGS)
+
+
m4_define([deprecated_default],
[m4_if(m4_eval(clutter_gtk_minor % 2), [1],
[no],