[mutter] cogl: Mark exported cogl symbols using COGL_EXPORT



commit 6885c37784480917a61ba5218cb196012399c686
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Nov 21 12:15:22 2019 +0100

    cogl: Mark exported cogl symbols using COGL_EXPORT
    
    Just like libmutter-clutter, and libmutter, mark exported symbols with
    an COGL_EXPORT macro. This removes the .map and .map.in files previously
    used, containing a list of semi private symbols. This symbol was out of
    date, i.e. pointed to non-existing symbols, and was also replaced with
    COGL_EXPORT macros.
    
    unit_test_* symbols are exported by the help of the unit test defining
    macro. test_* symbols are no longer supported as it proved unnecessary.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/1059

 cogl/cogl-pango/cogl-pango-glyph-cache.h       |   8 +-
 cogl/cogl-pango/cogl-pango.h                   |  22 ++---
 cogl/cogl-pango/libmutter-cogl-pango.map       |   6 --
 cogl/cogl-pango/meson.build                    |   8 +-
 cogl/cogl-path/cogl-path-functions.h           |  45 ++++-----
 cogl/cogl-path/libmutter-cogl-path.map         |  17 ----
 cogl/cogl-path/meson.build                     |   8 +-
 cogl/cogl/cogl-atlas-texture-private.h         |   4 +-
 cogl/cogl/cogl-atlas-texture.h                 |  11 ++-
 cogl/cogl/cogl-atlas.h                         |   6 +-
 cogl/cogl/cogl-attribute-buffer.h              |   7 +-
 cogl/cogl/cogl-attribute.h                     |  33 +++----
 cogl/cogl/cogl-bitmap.h                        |  24 ++---
 cogl/cogl/cogl-buffer-private.h                |   4 +-
 cogl/cogl/cogl-buffer.h                        |  16 ++--
 cogl/cogl/cogl-clip-stack.h                    |   4 +-
 cogl/cogl/cogl-closure-list-private.h          |   2 +-
 cogl/cogl/cogl-color.h                         |  71 +++++++-------
 cogl/cogl/cogl-context-private.h               |   2 +-
 cogl/cogl/cogl-context.h                       |  19 ++--
 cogl/cogl/cogl-debug.h                         |   6 +-
 cogl/cogl/cogl-depth-state.h                   |  18 ++--
 cogl/cogl/cogl-display.h                       |  11 ++-
 cogl/cogl/cogl-dma-buf-handle.h                |   8 +-
 cogl/cogl/cogl-egl.h                           |   2 +-
 cogl/cogl/cogl-fence.h                         |   6 +-
 cogl/cogl/cogl-frame-info.h                    |   9 +-
 cogl/cogl/cogl-framebuffer-private.h           |   6 +-
 cogl/cogl/cogl-framebuffer.h                   | 123 +++++++++++++------------
 cogl/cogl/cogl-glib-source.h                   |   4 +-
 cogl/cogl/cogl-index-buffer.h                  |   6 +-
 cogl/cogl/cogl-indices.h                       |  17 ++--
 cogl/cogl/cogl-macros.h                        |   2 +
 cogl/cogl/cogl-matrix-stack.h                  |  50 +++++-----
 cogl/cogl/cogl-matrix.h                        |  55 +++++------
 cogl/cogl/cogl-meta-texture.h                  |   2 +-
 cogl/cogl/cogl-mutter.h                        |   1 +
 cogl/cogl/cogl-object-private.h                |   2 +-
 cogl/cogl/cogl-object.h                        |  13 +--
 cogl/cogl/cogl-offscreen.h                     |   9 +-
 cogl/cogl/cogl-onscreen-private.h              |   6 +-
 cogl/cogl/cogl-onscreen-template.h             |   9 +-
 cogl/cogl/cogl-onscreen.h                      |  40 ++++----
 cogl/cogl/cogl-output.h                        |  19 ++--
 cogl/cogl/cogl-pipeline-layer-private.h        |   2 +-
 cogl/cogl/cogl-pipeline-layer-state.h          |  38 ++++----
 cogl/cogl/cogl-pipeline-private.h              |   4 +-
 cogl/cogl/cogl-pipeline-state.h                |  54 +++++------
 cogl/cogl/cogl-pipeline.h                      |  11 ++-
 cogl/cogl/cogl-pixel-buffer.h                  |   5 +-
 cogl/cogl/cogl-pixel-format.h                  |   7 +-
 cogl/cogl/cogl-poll-private.h                  |   4 +-
 cogl/cogl/cogl-poll.h                          |   4 +-
 cogl/cogl/cogl-primitive-private.h             |   2 +-
 cogl/cogl/cogl-primitive-texture.h             |   2 +-
 cogl/cogl/cogl-primitive.h                     |  47 +++++-----
 cogl/cogl/cogl-profile.h                       |   2 +-
 cogl/cogl/cogl-renderer.h                      |  27 +++---
 cogl/cogl/cogl-snippet.h                       |  23 ++---
 cogl/cogl/cogl-sub-texture.h                   |   6 +-
 cogl/cogl/cogl-swap-chain.h                    |   9 +-
 cogl/cogl/cogl-texture-2d-sliced.h             |  11 ++-
 cogl/cogl/cogl-texture-2d.h                    |  19 ++--
 cogl/cogl/cogl-texture-private.h               |   6 +-
 cogl/cogl/cogl-texture.h                       |  34 +++----
 cogl/cogl/cogl-trace.h                         |  51 +++++-----
 cogl/cogl/cogl-types.h                         |   5 +-
 cogl/cogl/cogl-util.c                          |   2 +-
 cogl/cogl/cogl-wayland-server.h                |   2 +-
 cogl/cogl/cogl-xlib-renderer.h                 |  14 +--
 cogl/cogl/cogl1-context.h                      |  14 +--
 cogl/cogl/deprecated/cogl-auto-texture.h       |  10 +-
 cogl/cogl/deprecated/cogl-clutter.h            |   2 +-
 cogl/cogl/deprecated/cogl-material-compat.h    |  29 +++---
 cogl/cogl/deprecated/cogl-shader.h             |  28 +++---
 cogl/cogl/meson.build                          |  16 +---
 cogl/cogl/winsys/cogl-texture-pixmap-x11.h     |  14 +--
 cogl/cogl/winsys/cogl-winsys-egl-private.h     |   8 +-
 cogl/cogl/winsys/cogl-winsys-egl-x11-private.h |   2 +-
 cogl/cogl/winsys/cogl-winsys-egl-x11.c         |   2 +-
 cogl/cogl/winsys/cogl-winsys-glx-private.h     |   2 +-
 cogl/cogl/winsys/cogl-winsys-glx.c             |   2 +-
 cogl/cogl/winsys/cogl-winsys-private.h         |   2 +-
 cogl/test-fixtures/test-unit.h                 |   2 +
 84 files changed, 637 insertions(+), 628 deletions(-)
---
diff --git a/cogl/cogl-pango/cogl-pango-glyph-cache.h b/cogl/cogl-pango/cogl-pango-glyph-cache.h
index 0e523184d..a03330dd2 100644
--- a/cogl/cogl-pango/cogl-pango-glyph-cache.h
+++ b/cogl/cogl-pango/cogl-pango-glyph-cache.h
@@ -67,20 +67,20 @@ typedef void (* CoglPangoGlyphCacheDirtyFunc) (PangoFont *font,
                                                PangoGlyph glyph,
                                                CoglPangoGlyphCacheValue *value);
 
-CoglPangoGlyphCache *
+COGL_EXPORT CoglPangoGlyphCache *
 cogl_pango_glyph_cache_new (CoglContext *ctx,
                             gboolean use_mipmapping);
 
-void
+COGL_EXPORT void
 cogl_pango_glyph_cache_free (CoglPangoGlyphCache *cache);
 
-CoglPangoGlyphCacheValue *
+COGL_EXPORT CoglPangoGlyphCacheValue *
 cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache,
                                gboolean             create,
                                PangoFont           *font,
                                PangoGlyph           glyph);
 
-void
+COGL_EXPORT void
 cogl_pango_glyph_cache_clear (CoglPangoGlyphCache *cache);
 
 void
diff --git a/cogl/cogl-pango/cogl-pango.h b/cogl/cogl-pango/cogl-pango.h
index bd265fa93..cd57e6b00 100644
--- a/cogl/cogl-pango/cogl-pango.h
+++ b/cogl/cogl-pango/cogl-pango.h
@@ -75,7 +75,7 @@ typedef PangoCairoFontMap CoglPangoFontMap;
  *
  * Since: 1.14
  */
-PangoFontMap *
+COGL_EXPORT PangoFontMap *
 cogl_pango_font_map_new (void);
 
 /**
@@ -86,7 +86,7 @@ cogl_pango_font_map_new (void);
  *
  * Returns: (transfer full): the newly created context: free with g_object_unref().
  */
-PangoContext *
+COGL_EXPORT PangoContext *
 cogl_pango_font_map_create_context (CoglPangoFontMap *font_map);
 
 /**
@@ -102,7 +102,7 @@ cogl_pango_font_map_create_context (CoglPangoFontMap *font_map);
  *
  * Since: 1.14
  */
-void
+COGL_EXPORT void
 cogl_pango_font_map_set_resolution (CoglPangoFontMap *font_map,
                                     double dpi);
 
@@ -114,7 +114,7 @@ cogl_pango_font_map_set_resolution (CoglPangoFontMap *font_map,
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_pango_font_map_clear_glyph_cache (CoglPangoFontMap *font_map);
 
 /**
@@ -129,7 +129,7 @@ cogl_pango_font_map_clear_glyph_cache (CoglPangoFontMap *font_map);
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_pango_ensure_glyph_cache_for_layout (PangoLayout *layout);
 
 /**
@@ -142,7 +142,7 @@ cogl_pango_ensure_glyph_cache_for_layout (PangoLayout *layout);
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_pango_font_map_set_use_mipmapping (CoglPangoFontMap *font_map,
                                         gboolean value);
 
@@ -157,7 +157,7 @@ cogl_pango_font_map_set_use_mipmapping (CoglPangoFontMap *font_map,
  *
  * Since: 1.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pango_font_map_get_use_mipmapping (CoglPangoFontMap *font_map);
 
 /**
@@ -170,7 +170,7 @@ cogl_pango_font_map_get_use_mipmapping (CoglPangoFontMap *font_map);
  *
  * Since: 1.0
  */
-PangoRenderer *
+COGL_EXPORT PangoRenderer *
 cogl_pango_font_map_get_renderer (CoglPangoFontMap *font_map);
 
 /**
@@ -187,7 +187,7 @@ cogl_pango_font_map_get_renderer (CoglPangoFontMap *font_map);
  *
  * Since: 1.14
  */
-void
+COGL_EXPORT void
 cogl_pango_show_layout (CoglFramebuffer *framebuffer,
                         PangoLayout *layout,
                         float x,
@@ -208,7 +208,7 @@ cogl_pango_show_layout (CoglFramebuffer *framebuffer,
  *
  * Since: 1.14
  */
-void
+COGL_EXPORT void
 cogl_pango_show_layout_line (CoglFramebuffer *framebuffer,
                              PangoLayoutLine *line,
                              float x,
@@ -227,7 +227,7 @@ cogl_pango_show_layout_line (CoglFramebuffer *framebuffer,
 typedef struct _CoglPangoRenderer      CoglPangoRenderer;
 typedef struct _CoglPangoRendererClass CoglPangoRendererClass;
 
-GType cogl_pango_renderer_get_type (void) G_GNUC_CONST;
+COGL_EXPORT GType cogl_pango_renderer_get_type (void) G_GNUC_CONST;
 
 G_END_DECLS
 
diff --git a/cogl/cogl-pango/meson.build b/cogl/cogl-pango/meson.build
index 06fba5195..23bee005c 100644
--- a/cogl/cogl-pango/meson.build
+++ b/cogl/cogl-pango/meson.build
@@ -20,19 +20,13 @@ cogl_pango_deps = [
   libmutter_cogl_dep,
 ]
 
-libmutter_cogl_pango_map = 'libmutter-cogl-pango.map'
-libmutter_cogl_pango_link_args = [
-  '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(),
-      libmutter_cogl_pango_map),
-]
 libmutter_cogl_pango = shared_library('mutter-cogl-pango-' + libmutter_api_version,
   sources: [cogl_pango_sources, cogl_pango_public_headers],
   version: '0.0.0',
   soversion: 0,
   c_args: cogl_c_args,
   include_directories: [cogl_includepath, cogl_path_includepath],
-  link_depends: libmutter_cogl_pango_map,
-  link_args: libmutter_cogl_pango_link_args,
+  gnu_symbol_visibility: 'hidden',
   dependencies: [cogl_pango_deps],
   install_rpath: pkglibdir,
   install_dir: pkglibdir,
diff --git a/cogl/cogl-path/cogl-path-functions.h b/cogl/cogl-path/cogl-path-functions.h
index 96ed23168..11e935b6c 100644
--- a/cogl/cogl-path/cogl-path-functions.h
+++ b/cogl/cogl-path/cogl-path-functions.h
@@ -50,6 +50,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_path_get_gtype (void);
 
 #define cogl_path_new cogl2_path_new
@@ -64,7 +65,7 @@ GType cogl_path_get_gtype (void);
  *
  * Since: 2.0
  */
-CoglPath *
+COGL_EXPORT CoglPath *
 cogl_path_new (void);
 
 /**
@@ -82,7 +83,7 @@ cogl_path_new (void);
  *
  * Since: 2.0
  */
-CoglPath *
+COGL_EXPORT CoglPath *
 cogl_path_copy (CoglPath *path);
 
 /**
@@ -96,7 +97,7 @@ cogl_path_copy (CoglPath *path);
  *
  * Since: 2.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_path (void *object);
 
 #define cogl_path_move_to cogl2_path_move_to
@@ -110,7 +111,7 @@ cogl_is_path (void *object);
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_move_to (CoglPath *path,
                    float x,
                    float y);
@@ -127,7 +128,7 @@ cogl_path_move_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_rel_move_to (CoglPath *path,
                        float x,
                        float y);
@@ -143,7 +144,7 @@ cogl_path_rel_move_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_line_to (CoglPath *path,
                    float x,
                    float y);
@@ -159,7 +160,7 @@ cogl_path_line_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_rel_line_to (CoglPath *path,
                        float x,
                        float y);
@@ -187,7 +188,7 @@ cogl_path_rel_line_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_arc (CoglPath *path,
                float center_x,
                float center_y,
@@ -212,7 +213,7 @@ cogl_path_arc (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_curve_to (CoglPath *path,
                     float x_1,
                     float y_1,
@@ -238,7 +239,7 @@ cogl_path_curve_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_rel_curve_to (CoglPath *path,
                         float x_1,
                         float y_1,
@@ -256,7 +257,7 @@ cogl_path_rel_curve_to (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_close (CoglPath *path);
 
 #define cogl_path_line cogl2_path_line
@@ -273,7 +274,7 @@ cogl_path_close (CoglPath *path);
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_line (CoglPath *path,
                 float x_1,
                 float y_1,
@@ -301,7 +302,7 @@ cogl_path_line (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_polyline (CoglPath *path,
                     const float *coords,
                     int num_points);
@@ -323,7 +324,7 @@ cogl_path_polyline (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_polygon (CoglPath *path,
                    const float *coords,
                    int num_points);
@@ -341,7 +342,7 @@ cogl_path_polygon (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_rectangle (CoglPath *path,
                      float x_1,
                      float y_1,
@@ -361,7 +362,7 @@ cogl_path_rectangle (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_ellipse (CoglPath *path,
                    float center_x,
                    float center_y,
@@ -384,7 +385,7 @@ cogl_path_ellipse (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_round_rectangle (CoglPath *path,
                            float x_1,
                            float y_1,
@@ -406,7 +407,7 @@ cogl_path_round_rectangle (CoglPath *path,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_path_set_fill_rule (CoglPath *path, CoglPathFillRule fill_rule);
 
 #define cogl_path_get_fill_rule cogl2_path_get_fill_rule
@@ -419,7 +420,7 @@ cogl_path_set_fill_rule (CoglPath *path, CoglPathFillRule fill_rule);
  *
  * Since: 2.0
  */
-CoglPathFillRule
+COGL_EXPORT CoglPathFillRule
 cogl_path_get_fill_rule (CoglPath *path);
 
 /**
@@ -441,7 +442,7 @@ cogl_path_get_fill_rule (CoglPath *path);
  *
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_fill_path (CoglFramebuffer *framebuffer,
                             CoglPipeline *pipeline,
                             CoglPath *path);
@@ -458,7 +459,7 @@ cogl_framebuffer_fill_path (CoglFramebuffer *framebuffer,
  *
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_stroke_path (CoglFramebuffer *framebuffer,
                               CoglPipeline *pipeline,
                               CoglPath *path);
@@ -476,7 +477,7 @@ cogl_framebuffer_stroke_path (CoglFramebuffer *framebuffer,
  * Since: 1.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer,
                                  CoglPath *path);
 
diff --git a/cogl/cogl-path/meson.build b/cogl/cogl-path/meson.build
index e086a622f..74fcfee2b 100644
--- a/cogl/cogl-path/meson.build
+++ b/cogl/cogl-path/meson.build
@@ -53,19 +53,13 @@ cogl_path_c_args = [
   cogl_c_args,
 ]
 
-libmutter_cogl_path_map = 'libmutter-cogl-path.map'
-libmutter_cogl_path_link_args = [
-  '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(),
-      libmutter_cogl_path_map),
-]
 libmutter_cogl_path = shared_library('mutter-cogl-path-' + libmutter_api_version,
   sources: [cogl_path_sources, cogl_path_public_headers],
   version: '0.0.0',
   soversion: 0,
   c_args: cogl_path_c_args,
   include_directories: [cogl_includepath, cogl_path_includepath],
-  link_depends: libmutter_cogl_path_map,
-  link_args: libmutter_cogl_path_link_args,
+  gnu_symbol_visibility: 'hidden',
   dependencies: libmutter_cogl_dep,
   install_rpath: pkglibdir,
   install_dir: pkglibdir,
diff --git a/cogl/cogl/cogl-atlas-texture-private.h b/cogl/cogl/cogl-atlas-texture-private.h
index e5d143021..336bf1cfa 100644
--- a/cogl/cogl/cogl-atlas-texture-private.h
+++ b/cogl/cogl/cogl-atlas-texture-private.h
@@ -65,12 +65,12 @@ CoglAtlasTexture *
 _cogl_atlas_texture_new_from_bitmap (CoglBitmap *bmp,
                                      gboolean can_convert_in_place);
 
-void
+COGL_EXPORT void
 _cogl_atlas_texture_add_reorganize_callback (CoglContext *ctx,
                                              GHookFunc callback,
                                              void *user_data);
 
-void
+COGL_EXPORT void
 _cogl_atlas_texture_remove_reorganize_callback (CoglContext *ctx,
                                                 GHookFunc callback,
                                                 void *user_data);
diff --git a/cogl/cogl/cogl-atlas-texture.h b/cogl/cogl/cogl-atlas-texture.h
index 2958ed0d8..5c6184a42 100644
--- a/cogl/cogl/cogl-atlas-texture.h
+++ b/cogl/cogl/cogl-atlas-texture.h
@@ -74,6 +74,7 @@ typedef struct _CoglAtlasTexture CoglAtlasTexture;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_atlas_texture_get_gtype (void);
 
 /**
@@ -108,7 +109,7 @@ GType cogl_atlas_texture_get_gtype (void);
  * Since: 1.16
  * Stability: unstable
  */
-CoglAtlasTexture *
+COGL_EXPORT CoglAtlasTexture *
 cogl_atlas_texture_new_with_size (CoglContext *ctx,
                                   int width,
                                   int height);
@@ -146,7 +147,7 @@ cogl_atlas_texture_new_with_size (CoglContext *ctx,
  * Since: 1.16
  * Stability: unstable
  */
-CoglAtlasTexture *
+COGL_EXPORT CoglAtlasTexture *
 cogl_atlas_texture_new_from_file (CoglContext *ctx,
                                   const char *filename,
                                   GError **error);
@@ -191,7 +192,7 @@ cogl_atlas_texture_new_from_file (CoglContext *ctx,
  * Since: 1.16
  * Stability: unstable
  */
-CoglAtlasTexture *
+COGL_EXPORT CoglAtlasTexture *
 cogl_atlas_texture_new_from_data (CoglContext *ctx,
                                   int width,
                                   int height,
@@ -231,7 +232,7 @@ cogl_atlas_texture_new_from_data (CoglContext *ctx,
  * Since: 1.16
  * Stability: unstable
  */
-CoglAtlasTexture *
+COGL_EXPORT CoglAtlasTexture *
 cogl_atlas_texture_new_from_bitmap (CoglBitmap *bmp);
 
 /**
@@ -246,7 +247,7 @@ cogl_atlas_texture_new_from_bitmap (CoglBitmap *bmp);
  * Since: 1.16
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_atlas_texture (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-atlas.h b/cogl/cogl/cogl-atlas.h
index 096fff92c..304161046 100644
--- a/cogl/cogl/cogl-atlas.h
+++ b/cogl/cogl/cogl-atlas.h
@@ -64,12 +64,12 @@ struct _CoglAtlas
   GHookList post_reorganize_callbacks;
 };
 
-CoglAtlas *
+COGL_EXPORT CoglAtlas *
 _cogl_atlas_new (CoglPixelFormat texture_format,
                  CoglAtlasFlags flags,
                  CoglAtlasUpdatePositionCallback update_position_cb);
 
-gboolean
+COGL_EXPORT gboolean
 _cogl_atlas_reserve_space (CoglAtlas             *atlas,
                            unsigned int           width,
                            unsigned int           height,
@@ -87,7 +87,7 @@ _cogl_atlas_copy_rectangle (CoglAtlas *atlas,
                             int height,
                             CoglPixelFormat format);
 
-void
+COGL_EXPORT void
 _cogl_atlas_add_reorganize_callback (CoglAtlas            *atlas,
                                      GHookFunc             pre_callback,
                                      GHookFunc             post_callback,
diff --git a/cogl/cogl/cogl-attribute-buffer.h b/cogl/cogl/cogl-attribute-buffer.h
index 0ec3876cc..9175a8b66 100644
--- a/cogl/cogl/cogl-attribute-buffer.h
+++ b/cogl/cogl/cogl-attribute-buffer.h
@@ -64,6 +64,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_attribute_buffer_get_gtype (void);
 
 /**
@@ -89,7 +90,7 @@ GType cogl_attribute_buffer_get_gtype (void);
  *
  * Stability: Unstable
  */
-CoglAttributeBuffer *
+COGL_EXPORT CoglAttributeBuffer *
 cogl_attribute_buffer_new_with_size (CoglContext *context,
                                      size_t bytes);
 
@@ -122,7 +123,7 @@ cogl_attribute_buffer_new_with_size (CoglContext *context,
  * Since: 1.4
  * Stability: Unstable
  */
-CoglAttributeBuffer *
+COGL_EXPORT CoglAttributeBuffer *
 cogl_attribute_buffer_new (CoglContext *context,
                            size_t bytes,
                            const void *data);
@@ -139,7 +140,7 @@ cogl_attribute_buffer_new (CoglContext *context,
  * Since: 1.4
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_attribute_buffer (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-attribute.h b/cogl/cogl/cogl-attribute.h
index bad33cbd9..f35274b56 100644
--- a/cogl/cogl/cogl-attribute.h
+++ b/cogl/cogl/cogl-attribute.h
@@ -63,6 +63,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_attribute_get_gtype (void);
 
 /**
@@ -155,7 +156,7 @@ GType cogl_attribute_get_gtype (void);
  */
 /* XXX: look for a precedent to see if the stride/offset args should
  * have a different order. */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new (CoglAttributeBuffer *attribute_buffer,
                     const char *name,
                     size_t stride,
@@ -183,7 +184,7 @@ cogl_attribute_new (CoglAttributeBuffer *attribute_buffer,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant @value.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_1f (CoglContext *context,
                              const char *name,
                              float value);
@@ -210,7 +211,7 @@ cogl_attribute_new_const_1f (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_2f (CoglContext *context,
                              const char *name,
                              float component0,
@@ -242,7 +243,7 @@ cogl_attribute_new_const_2f (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_3f (CoglContext *context,
                              const char *name,
                              float component0,
@@ -277,7 +278,7 @@ cogl_attribute_new_const_3f (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_4f (CoglContext *context,
                              const char *name,
                              float component0,
@@ -306,7 +307,7 @@ cogl_attribute_new_const_4f (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_2fv (CoglContext *context,
                               const char *name,
                               const float *value);
@@ -335,7 +336,7 @@ cogl_attribute_new_const_2fv (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_3fv (CoglContext *context,
                               const char *name,
                               const float *value);
@@ -365,7 +366,7 @@ cogl_attribute_new_const_3fv (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant vector.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_4fv (CoglContext *context,
                               const char *name,
                               const float *value);
@@ -398,7 +399,7 @@ cogl_attribute_new_const_4fv (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant matrix.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_2x2fv (CoglContext *context,
                                 const char *name,
                                 const float *matrix2x2,
@@ -433,7 +434,7 @@ cogl_attribute_new_const_2x2fv (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant matrix.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_3x3fv (CoglContext *context,
                                 const char *name,
                                 const float *matrix3x3,
@@ -468,7 +469,7 @@ cogl_attribute_new_const_3x3fv (CoglContext *context,
  * Return value: (transfer full): A newly allocated #CoglAttribute
  *          representing the given constant matrix.
  */
-CoglAttribute *
+COGL_EXPORT CoglAttribute *
 cogl_attribute_new_const_4x4fv (CoglContext *context,
                                 const char *name,
                                 const float *matrix4x4,
@@ -492,7 +493,7 @@ cogl_attribute_new_const_4x4fv (CoglContext *context,
  * Stability: unstable
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_attribute_set_normalized (CoglAttribute *attribute,
                                gboolean normalized);
 
@@ -506,7 +507,7 @@ cogl_attribute_set_normalized (CoglAttribute *attribute,
  * Stability: unstable
  * Since: 1.10
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_attribute_get_normalized (CoglAttribute *attribute);
 
 /**
@@ -519,7 +520,7 @@ cogl_attribute_get_normalized (CoglAttribute *attribute);
  * Stability: unstable
  * Since: 1.10
  */
-CoglAttributeBuffer *
+COGL_EXPORT CoglAttributeBuffer *
 cogl_attribute_get_buffer (CoglAttribute *attribute);
 
 /**
@@ -532,7 +533,7 @@ cogl_attribute_get_buffer (CoglAttribute *attribute);
  * Stability: unstable
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_attribute_set_buffer (CoglAttribute *attribute,
                            CoglAttributeBuffer *attribute_buffer);
 
@@ -545,7 +546,7 @@ cogl_attribute_set_buffer (CoglAttribute *attribute,
  * Return value: %TRUE if the @object references a #CoglAttribute,
  *   %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_attribute (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-bitmap.h b/cogl/cogl/cogl-bitmap.h
index 6f5339ae0..955fbb59d 100644
--- a/cogl/cogl/cogl-bitmap.h
+++ b/cogl/cogl/cogl-bitmap.h
@@ -54,6 +54,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_bitmap_get_gtype (void);
 
 /**
@@ -80,7 +81,7 @@ GType cogl_bitmap_get_gtype (void);
  *
  * Since: 1.0
  */
-CoglBitmap *
+COGL_EXPORT CoglBitmap *
 cogl_bitmap_new_from_file (const char *filename,
                            GError **error);
 
@@ -103,7 +104,7 @@ cogl_bitmap_new_from_file (const char *filename,
  * Since: 1.8
  * Stability: unstable
  */
-CoglBitmap *
+COGL_EXPORT CoglBitmap *
 cogl_bitmap_new_from_buffer (CoglBuffer *buffer,
                              CoglPixelFormat format,
                              int width,
@@ -140,7 +141,7 @@ cogl_bitmap_new_from_buffer (CoglBuffer *buffer,
  * Since: 1.10
  * Stability: Unstable
  */
-CoglBitmap *
+COGL_EXPORT CoglBitmap *
 cogl_bitmap_new_with_size (CoglContext *context,
                            unsigned int width,
                            unsigned int height,
@@ -166,7 +167,7 @@ cogl_bitmap_new_with_size (CoglContext *context,
  * Since: 1.10
  * Stability: unstable
  */
-CoglBitmap *
+COGL_EXPORT CoglBitmap *
 cogl_bitmap_new_for_data (CoglContext *context,
                           int width,
                           int height,
@@ -182,7 +183,7 @@ cogl_bitmap_new_for_data (CoglContext *context,
  * Since: 1.10
  * Stability: unstable
  */
-CoglPixelFormat
+COGL_EXPORT CoglPixelFormat
 cogl_bitmap_get_format (CoglBitmap *bitmap);
 
 /**
@@ -193,7 +194,7 @@ cogl_bitmap_get_format (CoglBitmap *bitmap);
  * Since: 1.10
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_bitmap_get_width (CoglBitmap *bitmap);
 
 /**
@@ -204,7 +205,7 @@ cogl_bitmap_get_width (CoglBitmap *bitmap);
  * Since: 1.10
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_bitmap_get_height (CoglBitmap *bitmap);
 
 /**
@@ -217,7 +218,7 @@ cogl_bitmap_get_height (CoglBitmap *bitmap);
  * Since: 1.10
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_bitmap_get_rowstride (CoglBitmap *bitmap);
 
 /**
@@ -231,7 +232,7 @@ cogl_bitmap_get_rowstride (CoglBitmap *bitmap);
  * Stability: unstable
  * Since: 1.10
  */
-CoglPixelBuffer *
+COGL_EXPORT CoglPixelBuffer *
 cogl_bitmap_get_buffer (CoglBitmap *bitmap);
 
 /**
@@ -247,7 +248,7 @@ cogl_bitmap_get_buffer (CoglBitmap *bitmap);
  *
  * Since: 1.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_bitmap_get_size_from_file (const char *filename,
                                 int *width,
                                 int *height);
@@ -263,7 +264,7 @@ cogl_bitmap_get_size_from_file (const char *filename,
  *
  * Since: 1.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_bitmap (void *object);
 
 /**
@@ -297,6 +298,7 @@ typedef enum
   COGL_BITMAP_ERROR_CORRUPT_IMAGE
 } CoglBitmapError;
 
+COGL_EXPORT
 uint32_t cogl_bitmap_error_quark (void);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-buffer-private.h b/cogl/cogl/cogl-buffer-private.h
index 5ad556f6b..1e8113838 100644
--- a/cogl/cogl/cogl-buffer-private.h
+++ b/cogl/cogl/cogl-buffer-private.h
@@ -168,10 +168,10 @@ void *
 _cogl_buffer_map_range_for_fill_or_fallback (CoglBuffer *buffer,
                                              size_t offset,
                                              size_t size);
-void *
+COGL_EXPORT void *
 _cogl_buffer_map_for_fill_or_fallback (CoglBuffer *buffer);
 
-void
+COGL_EXPORT void
 _cogl_buffer_unmap_for_fill_or_fallback (CoglBuffer *buffer);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-buffer.h b/cogl/cogl/cogl-buffer.h
index 2964f638a..4dc1f5744 100644
--- a/cogl/cogl/cogl-buffer.h
+++ b/cogl/cogl/cogl-buffer.h
@@ -107,7 +107,7 @@ _cogl_buffer_error_domain (void);
  * Since: 1.2
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_buffer (void *object);
 
 /**
@@ -121,7 +121,7 @@ cogl_is_buffer (void *object);
  * Since: 1.2
  * Stability: unstable
  */
-unsigned int
+COGL_EXPORT unsigned int
 cogl_buffer_get_size (CoglBuffer *buffer);
 
 /**
@@ -155,7 +155,7 @@ typedef enum /*< prefix=COGL_BUFFER_UPDATE_HINT >*/
  * Since: 1.2
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_buffer_set_update_hint (CoglBuffer          *buffer,
                              CoglBufferUpdateHint hint);
 
@@ -170,7 +170,7 @@ cogl_buffer_set_update_hint (CoglBuffer          *buffer,
  * Since: 1.2
  * Stability: unstable
  */
-CoglBufferUpdateHint
+COGL_EXPORT CoglBufferUpdateHint
 cogl_buffer_get_update_hint (CoglBuffer *buffer);
 
 /**
@@ -244,7 +244,7 @@ typedef enum /*< prefix=COGL_BUFFER_MAP_HINT >*/
  * Since: 1.2
  * Stability: unstable
  */
-void *
+COGL_EXPORT void *
 cogl_buffer_map (CoglBuffer *buffer,
                  CoglBufferAccess access,
                  CoglBufferMapHint hints);
@@ -281,7 +281,7 @@ cogl_buffer_map (CoglBuffer *buffer,
  * Since: 2.0
  * Stability: unstable
  */
-void *
+COGL_EXPORT void *
 cogl_buffer_map_range (CoglBuffer *buffer,
                        size_t offset,
                        size_t size,
@@ -298,7 +298,7 @@ cogl_buffer_map_range (CoglBuffer *buffer,
  * Since: 1.2
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_buffer_unmap (CoglBuffer *buffer);
 
 /**
@@ -317,7 +317,7 @@ cogl_buffer_unmap (CoglBuffer *buffer);
  * Since: 1.2
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_buffer_set_data (CoglBuffer *buffer,
                       size_t offset,
                       const void *data,
diff --git a/cogl/cogl/cogl-clip-stack.h b/cogl/cogl/cogl-clip-stack.h
index 372e7347a..62d65bcd3 100644
--- a/cogl/cogl/cogl-clip-stack.h
+++ b/cogl/cogl/cogl-clip-stack.h
@@ -178,7 +178,7 @@ _cogl_clip_stack_push_window_rectangle (CoglClipStack *stack,
                                         int width,
                                         int height);
 
-CoglClipStack *
+COGL_EXPORT CoglClipStack *
 _cogl_clip_stack_push_rectangle (CoglClipStack *stack,
                                  float x_1,
                                  float y_1,
@@ -188,7 +188,7 @@ _cogl_clip_stack_push_rectangle (CoglClipStack *stack,
                                  CoglMatrixEntry *projection_entry,
                                  const float *viewport);
 
-CoglClipStack *
+COGL_EXPORT CoglClipStack *
 _cogl_clip_stack_push_primitive (CoglClipStack *stack,
                                  CoglPrimitive *primitive,
                                  float bounds_x1,
diff --git a/cogl/cogl/cogl-closure-list-private.h b/cogl/cogl/cogl-closure-list-private.h
index 5446cb207..f4b829ba7 100644
--- a/cogl/cogl/cogl-closure-list-private.h
+++ b/cogl/cogl/cogl-closure-list-private.h
@@ -65,7 +65,7 @@ typedef struct _CoglClosure
  * Removes the given closure from the callback list it is connected to
  * and destroys it. If the closure was created with a destroy function
  * then it will be invoked. */
-void
+COGL_EXPORT void
 _cogl_closure_disconnect (CoglClosure *closure);
 
 void
diff --git a/cogl/cogl/cogl-color.h b/cogl/cogl/cogl-color.h
index b07f8698f..0defb733c 100644
--- a/cogl/cogl/cogl-color.h
+++ b/cogl/cogl/cogl-color.h
@@ -57,6 +57,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_color_get_gtype (void);
 
 /**
@@ -69,7 +70,7 @@ GType cogl_color_get_gtype (void);
  *
  * Since: 1.0
  */
-CoglColor *
+COGL_EXPORT CoglColor *
 cogl_color_new (void);
 
 /**
@@ -83,7 +84,7 @@ cogl_color_new (void);
  *
  * Since: 1.0
  */
-CoglColor *
+COGL_EXPORT CoglColor *
 cogl_color_copy (const CoglColor *color);
 
 /**
@@ -94,7 +95,7 @@ cogl_color_copy (const CoglColor *color);
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_color_free (CoglColor *color);
 
 /**
@@ -109,7 +110,7 @@ cogl_color_free (CoglColor *color);
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_init_from_4ub (CoglColor *color,
                           uint8_t red,
                           uint8_t green,
@@ -128,7 +129,7 @@ cogl_color_init_from_4ub (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_init_from_4f (CoglColor *color,
                          float red,
                          float green,
@@ -144,7 +145,7 @@ cogl_color_init_from_4f (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_init_from_4fv (CoglColor *color,
                           const float *color_array);
 
@@ -159,7 +160,7 @@ cogl_color_init_from_4fv (CoglColor *color,
  *
  * Since: 1.0
  */
-unsigned char
+COGL_EXPORT unsigned char
 cogl_color_get_red_byte (const CoglColor *color);
 
 /**
@@ -173,7 +174,7 @@ cogl_color_get_red_byte (const CoglColor *color);
  *
  * Since: 1.0
  */
-unsigned char
+COGL_EXPORT unsigned char
 cogl_color_get_green_byte (const CoglColor *color);
 
 /**
@@ -187,7 +188,7 @@ cogl_color_get_green_byte (const CoglColor *color);
  *
  * Since: 1.0
  */
-unsigned char
+COGL_EXPORT unsigned char
 cogl_color_get_blue_byte (const CoglColor *color);
 
 /**
@@ -201,7 +202,7 @@ cogl_color_get_blue_byte (const CoglColor *color);
  *
  * Since: 1.0
  */
-unsigned char
+COGL_EXPORT unsigned char
 cogl_color_get_alpha_byte (const CoglColor *color);
 
 /**
@@ -215,7 +216,7 @@ cogl_color_get_alpha_byte (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_red_float (const CoglColor *color);
 
 /**
@@ -229,7 +230,7 @@ cogl_color_get_red_float (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_green_float (const CoglColor *color);
 
 /**
@@ -243,7 +244,7 @@ cogl_color_get_green_float (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_blue_float (const CoglColor *color);
 
 /**
@@ -257,7 +258,7 @@ cogl_color_get_blue_float (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_alpha_float (const CoglColor *color);
 
 /**
@@ -271,7 +272,7 @@ cogl_color_get_alpha_float (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_red (const CoglColor *color);
 
 /**
@@ -285,7 +286,7 @@ cogl_color_get_red (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_green (const CoglColor *color);
 
 /**
@@ -299,7 +300,7 @@ cogl_color_get_green (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_blue (const CoglColor *color);
 
 /**
@@ -313,7 +314,7 @@ cogl_color_get_blue (const CoglColor *color);
  *
  * Since: 1.0
  */
-float
+COGL_EXPORT float
 cogl_color_get_alpha (const CoglColor *color);
 
 /**
@@ -325,7 +326,7 @@ cogl_color_get_alpha (const CoglColor *color);
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_red_byte (CoglColor     *color,
                          unsigned char  red);
 
@@ -338,7 +339,7 @@ cogl_color_set_red_byte (CoglColor     *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_green_byte (CoglColor     *color,
                            unsigned char  green);
 
@@ -351,7 +352,7 @@ cogl_color_set_green_byte (CoglColor     *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_blue_byte (CoglColor     *color,
                           unsigned char  blue);
 
@@ -364,7 +365,7 @@ cogl_color_set_blue_byte (CoglColor     *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_alpha_byte (CoglColor     *color,
                            unsigned char  alpha);
 
@@ -377,7 +378,7 @@ cogl_color_set_alpha_byte (CoglColor     *color,
  *
  * since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_red_float (CoglColor *color,
                           float      red);
 
@@ -390,7 +391,7 @@ cogl_color_set_red_float (CoglColor *color,
  *
  * since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_green_float (CoglColor *color,
                             float      green);
 
@@ -403,7 +404,7 @@ cogl_color_set_green_float (CoglColor *color,
  *
  * since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_blue_float (CoglColor *color,
                            float      blue);
 
@@ -416,7 +417,7 @@ cogl_color_set_blue_float (CoglColor *color,
  *
  * since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_alpha_float (CoglColor *color,
                             float      alpha);
 
@@ -429,7 +430,7 @@ cogl_color_set_alpha_float (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_red (CoglColor *color,
                     float      red);
 
@@ -442,7 +443,7 @@ cogl_color_set_red (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_green (CoglColor *color,
                       float green);
 
@@ -455,7 +456,7 @@ cogl_color_set_green (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_blue (CoglColor *color,
                      float blue);
 
@@ -468,7 +469,7 @@ cogl_color_set_blue (CoglColor *color,
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_set_alpha (CoglColor *color,
                       float alpha);
 
@@ -482,7 +483,7 @@ cogl_color_set_alpha (CoglColor *color,
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_color_premultiply (CoglColor *color);
 
 /**
@@ -495,7 +496,7 @@ cogl_color_premultiply (CoglColor *color);
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_color_unpremultiply (CoglColor *color);
 
 /**
@@ -512,7 +513,7 @@ cogl_color_unpremultiply (CoglColor *color);
  *
  * Since: 1.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_color_equal (const void *v1, const void *v2);
 
 /**
@@ -529,7 +530,7 @@ cogl_color_equal (const void *v1, const void *v2);
  *
  * Since: 1.16
  */
-void
+COGL_EXPORT void
 cogl_color_to_hsl (const CoglColor *color,
                    float           *hue,
                    float           *saturation,
@@ -547,7 +548,7 @@ cogl_color_to_hsl (const CoglColor *color,
  *
  * Since: 1.16
  */
-void
+COGL_EXPORT void
 cogl_color_init_from_hsl (CoglColor *color,
                           float      hue,
                           float      saturation,
diff --git a/cogl/cogl/cogl-context-private.h b/cogl/cogl/cogl-context-private.h
index 605fd02df..1880dbc90 100644
--- a/cogl/cogl/cogl-context-private.h
+++ b/cogl/cogl/cogl-context-private.h
@@ -300,7 +300,7 @@ struct _CoglContext
 #undef COGL_EXT_END
 };
 
-CoglContext *
+COGL_EXPORT CoglContext *
 _cogl_context_get_default (void);
 
 const CoglWinsysVtable *
diff --git a/cogl/cogl/cogl-context.h b/cogl/cogl/cogl-context.h
index 241a09bfb..ed0923d0f 100644
--- a/cogl/cogl/cogl-context.h
+++ b/cogl/cogl/cogl-context.h
@@ -99,6 +99,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_context_get_gtype (void);
 
 /**
@@ -113,7 +114,7 @@ GType cogl_context_get_gtype (void);
  * Since: 1.8
  * Stability: unstable
  */
-CoglContext *
+COGL_EXPORT CoglContext *
 cogl_context_new (CoglDisplay *display,
                   GError **error);
 
@@ -132,7 +133,7 @@ cogl_context_new (CoglDisplay *display,
  * Since: 1.8
  * Stability: unstable
  */
-CoglDisplay *
+COGL_EXPORT CoglDisplay *
 cogl_context_get_display (CoglContext *context);
 
 /**
@@ -151,7 +152,7 @@ cogl_context_get_display (CoglContext *context);
  * Since: 1.16
  * Stability: unstable
  */
-CoglRenderer *
+COGL_EXPORT CoglRenderer *
 cogl_context_get_renderer (CoglContext *context);
 
 /**
@@ -166,7 +167,7 @@ cogl_context_get_renderer (CoglContext *context);
  * Since: 1.10
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_context (void *object);
 
 /* XXX: not guarded by the EXPERIMENTAL_API defines to avoid
@@ -234,7 +235,7 @@ typedef enum _CoglFeatureID
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_has_feature (CoglContext *context, CoglFeatureID feature);
 
 /**
@@ -254,7 +255,7 @@ cogl_has_feature (CoglContext *context, CoglFeatureID feature);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_has_features (CoglContext *context, ...);
 
 /**
@@ -283,7 +284,7 @@ typedef void (*CoglFeatureCallback) (CoglFeatureID feature, void *user_data);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_foreach_feature (CoglContext *context,
                       CoglFeatureCallback callback,
                       void *user_data);
@@ -308,7 +309,7 @@ cogl_foreach_feature (CoglContext *context,
  * Since: 1.14
  * Stability: unstable
  */
-int64_t
+COGL_EXPORT int64_t
 cogl_get_clock_time (CoglContext *context);
 
 /**
@@ -350,7 +351,7 @@ typedef enum _CoglGraphicsResetStatus
  *
  * Return value: a #CoglGraphicsResetStatus
  */
-CoglGraphicsResetStatus
+COGL_EXPORT CoglGraphicsResetStatus
 cogl_get_graphics_reset_status (CoglContext *context);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-debug.h b/cogl/cogl/cogl-debug.h
index 127961261..bcbce9791 100644
--- a/cogl/cogl/cogl-debug.h
+++ b/cogl/cogl/cogl-debug.h
@@ -75,10 +75,12 @@ typedef enum
   COGL_DEBUG_N_FLAGS
 } CoglDebugFlags;
 
-extern GHashTable *_cogl_debug_instances;
+COGL_EXPORT
+GHashTable *_cogl_debug_instances;
 #define COGL_DEBUG_N_LONGS COGL_FLAGS_N_LONGS_FOR_SIZE (COGL_DEBUG_N_FLAGS)
 
-extern unsigned long _cogl_debug_flags[COGL_DEBUG_N_LONGS];
+COGL_EXPORT
+unsigned long _cogl_debug_flags[COGL_DEBUG_N_LONGS];
 
 #define COGL_DEBUG_ENABLED(flag) \
   COGL_FLAGS_GET (_cogl_debug_flags, flag)
diff --git a/cogl/cogl/cogl-depth-state.h b/cogl/cogl/cogl-depth-state.h
index 39962011b..b3b240526 100644
--- a/cogl/cogl/cogl-depth-state.h
+++ b/cogl/cogl/cogl-depth-state.h
@@ -84,7 +84,7 @@ typedef struct {
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_init (CoglDepthState *state);
 
 /**
@@ -112,7 +112,7 @@ cogl_depth_state_init (CoglDepthState *state);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_set_test_enabled (CoglDepthState *state,
                                    gboolean enable);
 
@@ -127,7 +127,7 @@ cogl_depth_state_set_test_enabled (CoglDepthState *state,
  * Since: 2.0
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_depth_state_get_test_enabled (CoglDepthState *state);
 
 /**
@@ -150,7 +150,7 @@ cogl_depth_state_get_test_enabled (CoglDepthState *state);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_set_write_enabled (CoglDepthState *state,
                                     gboolean enable);
 
@@ -165,7 +165,7 @@ cogl_depth_state_set_write_enabled (CoglDepthState *state,
  * Since: 2.0
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_depth_state_get_write_enabled (CoglDepthState *state);
 
 /**
@@ -186,7 +186,7 @@ cogl_depth_state_get_write_enabled (CoglDepthState *state);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_set_test_function (CoglDepthState *state,
                                     CoglDepthTestFunction function);
 
@@ -201,7 +201,7 @@ cogl_depth_state_set_test_function (CoglDepthState *state,
  * Since: 2.0
  * Stability: Unstable
  */
-CoglDepthTestFunction
+COGL_EXPORT CoglDepthTestFunction
 cogl_depth_state_get_test_function (CoglDepthState *state);
 
 /**
@@ -235,7 +235,7 @@ cogl_depth_state_get_test_function (CoglDepthState *state);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_set_range (CoglDepthState *state,
                             float near_val,
                             float far_val);
@@ -253,7 +253,7 @@ cogl_depth_state_set_range (CoglDepthState *state,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_depth_state_get_range (CoglDepthState *state,
                             float *near_val,
                             float *far_val);
diff --git a/cogl/cogl/cogl-display.h b/cogl/cogl/cogl-display.h
index 3a51dd75a..098e436ae 100644
--- a/cogl/cogl/cogl-display.h
+++ b/cogl/cogl/cogl-display.h
@@ -75,6 +75,7 @@ typedef struct _CoglDisplay         CoglDisplay;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_display_get_gtype (void);
 
 /**
@@ -117,7 +118,7 @@ GType cogl_display_get_gtype (void);
  * Since: 1.10
  * Stability: unstable
  */
-CoglDisplay *
+COGL_EXPORT CoglDisplay *
 cogl_display_new (CoglRenderer *renderer,
                   CoglOnscreenTemplate *onscreen_template);
 
@@ -132,7 +133,7 @@ cogl_display_new (CoglRenderer *renderer,
  * Since: 1.10
  * Stability: unstable
  */
-CoglRenderer *
+COGL_EXPORT CoglRenderer *
 cogl_display_get_renderer (CoglDisplay *display);
 
 /**
@@ -151,7 +152,7 @@ cogl_display_get_renderer (CoglDisplay *display);
  * Since: 1.16
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_display_set_onscreen_template (CoglDisplay *display,
                                     CoglOnscreenTemplate *onscreen_template);
 
@@ -186,7 +187,7 @@ cogl_display_set_onscreen_template (CoglDisplay *display,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_display_setup (CoglDisplay *display,
                     GError **error);
 
@@ -201,7 +202,7 @@ cogl_display_setup (CoglDisplay *display,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_display (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-dma-buf-handle.h b/cogl/cogl/cogl-dma-buf-handle.h
index 25b9b0ccb..87a2ce2f1 100644
--- a/cogl/cogl/cogl-dma-buf-handle.h
+++ b/cogl/cogl/cogl-dma-buf-handle.h
@@ -43,7 +43,7 @@
 /**
  * cogl_dma_buf_handle_new: (skip)
  */
-CoglDmaBufHandle *
+COGL_EXPORT CoglDmaBufHandle *
 cogl_dma_buf_handle_new (CoglFramebuffer *framebuffer,
                          int              dmabuf_fd,
                          gpointer         data,
@@ -55,7 +55,7 @@ cogl_dma_buf_handle_new (CoglFramebuffer *framebuffer,
  * Releases @dmabuf_handle; it is a programming error to release
  * an already released handle.
  */
-void
+COGL_EXPORT void
 cogl_dma_buf_handle_free (CoglDmaBufHandle *dmabuf_handle);
 
 /**
@@ -66,7 +66,7 @@ cogl_dma_buf_handle_free (CoglDmaBufHandle *dmabuf_handle);
  *
  * Returns: (transfer none): a #CoglFramebuffer
  */
-CoglFramebuffer *
+COGL_EXPORT CoglFramebuffer *
 cogl_dma_buf_handle_get_framebuffer (CoglDmaBufHandle *dmabuf_handle);
 
 /**
@@ -76,7 +76,7 @@ cogl_dma_buf_handle_get_framebuffer (CoglDmaBufHandle *dmabuf_handle);
  *
  * Returns: a valid file descriptor
  */
-int
+COGL_EXPORT int
 cogl_dma_buf_handle_get_fd (CoglDmaBufHandle *dmabuf_handle);
 
 
diff --git a/cogl/cogl/cogl-egl.h b/cogl/cogl/cogl-egl.h
index b9c163126..07dac799b 100644
--- a/cogl/cogl/cogl-egl.h
+++ b/cogl/cogl/cogl-egl.h
@@ -76,7 +76,7 @@ G_BEGIN_DECLS
  * Since: 1.8
  * Stability: unstable
  */
-EGLDisplay
+COGL_EXPORT EGLDisplay
 cogl_egl_context_get_egl_display (CoglContext *context);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-fence.h b/cogl/cogl/cogl-fence.h
index e268f8f5f..22cb88e1f 100644
--- a/cogl/cogl/cogl-fence.h
+++ b/cogl/cogl/cogl-fence.h
@@ -97,7 +97,7 @@ typedef struct _CoglFenceClosure CoglFenceClosure;
  * Since: 2.0
  * Stability: Unstable
  */
-void *
+COGL_EXPORT void *
 cogl_fence_closure_get_user_data (CoglFenceClosure *closure);
 
 /**
@@ -118,7 +118,7 @@ cogl_fence_closure_get_user_data (CoglFenceClosure *closure);
  * Since: 2.0
  * Stability: Unstable
  */
-CoglFenceClosure *
+COGL_EXPORT CoglFenceClosure *
 cogl_framebuffer_add_fence_callback (CoglFramebuffer *framebuffer,
                                      CoglFenceCallback callback,
                                      void *user_data);
@@ -136,7 +136,7 @@ cogl_framebuffer_add_fence_callback (CoglFramebuffer *framebuffer,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_cancel_fence_callback (CoglFramebuffer *framebuffer,
                                         CoglFenceClosure *closure);
 
diff --git a/cogl/cogl/cogl-frame-info.h b/cogl/cogl/cogl-frame-info.h
index 17bfaca3b..e35336b00 100644
--- a/cogl/cogl/cogl-frame-info.h
+++ b/cogl/cogl/cogl-frame-info.h
@@ -53,6 +53,7 @@ typedef struct _CoglFrameInfo CoglFrameInfo;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_frame_info_get_gtype (void);
 
 /**
@@ -66,7 +67,7 @@ GType cogl_frame_info_get_gtype (void);
  * Since: 2.0
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_frame_info (void *object);
 
 /**
@@ -80,6 +81,7 @@ cogl_is_frame_info (void *object);
  * Since: 1.14
  * Stability: unstable
  */
+COGL_EXPORT
 int64_t cogl_frame_info_get_frame_counter (CoglFrameInfo *info);
 
 /**
@@ -101,6 +103,7 @@ int64_t cogl_frame_info_get_frame_counter (CoglFrameInfo *info);
  * Since: 1.14
  * Stability: unstable
  */
+COGL_EXPORT
 int64_t cogl_frame_info_get_presentation_time (CoglFrameInfo *info);
 
 /**
@@ -120,6 +123,7 @@ int64_t cogl_frame_info_get_presentation_time (CoglFrameInfo *info);
  * Since: 1.14
  * Stability: unstable
  */
+COGL_EXPORT
 float cogl_frame_info_get_refresh_rate (CoglFrameInfo *info);
 
 /**
@@ -133,12 +137,13 @@ float cogl_frame_info_get_refresh_rate (CoglFrameInfo *info);
  * Since: 1.14
  * Stability: unstable
  */
-CoglOutput *
+COGL_EXPORT CoglOutput *
 cogl_frame_info_get_output (CoglFrameInfo *info);
 
 /**
  * cogl_frame_info_get_global_frame_counter: (skip)
  */
+COGL_EXPORT
 int64_t cogl_frame_info_get_global_frame_counter (CoglFrameInfo *info);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-framebuffer-private.h b/cogl/cogl/cogl-framebuffer-private.h
index 041a73047..2cbfc7342 100644
--- a/cogl/cogl/cogl-framebuffer-private.h
+++ b/cogl/cogl/cogl-framebuffer-private.h
@@ -268,10 +268,10 @@ _cogl_framebuffer_mark_clear_clip_dirty (CoglFramebuffer *framebuffer);
 CoglClipStack *
 _cogl_framebuffer_get_clip_stack (CoglFramebuffer *framebuffer);
 
-CoglMatrixStack *
+COGL_EXPORT CoglMatrixStack *
 _cogl_framebuffer_get_modelview_stack (CoglFramebuffer *framebuffer);
 
-CoglMatrixStack *
+COGL_EXPORT CoglMatrixStack *
 _cogl_framebuffer_get_projection_stack (CoglFramebuffer *framebuffer);
 
 void
@@ -393,7 +393,7 @@ _cogl_framebuffer_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,
  * Since: 2.0
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 _cogl_framebuffer_get_stencil_bits (CoglFramebuffer *framebuffer);
 
 #endif /* __COGL_FRAMEBUFFER_PRIVATE_H */
diff --git a/cogl/cogl/cogl-framebuffer.h b/cogl/cogl/cogl-framebuffer.h
index eef5089b0..a4bbcf7e4 100644
--- a/cogl/cogl/cogl-framebuffer.h
+++ b/cogl/cogl/cogl-framebuffer.h
@@ -103,6 +103,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_framebuffer_get_gtype (void);
 
 /**
@@ -125,7 +126,7 @@ GType cogl_framebuffer_get_gtype (void);
  * Since: 1.8
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_allocate (CoglFramebuffer *framebuffer,
                            GError **error);
 
@@ -139,7 +140,7 @@ cogl_framebuffer_allocate (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_width (CoglFramebuffer *framebuffer);
 
 /**
@@ -152,7 +153,7 @@ cogl_framebuffer_get_width (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_height (CoglFramebuffer *framebuffer);
 
 /**
@@ -184,7 +185,7 @@ cogl_framebuffer_get_height (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_viewport (CoglFramebuffer *framebuffer,
                                float x,
                                float y,
@@ -202,7 +203,7 @@ cogl_framebuffer_set_viewport (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-float
+COGL_EXPORT float
 cogl_framebuffer_get_viewport_x (CoglFramebuffer *framebuffer);
 
 /**
@@ -216,7 +217,7 @@ cogl_framebuffer_get_viewport_x (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-float
+COGL_EXPORT float
 cogl_framebuffer_get_viewport_y (CoglFramebuffer *framebuffer);
 
 /**
@@ -230,7 +231,7 @@ cogl_framebuffer_get_viewport_y (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-float
+COGL_EXPORT float
 cogl_framebuffer_get_viewport_width (CoglFramebuffer *framebuffer);
 
 /**
@@ -244,7 +245,7 @@ cogl_framebuffer_get_viewport_width (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-float
+COGL_EXPORT float
 cogl_framebuffer_get_viewport_height (CoglFramebuffer *framebuffer);
 
 /**
@@ -262,7 +263,7 @@ cogl_framebuffer_get_viewport_height (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_get_viewport4fv (CoglFramebuffer *framebuffer,
                                   float *viewport);
 
@@ -275,7 +276,7 @@ cogl_framebuffer_get_viewport4fv (CoglFramebuffer *framebuffer,
  *
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_push_matrix (CoglFramebuffer *framebuffer);
 
 /**
@@ -286,7 +287,7 @@ cogl_framebuffer_push_matrix (CoglFramebuffer *framebuffer);
  *
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_pop_matrix (CoglFramebuffer *framebuffer);
 
 /**
@@ -298,7 +299,7 @@ cogl_framebuffer_pop_matrix (CoglFramebuffer *framebuffer);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_identity_matrix (CoglFramebuffer *framebuffer);
 
 /**
@@ -314,7 +315,7 @@ cogl_framebuffer_identity_matrix (CoglFramebuffer *framebuffer);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_scale (CoglFramebuffer *framebuffer,
                         float x,
                         float y,
@@ -333,7 +334,7 @@ cogl_framebuffer_scale (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_translate (CoglFramebuffer *framebuffer,
                             float x,
                             float y,
@@ -356,7 +357,7 @@ cogl_framebuffer_translate (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_rotate (CoglFramebuffer *framebuffer,
                          float angle,
                          float x,
@@ -374,7 +375,7 @@ cogl_framebuffer_rotate (CoglFramebuffer *framebuffer,
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_rotate_euler (CoglFramebuffer *framebuffer,
                                const graphene_euler_t *euler);
 
@@ -388,7 +389,7 @@ cogl_framebuffer_rotate_euler (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_transform (CoglFramebuffer *framebuffer,
                             const CoglMatrix *matrix);
 
@@ -402,7 +403,7 @@ cogl_framebuffer_transform (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_get_modelview_matrix (CoglFramebuffer *framebuffer,
                                        CoglMatrix *matrix);
 
@@ -416,7 +417,7 @@ cogl_framebuffer_get_modelview_matrix (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_modelview_matrix (CoglFramebuffer *framebuffer,
                                        const CoglMatrix *matrix);
 
@@ -440,7 +441,7 @@ cogl_framebuffer_set_modelview_matrix (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_perspective (CoglFramebuffer *framebuffer,
                               float fov_y,
                               float aspect,
@@ -468,7 +469,7 @@ cogl_framebuffer_perspective (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_frustum (CoglFramebuffer *framebuffer,
                           float left,
                           float right,
@@ -497,7 +498,7 @@ cogl_framebuffer_frustum (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_orthographic (CoglFramebuffer *framebuffer,
                                float x_1,
                                float y_1,
@@ -516,7 +517,7 @@ cogl_framebuffer_orthographic (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_get_projection_matrix (CoglFramebuffer *framebuffer,
                                         CoglMatrix *matrix);
 
@@ -530,7 +531,7 @@ cogl_framebuffer_get_projection_matrix (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_projection_matrix (CoglFramebuffer *framebuffer,
                                         const CoglMatrix *matrix);
 
@@ -554,7 +555,7 @@ cogl_framebuffer_set_projection_matrix (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_push_scissor_clip (CoglFramebuffer *framebuffer,
                                     int x,
                                     int y,
@@ -581,7 +582,7 @@ cogl_framebuffer_push_scissor_clip (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_push_rectangle_clip (CoglFramebuffer *framebuffer,
                                       float x_1,
                                       float y_1,
@@ -617,7 +618,7 @@ cogl_framebuffer_push_rectangle_clip (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer,
                                       CoglPrimitive *primitive,
                                       float bounds_x1,
@@ -625,7 +626,7 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer,
                                       float bounds_x2,
                                       float bounds_y2);
 
-void
+COGL_EXPORT void
 cogl_framebuffer_push_region_clip (CoglFramebuffer *framebuffer,
                                    cairo_region_t  *region);
 
@@ -640,7 +641,7 @@ cogl_framebuffer_push_region_clip (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_pop_clip (CoglFramebuffer *framebuffer);
 
 /**
@@ -654,7 +655,7 @@ cogl_framebuffer_pop_clip (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_red_bits (CoglFramebuffer *framebuffer);
 
 /**
@@ -668,7 +669,7 @@ cogl_framebuffer_get_red_bits (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_green_bits (CoglFramebuffer *framebuffer);
 
 /**
@@ -682,7 +683,7 @@ cogl_framebuffer_get_green_bits (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_blue_bits (CoglFramebuffer *framebuffer);
 
 /**
@@ -696,7 +697,7 @@ cogl_framebuffer_get_blue_bits (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_alpha_bits (CoglFramebuffer *framebuffer);
 
 /**
@@ -710,7 +711,7 @@ cogl_framebuffer_get_alpha_bits (CoglFramebuffer *framebuffer);
  * Since: 2.0
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_depth_bits (CoglFramebuffer *framebuffer);
 
 /*
@@ -727,7 +728,7 @@ cogl_framebuffer_get_depth_bits (CoglFramebuffer *framebuffer);
  * Since: 1.20
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_get_is_stereo (CoglFramebuffer *framebuffer);
 
 /**
@@ -745,7 +746,7 @@ cogl_framebuffer_get_is_stereo (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_get_dither_enabled (CoglFramebuffer *framebuffer);
 
 /**
@@ -770,7 +771,7 @@ cogl_framebuffer_get_dither_enabled (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_dither_enabled (CoglFramebuffer *framebuffer,
                                      gboolean dither_enabled);
 
@@ -785,7 +786,7 @@ cogl_framebuffer_set_dither_enabled (CoglFramebuffer *framebuffer,
  * Since: 1.18
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_get_depth_write_enabled (CoglFramebuffer *framebuffer);
 
 /**
@@ -803,7 +804,7 @@ cogl_framebuffer_get_depth_write_enabled (CoglFramebuffer *framebuffer);
  * Since: 1.18
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_depth_write_enabled (CoglFramebuffer *framebuffer,
                                           gboolean depth_write_enabled);
 
@@ -818,7 +819,7 @@ cogl_framebuffer_set_depth_write_enabled (CoglFramebuffer *framebuffer,
  * Since: 1.20
  * Stability: unstable
  */
-CoglStereoMode
+COGL_EXPORT CoglStereoMode
 cogl_framebuffer_get_stereo_mode (CoglFramebuffer *framebuffer);
 
 /**
@@ -838,7 +839,7 @@ cogl_framebuffer_get_stereo_mode (CoglFramebuffer *framebuffer);
  * Since: 1.20
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_stereo_mode (CoglFramebuffer *framebuffer,
                                  CoglStereoMode stereo_mode);
 
@@ -883,7 +884,7 @@ cogl_framebuffer_set_stereo_mode (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_set_samples_per_pixel (CoglFramebuffer *framebuffer,
                                         int samples_per_pixel);
 
@@ -911,7 +912,7 @@ cogl_framebuffer_set_samples_per_pixel (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_framebuffer_get_samples_per_pixel (CoglFramebuffer *framebuffer);
 
 
@@ -943,7 +944,7 @@ cogl_framebuffer_get_samples_per_pixel (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_resolve_samples (CoglFramebuffer *framebuffer);
 
 /**
@@ -979,7 +980,7 @@ cogl_framebuffer_resolve_samples (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_resolve_samples_region (CoglFramebuffer *framebuffer,
                                          int x,
                                          int y,
@@ -999,7 +1000,7 @@ cogl_framebuffer_resolve_samples_region (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-CoglContext *
+COGL_EXPORT CoglContext *
 cogl_framebuffer_get_context (CoglFramebuffer *framebuffer);
 
 /**
@@ -1016,7 +1017,7 @@ cogl_framebuffer_get_context (CoglFramebuffer *framebuffer);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_clear (CoglFramebuffer *framebuffer,
                         unsigned long buffers,
                         const CoglColor *color);
@@ -1041,7 +1042,7 @@ cogl_framebuffer_clear (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_clear4f (CoglFramebuffer *framebuffer,
                           unsigned long buffers,
                           float red,
@@ -1074,7 +1075,7 @@ cogl_framebuffer_clear4f (CoglFramebuffer *framebuffer,
  *                   cogl_primitive_draw() instead
  */
 COGL_DEPRECATED_FOR (cogl_primitive_draw)
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_primitive (CoglFramebuffer *framebuffer,
                                  CoglPipeline *pipeline,
                                  CoglPrimitive *primitive);
@@ -1103,7 +1104,7 @@ cogl_framebuffer_draw_primitive (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_rectangle (CoglFramebuffer *framebuffer,
                                  CoglPipeline *pipeline,
                                  float x_1,
@@ -1154,7 +1155,7 @@ cogl_framebuffer_draw_rectangle (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_textured_rectangle (CoglFramebuffer *framebuffer,
                                           CoglPipeline *pipeline,
                                           float x_1,
@@ -1225,7 +1226,7 @@ cogl_framebuffer_draw_textured_rectangle (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_multitextured_rectangle (CoglFramebuffer *framebuffer,
                                                CoglPipeline *pipeline,
                                                float x_1,
@@ -1269,7 +1270,7 @@ cogl_framebuffer_draw_multitextured_rectangle (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_rectangles (CoglFramebuffer *framebuffer,
                                   CoglPipeline *pipeline,
                                   const float *coordinates,
@@ -1323,7 +1324,7 @@ cogl_framebuffer_draw_rectangles (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_draw_textured_rectangles (CoglFramebuffer *framebuffer,
                                            CoglPipeline *pipeline,
                                            const float *coordinates,
@@ -1358,7 +1359,7 @@ cogl_framebuffer_draw_textured_rectangles (CoglFramebuffer *framebuffer,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_discard_buffers (CoglFramebuffer *framebuffer,
                                   unsigned long buffers);
 
@@ -1379,7 +1380,7 @@ cogl_framebuffer_discard_buffers (CoglFramebuffer *framebuffer,
  * Stability: unstable
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_framebuffer_finish (CoglFramebuffer *framebuffer);
 
 /**
@@ -1408,7 +1409,7 @@ cogl_framebuffer_finish (CoglFramebuffer *framebuffer);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,
                                           int x,
                                           int y,
@@ -1454,7 +1455,7 @@ cogl_framebuffer_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_framebuffer_read_pixels (CoglFramebuffer *framebuffer,
                               int x,
                               int y,
@@ -1463,7 +1464,7 @@ cogl_framebuffer_read_pixels (CoglFramebuffer *framebuffer,
                               CoglPixelFormat format,
                               uint8_t *pixels);
 
-uint32_t
+COGL_EXPORT uint32_t
 cogl_framebuffer_error_quark (void);
 
 /**
@@ -1489,7 +1490,7 @@ typedef enum /*< prefix=COGL_FRAMEBUFFER_ERROR >*/
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_framebuffer (void *object);
 
 /**
@@ -1544,7 +1545,7 @@ cogl_is_framebuffer (void *object);
  * and this function returns FALSE, an error object with a code from
  * COGL_SYSTEM_ERROR will be created.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_blit_framebuffer (CoglFramebuffer *src,
                        CoglFramebuffer *dest,
                        int src_x,
diff --git a/cogl/cogl/cogl-glib-source.h b/cogl/cogl/cogl-glib-source.h
index ddb7f9957..cf192e3d7 100644
--- a/cogl/cogl/cogl-glib-source.h
+++ b/cogl/cogl/cogl-glib-source.h
@@ -67,7 +67,7 @@ G_BEGIN_DECLS
  * Stability: unstable
  * Since: 1.10
  */
-GSource *
+COGL_EXPORT GSource *
 cogl_glib_source_new (CoglContext *context,
                       int priority);
 
@@ -88,7 +88,7 @@ cogl_glib_source_new (CoglContext *context,
  * Stability: unstable
  * Since: 1.16
  */
-GSource *
+COGL_EXPORT GSource *
 cogl_glib_renderer_source_new (CoglRenderer *renderer,
                                int priority);
 
diff --git a/cogl/cogl/cogl-index-buffer.h b/cogl/cogl/cogl-index-buffer.h
index 9ee975e32..bf9bf1e99 100644
--- a/cogl/cogl/cogl-index-buffer.h
+++ b/cogl/cogl/cogl-index-buffer.h
@@ -61,7 +61,7 @@ typedef struct _CoglIndexBuffer             CoglIndexBuffer;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
-GType cogl_index_buffer_get_gtype (void);
+COGL_EXPORT GType cogl_index_buffer_get_gtype (void);
 
 /**
  * cogl_index_buffer_new:
@@ -78,7 +78,7 @@ GType cogl_index_buffer_get_gtype (void);
  * Since: 1.4
  * Stability: Unstable
  */
-CoglIndexBuffer *
+COGL_EXPORT CoglIndexBuffer *
 cogl_index_buffer_new (CoglContext *context,
                        size_t bytes);
 
@@ -94,7 +94,7 @@ cogl_index_buffer_new (CoglContext *context,
  * Since: 1.4
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_index_buffer (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-indices.h b/cogl/cogl/cogl-indices.h
index 713b8c66f..09631df9c 100644
--- a/cogl/cogl/cogl-indices.h
+++ b/cogl/cogl/cogl-indices.h
@@ -112,33 +112,34 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_indices_get_gtype (void);
 
-CoglIndices *
+COGL_EXPORT CoglIndices *
 cogl_indices_new (CoglContext *context,
                   CoglIndicesType type,
                   const void *indices_data,
                   int n_indices);
 
-CoglIndices *
+COGL_EXPORT CoglIndices *
 cogl_indices_new_for_buffer (CoglIndicesType type,
                              CoglIndexBuffer *buffer,
                              size_t offset);
 
-CoglIndexBuffer *
+COGL_EXPORT CoglIndexBuffer *
 cogl_indices_get_buffer (CoglIndices *indices);
 
-CoglIndicesType
+COGL_EXPORT CoglIndicesType
 cogl_indices_get_type (CoglIndices *indices);
 
-size_t
+COGL_EXPORT size_t
 cogl_indices_get_offset (CoglIndices *indices);
 
-void
+COGL_EXPORT void
 cogl_indices_set_offset (CoglIndices *indices,
                          size_t offset);
 
-CoglIndices *
+COGL_EXPORT CoglIndices *
 cogl_get_rectangle_indices (CoglContext *context, int n_rectangles);
 
 /**
@@ -152,7 +153,7 @@ cogl_get_rectangle_indices (CoglContext *context, int n_rectangles);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_indices (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-macros.h b/cogl/cogl/cogl-macros.h
index ff52d0aa4..8172354d1 100644
--- a/cogl/cogl/cogl-macros.h
+++ b/cogl/cogl/cogl-macros.h
@@ -75,4 +75,6 @@
 
 #endif /* COGL_DISABLE_DEPRECATION_WARNINGS */
 
+#define COGL_EXPORT __attribute__((visibility("default"))) extern
+
 #endif /* __COGL_MACROS_H__ */
diff --git a/cogl/cogl/cogl-matrix-stack.h b/cogl/cogl/cogl-matrix-stack.h
index 5a2c7d138..d8262d3c3 100644
--- a/cogl/cogl/cogl-matrix-stack.h
+++ b/cogl/cogl/cogl-matrix-stack.h
@@ -140,6 +140,7 @@ typedef struct _CoglMatrixStack CoglMatrixStack;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_matrix_stack_get_gtype (void);
 
 /**
@@ -183,6 +184,7 @@ typedef struct _CoglMatrixEntry CoglMatrixEntry;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_matrix_entry_get_gtype (void);
 
 
@@ -214,7 +216,7 @@ GType cogl_matrix_entry_get_gtype (void);
  *
  * Return value: (transfer full): A newly allocated #CoglMatrixStack
  */
-CoglMatrixStack *
+COGL_EXPORT CoglMatrixStack *
 cogl_matrix_stack_new (CoglContext *ctx);
 
 /**
@@ -229,7 +231,7 @@ cogl_matrix_stack_new (CoglContext *ctx);
  * called when going back up one layer to restore the previous
  * transform of an ancestor.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_push (CoglMatrixStack *stack);
 
 /**
@@ -242,7 +244,7 @@ cogl_matrix_stack_push (CoglMatrixStack *stack);
  * This is usually called while traversing a scenegraph whenever you
  * return up one level in the graph towards the root node.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_pop (CoglMatrixStack *stack);
 
 /**
@@ -251,7 +253,7 @@ cogl_matrix_stack_pop (CoglMatrixStack *stack);
  *
  * Resets the current matrix to the identity matrix.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_load_identity (CoglMatrixStack *stack);
 
 /**
@@ -264,7 +266,7 @@ cogl_matrix_stack_load_identity (CoglMatrixStack *stack);
  * Multiplies the current matrix by one that scales the x, y and z
  * axes by the given values.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_scale (CoglMatrixStack *stack,
                          float x,
                          float y,
@@ -280,7 +282,7 @@ cogl_matrix_stack_scale (CoglMatrixStack *stack,
  * Multiplies the current matrix by one that translates along all
  * three axes according to the given values.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_translate (CoglMatrixStack *stack,
                              float x,
                              float y,
@@ -300,7 +302,7 @@ cogl_matrix_stack_translate (CoglMatrixStack *stack,
  * the axis-vector (0, 0, 1) causes a small counter-clockwise
  * rotation.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_rotate (CoglMatrixStack *stack,
                           float angle,
                           float x,
@@ -315,7 +317,7 @@ cogl_matrix_stack_rotate (CoglMatrixStack *stack,
  * Multiplies the current matrix by one that rotates according to the
  * rotation described by @euler.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_rotate_euler (CoglMatrixStack *stack,
                                 const graphene_euler_t *euler);
 
@@ -326,7 +328,7 @@ cogl_matrix_stack_rotate_euler (CoglMatrixStack *stack,
  *
  * Multiplies the current matrix by the given matrix.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_multiply (CoglMatrixStack *stack,
                             const CoglMatrix *matrix);
 
@@ -348,7 +350,7 @@ cogl_matrix_stack_multiply (CoglMatrixStack *stack,
  * viewing frustum defined by 4 side clip planes that all cross
  * through the origin and 2 near and far clip planes.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_frustum (CoglMatrixStack *stack,
                            float left,
                            float right,
@@ -374,7 +376,7 @@ cogl_matrix_stack_frustum (CoglMatrixStack *stack,
  * since there wont be enough precision to identify the depth of
  * objects near to each other.</note>
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_perspective (CoglMatrixStack *stack,
                                float fov_y,
                                float aspect,
@@ -397,7 +399,7 @@ cogl_matrix_stack_perspective (CoglMatrixStack *stack,
  *
  * Replaces the current matrix with an orthographic projection matrix.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_orthographic (CoglMatrixStack *stack,
                                 float x_1,
                                 float y_1,
@@ -418,7 +420,7 @@ cogl_matrix_stack_orthographic (CoglMatrixStack *stack,
  *   for degenerate transformations that can't be inverted (in this case the
  *   @inverse matrix will simply be initialized with the identity matrix)
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_stack_get_inverse (CoglMatrixStack *stack,
                                CoglMatrix *inverse);
 
@@ -440,7 +442,7 @@ cogl_matrix_stack_get_inverse (CoglMatrixStack *stack,
  * Return value: (transfer none): A pointer to the #CoglMatrixEntry
  *               representing the current matrix stack transform.
  */
-CoglMatrixEntry *
+COGL_EXPORT CoglMatrixEntry *
 cogl_matrix_stack_get_entry (CoglMatrixStack *stack);
 
 /**
@@ -469,7 +471,7 @@ cogl_matrix_stack_get_entry (CoglMatrixStack *stack);
  *               and in that case @matrix will be initialized with
  *               the value of the current transform.
  */
-CoglMatrix *
+COGL_EXPORT CoglMatrix *
 cogl_matrix_stack_get (CoglMatrixStack *stack,
                        CoglMatrix *matrix);
 
@@ -500,7 +502,7 @@ cogl_matrix_stack_get (CoglMatrixStack *stack,
  *               and in that case @matrix will be initialized with
  *               the effective transform represented by @entry.
  */
-CoglMatrix *
+COGL_EXPORT CoglMatrix *
 cogl_matrix_entry_get (CoglMatrixEntry *entry,
                        CoglMatrix *matrix);
 
@@ -514,7 +516,7 @@ cogl_matrix_entry_get (CoglMatrixEntry *entry,
  * since the last time cogl_matrix_stack_push() was called or since
  * the stack was initialized.
  */
-void
+COGL_EXPORT void
 cogl_matrix_stack_set (CoglMatrixStack *stack,
                        const CoglMatrix *matrix);
 
@@ -527,7 +529,7 @@ cogl_matrix_stack_set (CoglMatrixStack *stack,
  * Return value: %TRUE if @object is a #CoglMatrixStack, otherwise
  *               %FALSE.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_matrix_stack (void *object);
 
 /**
@@ -549,7 +551,7 @@ cogl_is_matrix_stack (void *object);
  *                @entry0 and the transform of @entry1 is a translation,
  *                otherwise %FALSE.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_entry_calculate_translation (CoglMatrixEntry *entry0,
                                          CoglMatrixEntry *entry1,
                                          float *x,
@@ -570,7 +572,7 @@ cogl_matrix_entry_calculate_translation (CoglMatrixEntry *entry0,
  * Return value: %TRUE if @entry is definitely an identity transform,
  *               otherwise %FALSE.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_entry_is_identity (CoglMatrixEntry *entry);
 
 /**
@@ -588,7 +590,7 @@ cogl_matrix_entry_is_identity (CoglMatrixEntry *entry);
  * Return value: %TRUE if @entry0 represents the same transform as
  *               @entry1, otherwise %FALSE.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_entry_equal (CoglMatrixEntry *entry0,
                          CoglMatrixEntry *entry1);
 
@@ -599,7 +601,7 @@ cogl_matrix_entry_equal (CoglMatrixEntry *entry0,
  * Allows visualizing the operations that build up the given @entry
  * for debugging purposes by printing to stdout.
  */
-void
+COGL_EXPORT void
 cogl_debug_matrix_entry_print (CoglMatrixEntry *entry);
 
 /**
@@ -613,7 +615,7 @@ cogl_debug_matrix_entry_print (CoglMatrixEntry *entry);
  * It is an error to pass an @entry pointer to cogl_object_ref() and
  * cogl_object_unref()
  */
-CoglMatrixEntry *
+COGL_EXPORT CoglMatrixEntry *
 cogl_matrix_entry_ref (CoglMatrixEntry *entry);
 
 /**
@@ -624,7 +626,7 @@ cogl_matrix_entry_ref (CoglMatrixEntry *entry);
  * cogl_matrix_entry_unref() or to release the reference given when
  * calling cogl_matrix_stack_get_entry().
  */
-void
+COGL_EXPORT void
 cogl_matrix_entry_unref (CoglMatrixEntry *entry);
 
 #endif /* _COGL_MATRIX_STACK_H_ */
diff --git a/cogl/cogl/cogl-matrix.h b/cogl/cogl/cogl-matrix.h
index 4a88dd69a..c14bb3565 100644
--- a/cogl/cogl/cogl-matrix.h
+++ b/cogl/cogl/cogl-matrix.h
@@ -135,7 +135,7 @@ COGL_STRUCT_SIZE_ASSERT (CoglMatrix, 128 + sizeof (unsigned long) * 3);
  *   .wx=0; .wy=0; .wz=0; .ww=1;
  * ]|
  */
-void
+COGL_EXPORT void
 cogl_matrix_init_identity (CoglMatrix *matrix);
 
 /**
@@ -156,7 +156,7 @@ cogl_matrix_init_identity (CoglMatrix *matrix);
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_matrix_init_translation (CoglMatrix *matrix,
                               float       tx,
                               float       ty,
@@ -174,7 +174,7 @@ cogl_matrix_init_translation (CoglMatrix *matrix,
  * <note>It is possible to multiply the @a matrix in-place, so
  * @result can be equal to @a but can't be equal to @b.</note>
  */
-void
+COGL_EXPORT void
 cogl_matrix_multiply (CoglMatrix *result,
                      const CoglMatrix *a,
                      const CoglMatrix *b);
@@ -190,7 +190,7 @@ cogl_matrix_multiply (CoglMatrix *result,
  * Multiplies @matrix with a rotation matrix that applies a rotation
  * of @angle degrees around the specified 3D vector.
  */
-void
+COGL_EXPORT void
 cogl_matrix_rotate (CoglMatrix *matrix,
                    float angle,
                    float x,
@@ -207,7 +207,7 @@ cogl_matrix_rotate (CoglMatrix *matrix,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_matrix_rotate_euler (CoglMatrix *matrix,
                           const graphene_euler_t *euler);
 
@@ -221,7 +221,7 @@ cogl_matrix_rotate_euler (CoglMatrix *matrix,
  * Multiplies @matrix with a transform matrix that translates along
  * the X, Y and Z axis.
  */
-void
+COGL_EXPORT void
 cogl_matrix_translate (CoglMatrix *matrix,
                       float x,
                       float y,
@@ -237,7 +237,7 @@ cogl_matrix_translate (CoglMatrix *matrix,
  * Multiplies @matrix with a transform matrix that scales along the X,
  * Y and Z axis.
  */
-void
+COGL_EXPORT void
 cogl_matrix_scale (CoglMatrix *matrix,
                   float sx,
                   float sy,
@@ -286,7 +286,7 @@ cogl_matrix_scale (CoglMatrix *matrix,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_look_at (CoglMatrix *matrix,
                      float eye_position_x,
                      float eye_position_y,
@@ -314,7 +314,7 @@ cogl_matrix_look_at (CoglMatrix *matrix,
  *
  * Multiplies @matrix by the given frustum perspective matrix.
  */
-void
+COGL_EXPORT void
 cogl_matrix_frustum (CoglMatrix *matrix,
                      float       left,
                      float       right,
@@ -339,7 +339,7 @@ cogl_matrix_frustum (CoglMatrix *matrix,
  * since there wont be enough precision to identify the depth of
  * objects near to each other.</note>
  */
-void
+COGL_EXPORT void
 cogl_matrix_perspective (CoglMatrix *matrix,
                          float       fov_y,
                          float       aspect,
@@ -365,7 +365,7 @@ cogl_matrix_perspective (CoglMatrix *matrix,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_orthographic (CoglMatrix *matrix,
                           float x_1,
                           float y_1,
@@ -404,7 +404,7 @@ cogl_matrix_orthographic (CoglMatrix *matrix,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_view_2d_in_frustum (CoglMatrix *matrix,
                                 float left,
                                 float right,
@@ -443,7 +443,7 @@ cogl_matrix_view_2d_in_frustum (CoglMatrix *matrix,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_view_2d_in_perspective (CoglMatrix *matrix,
                                     float fov_y,
                                     float aspect,
@@ -459,7 +459,7 @@ cogl_matrix_view_2d_in_perspective (CoglMatrix *matrix,
  *
  * Initializes @matrix with the contents of @array
  */
-void
+COGL_EXPORT void
 cogl_matrix_init_from_array (CoglMatrix *matrix,
                              const float *array);
 
@@ -471,7 +471,7 @@ cogl_matrix_init_from_array (CoglMatrix *matrix,
  *
  * Return value: a pointer to the float array
  */
-const float *
+COGL_EXPORT const float *
 cogl_matrix_get_array (const CoglMatrix *matrix);
 
 /**
@@ -481,7 +481,7 @@ cogl_matrix_get_array (const CoglMatrix *matrix);
  *
  * Initializes @matrix from a #graphene_euler_t rotation.
  */
-void
+COGL_EXPORT void
 cogl_matrix_init_from_euler (CoglMatrix *matrix,
                              const graphene_euler_t *euler);
 
@@ -497,7 +497,7 @@ cogl_matrix_init_from_euler (CoglMatrix *matrix,
  *
  * Since: 1.4
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_equal (const void *v1, const void *v2);
 
 /**
@@ -512,7 +512,7 @@ cogl_matrix_equal (const void *v1, const void *v2);
  *
  * Since: 1.6
  */
-CoglMatrix *
+COGL_EXPORT CoglMatrix *
 cogl_matrix_copy (const CoglMatrix *matrix);
 
 /**
@@ -524,7 +524,7 @@ cogl_matrix_copy (const CoglMatrix *matrix);
  *
  * Since: 1.6
  */
-void
+COGL_EXPORT void
 cogl_matrix_free (CoglMatrix *matrix);
 
 /**
@@ -547,7 +547,7 @@ cogl_matrix_free (CoglMatrix *matrix);
  *
  * Since: 1.2
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_get_inverse (const CoglMatrix *matrix,
                          CoglMatrix *inverse);
 
@@ -566,7 +566,7 @@ cogl_matrix_get_inverse (const CoglMatrix *matrix,
  * Transforms a point whos position is given and returned as four float
  * components.
  */
-void
+COGL_EXPORT void
 cogl_matrix_transform_point (const CoglMatrix *matrix,
                              float *x,
                              float *y,
@@ -622,7 +622,7 @@ cogl_matrix_transform_point (const CoglMatrix *matrix,
  *
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_transform_points (const CoglMatrix *matrix,
                               int n_components,
                               size_t stride_in,
@@ -677,7 +677,7 @@ cogl_matrix_transform_points (const CoglMatrix *matrix,
  *
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_matrix_project_points (const CoglMatrix *matrix,
                             int n_components,
                             size_t stride_in,
@@ -695,7 +695,7 @@ cogl_matrix_project_points (const CoglMatrix *matrix,
  * Returns: %TRUE if @matrix is an identity matrix else %FALSE
  * Since: 1.8
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_matrix_is_identity (const CoglMatrix *matrix);
 
 /**
@@ -707,7 +707,7 @@ cogl_matrix_is_identity (const CoglMatrix *matrix);
  *
  * Since: 1.10
  */
-void
+COGL_EXPORT void
 cogl_matrix_transpose (CoglMatrix *matrix);
 
 /**
@@ -718,7 +718,7 @@ cogl_matrix_transpose (CoglMatrix *matrix);
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_debug_matrix_print (const CoglMatrix *matrix);
 
 #define COGL_GTYPE_TYPE_MATRIX (cogl_matrix_get_gtype ())
@@ -728,6 +728,7 @@ cogl_debug_matrix_print (const CoglMatrix *matrix);
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_matrix_get_gtype (void);
 
 /**
@@ -739,7 +740,7 @@ GType cogl_matrix_get_gtype (void);
  *
  * Deprecated: 1.18: Use cogl_matrix_get_gtype() instead.
  */
-GType
+COGL_EXPORT GType
 cogl_gtype_matrix_get_type (void);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-meta-texture.h b/cogl/cogl/cogl-meta-texture.h
index 66d592181..9f7784d7d 100644
--- a/cogl/cogl/cogl-meta-texture.h
+++ b/cogl/cogl/cogl-meta-texture.h
@@ -177,7 +177,7 @@ typedef void (*CoglMetaTextureCallback) (CoglTexture *sub_texture,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_meta_texture_foreach_in_region (CoglMetaTexture *meta_texture,
                                      float tx_1,
                                      float ty_1,
diff --git a/cogl/cogl/cogl-mutter.h b/cogl/cogl/cogl-mutter.h
index ab1d0094b..2d48ce040 100644
--- a/cogl/cogl/cogl-mutter.h
+++ b/cogl/cogl/cogl-mutter.h
@@ -43,6 +43,7 @@
 #endif
 #include <cogl/winsys/cogl-winsys-private.h>
 
+COGL_EXPORT
 void cogl_renderer_set_custom_winsys (CoglRenderer                *renderer,
                                       CoglCustomWinsysVtableGetter winsys_vtable_getter,
                                       void                        *user_data);
diff --git a/cogl/cogl/cogl-object-private.h b/cogl/cogl/cogl-object-private.h
index b33adddfb..27c19e5d4 100644
--- a/cogl/cogl/cogl-object-private.h
+++ b/cogl/cogl/cogl-object-private.h
@@ -279,7 +279,7 @@ _cogl_object_set_user_data (CoglObject *object,
                             void *user_data,
                             CoglUserDataDestroyInternalCallback destroy);
 
-void
+COGL_EXPORT void
 _cogl_object_default_unref (void *obj);
 
 #endif /* __COGL_OBJECT_PRIVATE_H */
diff --git a/cogl/cogl/cogl-object.h b/cogl/cogl/cogl-object.h
index d8e483745..3d67eb080 100644
--- a/cogl/cogl/cogl-object.h
+++ b/cogl/cogl/cogl-object.h
@@ -52,6 +52,7 @@ typedef struct _CoglObject      CoglObject;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_object_get_gtype (void);
 
 /**
@@ -62,7 +63,7 @@ GType cogl_object_get_gtype (void);
  *
  * Returns: the @object, with its reference count increased
  */
-void *
+COGL_EXPORT void *
 cogl_object_ref (void *object);
 
 /**
@@ -72,7 +73,7 @@ cogl_object_ref (void *object);
  * Drecreases the reference count of @object by 1; if the reference
  * count reaches 0, the resources allocated by @object will be freed
  */
-void
+COGL_EXPORT void
 cogl_object_unref (void *object);
 
 /**
@@ -187,7 +188,7 @@ typedef void
  *
  * Since: 1.4
  */
-void
+COGL_EXPORT void
 cogl_object_set_user_data (CoglObject *object,
                            CoglUserDataKey *key,
                            void *user_data,
@@ -209,7 +210,7 @@ cogl_object_set_user_data (CoglObject *object,
  *
  * Since: 1.4
  */
-void *
+COGL_EXPORT void *
 cogl_object_get_user_data (CoglObject *object,
                            CoglUserDataKey *key);
 
@@ -226,7 +227,7 @@ cogl_object_get_user_data (CoglObject *object,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_debug_object_foreach_type (CoglDebugObjectForeachTypeCallback func,
                                 void *user_data);
 
@@ -241,7 +242,7 @@ cogl_debug_object_foreach_type (CoglDebugObjectForeachTypeCallback func,
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_debug_object_print_instances (void);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-offscreen.h b/cogl/cogl/cogl-offscreen.h
index ba372c24b..07289db54 100644
--- a/cogl/cogl/cogl-offscreen.h
+++ b/cogl/cogl/cogl-offscreen.h
@@ -59,6 +59,7 @@ typedef struct _CoglOffscreen CoglOffscreen;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_offscreen_get_gtype (void);
 
 /* Offscreen api */
@@ -95,7 +96,7 @@ GType cogl_offscreen_get_gtype (void);
  * Return value: (transfer full): a newly instantiated #CoglOffscreen
  *   framebuffer.
  */
-CoglOffscreen *
+COGL_EXPORT CoglOffscreen *
 cogl_offscreen_new_with_texture (CoglTexture *texture);
 
 /**
@@ -119,7 +120,7 @@ cogl_offscreen_new_with_texture (CoglTexture *texture);
  * Deprecated: 1.16: Use cogl_offscreen_new_with_texture instead.
  */
 COGL_DEPRECATED_FOR (cogl_offscreen_new_with_texture)
-CoglOffscreen *
+COGL_EXPORT CoglOffscreen *
 cogl_offscreen_new_to_texture (CoglTexture *texture);
 
 /**
@@ -132,13 +133,13 @@ cogl_offscreen_new_to_texture (CoglTexture *texture);
  * Returns: %TRUE if @object is a #CoglOffscreen framebuffer,
  *          %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_offscreen (void *object);
 
 /**
  * cogl_offscreen_get_texture: (skip)
  */
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_offscreen_get_texture (CoglOffscreen *offscreen);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-onscreen-private.h b/cogl/cogl/cogl-onscreen-private.h
index 9718708d0..480ca5076 100644
--- a/cogl/cogl/cogl-onscreen-private.h
+++ b/cogl/cogl/cogl-onscreen-private.h
@@ -78,7 +78,7 @@ struct _CoglOnscreen
 CoglOnscreen *
 _cogl_onscreen_new (void);
 
-void
+COGL_EXPORT void
 _cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
                                       int width, int height);
 
@@ -87,10 +87,10 @@ _cogl_onscreen_queue_event (CoglOnscreen *onscreen,
                             CoglFrameEvent type,
                             CoglFrameInfo *info);
 
-void
+COGL_EXPORT void
 _cogl_onscreen_notify_frame_sync (CoglOnscreen *onscreen, CoglFrameInfo *info);
 
-void
+COGL_EXPORT void
 _cogl_onscreen_notify_complete (CoglOnscreen *onscreen, CoglFrameInfo *info);
 
 void
diff --git a/cogl/cogl/cogl-onscreen-template.h b/cogl/cogl/cogl-onscreen-template.h
index 0dd817429..9881e1c48 100644
--- a/cogl/cogl/cogl-onscreen-template.h
+++ b/cogl/cogl/cogl-onscreen-template.h
@@ -52,9 +52,10 @@ typedef struct _CoglOnscreenTemplate       CoglOnscreenTemplate;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_onscreen_template_get_gtype (void);
 
-CoglOnscreenTemplate *
+COGL_EXPORT CoglOnscreenTemplate *
 cogl_onscreen_template_new (CoglSwapChain *swap_chain);
 
 /**
@@ -80,7 +81,7 @@ cogl_onscreen_template_new (CoglSwapChain *swap_chain);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_template_set_samples_per_pixel (
                                           CoglOnscreenTemplate *onscreen_template,
                                           int n);
@@ -99,7 +100,7 @@ cogl_onscreen_template_set_samples_per_pixel (
  * Since: 1.20
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_template_set_stereo_enabled (
                                           CoglOnscreenTemplate *onscreen_template,
                                           gboolean enabled);
@@ -114,7 +115,7 @@ cogl_onscreen_template_set_stereo_enabled (
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_onscreen_template (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-onscreen.h b/cogl/cogl/cogl-onscreen.h
index d339025c5..40bd6780b 100644
--- a/cogl/cogl/cogl-onscreen.h
+++ b/cogl/cogl/cogl-onscreen.h
@@ -55,6 +55,7 @@ typedef struct _CoglOnscreen CoglOnscreen;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_onscreen_get_gtype (void);
 
 /**
@@ -71,7 +72,7 @@ GType cogl_onscreen_get_gtype (void);
  * Since: 1.8
  * Stability: unstable
  */
-CoglOnscreen *
+COGL_EXPORT CoglOnscreen *
 cogl_onscreen_new (CoglContext *context, int width, int height);
 
 #ifdef COGL_HAS_X11
@@ -92,7 +93,7 @@ cogl_onscreen_new (CoglContext *context, int width, int height);
  * Since: 1.10
  * Stability: unstable
  */
-uint32_t
+COGL_EXPORT uint32_t
 cogl_x11_onscreen_get_window_xid (CoglOnscreen *onscreen);
 
 #endif /* COGL_HAS_X11 */
@@ -125,7 +126,7 @@ cogl_x11_onscreen_get_window_xid (CoglOnscreen *onscreen);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_show (CoglOnscreen *onscreen);
 
 /**
@@ -150,7 +151,7 @@ cogl_onscreen_show (CoglOnscreen *onscreen);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_hide (CoglOnscreen *onscreen);
 
 /**
@@ -174,7 +175,7 @@ cogl_onscreen_hide (CoglOnscreen *onscreen);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_swap_buffers (CoglOnscreen *onscreen);
 
 
@@ -227,7 +228,7 @@ cogl_onscreen_swap_buffers (CoglOnscreen *onscreen);
  * Since: 1.14
  * Stability: stable
  */
-int
+COGL_EXPORT int
 cogl_onscreen_get_buffer_age (CoglOnscreen *onscreen);
 
 /**
@@ -278,7 +279,7 @@ cogl_onscreen_get_buffer_age (CoglOnscreen *onscreen);
  * Since: 1.16
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
                                         const int *rectangles,
                                         int n_rectangles);
@@ -303,7 +304,7 @@ cogl_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_swap_region (CoglOnscreen *onscreen,
                            const int *rectangles,
                            int n_rectangles);
@@ -388,6 +389,7 @@ typedef struct _CoglClosure CoglFrameClosure;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_frame_closure_get_gtype (void);
 
 /**
@@ -427,7 +429,7 @@ GType cogl_frame_closure_get_gtype (void);
  * Since: 1.14
  * Stability: unstable
  */
-CoglFrameClosure *
+COGL_EXPORT CoglFrameClosure *
 cogl_onscreen_add_frame_callback (CoglOnscreen *onscreen,
                                   CoglFrameCallback callback,
                                   void *user_data,
@@ -449,7 +451,7 @@ cogl_onscreen_add_frame_callback (CoglOnscreen *onscreen,
  * Since: 1.14
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_remove_frame_callback (CoglOnscreen *onscreen,
                                      CoglFrameClosure *closure);
 
@@ -482,7 +484,7 @@ cogl_onscreen_remove_frame_callback (CoglOnscreen *onscreen,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_onscreen_set_resizable (CoglOnscreen *onscreen,
                              gboolean resizable);
 
@@ -509,7 +511,7 @@ cogl_onscreen_set_resizable (CoglOnscreen *onscreen,
  *               resizable or not.
  * Since: 2.0
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_onscreen_get_resizable (CoglOnscreen *onscreen);
 
 /**
@@ -560,6 +562,7 @@ typedef struct _CoglClosure CoglOnscreenResizeClosure;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_onscreen_resize_closure_get_gtype (void);
 
 /**
@@ -594,7 +597,7 @@ GType cogl_onscreen_resize_closure_get_gtype (void);
  *               remove the callback and associated @user_data later.
  * Since: 2.0
  */
-CoglOnscreenResizeClosure *
+COGL_EXPORT CoglOnscreenResizeClosure *
 cogl_onscreen_add_resize_callback (CoglOnscreen *onscreen,
                                    CoglOnscreenResizeCallback callback,
                                    void *user_data,
@@ -610,7 +613,7 @@ cogl_onscreen_add_resize_callback (CoglOnscreen *onscreen,
  *
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_onscreen_remove_resize_callback (CoglOnscreen *onscreen,
                                       CoglOnscreenResizeClosure *closure);
 
@@ -674,6 +677,7 @@ typedef struct _CoglClosure CoglOnscreenDirtyClosure;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_onscreen_dirty_closure_get_gtype (void);
 
 /**
@@ -706,7 +710,7 @@ GType cogl_onscreen_dirty_closure_get_gtype (void);
  * Since: 1.16
  * Stability: unstable
  */
-CoglOnscreenDirtyClosure *
+COGL_EXPORT CoglOnscreenDirtyClosure *
 cogl_onscreen_add_dirty_callback (CoglOnscreen *onscreen,
                                   CoglOnscreenDirtyCallback callback,
                                   void *user_data,
@@ -728,7 +732,7 @@ cogl_onscreen_add_dirty_callback (CoglOnscreen *onscreen,
  * Since: 1.16
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_onscreen_remove_dirty_callback (CoglOnscreen *onscreen,
                                      CoglOnscreenDirtyClosure *closure);
 
@@ -743,7 +747,7 @@ cogl_onscreen_remove_dirty_callback (CoglOnscreen *onscreen,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_onscreen (void *object);
 
 /**
@@ -758,7 +762,7 @@ cogl_is_onscreen (void *object);
  * Since: 1.14
  * Stability: unstable
  */
-int64_t
+COGL_EXPORT int64_t
 cogl_onscreen_get_frame_counter (CoglOnscreen *onscreen);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-output.h b/cogl/cogl/cogl-output.h
index 54c76dd01..6ea135cff 100644
--- a/cogl/cogl/cogl-output.h
+++ b/cogl/cogl/cogl-output.h
@@ -73,6 +73,7 @@ typedef struct _CoglOutput CoglOutput;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_output_get_gtype (void);
 
 /**
@@ -127,7 +128,7 @@ typedef enum
  * Since: 1.14
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_output (void *object);
 
 /**
@@ -142,7 +143,7 @@ cogl_is_output (void *object);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_x (CoglOutput *output);
 
 /**
@@ -157,7 +158,7 @@ cogl_output_get_x (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_y (CoglOutput *output);
 
 /**
@@ -170,7 +171,7 @@ cogl_output_get_y (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_width (CoglOutput *output);
 
 /**
@@ -183,7 +184,7 @@ cogl_output_get_width (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_height (CoglOutput *output);
 
 /**
@@ -200,7 +201,7 @@ cogl_output_get_height (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_mm_width (CoglOutput *output);
 
 /**
@@ -217,7 +218,7 @@ cogl_output_get_mm_width (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_output_get_mm_height (CoglOutput *output);
 
 /**
@@ -232,7 +233,7 @@ cogl_output_get_mm_height (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-CoglSubpixelOrder
+COGL_EXPORT CoglSubpixelOrder
 cogl_output_get_subpixel_order (CoglOutput *output);
 
 /**
@@ -247,7 +248,7 @@ cogl_output_get_subpixel_order (CoglOutput *output);
  * Since: 1.14
  * Stability: unstable
  */
-float
+COGL_EXPORT float
 cogl_output_get_refresh_rate (CoglOutput *output);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-pipeline-layer-private.h b/cogl/cogl/cogl-pipeline-layer-private.h
index 258c10efa..901489d2b 100644
--- a/cogl/cogl/cogl-pipeline-layer-private.h
+++ b/cogl/cogl/cogl-pipeline-layer-private.h
@@ -332,7 +332,7 @@ typedef enum
 CoglPipelineLayerType
 _cogl_pipeline_layer_get_type (CoglPipelineLayer *layer);
 
-CoglTexture *
+COGL_EXPORT CoglTexture *
 _cogl_pipeline_layer_get_texture (CoglPipelineLayer *layer);
 
 CoglTexture *
diff --git a/cogl/cogl/cogl-pipeline-layer-state.h b/cogl/cogl/cogl-pipeline-layer-state.h
index 79ad7bb5a..44a604cdc 100644
--- a/cogl/cogl/cogl-pipeline-layer-state.h
+++ b/cogl/cogl/cogl-pipeline-layer-state.h
@@ -150,7 +150,7 @@ typedef enum
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_texture (CoglPipeline *pipeline,
                                  int           layer_index,
                                  CoglTexture  *texture);
@@ -172,7 +172,7 @@ cogl_pipeline_set_layer_texture (CoglPipeline *pipeline,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_null_texture (CoglPipeline *pipeline,
                                       int layer_index);
 
@@ -186,7 +186,7 @@ cogl_pipeline_set_layer_null_texture (CoglPipeline *pipeline,
  * Stability: unstable
  * Since: 1.10
  */
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_pipeline_get_layer_texture (CoglPipeline *pipeline,
                                  int layer_index);
 
@@ -199,7 +199,7 @@ cogl_pipeline_get_layer_texture (CoglPipeline *pipeline,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_remove_layer (CoglPipeline *pipeline,
                            int           layer_index);
 
@@ -297,7 +297,7 @@ cogl_pipeline_remove_layer (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_set_layer_combine (CoglPipeline *pipeline,
                                 int           layer_index,
                                 const char   *blend_string,
@@ -316,7 +316,7 @@ cogl_pipeline_set_layer_combine (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_combine_constant (CoglPipeline    *pipeline,
                                           int              layer_index,
                                           const CoglColor *constant);
@@ -333,7 +333,7 @@ cogl_pipeline_set_layer_combine_constant (CoglPipeline    *pipeline,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_matrix (CoglPipeline     *pipeline,
                                int               layer_index,
                                const CoglMatrix *matrix);
@@ -349,7 +349,7 @@ cogl_pipeline_set_layer_matrix (CoglPipeline     *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_pipeline_get_n_layers (CoglPipeline *pipeline);
 
 /**
@@ -370,7 +370,7 @@ cogl_pipeline_get_n_layers (CoglPipeline *pipeline);
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_filters (CoglPipeline      *pipeline,
                                  int                layer_index,
                                  CoglPipelineFilter min_filter,
@@ -393,7 +393,7 @@ cogl_pipeline_set_layer_filters (CoglPipeline      *pipeline,
  * Since: 1.10
  * Stability: unstable
  */
-CoglPipelineFilter
+COGL_EXPORT CoglPipelineFilter
 cogl_pipeline_get_layer_min_filter (CoglPipeline *pipeline,
                                     int layer_index);
 
@@ -414,7 +414,7 @@ cogl_pipeline_get_layer_min_filter (CoglPipeline *pipeline,
  * Since: 1.10
  * Stability: unstable
  */
-CoglPipelineFilter
+COGL_EXPORT CoglPipelineFilter
 cogl_pipeline_get_layer_mag_filter (CoglPipeline *pipeline,
                                     int layer_index);
 
@@ -436,7 +436,7 @@ cogl_pipeline_get_layer_mag_filter (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_set_layer_point_sprite_coords_enabled (CoglPipeline *pipeline,
                                                      int           layer_index,
                                                      gboolean      enable,
@@ -456,7 +456,7 @@ cogl_pipeline_set_layer_point_sprite_coords_enabled (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_get_layer_point_sprite_coords_enabled (CoglPipeline *pipeline,
                                                      int           layer_index);
 
@@ -474,7 +474,7 @@ cogl_pipeline_get_layer_point_sprite_coords_enabled (CoglPipeline *pipeline,
  * Since: 1.6
  * Stability: unstable
  */
-CoglPipelineWrapMode
+COGL_EXPORT CoglPipelineWrapMode
 cogl_pipeline_get_layer_wrap_mode_s (CoglPipeline *pipeline,
                                      int           layer_index);
 
@@ -489,7 +489,7 @@ cogl_pipeline_get_layer_wrap_mode_s (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_wrap_mode_s (CoglPipeline        *pipeline,
                                      int                  layer_index,
                                      CoglPipelineWrapMode mode);
@@ -508,7 +508,7 @@ cogl_pipeline_set_layer_wrap_mode_s (CoglPipeline        *pipeline,
  * Since: 1.6
  * Stability: unstable
  */
-CoglPipelineWrapMode
+COGL_EXPORT CoglPipelineWrapMode
 cogl_pipeline_get_layer_wrap_mode_t (CoglPipeline *pipeline,
                                      int           layer_index);
 
@@ -524,7 +524,7 @@ cogl_pipeline_get_layer_wrap_mode_t (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_wrap_mode_t (CoglPipeline        *pipeline,
                                      int                  layer_index,
                                      CoglPipelineWrapMode mode);
@@ -543,7 +543,7 @@ cogl_pipeline_set_layer_wrap_mode_t (CoglPipeline        *pipeline,
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_layer_wrap_mode (CoglPipeline        *pipeline,
                                    int                  layer_index,
                                    CoglPipelineWrapMode mode);
@@ -563,7 +563,7 @@ cogl_pipeline_set_layer_wrap_mode (CoglPipeline        *pipeline,
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_add_layer_snippet (CoglPipeline *pipeline,
                                  int layer,
                                  CoglSnippet *snippet);
diff --git a/cogl/cogl/cogl-pipeline-private.h b/cogl/cogl/cogl-pipeline-private.h
index 27d6a2512..1e719a068 100644
--- a/cogl/cogl/cogl-pipeline-private.h
+++ b/cogl/cogl/cogl-pipeline-private.h
@@ -775,7 +775,7 @@ _cogl_pipeline_get_layer_combine_constant (CoglPipeline *pipeline,
                                            int layer_index,
                                            float *constant);
 
-void
+COGL_EXPORT void
 _cogl_pipeline_prune_to_n_layers (CoglPipeline *pipeline, int n);
 
 
@@ -786,7 +786,7 @@ _cogl_pipeline_prune_to_n_layers (CoglPipeline *pipeline, int n);
 typedef gboolean (*CoglPipelineInternalLayerCallback) (CoglPipelineLayer *layer,
                                                        void *user_data);
 
-void
+COGL_EXPORT void
 _cogl_pipeline_foreach_layer_internal (CoglPipeline *pipeline,
                                        CoglPipelineInternalLayerCallback callback,
                                        void *user_data);
diff --git a/cogl/cogl/cogl-pipeline-state.h b/cogl/cogl/cogl-pipeline-state.h
index 4a1cf9143..286f673c1 100644
--- a/cogl/cogl/cogl-pipeline-state.h
+++ b/cogl/cogl/cogl-pipeline-state.h
@@ -58,7 +58,7 @@ G_BEGIN_DECLS
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_color (CoglPipeline    *pipeline,
                          const CoglColor *color);
 
@@ -77,7 +77,7 @@ cogl_pipeline_set_color (CoglPipeline    *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_color4ub (CoglPipeline *pipeline,
                            uint8_t red,
                             uint8_t green,
@@ -99,7 +99,7 @@ cogl_pipeline_set_color4ub (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_color4f (CoglPipeline *pipeline,
                            float         red,
                            float         green,
@@ -116,7 +116,7 @@ cogl_pipeline_set_color4f (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_get_color (CoglPipeline *pipeline,
                          CoglColor    *color);
 
@@ -173,7 +173,7 @@ typedef enum
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_alpha_test_function (CoglPipeline         *pipeline,
                                       CoglPipelineAlphaFunc alpha_func,
                                       float                 alpha_reference);
@@ -187,7 +187,7 @@ cogl_pipeline_set_alpha_test_function (CoglPipeline         *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-CoglPipelineAlphaFunc
+COGL_EXPORT CoglPipelineAlphaFunc
 cogl_pipeline_get_alpha_test_function (CoglPipeline *pipeline);
 
 /**
@@ -199,7 +199,7 @@ cogl_pipeline_get_alpha_test_function (CoglPipeline *pipeline);
  * Since: 2.0
  * Stability: Unstable
  */
-float
+COGL_EXPORT float
 cogl_pipeline_get_alpha_test_reference (CoglPipeline *pipeline);
 
 /**
@@ -284,7 +284,7 @@ cogl_pipeline_get_alpha_test_reference (CoglPipeline *pipeline);
  * Since: 2.0
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_set_blend (CoglPipeline *pipeline,
                          const char   *blend_string,
                          GError **error);
@@ -300,7 +300,7 @@ cogl_pipeline_set_blend (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_blend_constant (CoglPipeline *pipeline,
                                   const CoglColor *constant_color);
 
@@ -325,7 +325,7 @@ cogl_pipeline_set_blend_constant (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_point_size (CoglPipeline *pipeline,
                               float point_size);
 
@@ -341,7 +341,7 @@ cogl_pipeline_set_point_size (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-float
+COGL_EXPORT float
 cogl_pipeline_get_point_size (CoglPipeline *pipeline);
 
 /**
@@ -365,7 +365,7 @@ cogl_pipeline_get_point_size (CoglPipeline *pipeline);
  * Stability: Unstable
  * Return value: %TRUE if the change suceeded or %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_set_per_vertex_point_size (CoglPipeline *pipeline,
                                          gboolean enable,
                                          GError **error);
@@ -380,7 +380,7 @@ cogl_pipeline_set_per_vertex_point_size (CoglPipeline *pipeline,
  *   enabled or %FALSE otherwise. The per-vertex point size can be
  *   enabled with cogl_pipeline_set_per_vertex_point_size().
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_get_per_vertex_point_size (CoglPipeline *pipeline);
 
 /**
@@ -395,7 +395,7 @@ cogl_pipeline_get_per_vertex_point_size (CoglPipeline *pipeline);
  * Since: 2.0
  * Stability: Unstable
  */
-CoglHandle
+COGL_EXPORT CoglHandle
 cogl_pipeline_get_user_program (CoglPipeline *pipeline);
 
 /**
@@ -440,7 +440,7 @@ cogl_pipeline_get_user_program (CoglPipeline *pipeline);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_user_program (CoglPipeline *pipeline,
                                 CoglHandle program);
 
@@ -464,7 +464,7 @@ cogl_pipeline_set_user_program (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_pipeline_set_depth_state (CoglPipeline *pipeline,
                                const CoglDepthState *state,
                                GError **error);
@@ -480,7 +480,7 @@ cogl_pipeline_set_depth_state (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_get_depth_state (CoglPipeline *pipeline,
                                CoglDepthState *state_out);
 
@@ -524,7 +524,7 @@ typedef enum
  * Status: Unstable
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_cull_face_mode (CoglPipeline *pipeline,
                                   CoglPipelineCullFaceMode cull_face_mode);
 
@@ -537,7 +537,7 @@ cogl_pipeline_set_cull_face_mode (CoglPipeline *pipeline,
  * Status: Unstable
  * Since: 2.0
  */
-CoglPipelineCullFaceMode
+COGL_EXPORT CoglPipelineCullFaceMode
 cogl_pipeline_get_cull_face_mode (CoglPipeline *pipeline);
 
 /**
@@ -556,7 +556,7 @@ cogl_pipeline_get_cull_face_mode (CoglPipeline *pipeline);
  * Status: Unstable
  * Since: 2.0
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_front_face_winding (CoglPipeline *pipeline,
                                       CoglWinding front_winding);
 
@@ -577,7 +577,7 @@ cogl_pipeline_set_front_face_winding (CoglPipeline *pipeline,
  * Status: Unstable
  * Since: 2.0
  */
-CoglWinding
+COGL_EXPORT CoglWinding
 cogl_pipeline_get_front_face_winding (CoglPipeline *pipeline);
 
 /**
@@ -600,7 +600,7 @@ cogl_pipeline_get_front_face_winding (CoglPipeline *pipeline);
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_uniform_1f (CoglPipeline *pipeline,
                               int uniform_location,
                               float value);
@@ -625,7 +625,7 @@ cogl_pipeline_set_uniform_1f (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_uniform_1i (CoglPipeline *pipeline,
                               int uniform_location,
                               int value);
@@ -654,7 +654,7 @@ cogl_pipeline_set_uniform_1i (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_uniform_float (CoglPipeline *pipeline,
                                  int uniform_location,
                                  int n_components,
@@ -685,7 +685,7 @@ cogl_pipeline_set_uniform_float (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_uniform_int (CoglPipeline *pipeline,
                                int uniform_location,
                                int n_components,
@@ -722,7 +722,7 @@ cogl_pipeline_set_uniform_int (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_set_uniform_matrix (CoglPipeline *pipeline,
                                   int uniform_location,
                                   int dimensions,
@@ -743,7 +743,7 @@ cogl_pipeline_set_uniform_matrix (CoglPipeline *pipeline,
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_add_snippet (CoglPipeline *pipeline,
                            CoglSnippet *snippet);
 
diff --git a/cogl/cogl/cogl-pipeline.h b/cogl/cogl/cogl-pipeline.h
index 52cb2e063..16acc772d 100644
--- a/cogl/cogl/cogl-pipeline.h
+++ b/cogl/cogl/cogl-pipeline.h
@@ -69,6 +69,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_pipeline_get_gtype (void);
 
 /**
@@ -83,7 +84,7 @@ GType cogl_pipeline_get_gtype (void);
  * Since: 2.0
  * Stability: Unstable
  */
-CoglPipeline *
+COGL_EXPORT CoglPipeline *
 cogl_pipeline_new (CoglContext *context);
 
 /**
@@ -104,7 +105,7 @@ cogl_pipeline_new (CoglContext *context);
  * Since: 2.0
  * Stability: Unstable
  */
-CoglPipeline *
+COGL_EXPORT CoglPipeline *
 cogl_pipeline_copy (CoglPipeline *source);
 
 /**
@@ -119,7 +120,7 @@ cogl_pipeline_copy (CoglPipeline *source);
  * Since: 2.0
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_pipeline (void *object);
 
 /**
@@ -151,7 +152,7 @@ typedef gboolean (*CoglPipelineLayerCallback) (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_pipeline_foreach_layer (CoglPipeline *pipeline,
                              CoglPipelineLayerCallback callback,
                              void *user_data);
@@ -176,7 +177,7 @@ cogl_pipeline_foreach_layer (CoglPipeline *pipeline,
  * Since: 2.0
  * Stability: Unstable
  */
-int
+COGL_EXPORT int
 cogl_pipeline_get_uniform_location (CoglPipeline *pipeline,
                                     const char *uniform_name);
 
diff --git a/cogl/cogl/cogl-pixel-buffer.h b/cogl/cogl/cogl-pixel-buffer.h
index e53d3704b..79d03c83c 100644
--- a/cogl/cogl/cogl-pixel-buffer.h
+++ b/cogl/cogl/cogl-pixel-buffer.h
@@ -61,6 +61,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_pixel_buffer_get_gtype (void);
 
 /**
@@ -82,7 +83,7 @@ GType cogl_pixel_buffer_get_gtype (void);
  * Since: 1.10
  * Stability: unstable
  */
-CoglPixelBuffer *
+COGL_EXPORT CoglPixelBuffer *
 cogl_pixel_buffer_new (CoglContext *context,
                        size_t size,
                        const void *data);
@@ -99,7 +100,7 @@ cogl_pixel_buffer_new (CoglContext *context,
  * Since: 1.2
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_pixel_buffer (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-pixel-format.h b/cogl/cogl/cogl-pixel-format.h
index 96f21b954..e2f898c97 100644
--- a/cogl/cogl/cogl-pixel-format.h
+++ b/cogl/cogl/cogl-pixel-format.h
@@ -39,6 +39,7 @@
 #include <stddef.h>
 
 #include <cogl/cogl-defines.h>
+#include <cogl/cogl-macros.h>
 
 #include <glib.h>
 #include <glib-object.h>
@@ -251,7 +252,7 @@ typedef enum /*< prefix=COGL_PIXEL_FORMAT >*/
  *
  * Returns: The number of bytes per pixel in the given format's given plane.
  */
-int
+COGL_EXPORT int
 cogl_pixel_format_get_bytes_per_pixel (CoglPixelFormat format,
                                        int             plane);
 
@@ -302,7 +303,7 @@ _cogl_pixel_format_is_endian_dependant (CoglPixelFormat format);
  *
  * Returns: The no. of planes of @format (at most %COGL_PIXEL_FORMAT_MAX_PLANES)
  */
-int
+COGL_EXPORT int
 cogl_pixel_format_get_n_planes (CoglPixelFormat format);
 
 /**
@@ -313,7 +314,7 @@ cogl_pixel_format_get_n_planes (CoglPixelFormat format);
  *
  * Returns: (transfer none): A string representation of @format.
  */
-const char *
+COGL_EXPORT const char *
 cogl_pixel_format_to_string (CoglPixelFormat format);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-poll-private.h b/cogl/cogl/cogl-poll-private.h
index bdc9e6d80..55021926e 100644
--- a/cogl/cogl/cogl-poll-private.h
+++ b/cogl/cogl/cogl-poll-private.h
@@ -41,7 +41,7 @@ _cogl_poll_renderer_remove_fd (CoglRenderer *renderer, int fd);
 typedef int64_t (*CoglPollPrepareCallback) (void *user_data);
 typedef void (*CoglPollDispatchCallback) (void *user_data, int revents);
 
-void
+COGL_EXPORT void
 _cogl_poll_renderer_add_fd (CoglRenderer *renderer,
                             int fd,
                             CoglPollFDEvent events,
@@ -68,7 +68,7 @@ _cogl_poll_renderer_remove_source (CoglRenderer *renderer,
 
 typedef void (*CoglIdleCallback) (void *user_data);
 
-CoglClosure *
+COGL_EXPORT CoglClosure *
 _cogl_poll_renderer_add_idle (CoglRenderer *renderer,
                               CoglIdleCallback idle_cb,
                               void *user_data,
diff --git a/cogl/cogl/cogl-poll.h b/cogl/cogl/cogl-poll.h
index 8b1483a98..5afed9089 100644
--- a/cogl/cogl/cogl-poll.h
+++ b/cogl/cogl/cogl-poll.h
@@ -157,7 +157,7 @@ typedef struct {
  * Stability: unstable
  * Since: 1.16
  */
-int
+COGL_EXPORT int
 cogl_poll_renderer_get_info (CoglRenderer *renderer,
                              CoglPollFD **poll_fds,
                              int *n_poll_fds,
@@ -185,7 +185,7 @@ cogl_poll_renderer_get_info (CoglRenderer *renderer,
  * Stability: unstable
  * Since: 1.16
  */
-void
+COGL_EXPORT void
 cogl_poll_renderer_dispatch (CoglRenderer *renderer,
                              const CoglPollFD *poll_fds,
                              int n_poll_fds);
diff --git a/cogl/cogl/cogl-primitive-private.h b/cogl/cogl/cogl-primitive-private.h
index 78627295a..072812148 100644
--- a/cogl/cogl/cogl-primitive-private.h
+++ b/cogl/cogl/cogl-primitive-private.h
@@ -63,7 +63,7 @@ _cogl_primitive_immutable_ref (CoglPrimitive *primitive);
 void
 _cogl_primitive_immutable_unref (CoglPrimitive *primitive);
 
-void
+COGL_EXPORT void
 _cogl_primitive_draw (CoglPrimitive *primitive,
                       CoglFramebuffer *framebuffer,
                       CoglPipeline *pipeline,
diff --git a/cogl/cogl/cogl-primitive-texture.h b/cogl/cogl/cogl-primitive-texture.h
index 14b994bce..8d6efe9dc 100644
--- a/cogl/cogl/cogl-primitive-texture.h
+++ b/cogl/cogl/cogl-primitive-texture.h
@@ -102,7 +102,7 @@ cogl_is_primitive_texture (void *object);
  * Since: 2.0
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_primitive_texture_set_auto_mipmap (CoglPrimitiveTexture *primitive_texture,
                                         gboolean value);
 
diff --git a/cogl/cogl/cogl-primitive.h b/cogl/cogl/cogl-primitive.h
index b2ddb0db3..5b3a70c88 100644
--- a/cogl/cogl/cogl-primitive.h
+++ b/cogl/cogl/cogl-primitive.h
@@ -70,6 +70,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_primitive_get_gtype (void);
 
 /**
@@ -249,7 +250,7 @@ typedef struct {
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new (CoglVerticesMode mode,
                     int n_vertices,
                     ...);
@@ -275,7 +276,7 @@ cogl_primitive_new (CoglVerticesMode mode,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_with_attributes (CoglVerticesMode mode,
                                     int n_vertices,
                                     CoglAttribute **attributes,
@@ -329,7 +330,7 @@ cogl_primitive_new_with_attributes (CoglVerticesMode mode,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p2 (CoglContext *context,
                        CoglVerticesMode mode,
                        int n_vertices,
@@ -383,7 +384,7 @@ cogl_primitive_new_p2 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p3 (CoglContext *context,
                        CoglVerticesMode mode,
                        int n_vertices,
@@ -439,7 +440,7 @@ cogl_primitive_new_p3 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p2c4 (CoglContext *context,
                          CoglVerticesMode mode,
                          int n_vertices,
@@ -495,7 +496,7 @@ cogl_primitive_new_p2c4 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p3c4 (CoglContext *context,
                          CoglVerticesMode mode,
                          int n_vertices,
@@ -551,7 +552,7 @@ cogl_primitive_new_p3c4 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p2t2 (CoglContext *context,
                          CoglVerticesMode mode,
                          int n_vertices,
@@ -607,7 +608,7 @@ cogl_primitive_new_p2t2 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p3t2 (CoglContext *context,
                          CoglVerticesMode mode,
                          int n_vertices,
@@ -663,7 +664,7 @@ cogl_primitive_new_p3t2 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p2t2c4 (CoglContext *context,
                            CoglVerticesMode mode,
                            int n_vertices,
@@ -719,15 +720,15 @@ cogl_primitive_new_p2t2c4 (CoglContext *context,
  * Since: 1.6
  * Stability: Unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_new_p3t2c4 (CoglContext *context,
                            CoglVerticesMode mode,
                            int n_vertices,
                            const CoglVertexP3T2C4 *data);
-int
+COGL_EXPORT int
 cogl_primitive_get_first_vertex (CoglPrimitive *primitive);
 
-void
+COGL_EXPORT void
 cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
                                  int first_vertex);
 
@@ -753,7 +754,7 @@ cogl_primitive_set_first_vertex (CoglPrimitive *primitive,
  * Since: 1.8
  * Stability: unstable
  */
-int
+COGL_EXPORT int
 cogl_primitive_get_n_vertices (CoglPrimitive *primitive);
 
 /**
@@ -774,14 +775,14 @@ cogl_primitive_get_n_vertices (CoglPrimitive *primitive);
  * Since: 1.8
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_primitive_set_n_vertices (CoglPrimitive *primitive,
                                int n_vertices);
 
-CoglVerticesMode
+COGL_EXPORT CoglVerticesMode
 cogl_primitive_get_mode (CoglPrimitive *primitive);
 
-void
+COGL_EXPORT void
 cogl_primitive_set_mode (CoglPrimitive *primitive,
                          CoglVerticesMode mode);
 
@@ -796,7 +797,7 @@ cogl_primitive_set_mode (CoglPrimitive *primitive,
  * Since: 1.6
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_primitive_set_attributes (CoglPrimitive *primitive,
                                CoglAttribute **attributes,
                                int n_attributes);
@@ -829,7 +830,7 @@ cogl_primitive_set_attributes (CoglPrimitive *primitive,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_primitive_set_indices (CoglPrimitive *primitive,
                             CoglIndices *indices,
                             int n_indices);
@@ -844,7 +845,7 @@ cogl_primitive_set_indices (CoglPrimitive *primitive,
  * Since: 1.10
  * Stability: unstable
  */
-CoglIndices *
+COGL_EXPORT CoglIndices *
 cogl_primitive_get_indices (CoglPrimitive *primitive);
 
 /**
@@ -859,7 +860,7 @@ cogl_primitive_get_indices (CoglPrimitive *primitive);
  * Since: 1.10
  * Stability: unstable
  */
-CoglPrimitive *
+COGL_EXPORT CoglPrimitive *
 cogl_primitive_copy (CoglPrimitive *primitive);
 
 /**
@@ -874,7 +875,7 @@ cogl_primitive_copy (CoglPrimitive *primitive);
  * Since: 1.6
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_primitive (void *object);
 
 /**
@@ -909,7 +910,7 @@ typedef gboolean (* CoglPrimitiveAttributeCallback) (CoglPrimitive *primitive,
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_primitive_foreach_attribute (CoglPrimitive *primitive,
                                   CoglPrimitiveAttributeCallback callback,
                                   void *user_data);
@@ -932,7 +933,7 @@ cogl_primitive_foreach_attribute (CoglPrimitive *primitive,
  * Stability: unstable
  * Since: 1.16
  */
-void
+COGL_EXPORT void
 cogl_primitive_draw (CoglPrimitive *primitive,
                      CoglFramebuffer *framebuffer,
                      CoglPipeline *pipeline);
diff --git a/cogl/cogl/cogl-profile.h b/cogl/cogl/cogl-profile.h
index 98c2fd456..ad32a3f16 100644
--- a/cogl/cogl/cogl-profile.h
+++ b/cogl/cogl/cogl-profile.h
@@ -48,7 +48,7 @@ extern UProfContext *_cogl_uprof_context;
 void
 _cogl_uprof_init (void);
 
-void
+COGL_EXPORT void
 _cogl_profile_trace_message (const char *format, ...);
 
 #else
diff --git a/cogl/cogl/cogl-renderer.h b/cogl/cogl/cogl-renderer.h
index a438e30b7..ffa0dce7e 100644
--- a/cogl/cogl/cogl-renderer.h
+++ b/cogl/cogl/cogl-renderer.h
@@ -80,7 +80,7 @@ G_BEGIN_DECLS
  */
 #define COGL_RENDERER_ERROR cogl_renderer_error_quark ()
 
-uint32_t
+COGL_EXPORT uint32_t
 cogl_renderer_error_quark (void);
 
 typedef struct _CoglRenderer CoglRenderer;
@@ -90,6 +90,7 @@ typedef struct _CoglRenderer CoglRenderer;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_renderer_get_gtype (void);
 
 /**
@@ -102,7 +103,7 @@ GType cogl_renderer_get_gtype (void);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_renderer (void *object);
 
 /**
@@ -145,7 +146,7 @@ cogl_is_renderer (void *object);
  * Since: 1.10
  * Stability: unstable
  */
-CoglRenderer *
+COGL_EXPORT CoglRenderer *
 cogl_renderer_new (void);
 
 /* optional configuration APIs */
@@ -184,7 +185,7 @@ typedef enum
  *
  * This may only be called on an un-connected #CoglRenderer.
  */
-void
+COGL_EXPORT void
 cogl_renderer_set_winsys_id (CoglRenderer *renderer,
                              CoglWinsysID winsys_id);
 
@@ -199,7 +200,7 @@ cogl_renderer_set_winsys_id (CoglRenderer *renderer,
  * Returns: The #CoglWinsysID corresponding to the chosen window
  *          system backend.
  */
-CoglWinsysID
+COGL_EXPORT CoglWinsysID
 cogl_renderer_get_winsys_id (CoglRenderer *renderer);
 
 /**
@@ -216,7 +217,7 @@ cogl_renderer_get_winsys_id (CoglRenderer *renderer);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_renderer_check_onscreen_template (CoglRenderer *renderer,
                                        CoglOnscreenTemplate *onscreen_template,
                                        GError **error);
@@ -238,7 +239,7 @@ cogl_renderer_check_onscreen_template (CoglRenderer *renderer,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_renderer_connect (CoglRenderer *renderer, GError **error);
 
 /**
@@ -284,7 +285,7 @@ typedef enum
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_renderer_add_constraint (CoglRenderer *renderer,
                               CoglRendererConstraint constraint);
 
@@ -301,7 +302,7 @@ cogl_renderer_add_constraint (CoglRenderer *renderer,
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_renderer_remove_constraint (CoglRenderer *renderer,
                                  CoglRendererConstraint constraint);
 
@@ -346,7 +347,7 @@ typedef enum
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_renderer_set_driver (CoglRenderer *renderer,
                           CoglDriver driver);
 
@@ -361,7 +362,7 @@ cogl_renderer_set_driver (CoglRenderer *renderer,
  * Since: 1.10
  * Stability: unstable
  */
-CoglDriver
+COGL_EXPORT CoglDriver
 cogl_renderer_get_driver (CoglRenderer *renderer);
 
 /**
@@ -393,7 +394,7 @@ typedef void (*CoglOutputCallback) (CoglOutput *output, void *user_data);
  * Since: 1.14
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_renderer_foreach_output (CoglRenderer *renderer,
                               CoglOutputCallback callback,
                               void *user_data);
@@ -413,7 +414,7 @@ cogl_renderer_foreach_output (CoglRenderer *renderer,
  * return result must be released with cogl_dma_buf_handle_free()
  * after use.
  */
-CoglDmaBufHandle *
+COGL_EXPORT CoglDmaBufHandle *
 cogl_renderer_create_dma_buf (CoglRenderer  *renderer,
                               int            width,
                               int            height,
diff --git a/cogl/cogl/cogl-snippet.h b/cogl/cogl/cogl-snippet.h
index f9cf37f51..aec502173 100644
--- a/cogl/cogl/cogl-snippet.h
+++ b/cogl/cogl/cogl-snippet.h
@@ -345,6 +345,7 @@ typedef struct _CoglSnippet CoglSnippet;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_snippet_get_gtype (void);
 
 /* Enumeration of all the hook points that a snippet can be attached
@@ -690,7 +691,7 @@ typedef enum
  * Since: 1.10
  * Stability: Unstable
  */
-CoglSnippet *
+COGL_EXPORT CoglSnippet *
 cogl_snippet_new (CoglSnippetHook hook,
                   const char *declarations,
                   const char *post);
@@ -704,7 +705,7 @@ cogl_snippet_new (CoglSnippetHook hook,
  * Since: 1.10
  * Stability: Unstable
  */
-CoglSnippetHook
+COGL_EXPORT CoglSnippetHook
 cogl_snippet_get_hook (CoglSnippet *snippet);
 
 /**
@@ -719,7 +720,7 @@ cogl_snippet_get_hook (CoglSnippet *snippet);
  * Since: 1.10
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_snippet (void *object);
 
 /**
@@ -740,7 +741,7 @@ cogl_is_snippet (void *object);
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_snippet_set_declarations (CoglSnippet *snippet,
                                const char *declarations);
 
@@ -754,7 +755,7 @@ cogl_snippet_set_declarations (CoglSnippet *snippet,
  * Since: 1.10
  * Stability: Unstable
  */
-const char *
+COGL_EXPORT const char *
 cogl_snippet_get_declarations (CoglSnippet *snippet);
 
 /**
@@ -774,7 +775,7 @@ cogl_snippet_get_declarations (CoglSnippet *snippet);
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_snippet_set_pre (CoglSnippet *snippet,
                       const char *pre);
 
@@ -788,7 +789,7 @@ cogl_snippet_set_pre (CoglSnippet *snippet,
  * Since: 1.10
  * Stability: Unstable
  */
-const char *
+COGL_EXPORT const char *
 cogl_snippet_get_pre (CoglSnippet *snippet);
 
 /**
@@ -808,7 +809,7 @@ cogl_snippet_get_pre (CoglSnippet *snippet);
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_snippet_set_replace (CoglSnippet *snippet,
                           const char *replace);
 
@@ -822,7 +823,7 @@ cogl_snippet_set_replace (CoglSnippet *snippet,
  * Since: 1.10
  * Stability: Unstable
  */
-const char *
+COGL_EXPORT const char *
 cogl_snippet_get_replace (CoglSnippet *snippet);
 
 /**
@@ -842,7 +843,7 @@ cogl_snippet_get_replace (CoglSnippet *snippet);
  * Since: 1.10
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_snippet_set_post (CoglSnippet *snippet,
                        const char *post);
 
@@ -856,7 +857,7 @@ cogl_snippet_set_post (CoglSnippet *snippet,
  * Since: 1.10
  * Stability: Unstable
  */
-const char *
+COGL_EXPORT const char *
 cogl_snippet_get_post (CoglSnippet *snippet);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-sub-texture.h b/cogl/cogl/cogl-sub-texture.h
index e12d75c2e..97874e763 100644
--- a/cogl/cogl/cogl-sub-texture.h
+++ b/cogl/cogl/cogl-sub-texture.h
@@ -90,7 +90,7 @@ GType cogl_sub_texture_get_gtype (void);
  * Since: 1.10
  * Stability: unstable
  */
-CoglSubTexture *
+COGL_EXPORT CoglSubTexture *
 cogl_sub_texture_new (CoglContext *ctx,
                       CoglTexture *parent_texture,
                       int sub_x,
@@ -111,7 +111,7 @@ cogl_sub_texture_new (CoglContext *ctx,
  * Since: 1.10
  * Stability: unstable
  */
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_sub_texture_get_parent (CoglSubTexture *sub_texture);
 
 /**
@@ -126,7 +126,7 @@ cogl_sub_texture_get_parent (CoglSubTexture *sub_texture);
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_sub_texture (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-swap-chain.h b/cogl/cogl/cogl-swap-chain.h
index 0ec1b3bc5..6e965ee9a 100644
--- a/cogl/cogl/cogl-swap-chain.h
+++ b/cogl/cogl/cogl-swap-chain.h
@@ -46,20 +46,21 @@ typedef struct _CoglSwapChain CoglSwapChain;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_swap_chain_get_gtype (void);
 
-CoglSwapChain *
+COGL_EXPORT CoglSwapChain *
 cogl_swap_chain_new (void);
 
-void
+COGL_EXPORT void
 cogl_swap_chain_set_has_alpha (CoglSwapChain *swap_chain,
                                gboolean has_alpha);
 
-void
+COGL_EXPORT void
 cogl_swap_chain_set_length (CoglSwapChain *swap_chain,
                             int length);
 
-gboolean
+COGL_EXPORT gboolean
 cogl_is_swap_chain (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-texture-2d-sliced.h b/cogl/cogl/cogl-texture-2d-sliced.h
index 8569f76fb..29a25a570 100644
--- a/cogl/cogl/cogl-texture-2d-sliced.h
+++ b/cogl/cogl/cogl-texture-2d-sliced.h
@@ -75,6 +75,7 @@ typedef struct _CoglTexture2DSliced CoglTexture2DSliced;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_texture_2d_sliced_get_gtype (void);
 
 /**
@@ -118,7 +119,7 @@ GType cogl_texture_2d_sliced_get_gtype (void);
  * Since: 1.10
  * Stability: unstable
  */
-CoglTexture2DSliced *
+COGL_EXPORT CoglTexture2DSliced *
 cogl_texture_2d_sliced_new_with_size (CoglContext *ctx,
                                       int width,
                                       int height,
@@ -166,7 +167,7 @@ cogl_texture_2d_sliced_new_with_size (CoglContext *ctx,
  *
  * Since: 1.16
  */
-CoglTexture2DSliced *
+COGL_EXPORT CoglTexture2DSliced *
 cogl_texture_2d_sliced_new_from_file (CoglContext *ctx,
                                       const char *filename,
                                       int max_waste,
@@ -227,7 +228,7 @@ cogl_texture_2d_sliced_new_from_file (CoglContext *ctx,
  *
  * Since: 1.16
  */
-CoglTexture2DSliced *
+COGL_EXPORT CoglTexture2DSliced *
 cogl_texture_2d_sliced_new_from_data (CoglContext *ctx,
                                       int width,
                                       int height,
@@ -278,7 +279,7 @@ cogl_texture_2d_sliced_new_from_data (CoglContext *ctx,
  *
  * Since: 1.16
  */
-CoglTexture2DSliced *
+COGL_EXPORT CoglTexture2DSliced *
 cogl_texture_2d_sliced_new_from_bitmap (CoglBitmap *bmp,
                                         int max_waste);
 
@@ -293,7 +294,7 @@ cogl_texture_2d_sliced_new_from_bitmap (CoglBitmap *bmp,
  * Since: 1.10
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_texture_2d_sliced (void *object);
 
 #endif /* __COGL_TEXURE_2D_SLICED_H */
diff --git a/cogl/cogl/cogl-texture-2d.h b/cogl/cogl/cogl-texture-2d.h
index 4dccd84a0..9bee64692 100644
--- a/cogl/cogl/cogl-texture-2d.h
+++ b/cogl/cogl/cogl-texture-2d.h
@@ -71,6 +71,7 @@ typedef enum _CoglEglImageFlags
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_texture_2d_get_gtype (void);
 
 /**
@@ -83,7 +84,7 @@ GType cogl_texture_2d_get_gtype (void);
  * Return value: %TRUE if the object references a #CoglTexture2D,
  *   %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_texture_2d (void *object);
 
 /**
@@ -110,7 +111,7 @@ cogl_is_texture_2d (void *object);
  *
  * Since: 2.0
  */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_texture_2d_new_with_size (CoglContext *ctx,
                                int width,
                                int height);
@@ -139,7 +140,7 @@ cogl_texture_2d_new_with_size (CoglContext *ctx,
  *
  * Since: 1.16
  */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_texture_2d_new_from_file (CoglContext *ctx,
                                const char *filename,
                                GError **error);
@@ -177,7 +178,7 @@ cogl_texture_2d_new_from_file (CoglContext *ctx,
  *
  * Since: 2.0
  */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_texture_2d_new_from_data (CoglContext *ctx,
                                int width,
                                int height,
@@ -209,7 +210,7 @@ cogl_texture_2d_new_from_data (CoglContext *ctx,
  * Since: 2.0
  * Stability: unstable
  */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_texture_2d_new_from_bitmap (CoglBitmap *bitmap);
 
 /**
@@ -219,7 +220,7 @@ cogl_texture_2d_new_from_bitmap (CoglBitmap *bitmap);
 /* NB: The reason we require the width, height and format to be passed
  * even though they may seem redundant is because GLES 1/2 don't
  * provide a way to query these properties. */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
                                     int width,
                                     int height,
@@ -235,7 +236,7 @@ typedef gboolean (*CoglTexture2DEGLImageExternalAlloc) (CoglTexture2D *tex_2d,
 /**
  * cogl_texture_2d_new_from_egl_image_external: (skip)
  */
-CoglTexture2D *
+COGL_EXPORT CoglTexture2D *
 cogl_texture_2d_new_from_egl_image_external (CoglContext *ctx,
                                              int width,
                                              int height,
@@ -244,10 +245,10 @@ cogl_texture_2d_new_from_egl_image_external (CoglContext *ctx,
                                              GDestroyNotify destroy,
                                              GError **error);
 
-void
+COGL_EXPORT void
 cogl_texture_2d_egl_image_external_bind (CoglTexture2D *tex_2d);
 
-void
+COGL_EXPORT void
 cogl_texture_2d_egl_image_external_alloc_finish (CoglTexture2D *tex_2d,
                                                 void *user_data,
                                                 GDestroyNotify destroy);
diff --git a/cogl/cogl/cogl-texture-private.h b/cogl/cogl/cogl-texture-private.h
index e65cf1c38..69d7ebd4a 100644
--- a/cogl/cogl/cogl-texture-private.h
+++ b/cogl/cogl/cogl-texture-private.h
@@ -272,7 +272,7 @@ _cogl_texture_register_texture_type (const CoglObjectClass *klass);
   (TypeName, type_name,                                                 \
    _cogl_texture_register_texture_type (&_cogl_##type_name##_class))
 
-gboolean
+COGL_EXPORT gboolean
 _cogl_texture_can_hardware_repeat (CoglTexture *texture);
 
 void
@@ -346,7 +346,7 @@ _cogl_texture_spans_foreach_in_region (CoglSpan *x_spans,
                                        CoglMetaTextureCallback callback,
                                        void *user_data);
 
-gboolean
+COGL_EXPORT gboolean
 _cogl_texture_set_region (CoglTexture *texture,
                           int width,
                           int height,
@@ -390,7 +390,7 @@ _cogl_texture_set_allocated (CoglTexture *texture,
                              int width,
                              int height);
 
-CoglPixelFormat
+COGL_EXPORT CoglPixelFormat
 _cogl_texture_get_format (CoglTexture *texture);
 
 CoglTextureLoader *
diff --git a/cogl/cogl/cogl-texture.h b/cogl/cogl/cogl-texture.h
index d9727dbbe..c86b4e3a5 100644
--- a/cogl/cogl/cogl-texture.h
+++ b/cogl/cogl/cogl-texture.h
@@ -76,6 +76,7 @@ G_BEGIN_DECLS
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_texture_get_gtype (void);
 
 /**
@@ -108,6 +109,7 @@ typedef enum
   COGL_TEXTURE_ERROR_TYPE
 } CoglTextureError;
 
+COGL_EXPORT
 uint32_t cogl_texture_error_quark (void);
 
 /**
@@ -119,7 +121,7 @@ uint32_t cogl_texture_error_quark (void);
  * Return value: %TRUE if the @object references a texture, and
  *   %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_texture (void *object);
 
 /**
@@ -171,7 +173,7 @@ typedef enum _CoglTextureComponents
  *
  * Since: 1.18
  */
-void
+COGL_EXPORT void
 cogl_texture_set_components (CoglTexture *texture,
                              CoglTextureComponents components);
 
@@ -189,7 +191,7 @@ cogl_texture_set_components (CoglTexture *texture,
  *
  * Since: 1.18
  */
-CoglTextureComponents
+COGL_EXPORT CoglTextureComponents
 cogl_texture_get_components (CoglTexture *texture);
 
 /**
@@ -223,7 +225,7 @@ cogl_texture_get_components (CoglTexture *texture);
  *
  * Since: 1.18
  */
-void
+COGL_EXPORT void
 cogl_texture_set_premultiplied (CoglTexture *texture,
                                 gboolean premultiplied);
 
@@ -242,7 +244,7 @@ cogl_texture_set_premultiplied (CoglTexture *texture,
  *               value or %FALSE if not.
  * Since: 1.18
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_get_premultiplied (CoglTexture *texture);
 
 /**
@@ -253,7 +255,7 @@ cogl_texture_get_premultiplied (CoglTexture *texture);
  *
  * Return value: the width of the GPU side texture in pixels
  */
-unsigned int
+COGL_EXPORT unsigned int
 cogl_texture_get_width (CoglTexture *texture);
 
 /**
@@ -264,7 +266,7 @@ cogl_texture_get_width (CoglTexture *texture);
  *
  * Return value: the height of the GPU side texture in pixels
  */
-unsigned int
+COGL_EXPORT unsigned int
 cogl_texture_get_height (CoglTexture *texture);
 
 /**
@@ -276,7 +278,7 @@ cogl_texture_get_height (CoglTexture *texture);
  *
  * Return value: the maximum waste
  */
-int
+COGL_EXPORT int
 cogl_texture_get_max_waste (CoglTexture *texture);
 
 /**
@@ -289,7 +291,7 @@ cogl_texture_get_max_waste (CoglTexture *texture);
  * Return value: %TRUE if the texture is sliced, %FALSE if the texture
  *   is stored as a single GPU texture
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_is_sliced (CoglTexture *texture);
 
 /**
@@ -308,7 +310,7 @@ cogl_texture_is_sliced (CoglTexture *texture);
  * Return value: %TRUE if the handle was successfully retrieved, %FALSE
  *   if the handle was invalid
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_get_gl_texture (CoglTexture *texture,
                              unsigned int *out_gl_handle,
                              unsigned int *out_gl_target);
@@ -332,7 +334,7 @@ cogl_texture_get_gl_texture (CoglTexture *texture,
  *
  * Return value: the size of the texture data in bytes
  */
-int
+COGL_EXPORT int
 cogl_texture_get_data (CoglTexture *texture,
                        CoglPixelFormat format,
                        unsigned int rowstride,
@@ -364,7 +366,7 @@ cogl_texture_get_data (CoglTexture *texture,
  * Return value: %TRUE if the subregion upload was successful, and
  *   %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_set_region (CoglTexture *texture,
                          int src_x,
                          int src_y,
@@ -430,7 +432,7 @@ cogl_texture_set_region (CoglTexture *texture,
  * Return value: %TRUE if the data upload was successful, and
  *               %FALSE otherwise
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_set_data (CoglTexture *texture,
                        CoglPixelFormat format,
                        int rowstride,
@@ -463,7 +465,7 @@ cogl_texture_set_data (CoglTexture *texture,
  * Since: 1.8
  * Stability: unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_set_region_from_bitmap (CoglTexture *texture,
                                      int src_x,
                                      int src_y,
@@ -491,14 +493,14 @@ cogl_texture_set_region_from_bitmap (CoglTexture *texture,
  *               otherwise %FALSE and @error will be updated if it
  *               wasn't %NULL.
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_allocate (CoglTexture *texture,
                        GError **error);
 
 /**
  * cogl_texture_is_get_data_supported: (skip)
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_is_get_data_supported (CoglTexture *texture);
 
 G_END_DECLS
diff --git a/cogl/cogl/cogl-trace.h b/cogl/cogl/cogl-trace.h
index 0b1e7f0de..1f0a5ec34 100644
--- a/cogl/cogl/cogl-trace.h
+++ b/cogl/cogl/cogl-trace.h
@@ -36,19 +36,25 @@ typedef struct _CoglTraceHead
   const char *name;
 } CoglTraceHead;
 
-extern GPrivate cogl_trace_thread_data;
-extern CoglTraceContext *cogl_trace_context;
-extern GMutex cogl_trace_mutex;
-
-void cogl_set_tracing_enabled_on_thread_with_fd (GMainContext *main_context,
-                                                 const char   *group,
-                                                 int           fd);
-
-void cogl_set_tracing_enabled_on_thread (GMainContext *main_context,
-                                         const char   *group,
-                                         const char   *filename);
-
-void cogl_set_tracing_disabled_on_thread (GMainContext *main_context);
+COGL_EXPORT
+GPrivate cogl_trace_thread_data;
+COGL_EXPORT
+CoglTraceContext *cogl_trace_context;
+COGL_EXPORT
+GMutex cogl_trace_mutex;
+
+COGL_EXPORT void
+cogl_set_tracing_enabled_on_thread_with_fd (GMainContext *main_context,
+                                            const char   *group,
+                                            int           fd);
+
+COGL_EXPORT void
+cogl_set_tracing_enabled_on_thread (GMainContext *main_context,
+                                    const char   *group,
+                                    const char   *filename);
+
+COGL_EXPORT void
+cogl_set_tracing_disabled_on_thread (GMainContext *main_context);
 
 static inline void
 cogl_trace_begin (CoglTraceHead *head,
@@ -58,7 +64,7 @@ cogl_trace_begin (CoglTraceHead *head,
   head->name = name;
 }
 
-void
+COGL_EXPORT void
 cogl_trace_end (CoglTraceHead *head);
 
 static inline void
@@ -95,13 +101,16 @@ cogl_auto_trace_end_helper (CoglTraceHead **head)
 #define COGL_TRACE_END(Name) (void) 0
 #define COGL_TRACE_BEGIN_SCOPED(Name, description) (void) 0
 
-void cogl_set_tracing_enabled_on_thread_with_fd (void       *data,
-                                                 const char *group,
-                                                 int         fd);
-void cogl_set_tracing_enabled_on_thread (void       *data,
-                                         const char *group,
-                                         const char *filename);
-void cogl_set_tracing_disabled_on_thread (void *data);
+COGL_EXPORT void
+cogl_set_tracing_enabled_on_thread_with_fd (void       *data,
+                                            const char *group,
+                                            int         fd);
+COGL_EXPORT void
+cogl_set_tracing_enabled_on_thread (void       *data,
+                                    const char *group,
+                                    const char *filename);
+COGL_EXPORT void
+cogl_set_tracing_disabled_on_thread (void *data);
 
 #endif /* COGL_HAS_TRACING */
 
diff --git a/cogl/cogl/cogl-types.h b/cogl/cogl/cogl-types.h
index d24683999..495070e9d 100644
--- a/cogl/cogl/cogl-types.h
+++ b/cogl/cogl/cogl-types.h
@@ -39,6 +39,7 @@
 #include <stddef.h>
 
 #include <cogl/cogl-defines.h>
+#include <cogl/cogl-macros.h>
 
 #include <glib.h>
 #include <glib-object.h>
@@ -81,7 +82,7 @@ typedef struct { \
 typedef void * CoglHandle;
 
 #define COGL_TYPE_HANDLE        (cogl_handle_get_type ())
-GType
+COGL_EXPORT GType
 cogl_handle_get_type (void) G_GNUC_CONST;
 
 /* We forward declare this in cogl-types to avoid circular dependencies
@@ -276,7 +277,7 @@ typedef enum /*< prefix=COGL_ERROR >*/
   COGL_SYSTEM_ERROR_NO_MEMORY
 } CoglSystemError;
 
-uint32_t
+COGL_EXPORT uint32_t
 _cogl_system_error_quark (void);
 
 /**
diff --git a/cogl/cogl/cogl-util.c b/cogl/cogl/cogl-util.c
index 4c2cd50e7..84a8c5c30 100644
--- a/cogl/cogl/cogl-util.c
+++ b/cogl/cogl/cogl-util.c
@@ -44,7 +44,7 @@
  * Return value: @a if @a is already a power of two, otherwise returns
  *   the next nearest power of two.
  */
-int
+COGL_EXPORT int
 _cogl_util_next_p2 (int a)
 {
   int rval = 1;
diff --git a/cogl/cogl/cogl-wayland-server.h b/cogl/cogl/cogl-wayland-server.h
index 9f940673b..f4d83bc24 100644
--- a/cogl/cogl/cogl-wayland-server.h
+++ b/cogl/cogl/cogl-wayland-server.h
@@ -66,7 +66,7 @@ G_BEGIN_DECLS
  * Since: 1.10
  * Stability: unstable
  */
-void
+COGL_EXPORT void
 cogl_wayland_display_set_compositor_display (CoglDisplay *display,
                                           struct wl_display *wayland_display);
 
diff --git a/cogl/cogl/cogl-xlib-renderer.h b/cogl/cogl/cogl-xlib-renderer.h
index 7e2727ab7..3afdabb27 100644
--- a/cogl/cogl/cogl-xlib-renderer.h
+++ b/cogl/cogl/cogl-xlib-renderer.h
@@ -72,7 +72,7 @@ G_BEGIN_DECLS
  * either not interested in the event, or has used the event to update
  * internal state without taking any exclusive action.
  */
-CoglFilterReturn
+COGL_EXPORT CoglFilterReturn
 cogl_xlib_renderer_handle_event (CoglRenderer *renderer,
                                  XEvent *event);
 
@@ -99,7 +99,7 @@ typedef CoglFilterReturn (* CoglXlibFilterFunc) (XEvent *event,
  * function can stop further processing of the event by return
  * %COGL_FILTER_REMOVE.
  */
-void
+COGL_EXPORT void
 cogl_xlib_renderer_add_filter (CoglRenderer *renderer,
                                CoglXlibFilterFunc func,
                                void *data);
@@ -113,7 +113,7 @@ cogl_xlib_renderer_add_filter (CoglRenderer *renderer,
  * Removes a callback that was previously added with
  * cogl_xlib_renderer_add_filter().
  */
-void
+COGL_EXPORT void
 cogl_xlib_renderer_remove_filter (CoglRenderer *renderer,
                                   CoglXlibFilterFunc func,
                                   void *data);
@@ -126,7 +126,7 @@ cogl_xlib_renderer_remove_filter (CoglRenderer *renderer,
  * winsys backend. The display needs to be set with
  * cogl_xlib_renderer_set_foreign_display() before this function is called.
  */
-Display *
+COGL_EXPORT Display *
 cogl_xlib_renderer_get_foreign_display (CoglRenderer *renderer);
 
 /**
@@ -141,14 +141,14 @@ cogl_xlib_renderer_get_foreign_display (CoglRenderer *renderer);
  * application should also use cogl_xlib_renderer_handle_event() if it
  * uses this function.
  */
-void
+COGL_EXPORT void
 cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
                                         Display *display);
 
 /**
  * cogl_xlib_renderer_get_display: (skip)
  */
-Display *
+COGL_EXPORT Display *
 cogl_xlib_renderer_get_display (CoglRenderer *renderer);
 
 /**
@@ -189,7 +189,7 @@ cogl_xlib_renderer_get_display (CoglRenderer *renderer);
  * This defaults to %FALSE and is effective only if called before
  * cogl_display_setup() .
  */
-void
+COGL_EXPORT void
 cogl_xlib_renderer_request_reset_on_video_memory_purge (CoglRenderer *renderer,
                                                         gboolean enable);
 G_END_DECLS
diff --git a/cogl/cogl/cogl1-context.h b/cogl/cogl/cogl1-context.h
index 8f23aae9e..755a48452 100644
--- a/cogl/cogl/cogl1-context.h
+++ b/cogl/cogl/cogl1-context.h
@@ -57,7 +57,7 @@ G_BEGIN_DECLS
  * Deprecated: 1.16: Not replaced
  */
 COGL_DEPRECATED
-GOptionGroup *
+COGL_EXPORT GOptionGroup *
 cogl_get_option_group (void);
 
 /* Misc */
@@ -76,7 +76,7 @@ cogl_get_option_group (void);
  * Return value: a pointer to the requested function or %NULL if the
  *   function is not available.
  */
-GCallback
+COGL_EXPORT GCallback
 cogl_get_proc_address (const char *name);
 
 /**
@@ -92,7 +92,7 @@ cogl_get_proc_address (const char *name);
  * Deprecated: 1.16: Use cogl_pipeline_set_depth_state() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_depth_state)
-void
+COGL_EXPORT void
 cogl_set_depth_test_enabled (gboolean setting);
 
 /**
@@ -105,7 +105,7 @@ cogl_set_depth_test_enabled (gboolean setting);
  * Deprecated: 1.16: Use cogl_pipeline_set_depth_state() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_depth_state)
-gboolean
+COGL_EXPORT gboolean
 cogl_get_depth_test_enabled (void);
 
 /**
@@ -121,7 +121,7 @@ cogl_get_depth_test_enabled (void);
  * Deprecated: 1.16: Use cogl_pipeline_set_cull_face_mode() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_cull_face_mode)
-void
+COGL_EXPORT void
 cogl_set_backface_culling_enabled (gboolean setting);
 
 /**
@@ -135,7 +135,7 @@ cogl_set_backface_culling_enabled (gboolean setting);
  * Deprecated: 1.16: Use cogl_pipeline_get_cull_face_mode() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_get_cull_face_mode)
-gboolean
+COGL_EXPORT gboolean
 cogl_get_backface_culling_enabled (void);
 
 /**
@@ -164,7 +164,7 @@ cogl_get_backface_culling_enabled (void);
  *
  * Since: 1.0
  */
-void
+COGL_EXPORT void
 cogl_flush (void);
 
 G_END_DECLS
diff --git a/cogl/cogl/deprecated/cogl-auto-texture.h b/cogl/cogl/deprecated/cogl-auto-texture.h
index afd5cf98c..61ac84ed2 100644
--- a/cogl/cogl/deprecated/cogl-auto-texture.h
+++ b/cogl/cogl/deprecated/cogl-auto-texture.h
@@ -52,7 +52,7 @@ G_BEGIN_DECLS
  *                   cogl_texture_2d_new_with_size()
  */
 COGL_DEPRECATED_FOR (cogl_texture_2d_new_with_size__OR__cogl_texture_2d_sliced_new_with_size)
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_texture_new_with_size (unsigned int width,
                             unsigned int height,
                             CoglTextureFlags flags,
@@ -82,7 +82,7 @@ cogl_texture_new_with_size (unsigned int width,
  *                   cogl_texture_2d_new_from_file()
  */
 COGL_DEPRECATED_FOR (cogl_texture_2d_new_from_file__OR__cogl_texture_2d_sliced_new_from_file)
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_texture_new_from_file (const char       *filename,
                             CoglTextureFlags   flags,
                             CoglPixelFormat    internal_format,
@@ -116,7 +116,7 @@ cogl_texture_new_from_file (const char       *filename,
  *                   cogl_texture_2d_new_from_data()
  */
 COGL_DEPRECATED_FOR (cogl_texture_2d_new_from_data__OR__cogl_texture_2d_sliced_new_from_data)
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_texture_new_from_data (int width,
                             int height,
                             CoglTextureFlags flags,
@@ -142,7 +142,7 @@ cogl_texture_new_from_data (int width,
  *                   cogl_texture_2d_new_from_bitmap()
  */
 COGL_DEPRECATED_FOR (cogl_texture_2d_new_from_bitmap__OR__cogl_texture_2d_sliced_new_from_bitmap)
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_texture_new_from_bitmap (CoglBitmap *bitmap,
                               CoglTextureFlags flags,
                               CoglPixelFormat internal_format);
@@ -172,7 +172,7 @@ cogl_texture_new_from_bitmap (CoglBitmap *bitmap,
  * Deprecated: 1.18: Use cogl_sub_texture_new()
  */
 COGL_DEPRECATED_FOR (cogl_sub_texture_new)
-CoglTexture *
+COGL_EXPORT CoglTexture *
 cogl_texture_new_from_sub_texture (CoglTexture *full_texture,
                                    int sub_x,
                                    int sub_y,
diff --git a/cogl/cogl/deprecated/cogl-clutter.h b/cogl/cogl/deprecated/cogl-clutter.h
index 2f37b4486..3cf624d20 100644
--- a/cogl/cogl/deprecated/cogl-clutter.h
+++ b/cogl/cogl/deprecated/cogl-clutter.h
@@ -37,7 +37,7 @@ G_BEGIN_DECLS
 
 #define cogl_clutter_winsys_has_feature cogl_clutter_winsys_has_feature_CLUTTER
 COGL_DEPRECATED_FOR (cogl_has_feature)
-gboolean
+COGL_EXPORT gboolean
 cogl_clutter_winsys_has_feature (CoglWinsysFeature feature);
 
 G_END_DECLS
diff --git a/cogl/cogl/deprecated/cogl-material-compat.h b/cogl/cogl/deprecated/cogl-material-compat.h
index 51385e9aa..740322e56 100644
--- a/cogl/cogl/deprecated/cogl-material-compat.h
+++ b/cogl/cogl/deprecated/cogl-material-compat.h
@@ -57,6 +57,7 @@ typedef struct _CoglMaterial        CoglMaterial;
 typedef struct _CoglMaterialLayer     CoglMaterialLayer;
 
 #define COGL_TYPE_MATERIAL (cogl_material_get_type ())
+COGL_EXPORT
 GType cogl_material_get_type (void);
 
 #define COGL_MATERIAL(OBJECT) ((CoglMaterial *)OBJECT)
@@ -150,7 +151,7 @@ typedef enum
  * Deprecated: 1.16: Use cogl_pipeline_new() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_new)
-CoglMaterial *
+COGL_EXPORT CoglMaterial *
 cogl_material_new (void);
 
 /**
@@ -171,7 +172,7 @@ cogl_material_new (void);
  * Deprecated: 1.16: Use cogl_pipeline_set_color() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_color)
-void
+COGL_EXPORT void
 cogl_material_set_color (CoglMaterial    *material,
                          const CoglColor *color);
 
@@ -191,7 +192,7 @@ cogl_material_set_color (CoglMaterial    *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_color4ub() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_color4ub)
-void
+COGL_EXPORT void
 cogl_material_set_color4ub (CoglMaterial *material,
                            uint8_t red,
                             uint8_t green,
@@ -251,7 +252,7 @@ typedef enum
  * Deprecated: 1.16: Use cogl_pipeline_set_alpha_test_function() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_alpha_test_function)
-void
+COGL_EXPORT void
 cogl_material_set_alpha_test_function (CoglMaterial         *material,
                                       CoglMaterialAlphaFunc alpha_func,
                                       float                 alpha_reference);
@@ -342,7 +343,7 @@ cogl_material_set_alpha_test_function (CoglMaterial         *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_blend() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_blend)
-gboolean
+COGL_EXPORT gboolean
 cogl_material_set_blend (CoglMaterial *material,
                          const char   *blend_string,
                          GError      **error);
@@ -359,7 +360,7 @@ cogl_material_set_blend (CoglMaterial *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_blend_constant() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_blend_constant)
-void
+COGL_EXPORT void
 cogl_material_set_blend_constant (CoglMaterial *material,
                                   const CoglColor *constant_color);
 
@@ -380,7 +381,7 @@ cogl_material_set_blend_constant (CoglMaterial *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_point_size() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_point_size)
-void
+COGL_EXPORT void
 cogl_material_set_point_size (CoglMaterial *material,
                               float         point_size);
 
@@ -427,7 +428,7 @@ cogl_material_set_point_size (CoglMaterial *material,
  * Deprecated: 1.16: Use #CoglSnippet api instead instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_material_set_user_program (CoglMaterial *material,
                                 CoglHandle program);
 
@@ -452,7 +453,7 @@ cogl_material_set_user_program (CoglMaterial *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_layer() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer)
-void
+COGL_EXPORT void
 cogl_material_set_layer (CoglMaterial *material,
                         int           layer_index,
                         CoglHandle    texture);
@@ -551,7 +552,7 @@ cogl_material_set_layer (CoglMaterial *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_layer_combine() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer_combine)
-gboolean
+COGL_EXPORT gboolean
 cogl_material_set_layer_combine (CoglMaterial *material,
                                 int           layer_index,
                                 const char   *blend_string,
@@ -572,7 +573,7 @@ cogl_material_set_layer_combine (CoglMaterial *material,
  * instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer_combine_constant)
-void
+COGL_EXPORT void
 cogl_material_set_layer_combine_constant (CoglMaterial    *material,
                                           int              layer_index,
                                           const CoglColor *constant);
@@ -588,7 +589,7 @@ cogl_material_set_layer_combine_constant (CoglMaterial    *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_layer_matrix() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer_matrix)
-void
+COGL_EXPORT void
 cogl_material_set_layer_matrix (CoglMaterial     *material,
                                int               layer_index,
                                const CoglMatrix *matrix);
@@ -605,7 +606,7 @@ cogl_material_set_layer_matrix (CoglMaterial     *material,
  * Deprecated: 1.16: Use cogl_pipeline_set_layer_filters() instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer_filters)
-void
+COGL_EXPORT void
 cogl_material_set_layer_filters (CoglMaterial      *material,
                                  int                layer_index,
                                  CoglMaterialFilter min_filter,
@@ -631,7 +632,7 @@ cogl_material_set_layer_filters (CoglMaterial      *material,
  *                  instead
  */
 COGL_DEPRECATED_FOR (cogl_pipeline_set_layer_point_sprite_coords_enabled)
-gboolean
+COGL_EXPORT gboolean
 cogl_material_set_layer_point_sprite_coords_enabled (CoglMaterial *material,
                                                      int           layer_index,
                                                      gboolean      enable,
diff --git a/cogl/cogl/deprecated/cogl-shader.h b/cogl/cogl/deprecated/cogl-shader.h
index 67d1ef362..a7676fa42 100644
--- a/cogl/cogl/deprecated/cogl-shader.h
+++ b/cogl/cogl/deprecated/cogl-shader.h
@@ -246,7 +246,7 @@ typedef enum
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-CoglHandle
+COGL_EXPORT CoglHandle
 cogl_create_shader (CoglShaderType shader_type);
 
 /**
@@ -260,7 +260,7 @@ cogl_create_shader (CoglShaderType shader_type);
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-gboolean
+COGL_EXPORT gboolean
 cogl_is_shader (CoglHandle handle);
 
 /**
@@ -277,7 +277,7 @@ cogl_is_shader (CoglHandle handle);
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_shader_source (CoglHandle  shader,
                     const char *source);
 
@@ -292,7 +292,7 @@ cogl_shader_source (CoglHandle  shader,
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-CoglShaderType
+COGL_EXPORT CoglShaderType
 cogl_shader_get_type (CoglHandle handle);
 
 /**
@@ -305,7 +305,7 @@ cogl_shader_get_type (CoglHandle handle);
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-CoglHandle
+COGL_EXPORT CoglHandle
 cogl_create_program (void);
 
 /**
@@ -320,7 +320,7 @@ cogl_create_program (void);
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-gboolean
+COGL_EXPORT gboolean
 cogl_is_program (CoglHandle handle);
 
 /**
@@ -336,7 +336,7 @@ cogl_is_program (CoglHandle handle);
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_attach_shader (CoglHandle program_handle,
                             CoglHandle shader_handle);
 
@@ -351,7 +351,7 @@ cogl_program_attach_shader (CoglHandle program_handle,
  * Deprecated: 1.16: Use #CoglSnippet api
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_link (CoglHandle handle);
 
 /**
@@ -367,7 +367,7 @@ cogl_program_link (CoglHandle handle);
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-int
+COGL_EXPORT int
 cogl_program_get_uniform_location (CoglHandle  handle,
                                    const char *uniform_name);
 
@@ -385,7 +385,7 @@ cogl_program_get_uniform_location (CoglHandle  handle,
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_set_uniform_1f (CoglHandle program,
                              int uniform_location,
                              float value);
@@ -404,7 +404,7 @@ cogl_program_set_uniform_1f (CoglHandle program,
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_set_uniform_1i (CoglHandle program,
                              int uniform_location,
                              int value);
@@ -427,7 +427,7 @@ cogl_program_set_uniform_1i (CoglHandle program,
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_set_uniform_float (CoglHandle program,
                                 int uniform_location,
                                 int n_components,
@@ -452,7 +452,7 @@ cogl_program_set_uniform_float (CoglHandle program,
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_set_uniform_int (CoglHandle program,
                               int uniform_location,
                               int n_components,
@@ -478,7 +478,7 @@ cogl_program_set_uniform_int (CoglHandle program,
  * Deprecated: 1.16: Use #CoglSnippet api instead
  */
 COGL_DEPRECATED_FOR (cogl_snippet_)
-void
+COGL_EXPORT void
 cogl_program_set_uniform_matrix (CoglHandle program,
                                  int uniform_location,
                                  int dimensions,
diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
index 4fedf352f..54c4a1612 100644
--- a/cogl/cogl/meson.build
+++ b/cogl/cogl/meson.build
@@ -427,34 +427,20 @@ cogl_headers_all = [
 ]
 
 cogl_test_deps = []
-cogl_unit_tests_map_data = configuration_data()
 
 if have_cogl_tests
   cogl_test_deps += [libmutter_cogl_test_fixtures_dep]
-
-  cogl_unit_tests_map_data.set('unit_tests_symbols', 'test_*; unit_test_*;')
 endif
 
-libmutter_cogl_map = configure_file(
-  input: 'libmutter-cogl.map.in',
-  output: 'libmutter-cogl.map',
-  configuration: cogl_unit_tests_map_data,
-  install: false,
-)
-
 libmutter_cogl_name = 'mutter-cogl-' + libmutter_api_version
-libmutter_cogl_link_args = [
-  '-Wl,--version-script,@0@'.format(libmutter_cogl_map),
-]
 libmutter_cogl = shared_library(libmutter_cogl_name,
   sources: [cogl_sources, cogl_headers_all],
   version: '0.0.0',
   soversion: 0,
   c_args: cogl_c_args,
   include_directories: cogl_includepath,
-  link_depends: libmutter_cogl_map,
-  link_args: libmutter_cogl_link_args,
   dependencies: [cogl_deps, cogl_test_deps],
+  gnu_symbol_visibility: 'hidden',
   install_rpath: pkglibdir,
   install_dir: pkglibdir,
   install: true,
diff --git a/cogl/cogl/winsys/cogl-texture-pixmap-x11.h b/cogl/cogl/winsys/cogl-texture-pixmap-x11.h
index a445fca46..8103cf379 100644
--- a/cogl/cogl/winsys/cogl-texture-pixmap-x11.h
+++ b/cogl/cogl/winsys/cogl-texture-pixmap-x11.h
@@ -73,6 +73,7 @@ typedef struct _CoglTexturePixmapX11 CoglTexturePixmapX11;
  *
  * Returns: a #GType that can be used with the GLib type system.
  */
+COGL_EXPORT
 GType cogl_texture_pixmap_x11_get_gtype (void);
 
 typedef enum
@@ -106,6 +107,7 @@ typedef enum
   COGL_TEXTURE_PIXMAP_X11_ERROR_X11,
 } CoglTexturePixmapX11Error;
 
+COGL_EXPORT
 uint32_t cogl_texture_pixmap_x11_error_quark (void);
 
 /**
@@ -126,7 +128,7 @@ uint32_t cogl_texture_pixmap_x11_error_quark (void);
  * Since: 1.10
  * Stability: Unstable
  */
-CoglTexturePixmapX11 *
+COGL_EXPORT CoglTexturePixmapX11 *
 cogl_texture_pixmap_x11_new (CoglContext *context,
                              uint32_t pixmap,
                              gboolean automatic_updates,
@@ -165,7 +167,7 @@ cogl_texture_pixmap_x11_new (CoglContext *context,
  * Since: 1.20
  * Stability: Unstable
  */
-CoglTexturePixmapX11 *
+COGL_EXPORT CoglTexturePixmapX11 *
 cogl_texture_pixmap_x11_new_left (CoglContext *context,
                                   uint32_t pixmap,
                                   gboolean automatic_updates,
@@ -185,7 +187,7 @@ cogl_texture_pixmap_x11_new_left (CoglContext *context,
  * Since: 1.20
  * Stability: Unstable
  */
-CoglTexturePixmapX11 *
+COGL_EXPORT CoglTexturePixmapX11 *
 cogl_texture_pixmap_x11_new_right (CoglTexturePixmapX11 *left_texture);
 
 /**
@@ -203,7 +205,7 @@ cogl_texture_pixmap_x11_new_right (CoglTexturePixmapX11 *left_texture);
  * Since: 1.4
  * Stability: Unstable
  */
-void
+COGL_EXPORT void
 cogl_texture_pixmap_x11_update_area (CoglTexturePixmapX11 *texture,
                                      int x,
                                      int y,
@@ -226,7 +228,7 @@ cogl_texture_pixmap_x11_update_area (CoglTexturePixmapX11 *texture,
  * Since: 1.4
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_texture_pixmap_x11_is_using_tfp_extension (CoglTexturePixmapX11 *texture);
 
 /**
@@ -241,7 +243,7 @@ cogl_texture_pixmap_x11_is_using_tfp_extension (CoglTexturePixmapX11 *texture);
  * Since: 1.4
  * Stability: Unstable
  */
-gboolean
+COGL_EXPORT gboolean
 cogl_is_texture_pixmap_x11 (void *object);
 
 G_END_DECLS
diff --git a/cogl/cogl/winsys/cogl-winsys-egl-private.h b/cogl/cogl/winsys/cogl-winsys-egl-private.h
index 9b5350e41..8aea7c92b 100644
--- a/cogl/cogl/winsys/cogl-winsys-egl-private.h
+++ b/cogl/cogl/winsys/cogl-winsys-egl-private.h
@@ -173,16 +173,16 @@ typedef struct _CoglOnscreenEGL
   void *platform;
 } CoglOnscreenEGL;
 
-const CoglWinsysVtable *
+COGL_EXPORT const CoglWinsysVtable *
 _cogl_winsys_egl_get_vtable (void);
 
-EGLBoolean
+COGL_EXPORT EGLBoolean
 _cogl_winsys_egl_make_current (CoglDisplay *display,
                                EGLSurface draw,
                                EGLSurface read,
                                EGLContext context);
 
-EGLBoolean
+COGL_EXPORT EGLBoolean
 _cogl_winsys_egl_ensure_current (CoglDisplay *display);
 
 #ifdef EGL_KHR_image_base
@@ -205,7 +205,7 @@ _cogl_egl_query_wayland_buffer (CoglContext *ctx,
                                 int *value);
 #endif
 
-gboolean
+COGL_EXPORT gboolean
 _cogl_winsys_egl_renderer_connect_common (CoglRenderer *renderer,
                                           GError **error);
 
diff --git a/cogl/cogl/winsys/cogl-winsys-egl-x11-private.h b/cogl/cogl/winsys/cogl-winsys-egl-x11-private.h
index 21562dd01..5b84941f6 100644
--- a/cogl/cogl/winsys/cogl-winsys-egl-x11-private.h
+++ b/cogl/cogl/winsys/cogl-winsys-egl-x11-private.h
@@ -33,7 +33,7 @@
 
 #include "winsys/cogl-winsys-private.h"
 
-const CoglWinsysVtable *
+COGL_EXPORT const CoglWinsysVtable *
 _cogl_winsys_egl_xlib_get_vtable (void);
 
 #endif /* __COGL_WINSYS_EGL_X11_PRIVATE_H */
diff --git a/cogl/cogl/winsys/cogl-winsys-egl-x11.c b/cogl/cogl/winsys/cogl-winsys-egl-x11.c
index 47fb9676a..aad6a12ca 100644
--- a/cogl/cogl/winsys/cogl-winsys-egl-x11.c
+++ b/cogl/cogl/winsys/cogl-winsys-egl-x11.c
@@ -829,7 +829,7 @@ _cogl_winsys_egl_vtable =
     .onscreen_deinit = _cogl_winsys_egl_onscreen_deinit
   };
 
-const CoglWinsysVtable *
+COGL_EXPORT const CoglWinsysVtable *
 _cogl_winsys_egl_xlib_get_vtable (void)
 {
   static gboolean vtable_inited = FALSE;
diff --git a/cogl/cogl/winsys/cogl-winsys-glx-private.h b/cogl/cogl/winsys/cogl-winsys-glx-private.h
index 9fb386ff7..15e7f988d 100644
--- a/cogl/cogl/winsys/cogl-winsys-glx-private.h
+++ b/cogl/cogl/winsys/cogl-winsys-glx-private.h
@@ -31,7 +31,7 @@
 #ifndef __COGL_WINSYS_GLX_PRIVATE_H
 #define __COGL_WINSYS_GLX_PRIVATE_H
 
-const CoglWinsysVtable *
+COGL_EXPORT const CoglWinsysVtable *
 _cogl_winsys_glx_get_vtable (void);
 
 #endif /* __COGL_WINSYS_GLX_PRIVATE_H */
diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c
index 1925845b0..c2deaeb8b 100644
--- a/cogl/cogl/winsys/cogl-winsys-glx.c
+++ b/cogl/cogl/winsys/cogl-winsys-glx.c
@@ -2576,7 +2576,7 @@ static CoglWinsysVtable _cogl_winsys_vtable =
  * c99 initializers for insane platforms they can initialize
  * the members by name in a function.
  */
-const CoglWinsysVtable *
+COGL_EXPORT const CoglWinsysVtable *
 _cogl_winsys_glx_get_vtable (void)
 {
   return &_cogl_winsys_vtable;
diff --git a/cogl/cogl/winsys/cogl-winsys-private.h b/cogl/cogl/winsys/cogl-winsys-private.h
index 9dcf384e2..d849ef705 100644
--- a/cogl/cogl/winsys/cogl-winsys-private.h
+++ b/cogl/cogl/winsys/cogl-winsys-private.h
@@ -49,7 +49,7 @@
 
 #include "cogl-poll.h"
 
-uint32_t
+COGL_EXPORT uint32_t
 _cogl_winsys_error_quark (void);
 
 #define COGL_WINSYS_ERROR (_cogl_winsys_error_quark ())
diff --git a/cogl/test-fixtures/test-unit.h b/cogl/test-fixtures/test-unit.h
index 270a94134..c96587f95 100644
--- a/cogl/test-fixtures/test-unit.h
+++ b/cogl/test-fixtures/test-unit.h
@@ -16,6 +16,8 @@ typedef struct _CoglUnitTest
 #define UNIT_TEST(NAME, REQUIREMENT_FLAGS, KNOWN_FAILURE_FLAGS) \
   static void NAME (void); \
   \
+  COGL_EXPORT \
+  const CoglUnitTest unit_test_##NAME; \
   const CoglUnitTest unit_test_##NAME = \
   { #NAME, REQUIREMENT_FLAGS, KNOWN_FAILURE_FLAGS, NAME }; \
   \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]