[mutter/wip/3v1n0/ci-norebuilds: 7/8] meta: Hide libmutter symbols by default and selectively export them



commit 930d4796f26aeb3008a515a140fbdf0c999948f9
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Wed Jan 23 03:25:35 2019 +0100

    meta: Hide libmutter symbols by default and selectively export them
    
    Make meson link libmutter using -fvisibility=hidden, and introduce META_EXPORT
    and META_EXPORT_TEST defines to mark a symbols as visible to the linker.
    
    This allows us to be more precise in selecting what is exported and what it's
    not, without the need of a version-script file that would be more complicated
    to maintain.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/395

 src/backends/meta-backend-private.h               |   4 +
 src/backends/meta-crtc.h                          |   5 +-
 src/backends/meta-gpu.h                           |  11 ++
 src/backends/meta-logical-monitor.h               |   3 +
 src/backends/meta-monitor-config-manager.h        |  32 ++++
 src/backends/meta-monitor-config-migration.h      |   3 +
 src/backends/meta-monitor-config-store.h          |   7 +
 src/backends/meta-monitor-manager-private.h       |  19 ++-
 src/backends/meta-monitor.h                       |  48 ++++++
 src/backends/meta-output.h                        |   7 +-
 src/backends/meta-renderer.h                      |   2 +
 src/backends/meta-settings-private.h              |   4 +
 src/backends/x11/nested/meta-backend-x11-nested.h |   2 +
 src/compositor/meta-plugin-manager.h              |   2 +
 src/core/boxes-private.h                          |  22 +++
 src/core/display-private.h                        |   6 +-
 src/core/main-private.h                           |   3 +
 src/core/stack-tracker.h                          |   2 +
 src/core/startup-notification-private.h           |   3 +
 src/core/util-private.h                           |   5 +
 src/meson.build                                   |   1 +
 src/meta/barrier.h                                |   8 +
 src/meta/boxes.h                                  |  18 +++
 src/meta/common.h                                 |   3 +
 src/meta/compositor-mutter.h                      |  21 +++
 src/meta/compositor.h                             |  37 +++++
 src/meta/display.h                                |  56 +++++++
 src/meta/group.h                                  |  14 ++
 src/meta/keybindings.h                            |  10 ++
 src/meta/main.h                                   |  21 +++
 src/meta/meta-backend.h                           |   9 ++
 src/meta/meta-background-actor.h                  |   7 +
 src/meta/meta-background-group.h                  |   5 +
 src/meta/meta-background-image.h                  |  13 ++
 src/meta/meta-background.h                        |  11 ++
 src/meta/meta-close-dialog.h                      |   9 ++
 src/meta/meta-cursor-tracker.h                    |   9 ++
 src/meta/meta-dnd.h                               |   5 +-
 src/meta/meta-enum-types.h.in                     |   3 +-
 src/meta/meta-idle-monitor.h                      |   9 ++
 src/meta/meta-inhibit-shortcuts-dialog.h          |   6 +
 src/meta/meta-launch-context.h                    |   4 +
 src/meta/meta-monitor-manager.h                   |   8 +
 src/meta/meta-plugin.h                            |  14 ++
 src/meta/meta-remote-access-controller.h          |   7 +
 src/meta/meta-settings.h                          |   5 +-
 src/meta/meta-shadow-factory.h                    |  17 +-
 src/meta/meta-shaped-texture.h                    |  10 ++
 src/meta/meta-sound-player.h                      |   7 +
 src/meta/meta-stage.h                             |   2 +
 src/meta/meta-startup-notification.h              |  18 +++
 src/meta/meta-window-actor.h                      |  11 ++
 src/meta/meta-window-group.h                      |   2 +
 src/meta/meta-window-shape.h                      |  16 ++
 src/meta/meta-workspace-manager.h                 |  10 ++
 src/meta/meta-x11-display.h                       |  19 +++
 src/meta/meta-x11-errors.h                        |   4 +
 src/meta/prefs.h                                  |  74 +++++++++
 src/meta/theme.h                                  |   4 +
 src/meta/util.h                                   |  38 ++++-
 src/meta/window.h                                 | 186 ++++++++++++++++++++++
 src/meta/workspace.h                              |  16 ++
 src/ui/ui.h                                       |   4 +-
 src/wayland/meta-wayland.h                        |  20 +++
 src/wayland/meta-xwayland.h                       |   2 +
 src/x11/meta-x11-display-private.h                |   1 +
 66 files changed, 952 insertions(+), 12 deletions(-)
---
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
index 0c46bc7ae..ce5183778 100644
--- a/src/backends/meta-backend-private.h
+++ b/src/backends/meta-backend-private.h
@@ -50,6 +50,7 @@
 #define DEFAULT_XKB_MODEL "pc105+inet"
 
 #define META_TYPE_BACKEND (meta_backend_get_type ())
+META_EXPORT
 G_DECLARE_DERIVABLE_TYPE (MetaBackend, meta_backend, META, BACKEND, GObject)
 
 struct _MetaBackendClass
@@ -118,10 +119,12 @@ void meta_backend_foreach_device_monitor (MetaBackend *backend,
                                           GFunc        func,
                                           gpointer     user_data);
 
+META_EXPORT_TEST
 MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend);
 MetaOrientationManager * meta_backend_get_orientation_manager (MetaBackend *backend);
 MetaCursorTracker * meta_backend_get_cursor_tracker (MetaBackend *backend);
 MetaCursorRenderer * meta_backend_get_cursor_renderer (MetaBackend *backend);
+META_EXPORT_TEST
 MetaRenderer * meta_backend_get_renderer (MetaBackend *backend);
 MetaEgl * meta_backend_get_egl (MetaBackend *backend);
 
@@ -164,6 +167,7 @@ void meta_backend_set_client_pointer_constraint (MetaBackend *backend,
 
 void meta_backend_monitors_changed (MetaBackend *backend);
 
+META_EXPORT_TEST
 gboolean meta_is_stage_views_enabled (void);
 
 gboolean meta_is_stage_views_scaled (void);
diff --git a/src/backends/meta-crtc.h b/src/backends/meta-crtc.h
index ecd02bc21..ddacfea49 100644
--- a/src/backends/meta-crtc.h
+++ b/src/backends/meta-crtc.h
@@ -24,6 +24,7 @@
 
 #include "backends/meta-backend-types.h"
 #include "backends/meta-monitor-transform.h"
+#include "core/util-private.h"
 #include "meta/boxes.h"
 
 /* Same as KMS mode flags and X11 randr flags */
@@ -90,10 +91,10 @@ struct _MetaCrtcMode
 };
 
 #define META_TYPE_CRTC (meta_crtc_get_type ())
-G_DECLARE_FINAL_TYPE (MetaCrtc, meta_crtc, META, CRTC, GObject)
+META_EXPORT_TEST G_DECLARE_FINAL_TYPE (MetaCrtc, meta_crtc, META, CRTC, GObject)
 
 #define META_TYPE_CRTC_MODE (meta_crtc_mode_get_type ())
-G_DECLARE_FINAL_TYPE (MetaCrtcMode, meta_crtc_mode, META, CRTC_MODE, GObject)
+META_EXPORT_TEST G_DECLARE_FINAL_TYPE (MetaCrtcMode, meta_crtc_mode, META, CRTC_MODE, GObject)
 
 MetaGpu * meta_crtc_get_gpu (MetaCrtc *crtc);
 
diff --git a/src/backends/meta-gpu.h b/src/backends/meta-gpu.h
index 358f2ee36..41f13e3fa 100644
--- a/src/backends/meta-gpu.h
+++ b/src/backends/meta-gpu.h
@@ -27,6 +27,7 @@
 #include "backends/meta-monitor-manager-private.h"
 
 #define META_TYPE_GPU (meta_gpu_get_type ())
+META_EXPORT_TEST
 G_DECLARE_DERIVABLE_TYPE (MetaGpu, meta_gpu, META, GPU, GObject)
 
 struct _MetaGpuClass
@@ -37,27 +38,37 @@ struct _MetaGpuClass
                              GError  **error);
 };
 
+META_EXPORT_TEST
 const char * meta_gpu_get_kms_file_path (MetaGpu *gpu);
 
+META_EXPORT_TEST
 gboolean meta_gpu_read_current (MetaGpu  *gpu,
                                 GError  **error);
 
+META_EXPORT_TEST
 gboolean meta_gpu_has_hotplug_mode_update (MetaGpu *gpu);
 
+META_EXPORT_TEST
 MetaMonitorManager * meta_gpu_get_monitor_manager (MetaGpu *gpu);
 
+META_EXPORT_TEST
 GList * meta_gpu_get_outputs (MetaGpu *gpu);
 
+META_EXPORT_TEST
 GList * meta_gpu_get_crtcs (MetaGpu *gpu);
 
+META_EXPORT_TEST
 GList * meta_gpu_get_modes (MetaGpu *gpu);
 
+META_EXPORT_TEST
 void meta_gpu_take_outputs (MetaGpu *gpu,
                             GList   *outputs);
 
+META_EXPORT_TEST
 void meta_gpu_take_crtcs (MetaGpu *gpu,
                           GList   *crtcs);
 
+META_EXPORT_TEST
 void meta_gpu_take_modes (MetaGpu *gpu,
                           GList   *modes);
 
diff --git a/src/backends/meta-logical-monitor.h b/src/backends/meta-logical-monitor.h
index 1b39d2ce2..0e46b05ce 100644
--- a/src/backends/meta-logical-monitor.h
+++ b/src/backends/meta-logical-monitor.h
@@ -27,6 +27,7 @@
 #include "backends/meta-monitor.h"
 #include "backends/meta-monitor-config-manager.h"
 #include "backends/meta-monitor-manager-private.h"
+#include "core/util-private.h"
 #include "meta/boxes.h"
 
 #define META_MAX_OUTPUTS_PER_MONITOR 4
@@ -78,6 +79,7 @@ MetaLogicalMonitor * meta_logical_monitor_new_derived (MetaMonitorManager *monit
 void meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
                                        MetaMonitor        *monitor);
 
+META_EXPORT_TEST
 gboolean meta_logical_monitor_is_primary (MetaLogicalMonitor *logical_monitor);
 
 void meta_logical_monitor_make_primary (MetaLogicalMonitor *logical_monitor);
@@ -88,6 +90,7 @@ MetaMonitorTransform meta_logical_monitor_get_transform (MetaLogicalMonitor *log
 
 MetaRectangle meta_logical_monitor_get_layout (MetaLogicalMonitor *logical_monitor);
 
+META_EXPORT_TEST
 GList * meta_logical_monitor_get_monitors (MetaLogicalMonitor *logical_monitor);
 
 gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor   *logical_monitor,
diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
index 900707446..771176eba 100644
--- a/src/backends/meta-monitor-config-manager.h
+++ b/src/backends/meta-monitor-config-manager.h
@@ -77,90 +77,122 @@ struct _MetaMonitorsConfig
 G_DECLARE_FINAL_TYPE (MetaMonitorsConfig, meta_monitors_config,
                       META, MONITORS_CONFIG, GObject)
 
+META_EXPORT_TEST
 MetaMonitorConfigManager * meta_monitor_config_manager_new (MetaMonitorManager *monitor_manager);
 
+META_EXPORT_TEST
 MetaMonitorConfigStore * meta_monitor_config_manager_get_store (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 gboolean meta_monitor_config_manager_assign (MetaMonitorManager *manager,
                                              MetaMonitorsConfig *config,
                                              GPtrArray         **crtc_infos,
                                              GPtrArray         **output_infos,
                                              GError            **error);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_get_stored (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_fallback (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_suggested (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_for_orientation (MetaMonitorConfigManager 
*config_manager,
                                                                          MetaMonitorTransform      
transform);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_for_rotate_monitor (MetaMonitorConfigManager 
*config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_create_for_switch_config (MetaMonitorConfigManager    
*config_manager,
                                                                            MetaMonitorSwitchConfigType  
config_type);
 
+META_EXPORT_TEST
 void meta_monitor_config_manager_set_current (MetaMonitorConfigManager *config_manager,
                                               MetaMonitorsConfig       *config);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_get_current (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_pop_previous (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_manager_get_previous (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 void meta_monitor_config_manager_clear_history (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 void meta_monitor_config_manager_save_current (MetaMonitorConfigManager *config_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitors_config_new_full (GList                        *logical_monitor_configs,
                                                     GList                        *disabled_monitors,
                                                     MetaLogicalMonitorLayoutMode  layout_mode,
                                                     MetaMonitorsConfigFlag        flags);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitors_config_new (MetaMonitorManager           *monitor_manager,
                                                GList                        *logical_monitor_configs,
                                                MetaLogicalMonitorLayoutMode  layout_mode,
                                                MetaMonitorsConfigFlag        flags);
 
+META_EXPORT_TEST
 MetaMonitorSwitchConfigType meta_monitors_config_get_switch_config (MetaMonitorsConfig *config);
 
+META_EXPORT_TEST
 void meta_monitors_config_set_switch_config (MetaMonitorsConfig          *config,
                                              MetaMonitorSwitchConfigType  switch_config);
 
+META_EXPORT_TEST
 unsigned int meta_monitors_config_key_hash (gconstpointer config_key);
 
+META_EXPORT_TEST
 gboolean meta_monitors_config_key_equal (gconstpointer config_key_a,
                                          gconstpointer config_key_b);
 
+META_EXPORT_TEST
 void meta_monitors_config_key_free (MetaMonitorsConfigKey *config_key);
 
+META_EXPORT_TEST
 void meta_logical_monitor_config_free (MetaLogicalMonitorConfig *logical_monitor_config);
 
+META_EXPORT_TEST
 void meta_monitor_config_free (MetaMonitorConfig *monitor_config);
 
+META_EXPORT_TEST
 MetaMonitorsConfigKey * meta_create_monitors_config_key_for_current_state (MetaMonitorManager 
*monitor_manager);
 
+META_EXPORT_TEST
 gboolean meta_logical_monitor_configs_have_monitor (GList           *logical_monitor_configs,
                                                     MetaMonitorSpec *monitor_spec);
 
+META_EXPORT_TEST
 gboolean meta_verify_monitor_mode_spec (MetaMonitorModeSpec *monitor_mode_spec,
                                         GError             **error);
 
+META_EXPORT_TEST
 gboolean meta_verify_monitor_spec (MetaMonitorSpec *monitor_spec,
                                    GError         **error);
 
+META_EXPORT_TEST
 gboolean meta_verify_monitor_config (MetaMonitorConfig *monitor_config,
                                      GError           **error);
 
+META_EXPORT_TEST
 gboolean meta_verify_logical_monitor_config (MetaLogicalMonitorConfig    *logical_monitor_config,
                                              MetaLogicalMonitorLayoutMode layout_mode,
                                              MetaMonitorManager          *monitor_manager,
                                              GError                     **error);
 
+META_EXPORT_TEST
 gboolean meta_verify_monitors_config (MetaMonitorsConfig *config,
                                       MetaMonitorManager *monitor_manager,
                                       GError            **error);
diff --git a/src/backends/meta-monitor-config-migration.h b/src/backends/meta-monitor-config-migration.h
index 4ea21cb1a..7b338ace2 100644
--- a/src/backends/meta-monitor-config-migration.h
+++ b/src/backends/meta-monitor-config-migration.h
@@ -24,13 +24,16 @@
 
 #include "backends/meta-monitor-manager-private.h"
 
+META_EXPORT_TEST
 gboolean meta_migrate_old_monitors_config (MetaMonitorConfigStore *config_store,
                                            GFile                  *in_file,
                                            GError                **error);
 
+META_EXPORT_TEST
 gboolean meta_migrate_old_user_monitors_config (MetaMonitorConfigStore *config_store,
                                                 GError                **error);
 
+META_EXPORT_TEST
 gboolean meta_finish_monitors_config_migration (MetaMonitorManager *monitor_manager,
                                                 MetaMonitorsConfig *config,
                                                 GError            **error);
diff --git a/src/backends/meta-monitor-config-store.h b/src/backends/meta-monitor-config-store.h
index 76f97e50d..92c24ecaa 100644
--- a/src/backends/meta-monitor-config-store.h
+++ b/src/backends/meta-monitor-config-store.h
@@ -30,24 +30,31 @@
 G_DECLARE_FINAL_TYPE (MetaMonitorConfigStore, meta_monitor_config_store,
                       META, MONITOR_CONFIG_STORE, GObject)
 
+META_EXPORT_TEST
 MetaMonitorConfigStore * meta_monitor_config_store_new (MetaMonitorManager *monitor_manager);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_config_store_lookup (MetaMonitorConfigStore *config_store,
                                                        MetaMonitorsConfigKey  *key);
 
+META_EXPORT_TEST
 void meta_monitor_config_store_add (MetaMonitorConfigStore *config_store,
                                     MetaMonitorsConfig     *config);
 
+META_EXPORT_TEST
 void meta_monitor_config_store_remove (MetaMonitorConfigStore *config_store,
                                        MetaMonitorsConfig     *config);
 
+META_EXPORT_TEST
 gboolean meta_monitor_config_store_set_custom (MetaMonitorConfigStore *config_store,
                                                const char             *read_path,
                                                const char             *write_path,
                                                GError                **error);
 
+META_EXPORT_TEST
 int meta_monitor_config_store_get_config_count (MetaMonitorConfigStore *config_store);
 
+META_EXPORT_TEST
 MetaMonitorManager * meta_monitor_config_store_get_monitor_manager (MetaMonitorConfigStore *config_store);
 
 #endif /* META_MONITOR_CONFIG_STORE_H */
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index ce740d585..c9c9c29fb 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -30,6 +30,7 @@
 #include "backends/meta-cursor.h"
 #include "backends/meta-display-config-shared.h"
 #include "backends/meta-monitor-transform.h"
+#include "core/util-private.h"
 #include "meta/display.h"
 #include "meta/meta-monitor-manager.h"
 
@@ -251,13 +252,18 @@ MetaBackend *       meta_monitor_manager_get_backend (MetaMonitorManager *manage
 
 void                meta_monitor_manager_setup (MetaMonitorManager *manager);
 
+META_EXPORT_TEST
 void                meta_monitor_manager_rebuild (MetaMonitorManager *manager,
                                                   MetaMonitorsConfig *config);
+
+META_EXPORT_TEST
 void                meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager,
                                                           MetaMonitorsConfig *config);
 
+META_EXPORT_TEST
 int                 meta_monitor_manager_get_num_logical_monitors (MetaMonitorManager *manager);
 
+META_EXPORT_TEST
 GList *             meta_monitor_manager_get_logical_monitors (MetaMonitorManager *manager);
 
 MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_from_number (MetaMonitorManager *manager,
@@ -286,11 +292,13 @@ MetaMonitor *       meta_monitor_manager_get_monitor_from_spec (MetaMonitorManag
 MetaMonitor *       meta_monitor_manager_get_monitor_from_connector (MetaMonitorManager *manager,
                                                                      const char         *connector);
 
+META_EXPORT_TEST
 GList *             meta_monitor_manager_get_monitors      (MetaMonitorManager *manager);
 
+META_EXPORT_TEST
 void                meta_monitor_manager_add_gpu (MetaMonitorManager *manager,
                                                   MetaGpu            *gpu);
-
+META_EXPORT_TEST
 GList *             meta_monitor_manager_get_gpus (MetaMonitorManager *manager);
 
 void                meta_monitor_manager_get_screen_size   (MetaMonitorManager *manager,
@@ -305,7 +313,11 @@ void               meta_output_parse_edid (MetaOutput *output,
 gboolean           meta_output_is_laptop  (MetaOutput *output);
 
 gboolean           meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager);
+
+META_EXPORT_TEST
 void               meta_monitor_manager_read_current_state (MetaMonitorManager *manager);
+
+META_EXPORT_TEST
 void               meta_monitor_manager_on_hotplug (MetaMonitorManager *manager);
 
 gboolean           meta_monitor_manager_get_monitor_matrix (MetaMonitorManager *manager,
@@ -322,13 +334,18 @@ gboolean           meta_monitor_manager_is_transform_handled (MetaMonitorManager
                                                               MetaCrtc            *crtc,
                                                               MetaMonitorTransform transform);
 
+META_EXPORT_TEST
 MetaMonitorsConfig * meta_monitor_manager_ensure_configured (MetaMonitorManager *manager);
 
+META_EXPORT_TEST
 void               meta_monitor_manager_update_logical_state (MetaMonitorManager *manager,
                                                               MetaMonitorsConfig *config);
+
+META_EXPORT_TEST
 void               meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
                                                                       MetaMonitorsConfig *config);
 
+META_EXPORT_TEST
 void               meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager);
 
 gboolean           meta_monitor_manager_is_headless (MetaMonitorManager *manager);
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index 7ac9cd12c..41f2c0ffd 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -95,91 +95,125 @@ G_DECLARE_FINAL_TYPE (MetaMonitorTiled, meta_monitor_tiled,
                       META, MONITOR_TILED,
                       MetaMonitor)
 
+META_EXPORT_TEST
 MetaMonitorTiled * meta_monitor_tiled_new (MetaGpu    *gpu,
                                            MetaOutput *output);
 
+META_EXPORT_TEST
 MetaMonitorNormal * meta_monitor_normal_new (MetaGpu    *gpu,
                                              MetaOutput *output);
 
+META_EXPORT_TEST
 MetaMonitorSpec * meta_monitor_get_spec (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 MetaGpu * meta_monitor_get_gpu (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_is_active (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 MetaOutput * meta_monitor_get_main_output (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_is_primary (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_supports_underscanning (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_is_underscanning (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_is_laptop_panel (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 gboolean meta_monitor_is_same_as (MetaMonitor *monitor,
                                   MetaMonitor *other_monitor);
 
+META_EXPORT_TEST
 GList * meta_monitor_get_outputs (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 void meta_monitor_get_current_resolution (MetaMonitor *monitor,
                                           int           *width,
                                           int           *height);
 
+META_EXPORT_TEST
 void meta_monitor_derive_layout (MetaMonitor   *monitor,
                                  MetaRectangle *layout);
 
+META_EXPORT_TEST
 void meta_monitor_get_physical_dimensions (MetaMonitor *monitor,
                                            int         *width_mm,
                                            int         *height_mm);
 
+META_EXPORT_TEST
 CoglSubpixelOrder meta_monitor_get_subpixel_order (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 const char * meta_monitor_get_connector (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 const char * meta_monitor_get_vendor (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 const char * meta_monitor_get_product (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 const char * meta_monitor_get_serial (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 MetaConnectorType meta_monitor_get_connector_type (MetaMonitor *monitor);
 
 /* This function returns the transform corrected for the panel orientation */
+META_EXPORT_TEST
 MetaMonitorTransform meta_monitor_logical_to_crtc_transform (MetaMonitor          *monitor,
                                                              MetaMonitorTransform  transform);
 /*
  * This function converts a transform corrected for the panel orientation
  * to its logical (user-visible) transform.
  */
+META_EXPORT_TEST
 MetaMonitorTransform meta_monitor_crtc_to_logical_transform (MetaMonitor          *monitor,
                                                              MetaMonitorTransform  transform);
 
+META_EXPORT_TEST
 uint32_t meta_monitor_tiled_get_tile_group_id (MetaMonitorTiled *monitor_tiled);
 
+META_EXPORT_TEST
 gboolean meta_monitor_get_suggested_position (MetaMonitor *monitor,
                                               int         *x,
                                               int         *y);
 
+META_EXPORT_TEST
 MetaLogicalMonitor * meta_monitor_get_logical_monitor (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 MetaMonitorMode * meta_monitor_get_mode_from_id (MetaMonitor *monitor,
                                                  const char  *monitor_mode_id);
 
+META_EXPORT_TEST
 MetaMonitorMode * meta_monitor_get_mode_from_spec (MetaMonitor         *monitor,
                                                    MetaMonitorModeSpec *monitor_mode_spec);
 
+META_EXPORT_TEST
 MetaMonitorMode * meta_monitor_get_preferred_mode (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 MetaMonitorMode * meta_monitor_get_current_mode (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 void meta_monitor_derive_current_mode (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 void meta_monitor_set_current_mode (MetaMonitor     *monitor,
                                     MetaMonitorMode *mode);
 
+META_EXPORT_TEST
 GList * meta_monitor_get_modes (MetaMonitor *monitor);
 
+META_EXPORT_TEST
 void meta_monitor_calculate_crtc_pos (MetaMonitor         *monitor,
                                       MetaMonitorMode     *monitor_mode,
                                       MetaOutput          *output,
@@ -187,48 +221,62 @@ void meta_monitor_calculate_crtc_pos (MetaMonitor         *monitor,
                                       int                 *out_x,
                                       int                 *out_y);
 
+META_EXPORT_TEST
 float meta_monitor_calculate_mode_scale (MetaMonitor     *monitor,
                                          MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 float * meta_monitor_calculate_supported_scales (MetaMonitor                *monitor,
                                                  MetaMonitorMode            *monitor_mode,
                                                  MetaMonitorScalesConstraint constraints,
                                                  int                        *n_supported_scales);
 
+META_EXPORT_TEST
 const char * meta_monitor_mode_get_id (MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 MetaMonitorModeSpec * meta_monitor_mode_get_spec (MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 void meta_monitor_mode_get_resolution (MetaMonitorMode *monitor_mode,
                                        int             *width,
                                        int             *height);
 
+META_EXPORT_TEST
 float meta_monitor_mode_get_refresh_rate (MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 MetaCrtcModeFlag meta_monitor_mode_get_flags (MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 gboolean meta_monitor_mode_foreach_crtc (MetaMonitor        *monitor,
                                          MetaMonitorMode    *mode,
                                          MetaMonitorModeFunc func,
                                          gpointer            user_data,
                                          GError            **error);
 
+META_EXPORT_TEST
 gboolean meta_monitor_mode_foreach_output (MetaMonitor        *monitor,
                                            MetaMonitorMode    *mode,
                                            MetaMonitorModeFunc func,
                                            gpointer            user_data,
                                            GError            **error);
 
+META_EXPORT_TEST
 gboolean meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode);
 
+META_EXPORT_TEST
 MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
 
+META_EXPORT_TEST
 gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id,
                                    MetaMonitorSpec *other_monitor_id);
 
+META_EXPORT_TEST
 int meta_monitor_spec_compare (MetaMonitorSpec *monitor_spec_a,
                                MetaMonitorSpec *monitor_spec_b);
 
+META_EXPORT_TEST
 void meta_monitor_spec_free (MetaMonitorSpec *monitor_id);
 
 #endif /* META_MONITOR_H */
diff --git a/src/backends/meta-output.h b/src/backends/meta-output.h
index b943b2a76..5756669ba 100644
--- a/src/backends/meta-output.h
+++ b/src/backends/meta-output.h
@@ -24,6 +24,7 @@
 
 #include "backends/meta-backend-types.h"
 #include "backends/meta-gpu.h"
+#include "core/util-private.h"
 
 struct _MetaTileInfo
 {
@@ -116,15 +117,19 @@ struct _MetaOutput
 };
 
 #define META_TYPE_OUTPUT (meta_output_get_type ())
-G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject)
+META_EXPORT_TEST G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject)
 
+META_EXPORT_TEST
 MetaGpu * meta_output_get_gpu (MetaOutput *output);
 
+META_EXPORT_TEST
 void meta_output_assign_crtc (MetaOutput *output,
                               MetaCrtc   *crtc);
 
+META_EXPORT_TEST
 void meta_output_unassign_crtc (MetaOutput *output);
 
+META_EXPORT_TEST
 MetaCrtc * meta_output_get_assigned_crtc (MetaOutput *output);
 
 #endif /* META_OUTPUT_H */
diff --git a/src/backends/meta-renderer.h b/src/backends/meta-renderer.h
index b6df4f177..dae52cb9a 100644
--- a/src/backends/meta-renderer.h
+++ b/src/backends/meta-renderer.h
@@ -29,6 +29,7 @@
 
 #include "backends/meta-monitor-manager-private.h"
 #include "backends/meta-renderer-view.h"
+#include "core/util-private.h"
 #include "clutter/clutter-mutter.h"
 #include "cogl/cogl.h"
 
@@ -51,6 +52,7 @@ void meta_renderer_rebuild_views (MetaRenderer *renderer);
 void meta_renderer_set_legacy_view (MetaRenderer     *renderer,
                                     MetaRendererView *legacy_view);
 
+META_EXPORT_TEST
 GList * meta_renderer_get_views (MetaRenderer *renderer);
 
 MetaRendererView * meta_renderer_get_view_from_logical_monitor (MetaRenderer       *renderer,
diff --git a/src/backends/meta-settings-private.h b/src/backends/meta-settings-private.h
index 90bfb439f..619de1710 100644
--- a/src/backends/meta-settings-private.h
+++ b/src/backends/meta-settings-private.h
@@ -26,6 +26,7 @@
 
 #include "meta/meta-settings.h"
 #include "meta/types.h"
+#include "core/util-private.h"
 
 typedef enum _MetaExperimentalFeature
 {
@@ -47,13 +48,16 @@ void meta_settings_update_ui_scaling_factor (MetaSettings *settings);
 gboolean meta_settings_get_global_scaling_factor (MetaSettings *settings,
                                                   int          *scaing_factor);
 
+META_EXPORT_TEST
 gboolean meta_settings_is_experimental_feature_enabled (MetaSettings           *settings,
                                                         MetaExperimentalFeature feature);
 
 MetaExperimentalFeature meta_settings_get_experimental_features (MetaSettings *settings);
 
+META_EXPORT_TEST
 void meta_settings_override_experimental_features (MetaSettings *settings);
 
+META_EXPORT_TEST
 void meta_settings_enable_experimental_feature (MetaSettings           *settings,
                                                 MetaExperimentalFeature feature);
 
diff --git a/src/backends/x11/nested/meta-backend-x11-nested.h 
b/src/backends/x11/nested/meta-backend-x11-nested.h
index 6f2c26576..572ce1cc5 100644
--- a/src/backends/x11/nested/meta-backend-x11-nested.h
+++ b/src/backends/x11/nested/meta-backend-x11-nested.h
@@ -23,8 +23,10 @@
 #include <glib-object.h>
 
 #include "backends/x11/meta-backend-x11.h"
+#include "core/util-private.h"
 
 #define META_TYPE_BACKEND_X11_NESTED (meta_backend_x11_nested_get_type ())
+META_EXPORT_TEST
 G_DECLARE_DERIVABLE_TYPE (MetaBackendX11Nested, meta_backend_x11_nested,
                           META, BACKEND_X11_NESTED, MetaBackendX11)
 
diff --git a/src/compositor/meta-plugin-manager.h b/src/compositor/meta-plugin-manager.h
index 92ef18d70..09ff7ed76 100644
--- a/src/compositor/meta-plugin-manager.h
+++ b/src/compositor/meta-plugin-manager.h
@@ -22,6 +22,7 @@
 #ifndef META_PLUGIN_MANAGER_H_
 #define META_PLUGIN_MANAGER_H_
 
+#include "core/util-private.h"
 #include "meta/meta-plugin.h"
 #include "meta/types.h"
 
@@ -43,6 +44,7 @@ typedef struct MetaPluginManager MetaPluginManager;
 
 MetaPluginManager * meta_plugin_manager_new (MetaCompositor *compositor);
 
+META_EXPORT_TEST
 void     meta_plugin_manager_load         (const gchar       *plugin_name);
 
 gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr,
diff --git a/src/core/boxes-private.h b/src/core/boxes-private.h
index fba9021c9..5f38e6634 100644
--- a/src/core/boxes-private.h
+++ b/src/core/boxes-private.h
@@ -25,6 +25,7 @@
 #include <glib-object.h>
 
 #include "backends/meta-backend-types.h"
+#include "core/util-private.h"
 #include "meta/boxes.h"
 #include "meta/common.h"
 
@@ -75,6 +76,7 @@ char* meta_rectangle_edge_list_to_string (
  * Also, I lied a little bit--technically, you could use it in a MoveResize
  * operation if you muck with old_rect just right).
  */
+META_EXPORT_TEST
 void meta_rectangle_resize_with_gravity (const MetaRectangle *old_rect,
                                          MetaRectangle       *rect,
                                          int                  gravity,
@@ -92,6 +94,7 @@ void meta_rectangle_resize_with_gravity (const MetaRectangle *old_rect,
  *
  * See boxes.c for more details.
  */
+META_EXPORT_TEST
 GList*   meta_rectangle_get_minimal_spanning_set_for_region (
                                          const MetaRectangle *basic_rect,
                                          const GSList        *all_struts);
@@ -118,6 +121,7 @@ GList*   meta_rectangle_expand_region_conditionally (
  * overlapping struts oriented orthognal to the expansion direction.  (Think
  * horizontal or vertical maximization)
  */
+META_EXPORT_TEST
 void     meta_rectangle_expand_to_avoiding_struts (
                                          MetaRectangle       *rect,
                                          const MetaRectangle *expand_to,
@@ -131,18 +135,24 @@ void     meta_rectangle_expand_to_avoiding_struts (
  * or
  *   meta_rectangle_find_nonintersected_monitor_edges()
  */
+META_EXPORT_TEST
 void     meta_rectangle_free_list_and_elements (GList *filled_list);
 
 /* could_fit_in_region determines whether one of the spanning_rects is
  * big enough to contain rect.  contained_in_region checks whether one
  * actually contains it.
  */
+META_EXPORT_TEST
 gboolean meta_rectangle_could_fit_in_region (
                                          const GList         *spanning_rects,
                                          const MetaRectangle *rect);
+
+META_EXPORT_TEST
 gboolean meta_rectangle_contained_in_region (
                                          const GList         *spanning_rects,
                                          const MetaRectangle *rect);
+
+META_EXPORT_TEST
 gboolean meta_rectangle_overlaps_with_region (
                                          const GList         *spanning_rects,
                                          const MetaRectangle *rect);
@@ -150,6 +160,7 @@ gboolean meta_rectangle_overlaps_with_region (
 /* Make the rectangle small enough to fit into one of the spanning_rects,
  * but make it no smaller than min_size.
  */
+META_EXPORT_TEST
 void     meta_rectangle_clamp_to_fit_into_region (
                                          const GList         *spanning_rects,
                                          FixedDirections      fixed_directions,
@@ -159,6 +170,7 @@ void     meta_rectangle_clamp_to_fit_into_region (
 /* Clip the rectangle so that it fits into one of the spanning_rects, assuming
  * it overlaps with at least one of them
  */
+META_EXPORT_TEST
 void     meta_rectangle_clip_to_region  (const GList         *spanning_rects,
                                          FixedDirections      fixed_directions,
                                          MetaRectangle       *rect);
@@ -166,6 +178,7 @@ void     meta_rectangle_clip_to_region  (const GList         *spanning_rects,
 /* Shove the rectangle into one of the spanning_rects, assuming it fits in
  * one of them.
  */
+META_EXPORT_TEST
 void     meta_rectangle_shove_into_region(
                                          const GList         *spanning_rects,
                                          FixedDirections      fixed_directions,
@@ -175,6 +188,7 @@ void     meta_rectangle_shove_into_region(
  * to (px, py).  Useful for finding an optimal rectangle size when given a
  * range between two sizes that are all candidates.
  */
+META_EXPORT_TEST
 void meta_rectangle_find_linepoint_closest_to_point (double x1,    double y1,
                                                      double x2,    double y2,
                                                      double px,    double py,
@@ -189,18 +203,21 @@ void meta_rectangle_find_linepoint_closest_to_point (double x1,    double y1,
 /* Return whether an edge overlaps or is adjacent to the rectangle in the
  * nonzero-width dimension of the edge.
  */
+META_EXPORT_TEST
 gboolean meta_rectangle_edge_aligns (const MetaRectangle *rect,
                                      const MetaEdge      *edge);
 
 /* Compare two edges, so that sorting functions can put a list of edges in
  * canonical order.
  */
+META_EXPORT_TEST
 gint   meta_rectangle_edge_cmp (gconstpointer a, gconstpointer b);
 
 /* Compare two edges, so that sorting functions can put a list of edges in
  * order.  This function doesn't separate left edges first, then right edges,
  * etc., but rather compares only upon location.
  */
+META_EXPORT_TEST
 gint   meta_rectangle_edge_cmp_ignore_type (gconstpointer a, gconstpointer b);
 
 /* Removes an parts of edges in the given list that intersect any box in the
@@ -213,19 +230,23 @@ GList* meta_rectangle_remove_intersections_with_boxes_from_edges (
 /* Finds all the edges of an onscreen region, returning a GList* of
  * MetaEdgeRect's.
  */
+META_EXPORT_TEST
 GList* meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
                                            const GSList        *all_struts);
 
 /* Finds edges between adjacent monitors which are not covered by the given
  * struts.
  */
+META_EXPORT_TEST
 GList* meta_rectangle_find_nonintersected_monitor_edges (
                                            const GList         *monitor_rects,
                                            const GSList        *all_struts);
 
+META_EXPORT_TEST
 gboolean meta_rectangle_is_adjecent_to (MetaRectangle *rect,
                                         MetaRectangle *other);
 
+META_EXPORT_TEST
 void meta_rectangle_scale_double (const MetaRectangle  *rect,
                                   double                scale,
                                   MetaRoundingStrategy  rounding_strategy,
@@ -246,6 +267,7 @@ meta_rectangle_to_clutter_rect (MetaRectangle *rect)
   };
 }
 
+META_EXPORT_TEST
 void meta_rectangle_transform (const MetaRectangle  *rect,
                                MetaMonitorTransform  transform,
                                int                   width,
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 4156c2342..d34699eb0 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -287,8 +287,9 @@ void        meta_display_unregister_stamp (MetaDisplay *display,
                                            guint64      stamp);
 
 /* A "stack id" is a XID or a stamp */
-
 #define META_STACK_ID_IS_X11(id) ((id) < G_GUINT64_CONSTANT(0x100000000))
+
+META_EXPORT_TEST
 MetaWindow* meta_display_lookup_stack_id   (MetaDisplay *display,
                                             guint64      stack_id);
 
@@ -306,10 +307,13 @@ void        meta_display_unregister_wayland_window (MetaDisplay *display,
 void        meta_display_notify_window_created (MetaDisplay  *display,
                                                 MetaWindow   *window);
 
+META_EXPORT_TEST
 GSList*     meta_display_list_windows        (MetaDisplay          *display,
                                               MetaListWindowsFlags  flags);
 
 MetaDisplay* meta_display_for_x_display  (Display     *xdisplay);
+
+META_EXPORT_TEST
 MetaDisplay* meta_get_display            (void);
 
 void meta_display_reload_cursor (MetaDisplay *display);
diff --git a/src/core/main-private.h b/src/core/main-private.h
index e59b76608..fc0d2d7cb 100644
--- a/src/core/main-private.h
+++ b/src/core/main-private.h
@@ -20,6 +20,8 @@
 #ifndef META_MAIN_PRIVATE_H
 #define META_MAIN_PRIVATE_H
 
+#include "core/util-private.h"
+
 typedef enum _MetaCompositorType
 {
 #ifdef HAVE_WAYLAND
@@ -28,6 +30,7 @@ typedef enum _MetaCompositorType
   META_COMPOSITOR_TYPE_X11,
 } MetaCompositorType;
 
+META_EXPORT_TEST
 void meta_override_compositor_configuration (MetaCompositorType compositor_type,
                                              GType              backend_gtype);
 
diff --git a/src/core/stack-tracker.h b/src/core/stack-tracker.h
index bf9ba984e..dbffb0e5e 100644
--- a/src/core/stack-tracker.h
+++ b/src/core/stack-tracker.h
@@ -34,6 +34,7 @@
 #ifndef META_STACK_TRACKER_H
 #define META_STACK_TRACKER_H
 
+#include "core/util-private.h"
 #include "meta/display.h"
 #include "meta/window.h"
 
@@ -75,6 +76,7 @@ void meta_stack_tracker_reparent_event  (MetaStackTracker    *tracker,
 void meta_stack_tracker_configure_event (MetaStackTracker    *tracker,
                                         XConfigureEvent     *event);
 
+META_EXPORT_TEST
 void meta_stack_tracker_get_stack  (MetaStackTracker *tracker,
                                     guint64         **windows,
                                     int              *n_entries);
diff --git a/src/core/startup-notification-private.h b/src/core/startup-notification-private.h
index 849c5de62..4cdbff61b 100644
--- a/src/core/startup-notification-private.h
+++ b/src/core/startup-notification-private.h
@@ -37,10 +37,13 @@ struct _MetaStartupSequenceClass
   void (* complete) (MetaStartupSequence *sequence);
 };
 
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaStartupNotification,
                       meta_startup_notification,
                       META, STARTUP_NOTIFICATION,
                       GObject)
+
+META_EXPORT
 G_DECLARE_DERIVABLE_TYPE (MetaStartupSequence,
                           meta_startup_sequence,
                           META, STARTUP_SEQUENCE,
diff --git a/src/core/util-private.h b/src/core/util-private.h
index ac2e2840b..0d68a7202 100644
--- a/src/core/util-private.h
+++ b/src/core/util-private.h
@@ -28,6 +28,11 @@
 #include <glib/gi18n-lib.h>
 
 #include "meta/util.h"
+#include "meta/common.h"
+
+/* META_EXPORT_TEST should be used to export symbols that are exported only
+ * for testability purposes */
+#define META_EXPORT_TEST META_EXPORT
 
 void     meta_set_verbose (gboolean setting);
 void     meta_set_debugging (gboolean setting);
diff --git a/src/meson.build b/src/meson.build
index fa48a61ea..a3e579d9b 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -750,6 +750,7 @@ libmutter = shared_library(libmutter_name,
   ],
   version: '0.0.0',
   soversion: 0,
+  gnu_symbol_visibility: 'hidden',
   include_directories: mutter_includes,
   c_args: mutter_c_args,
   dependencies: [
diff --git a/src/meta/barrier.h b/src/meta/barrier.h
index d7b1666c7..8035e4887 100644
--- a/src/meta/barrier.h
+++ b/src/meta/barrier.h
@@ -48,10 +48,16 @@ struct _MetaBarrierClass
   GObjectClass parent_class;
 };
 
+META_EXPORT
 GType meta_barrier_get_type (void) G_GNUC_CONST;
 
+META_EXPORT
 gboolean meta_barrier_is_active (MetaBarrier *barrier);
+
+META_EXPORT
 void meta_barrier_destroy (MetaBarrier *barrier);
+
+META_EXPORT
 void meta_barrier_release (MetaBarrier      *barrier,
                            MetaBarrierEvent *event);
 
@@ -108,6 +114,8 @@ struct _MetaBarrierEvent {
 };
 
 #define META_TYPE_BARRIER_EVENT (meta_barrier_event_get_type ())
+
+META_EXPORT
 GType meta_barrier_event_get_type (void) G_GNUC_CONST;
 
 G_END_DECLS
diff --git a/src/meta/boxes.h b/src/meta/boxes.h
index 847f35c80..7585e1312 100644
--- a/src/meta/boxes.h
+++ b/src/meta/boxes.h
@@ -93,23 +93,34 @@ struct _MetaEdge
   MetaEdgeType  edge_type;
 };
 
+META_EXPORT
 GType meta_rectangle_get_type (void);
 
+META_EXPORT
 MetaRectangle *meta_rectangle_copy (const MetaRectangle *rect);
+
+META_EXPORT
 void           meta_rectangle_free (MetaRectangle       *rect);
 
 /* Function to make initializing a rect with a single line of code easy */
+META_EXPORT
 MetaRectangle                 meta_rect (int x, int y, int width, int height);
 
 /* Basic comparison functions */
+META_EXPORT
 int      meta_rectangle_area            (const MetaRectangle *rect);
+
+META_EXPORT
 gboolean meta_rectangle_intersect       (const MetaRectangle *src1,
                                          const MetaRectangle *src2,
                                          MetaRectangle       *dest);
+
+META_EXPORT
 gboolean meta_rectangle_equal           (const MetaRectangle *src1,
                                          const MetaRectangle *src2);
 
 /* Find the bounding box of the union of two rectangles */
+META_EXPORT
 void     meta_rectangle_union           (const MetaRectangle *rect1,
                                          const MetaRectangle *rect2,
                                          MetaRectangle       *dest);
@@ -117,6 +128,7 @@ void     meta_rectangle_union           (const MetaRectangle *rect1,
 /* overlap is similar to intersect but doesn't provide location of
  * intersection information.
  */
+META_EXPORT
 gboolean meta_rectangle_overlap         (const MetaRectangle *rect1,
                                          const MetaRectangle *rect2);
 
@@ -125,16 +137,22 @@ gboolean meta_rectangle_overlap         (const MetaRectangle *rect1,
  * exist a way to shift either rect horizontally so that the two rects
  * overlap?"  horiz_overlap is similar.
  */
+META_EXPORT
 gboolean meta_rectangle_vert_overlap    (const MetaRectangle *rect1,
                                          const MetaRectangle *rect2);
+
+META_EXPORT
 gboolean meta_rectangle_horiz_overlap   (const MetaRectangle *rect1,
                                          const MetaRectangle *rect2);
 
 /* could_fit_rect determines whether "outer_rect" is big enough to contain
  * inner_rect.  contains_rect checks whether it actually contains it.
  */
+META_EXPORT
 gboolean meta_rectangle_could_fit_rect  (const MetaRectangle *outer_rect,
                                          const MetaRectangle *inner_rect);
+
+META_EXPORT
 gboolean meta_rectangle_contains_rect   (const MetaRectangle *outer_rect,
                                          const MetaRectangle *inner_rect);
 
diff --git a/src/meta/common.h b/src/meta/common.h
index c9d362054..34228646b 100644
--- a/src/meta/common.h
+++ b/src/meta/common.h
@@ -46,6 +46,8 @@
 /* Replacement for X11 CurrentTime */
 #define META_CURRENT_TIME 0L
 
+#define META_EXPORT __attribute__((visibility("default"))) extern
+
 /**
  * MetaFrameFlags:
  * @META_FRAME_ALLOWS_DELETE: frame allows delete
@@ -447,6 +449,7 @@ struct _MetaFrameBorders
 };
 
 /* sets all dimensions to zero */
+META_EXPORT
 void meta_frame_borders_clear (MetaFrameBorders *self);
 
 /* should investigate changing these to whatever most apps use */
diff --git a/src/meta/compositor-mutter.h b/src/meta/compositor-mutter.h
index 485585157..a3b419046 100644
--- a/src/meta/compositor-mutter.h
+++ b/src/meta/compositor-mutter.h
@@ -32,21 +32,42 @@
 #include "meta/types.h"
 
 /* Public compositor API */
+META_EXPORT
 ClutterActor *meta_get_stage_for_display            (MetaDisplay *display);
+
+META_EXPORT
 Window        meta_get_overlay_window               (MetaDisplay *display);
+
+META_EXPORT
 GList        *meta_get_window_actors                (MetaDisplay *display);
+
+META_EXPORT
 ClutterActor *meta_get_window_group_for_display     (MetaDisplay *display);
+
+META_EXPORT
 ClutterActor *meta_get_top_window_group_for_display (MetaDisplay *display);
+
+META_EXPORT
 ClutterActor *meta_get_feedback_group_for_display   (MetaDisplay *display);
 
+META_EXPORT
 void meta_disable_unredirect_for_display (MetaDisplay *display);
+
+META_EXPORT
 void meta_enable_unredirect_for_display  (MetaDisplay *display);
 
+META_EXPORT
 void meta_set_stage_input_region   (MetaDisplay  *display,
                                     XserverRegion region);
+
+META_EXPORT
 void meta_empty_stage_input_region (MetaDisplay  *display);
+
+META_EXPORT
 void meta_focus_stage_window       (MetaDisplay  *display,
                                     guint32       timestamp);
+
+META_EXPORT
 gboolean meta_stage_is_focused     (MetaDisplay  *display);
 
 #endif
diff --git a/src/meta/compositor.h b/src/meta/compositor.h
index 29334d5ce..ab343ee9b 100644
--- a/src/meta/compositor.h
+++ b/src/meta/compositor.h
@@ -61,72 +61,109 @@ typedef enum {
   META_SIZE_CHANGE_UNFULLSCREEN,
 } MetaSizeChange;
 
+META_EXPORT
 MetaCompositor *meta_compositor_new     (MetaDisplay    *display);
+
+META_EXPORT
 void            meta_compositor_destroy (MetaCompositor *compositor);
 
+META_EXPORT
 void meta_compositor_manage   (MetaCompositor *compositor);
+
+META_EXPORT
 void meta_compositor_unmanage (MetaCompositor *compositor);
 
+META_EXPORT
 void meta_compositor_window_shape_changed (MetaCompositor *compositor,
                                            MetaWindow     *window);
+
+META_EXPORT
 void meta_compositor_window_opacity_changed (MetaCompositor *compositor,
                                              MetaWindow     *window);
+
+META_EXPORT
 void meta_compositor_window_surface_changed (MetaCompositor *compositor,
                                              MetaWindow     *window);
 
+META_EXPORT
 gboolean meta_compositor_process_event (MetaCompositor *compositor,
                                         XEvent         *event,
                                         MetaWindow     *window);
 
+META_EXPORT
 gboolean meta_compositor_filter_keybinding (MetaCompositor *compositor,
                                             MetaKeyBinding *binding);
 
+META_EXPORT
 void meta_compositor_add_window        (MetaCompositor      *compositor,
                                         MetaWindow          *window);
+
+META_EXPORT
 void meta_compositor_remove_window     (MetaCompositor      *compositor,
                                         MetaWindow          *window);
+
+META_EXPORT
 void meta_compositor_show_window       (MetaCompositor      *compositor,
                                         MetaWindow          *window,
                                         MetaCompEffect       effect);
+
+META_EXPORT
 void meta_compositor_hide_window       (MetaCompositor      *compositor,
                                         MetaWindow          *window,
                                         MetaCompEffect       effect);
+
+META_EXPORT
 void meta_compositor_switch_workspace  (MetaCompositor      *compositor,
                                         MetaWorkspace       *from,
                                         MetaWorkspace       *to,
                                         MetaMotionDirection  direction);
 
+META_EXPORT
 void meta_compositor_size_change_window (MetaCompositor      *compositor,
                                          MetaWindow          *window,
                                          MetaSizeChange       which_change,
                                          MetaRectangle       *old_frame_rect,
                                          MetaRectangle       *old_buffer_rect);
 
+META_EXPORT
 void meta_compositor_sync_window_geometry (MetaCompositor *compositor,
                                            MetaWindow     *window,
                                            gboolean        did_placement);
+
+META_EXPORT
 void meta_compositor_sync_updates_frozen  (MetaCompositor *compositor,
                                            MetaWindow     *window);
+
+META_EXPORT
 void meta_compositor_queue_frame_drawn    (MetaCompositor *compositor,
                                            MetaWindow     *window,
                                            gboolean        no_delay_frame);
 
+META_EXPORT
 void meta_compositor_sync_stack                (MetaCompositor *compositor,
                                                 GList          *stack);
 
+META_EXPORT
 void meta_compositor_flash_display             (MetaCompositor *compositor,
                                                 MetaDisplay    *display);
 
+META_EXPORT
 void meta_compositor_show_tile_preview (MetaCompositor *compositor,
                                         MetaWindow     *window,
                                         MetaRectangle  *tile_rect,
                                         int             tile_monitor_number);
+
+META_EXPORT
 void meta_compositor_hide_tile_preview (MetaCompositor *compositor);
+
+META_EXPORT
 void meta_compositor_show_window_menu (MetaCompositor     *compositor,
                                        MetaWindow         *window,
                                       MetaWindowMenuType  menu,
                                        int                 x,
                                        int                 y);
+
+META_EXPORT
 void meta_compositor_show_window_menu_for_rect (MetaCompositor     *compositor,
                                                 MetaWindow         *window,
                                                MetaWindowMenuType  menu,
diff --git a/src/meta/display.h b/src/meta/display.h
index 918817809..bb4831fba 100644
--- a/src/meta/display.h
+++ b/src/meta/display.h
@@ -72,42 +72,59 @@ typedef struct _MetaDisplayClass MetaDisplayClass;
 #define META_IS_DISPLAY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DISPLAY))
 #define META_DISPLAY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DISPLAY, 
MetaDisplayClass))
 
+META_EXPORT
 GType meta_display_get_type (void) G_GNUC_CONST;
 
 #define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0)
 
+META_EXPORT
 gboolean meta_display_supports_extended_barriers (MetaDisplay *display);
 
+META_EXPORT
 void meta_display_close (MetaDisplay *display,
                          guint32      timestamp);
 
+META_EXPORT
 MetaCompositor *meta_display_get_compositor  (MetaDisplay *display);
+
+META_EXPORT
 MetaX11Display *meta_display_get_x11_display (MetaDisplay *display);
 
+META_EXPORT
 MetaWindow *meta_display_get_focus_window (MetaDisplay *display);
 
+META_EXPORT
 gboolean meta_display_xserver_time_is_before (MetaDisplay *display,
                                               guint32      time1,
                                               guint32      time2);
 
+META_EXPORT
 guint32 meta_display_get_last_user_time (MetaDisplay *display);
+
+META_EXPORT
 guint32 meta_display_get_current_time (MetaDisplay *display);
+
+META_EXPORT
 guint32 meta_display_get_current_time_roundtrip (MetaDisplay *display);
 
+META_EXPORT
 GList* meta_display_get_tab_list (MetaDisplay   *display,
                                   MetaTabList    type,
                                   MetaWorkspace *workspace);
 
+META_EXPORT
 MetaWindow* meta_display_get_tab_next (MetaDisplay   *display,
                                        MetaTabList    type,
                                        MetaWorkspace *workspace,
                                        MetaWindow    *window,
                                        gboolean       backward);
 
+META_EXPORT
 MetaWindow* meta_display_get_tab_current (MetaDisplay   *display,
                                           MetaTabList    type,
                                           MetaWorkspace *workspace);
 
+META_EXPORT
 gboolean meta_display_begin_grab_op (MetaDisplay *display,
                                      MetaWindow  *window,
                                      MetaGrabOp   op,
@@ -118,11 +135,15 @@ gboolean meta_display_begin_grab_op (MetaDisplay *display,
                                      guint32      timestamp,
                                      int          root_x,
                                      int          root_y);
+
+META_EXPORT
 void     meta_display_end_grab_op   (MetaDisplay *display,
                                      guint32      timestamp);
 
+META_EXPORT
 MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
 
+META_EXPORT
 guint meta_display_add_keybinding    (MetaDisplay         *display,
                                       const char          *name,
                                       GSettings           *settings,
@@ -130,47 +151,68 @@ guint meta_display_add_keybinding    (MetaDisplay         *display,
                                       MetaKeyHandlerFunc   handler,
                                       gpointer             user_data,
                                       GDestroyNotify       free_data);
+
+META_EXPORT
 gboolean meta_display_remove_keybinding (MetaDisplay         *display,
                                          const char          *name);
 
+META_EXPORT
 guint    meta_display_grab_accelerator   (MetaDisplay *display,
                                           const char  *accelerator);
+
+META_EXPORT
 gboolean meta_display_ungrab_accelerator (MetaDisplay *display,
                                           guint        action_id);
 
+META_EXPORT
 guint meta_display_get_keybinding_action (MetaDisplay  *display,
                                           unsigned int  keycode,
                                           unsigned long mask);
 
+META_EXPORT
 GSList *meta_display_sort_windows_by_stacking (MetaDisplay *display,
                                                GSList      *windows);
 
+META_EXPORT
 void meta_display_add_ignored_crossing_serial (MetaDisplay  *display,
                                                unsigned long serial);
 
+META_EXPORT
 void meta_display_clear_mouse_mode (MetaDisplay *display);
 
+META_EXPORT
 void meta_display_freeze_keyboard (MetaDisplay *display,
                                    guint32      timestamp);
+
+META_EXPORT
 void meta_display_ungrab_keyboard (MetaDisplay *display,
                                    guint32      timestamp);
+
+META_EXPORT
 void meta_display_unfreeze_keyboard (MetaDisplay *display,
                                      guint32      timestamp);
+
+META_EXPORT
 gboolean meta_display_is_pointer_emulating_sequence (MetaDisplay          *display,
                                                      ClutterEventSequence *sequence);
 
+META_EXPORT
 void    meta_display_request_pad_osd      (MetaDisplay        *display,
                                            ClutterInputDevice *pad,
                                            gboolean            edition_mode);
+
+META_EXPORT
 gchar * meta_display_get_pad_action_label (MetaDisplay        *display,
                                            ClutterInputDevice *pad,
                                            MetaPadActionType   action_type,
                                            guint               action_number);
 
+META_EXPORT
 void meta_display_get_size (MetaDisplay *display,
                             int         *width,
                             int         *height);
 
+META_EXPORT
 void meta_display_set_cursor (MetaDisplay *display,
                               MetaCursor   cursor);
 
@@ -189,23 +231,34 @@ typedef enum
   META_DISPLAY_RIGHT
 } MetaDisplayDirection;
 
+META_EXPORT
 int  meta_display_get_n_monitors       (MetaDisplay   *display);
+
+META_EXPORT
 int  meta_display_get_primary_monitor  (MetaDisplay   *display);
+
+META_EXPORT
 int  meta_display_get_current_monitor  (MetaDisplay   *display);
+
+META_EXPORT
 void meta_display_get_monitor_geometry (MetaDisplay   *display,
                                         int            monitor,
                                         MetaRectangle *geometry);
 
+META_EXPORT
 gboolean meta_display_get_monitor_in_fullscreen (MetaDisplay *display,
                                                  int          monitor);
 
+META_EXPORT
 int meta_display_get_monitor_index_for_rect (MetaDisplay   *display,
                                              MetaRectangle *rect);
 
+META_EXPORT
 int meta_display_get_monitor_neighbor_index (MetaDisplay         *display,
                                              int                  which_monitor,
                                              MetaDisplayDirection dir);
 
+META_EXPORT
 void meta_display_focus_default_window (MetaDisplay *display,
                                         guint32      timestamp);
 
@@ -224,13 +277,16 @@ typedef enum
   META_DISPLAY_BOTTOMRIGHT
 } MetaDisplayCorner;
 
+META_EXPORT
 MetaWorkspaceManager *meta_display_get_workspace_manager (MetaDisplay *display);
 
 /**
  * meta_display_get_startup_notification: (skip)
  */
+META_EXPORT
 MetaStartupNotification * meta_display_get_startup_notification (MetaDisplay *display);
 
+META_EXPORT
 MetaSoundPlayer * meta_display_get_sound_player (MetaDisplay *display);
 
 #endif
diff --git a/src/meta/group.h b/src/meta/group.h
index f8b15a1e0..5567cf466 100644
--- a/src/meta/group.h
+++ b/src/meta/group.h
@@ -24,27 +24,41 @@
 
 #include <X11/Xlib.h>
 #include <glib.h>
+
+#include <meta/common.h>
 #include <meta/types.h>
 
 /* note, can return NULL */
+META_EXPORT
 MetaGroup* meta_window_get_group       (MetaWindow *window);
+
+META_EXPORT
 void       meta_window_compute_group   (MetaWindow* window);
+
+META_EXPORT
 void       meta_window_shutdown_group  (MetaWindow *window);
 
+META_EXPORT
 void       meta_window_group_leader_changed (MetaWindow *window);
 
 /* note, can return NULL */
+META_EXPORT
 MetaGroup *meta_x11_display_lookup_group (MetaX11Display *x11_display,
                                           Window          group_leader);
 
+META_EXPORT
 GSList*    meta_group_list_windows     (MetaGroup *group);
 
+META_EXPORT
 void       meta_group_update_layers    (MetaGroup *group);
 
+META_EXPORT
 const char* meta_group_get_startup_id  (MetaGroup *group);
 
+META_EXPORT
 int        meta_group_get_size         (MetaGroup *group);
 
+META_EXPORT
 gboolean meta_group_property_notify   (MetaGroup  *group,
                                        XEvent     *event);
 
diff --git a/src/meta/keybindings.h b/src/meta/keybindings.h
index 79ee407c2..ac1cee5b3 100644
--- a/src/meta/keybindings.h
+++ b/src/meta/keybindings.h
@@ -23,12 +23,22 @@
 
 #define META_TYPE_KEY_BINDING               (meta_key_binding_get_type ())
 
+META_EXPORT
 const char          *meta_key_binding_get_name      (MetaKeyBinding *binding);
+
+META_EXPORT
 MetaVirtualModifier  meta_key_binding_get_modifiers (MetaKeyBinding *binding);
+
+META_EXPORT
 guint                meta_key_binding_get_mask      (MetaKeyBinding *binding);
+
+META_EXPORT
 gboolean             meta_key_binding_is_builtin    (MetaKeyBinding *binding);
+
+META_EXPORT
 gboolean             meta_key_binding_is_reversed   (MetaKeyBinding *binding);
 
+META_EXPORT
 gboolean meta_keybindings_set_custom_handler (const gchar        *name,
                                              MetaKeyHandlerFunc  handler,
                                              gpointer            user_data,
diff --git a/src/meta/main.h b/src/meta/main.h
index 1cc8ff0a7..b5e3d9dd5 100644
--- a/src/meta/main.h
+++ b/src/meta/main.h
@@ -24,17 +24,36 @@
 
 #include <glib.h>
 
+#include <meta/common.h>
+
+META_EXPORT
 GOptionContext *meta_get_option_context     (void);
+
+META_EXPORT
 void            meta_init                   (void);
+
+META_EXPORT
 int             meta_run                    (void);
+
+META_EXPORT
 void            meta_register_with_session  (void);
+
+META_EXPORT
 gboolean        meta_activate_session       (void);  /* Actually defined in meta-backend.c */
+
+META_EXPORT
 gboolean        meta_get_replace_current_wm (void);  /* Actually defined in util.c */
 
+META_EXPORT
 void            meta_set_wm_name              (const char *wm_name);
+
+META_EXPORT
 void            meta_set_gnome_wm_keybindings (const char *wm_keybindings);
 
+META_EXPORT
 void            meta_restart                (const char *message);
+
+META_EXPORT
 gboolean        meta_is_restart             (void);
 
 /**
@@ -49,9 +68,11 @@ typedef enum
 } MetaExitCode;
 
 /* exit immediately */
+META_EXPORT
 void meta_exit (MetaExitCode code) G_GNUC_NORETURN;
 
 /* g_main_loop_quit() then fall out of main() */
+META_EXPORT
 void meta_quit (MetaExitCode code);
 
 #endif
diff --git a/src/meta/meta-backend.h b/src/meta/meta-backend.h
index ca8442a08..3d57c5174 100644
--- a/src/meta/meta-backend.h
+++ b/src/meta/meta-backend.h
@@ -38,27 +38,36 @@ typedef struct _MetaBackendClass   MetaBackendClass;
 GType meta_backend_get_type (void);
 #endif
 
+META_EXPORT
 MetaBackend * meta_get_backend (void);
 
+META_EXPORT
 void meta_backend_set_keymap (MetaBackend *backend,
                               const char  *layouts,
                               const char  *variants,
                               const char  *options);
 
+META_EXPORT
 void meta_backend_lock_layout_group (MetaBackend *backend,
                                      guint        idx);
 
+META_EXPORT
 void meta_backend_set_numlock (MetaBackend *backend,
                                gboolean     numlock_state);
 
+META_EXPORT
 ClutterActor *meta_backend_get_stage (MetaBackend *backend);
 
+META_EXPORT
 MetaDnd      *meta_backend_get_dnd   (MetaBackend *backend);
 
+META_EXPORT
 MetaSettings *meta_backend_get_settings (MetaBackend *backend);
 
+META_EXPORT
 MetaRemoteAccessController * meta_backend_get_remote_access_controller (MetaBackend *backend);
 
+META_EXPORT
 void meta_clutter_init (void);
 
 #endif /* META_BACKEND_H */
diff --git a/src/meta/meta-background-actor.h b/src/meta/meta-background-actor.h
index ff601676f..0928caed0 100644
--- a/src/meta/meta-background-actor.h
+++ b/src/meta/meta-background-actor.h
@@ -35,26 +35,33 @@
  */
 
 #define META_TYPE_BACKGROUND_ACTOR (meta_background_actor_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaBackgroundActor,
                       meta_background_actor,
                       META, BACKGROUND_ACTOR,
                       ClutterActor)
 
 
+META_EXPORT
 ClutterActor *meta_background_actor_new    (MetaDisplay *display,
                                             int          monitor);
 
+META_EXPORT
 void meta_background_actor_set_background  (MetaBackgroundActor *self,
                                             MetaBackground      *background);
 
+META_EXPORT
 void meta_background_actor_set_gradient (MetaBackgroundActor *self,
                                          gboolean             enabled,
                                          int                  height,
                                          double               tone_start);
 
+META_EXPORT
 void meta_background_actor_set_monitor  (MetaBackgroundActor *self,
                                          int                  monitor);
 
+META_EXPORT
 void meta_background_actor_set_vignette (MetaBackgroundActor *self,
                                          gboolean             enabled,
                                          double               brightness,
diff --git a/src/meta/meta-background-group.h b/src/meta/meta-background-group.h
index 7eb26b31c..accbb3e0f 100644
--- a/src/meta/meta-background-group.h
+++ b/src/meta/meta-background-group.h
@@ -5,12 +5,17 @@
 
 #include "clutter/clutter.h"
 
+#include <meta/common.h>
+
 #define META_TYPE_BACKGROUND_GROUP (meta_background_group_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaBackgroundGroup,
                       meta_background_group,
                       META, BACKGROUND_GROUP,
                       ClutterActor)
 
+META_EXPORT
 ClutterActor *meta_background_group_new (void);
 
 #endif /* META_BACKGROUND_GROUP_H */
diff --git a/src/meta/meta-background-image.h b/src/meta/meta-background-image.h
index b2e2175bd..137a6ff8e 100644
--- a/src/meta/meta-background-image.h
+++ b/src/meta/meta-background-image.h
@@ -30,26 +30,39 @@
 #include "meta/display.h"
 
 #define META_TYPE_BACKGROUND_IMAGE (meta_background_image_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaBackgroundImage,
                       meta_background_image,
                       META, BACKGROUND_IMAGE,
                       GObject)
 
+META_EXPORT
 gboolean     meta_background_image_is_loaded   (MetaBackgroundImage *image);
+
+META_EXPORT
 gboolean     meta_background_image_get_success (MetaBackgroundImage *image);
+
+META_EXPORT
 CoglTexture *meta_background_image_get_texture (MetaBackgroundImage *image);
 
 
 #define META_TYPE_BACKGROUND_IMAGE_CACHE (meta_background_image_cache_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaBackgroundImageCache,
                       meta_background_image_cache,
                       META, BACKGROUND_IMAGE_CACHE,
                       GObject)
 
+META_EXPORT
 MetaBackgroundImageCache *meta_background_image_cache_get_default (void);
 
+META_EXPORT
 MetaBackgroundImage *meta_background_image_cache_load  (MetaBackgroundImageCache *cache,
                                                         GFile                    *file);
+
+META_EXPORT
 void                 meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
                                                         GFile                    *file);
 
diff --git a/src/meta/meta-background.h b/src/meta/meta-background.h
index 0a94d5e49..1c255995c 100644
--- a/src/meta/meta-background.h
+++ b/src/meta/meta-background.h
@@ -35,25 +35,36 @@
  */
 
 #define META_TYPE_BACKGROUND (meta_background_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaBackground,
                       meta_background,
                       META, BACKGROUND,
                       GObject)
 
 
+META_EXPORT
 void meta_background_refresh_all (void);
 
+META_EXPORT
 MetaBackground *meta_background_new (MetaDisplay *display);
 
+META_EXPORT
 void meta_background_set_color    (MetaBackground            *self,
                                    ClutterColor              *color);
+
+META_EXPORT
 void meta_background_set_gradient (MetaBackground            *self,
                                    GDesktopBackgroundShading  shading_direction,
                                    ClutterColor              *color,
                                    ClutterColor              *second_color);
+
+META_EXPORT
 void meta_background_set_file     (MetaBackground            *self,
                                    GFile                     *file,
                                    GDesktopBackgroundStyle    style);
+
+META_EXPORT
 void meta_background_set_blend    (MetaBackground            *self,
                                    GFile                     *file1,
                                    GFile                     *file2,
diff --git a/src/meta/meta-close-dialog.h b/src/meta/meta-close-dialog.h
index 0b4ac2230..281b0ee24 100644
--- a/src/meta/meta-close-dialog.h
+++ b/src/meta/meta-close-dialog.h
@@ -27,6 +27,7 @@
 
 #define META_TYPE_CLOSE_DIALOG (meta_close_dialog_get_type ())
 
+META_EXPORT
 G_DECLARE_INTERFACE (MetaCloseDialog, meta_close_dialog,
                     META, CLOSE_DIALOG, GObject)
 
@@ -45,11 +46,19 @@ struct _MetaCloseDialogInterface
   void (* focus) (MetaCloseDialog *dialog);
 };
 
+META_EXPORT
 void              meta_close_dialog_show (MetaCloseDialog *dialog);
+
+META_EXPORT
 void              meta_close_dialog_hide (MetaCloseDialog *dialog);
+
+META_EXPORT
 void              meta_close_dialog_focus (MetaCloseDialog *dialog);
+
+META_EXPORT
 gboolean          meta_close_dialog_is_visible (MetaCloseDialog *dialog);
 
+META_EXPORT
 void              meta_close_dialog_response (MetaCloseDialog         *dialog,
                                               MetaCloseDialogResponse  response);
 
diff --git a/src/meta/meta-cursor-tracker.h b/src/meta/meta-cursor-tracker.h
index 8234dbbe4..29b1aab5a 100644
--- a/src/meta/meta-cursor-tracker.h
+++ b/src/meta/meta-cursor-tracker.h
@@ -30,23 +30,32 @@
 #include "meta/workspace.h"
 
 #define META_TYPE_CURSOR_TRACKER (meta_cursor_tracker_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaCursorTracker,
                       meta_cursor_tracker,
                       META, CURSOR_TRACKER,
                       GObject)
 
 
+META_EXPORT
 MetaCursorTracker *meta_cursor_tracker_get_for_display (MetaDisplay *display);
 
+META_EXPORT
 void           meta_cursor_tracker_get_hot    (MetaCursorTracker *tracker,
                                                int               *x,
                                                int               *y);
+
+META_EXPORT
 CoglTexture   *meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker);
 
+META_EXPORT
 void           meta_cursor_tracker_get_pointer (MetaCursorTracker   *tracker,
                                                 int                 *x,
                                                 int                 *y,
                                                 ClutterModifierType *mods);
+
+META_EXPORT
 void           meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker,
                                                         gboolean           visible);
 
diff --git a/src/meta/meta-dnd.h b/src/meta/meta-dnd.h
index bc77c24c2..2b2be1029 100644
--- a/src/meta/meta-dnd.h
+++ b/src/meta/meta-dnd.h
@@ -23,9 +23,12 @@
 #include <glib-object.h>
 #include <string.h>
 
-#include "meta/types.h"
+#include <meta/common.h>
+#include <meta/types.h>
 
 #define META_TYPE_DND (meta_dnd_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaDnd, meta_dnd, META, DND, GObject)
 
 #endif /* META_DND_H */
diff --git a/src/meta/meta-enum-types.h.in b/src/meta/meta-enum-types.h.in
index d03277762..6e3b67b26 100644
--- a/src/meta/meta-enum-types.h.in
+++ b/src/meta/meta-enum-types.h.in
@@ -3,6 +3,7 @@
 #define __META_ENUM_TYPES_H__
 
 #include <glib-object.h>
+#include <meta/common.h>
 
 G_BEGIN_DECLS
 
@@ -19,7 +20,7 @@ G_END_DECLS
 /*** END file-tail ***/
 
 /*** BEGIN value-header ***/
-GType @enum_name@_get_type (void) G_GNUC_CONST;
+META_EXPORT GType @enum_name@_get_type (void) G_GNUC_CONST;
 #define META_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
 
 /*** END value-header ***/
diff --git a/src/meta/meta-idle-monitor.h b/src/meta/meta-idle-monitor.h
index b77d8e250..6ef4eab00 100644
--- a/src/meta/meta-idle-monitor.h
+++ b/src/meta/meta-idle-monitor.h
@@ -33,28 +33,37 @@
 typedef struct _MetaIdleMonitor        MetaIdleMonitor;
 typedef struct _MetaIdleMonitorClass   MetaIdleMonitorClass;
 
+META_EXPORT
 GType meta_idle_monitor_get_type (void);
 
 typedef void (*MetaIdleMonitorWatchFunc) (MetaIdleMonitor *monitor,
                                           guint            watch_id,
                                           gpointer         user_data);
 
+META_EXPORT
 MetaIdleMonitor *meta_idle_monitor_get_core (void);
+
+META_EXPORT
 MetaIdleMonitor *meta_idle_monitor_get_for_device (int device_id);
 
+META_EXPORT
 guint         meta_idle_monitor_add_idle_watch        (MetaIdleMonitor          *monitor,
                                                       guint64                   interval_msec,
                                                       MetaIdleMonitorWatchFunc  callback,
                                                       gpointer                  user_data,
                                                       GDestroyNotify            notify);
 
+META_EXPORT
 guint         meta_idle_monitor_add_user_active_watch (MetaIdleMonitor          *monitor,
                                                       MetaIdleMonitorWatchFunc  callback,
                                                       gpointer                  user_data,
                                                       GDestroyNotify            notify);
 
+META_EXPORT
 void          meta_idle_monitor_remove_watch          (MetaIdleMonitor          *monitor,
                                                       guint                     id);
+
+META_EXPORT
 gint64        meta_idle_monitor_get_idletime          (MetaIdleMonitor          *monitor);
 
 #endif
diff --git a/src/meta/meta-inhibit-shortcuts-dialog.h b/src/meta/meta-inhibit-shortcuts-dialog.h
index 8ebeb398d..4e34f1701 100644
--- a/src/meta/meta-inhibit-shortcuts-dialog.h
+++ b/src/meta/meta-inhibit-shortcuts-dialog.h
@@ -23,6 +23,8 @@
 #include <meta/window.h>
 
 #define META_TYPE_INHIBIT_SHORTCUTS_DIALOG (meta_inhibit_shortcuts_dialog_get_type ())
+
+META_EXPORT
 G_DECLARE_INTERFACE (MetaInhibitShortcutsDialog, meta_inhibit_shortcuts_dialog,
                     META, INHIBIT_SHORTCUTS_DIALOG, GObject)
 
@@ -40,9 +42,13 @@ struct _MetaInhibitShortcutsDialogInterface
   void (* hide) (MetaInhibitShortcutsDialog *dialog);
 };
 
+META_EXPORT
 void meta_inhibit_shortcuts_dialog_show (MetaInhibitShortcutsDialog *dialog);
+
+META_EXPORT
 void meta_inhibit_shortcuts_dialog_hide (MetaInhibitShortcutsDialog *dialog);
 
+META_EXPORT
 void meta_inhibit_shortcuts_dialog_response (MetaInhibitShortcutsDialog        *dialog,
                                              MetaInhibitShortcutsDialogResponse response);
 
diff --git a/src/meta/meta-launch-context.h b/src/meta/meta-launch-context.h
index eb4414ce7..b719f0e07 100644
--- a/src/meta/meta-launch-context.h
+++ b/src/meta/meta-launch-context.h
@@ -23,12 +23,16 @@
 
 #include <meta/workspace.h>
 
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaLaunchContext, meta_launch_context, META, LAUNCH_CONTEXT, GAppLaunchContext)
 
 #define META_TYPE_LAUNCH_CONTEXT (meta_launch_context_get_type ())
 
+META_EXPORT
 void meta_launch_context_set_timestamp (MetaLaunchContext *context,
                                         uint32_t           timestamp);
+
+META_EXPORT
 void meta_launch_context_set_workspace (MetaLaunchContext *context,
                                         MetaWorkspace     *workspace);
 
diff --git a/src/meta/meta-monitor-manager.h b/src/meta/meta-monitor-manager.h
index d902d9f11..033309cc8 100644
--- a/src/meta/meta-monitor-manager.h
+++ b/src/meta/meta-monitor-manager.h
@@ -36,22 +36,30 @@ typedef enum
 typedef struct _MetaMonitorManagerClass    MetaMonitorManagerClass;
 typedef struct _MetaMonitorManager         MetaMonitorManager;
 
+META_EXPORT
 GType meta_monitor_manager_get_type (void);
 
+META_EXPORT
 MetaMonitorManager *meta_monitor_manager_get  (void);
 
+META_EXPORT
 gint meta_monitor_manager_get_monitor_for_connector (MetaMonitorManager *manager,
                                                      const char         *connector);
 
+META_EXPORT
 gboolean meta_monitor_manager_get_is_builtin_display_on (MetaMonitorManager *manager);
 
+META_EXPORT
 void meta_monitor_manager_switch_config (MetaMonitorManager          *manager,
                                          MetaMonitorSwitchConfigType  config_type);
 
+META_EXPORT
 gboolean meta_monitor_manager_can_switch_config (MetaMonitorManager *manager);
 
+META_EXPORT
 MetaMonitorSwitchConfigType meta_monitor_manager_get_switch_config (MetaMonitorManager *manager);
 
+META_EXPORT
 gint meta_monitor_manager_get_display_configuration_timeout (void);
 
 #endif /* META_MONITOR_MANAGER_H */
diff --git a/src/meta/meta-plugin.h b/src/meta/meta-plugin.h
index 597e53eef..f02a263eb 100644
--- a/src/meta/meta-plugin.h
+++ b/src/meta/meta-plugin.h
@@ -34,6 +34,8 @@
 #include "meta/types.h"
 
 #define META_TYPE_PLUGIN (meta_plugin_get_type ())
+
+META_EXPORT
 G_DECLARE_DERIVABLE_TYPE (MetaPlugin, meta_plugin, META, PLUGIN, GObject)
 
 typedef struct _MetaPluginVersion MetaPluginVersion;
@@ -256,6 +258,7 @@ struct _MetaPluginInfo
   const gchar *description;
 };
 
+META_EXPORT
 const MetaPluginInfo * meta_plugin_get_info (MetaPlugin *plugin);
 
 /**
@@ -321,29 +324,36 @@ struct _MetaPluginVersion
 #define META_PLUGIN_DECLARE(ObjectName, object_name)                    \
   META_PLUGIN_DECLARE_WITH_CODE(ObjectName, object_name, {})
 
+META_EXPORT
 void
 meta_plugin_switch_workspace_completed (MetaPlugin *plugin);
 
+META_EXPORT
 void
 meta_plugin_minimize_completed (MetaPlugin      *plugin,
                                 MetaWindowActor *actor);
 
+META_EXPORT
 void
 meta_plugin_unminimize_completed (MetaPlugin      *plugin,
                                   MetaWindowActor *actor);
 
+META_EXPORT
 void
 meta_plugin_size_change_completed (MetaPlugin      *plugin,
                                    MetaWindowActor *actor);
 
+META_EXPORT
 void
 meta_plugin_map_completed (MetaPlugin      *plugin,
                            MetaWindowActor *actor);
 
+META_EXPORT
 void
 meta_plugin_destroy_completed (MetaPlugin      *plugin,
                                MetaWindowActor *actor);
 
+META_EXPORT
 void
 meta_plugin_complete_display_change (MetaPlugin *plugin,
                                      gboolean    ok);
@@ -362,20 +372,24 @@ typedef enum {
   META_MODAL_KEYBOARD_ALREADY_GRABBED = 1 << 1
 } MetaModalOptions;
 
+META_EXPORT
 gboolean
 meta_plugin_begin_modal (MetaPlugin      *plugin,
                          MetaModalOptions options,
                          guint32          timestamp);
 
+META_EXPORT
 void
 meta_plugin_end_modal (MetaPlugin *plugin,
                        guint32     timestamp);
 
+META_EXPORT
 MetaDisplay *meta_plugin_get_display (MetaPlugin *plugin);
 
 void _meta_plugin_set_compositor (MetaPlugin *plugin, MetaCompositor *compositor);
 
 /* XXX: Putting this in here so it's in the public header. */
+META_EXPORT
 void     meta_plugin_manager_set_plugin_type (GType gtype);
 
 #endif /* META_PLUGIN_H_ */
diff --git a/src/meta/meta-remote-access-controller.h b/src/meta/meta-remote-access-controller.h
index 1b66f518c..e7c707bbc 100644
--- a/src/meta/meta-remote-access-controller.h
+++ b/src/meta/meta-remote-access-controller.h
@@ -23,7 +23,11 @@
 
 #include <glib-object.h>
 
+#include <meta/common.h>
+
 #define META_TYPE_REMOTE_ACCESS_HANDLE meta_remote_access_handle_get_type ()
+
+META_EXPORT
 G_DECLARE_DERIVABLE_TYPE (MetaRemoteAccessHandle,
                           meta_remote_access_handle,
                           META, REMOTE_ACCESS_HANDLE,
@@ -36,9 +40,12 @@ struct _MetaRemoteAccessHandleClass
   void (*stop) (MetaRemoteAccessHandle *handle);
 };
 
+META_EXPORT
 void meta_remote_access_handle_stop (MetaRemoteAccessHandle *handle);
 
 #define META_TYPE_REMOTE_ACCESS_CONTROLLER meta_remote_access_controller_get_type ()
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaRemoteAccessController,
                       meta_remote_access_controller,
                       META, REMOTE_ACCESS_CONTROLLER,
diff --git a/src/meta/meta-settings.h b/src/meta/meta-settings.h
index c76b1cb1d..5683d7c1d 100644
--- a/src/meta/meta-settings.h
+++ b/src/meta/meta-settings.h
@@ -22,10 +22,13 @@
 #ifndef META_SETTINGS_H
 #define META_SETTINGS_H
 
-#include "meta/types.h"
+#include <meta/common.h>
+#include <meta/types.h>
 
+META_EXPORT
 int meta_settings_get_ui_scaling_factor (MetaSettings *settings);
 
+META_EXPORT
 int meta_settings_get_font_dpi (MetaSettings *settings);
 
 #endif /* META_SETTINGS_H */
diff --git a/src/meta/meta-shadow-factory.h b/src/meta/meta-shadow-factory.h
index 1f285d7ff..a3aa0847c 100644
--- a/src/meta/meta-shadow-factory.h
+++ b/src/meta/meta-shadow-factory.h
@@ -29,6 +29,7 @@
 #include "cogl/cogl.h"
 #include "meta/meta-window-shape.h"
 
+META_EXPORT
 GType meta_shadow_get_type (void) G_GNUC_CONST;
 
 /**
@@ -58,6 +59,8 @@ struct _MetaShadowParams
 };
 
 #define META_TYPE_SHADOW_FACTORY (meta_shadow_factory_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaShadowFactory,
                       meta_shadow_factory,
                       META, SHADOW_FACTORY,
@@ -70,13 +73,16 @@ G_DECLARE_FINAL_TYPE (MetaShadowFactory,
  * so that multiple shadows created for the same shape with the same radius will
  * share the same MetaShadow.
  */
-
+META_EXPORT
 MetaShadowFactory *meta_shadow_factory_get_default (void);
 
+META_EXPORT
 void meta_shadow_factory_set_params (MetaShadowFactory *factory,
                                      const char        *class_name,
                                      gboolean           focused,
                                      MetaShadowParams  *params);
+
+META_EXPORT
 void meta_shadow_factory_get_params (MetaShadowFactory *factory,
                                      const char        *class_name,
                                      gboolean           focused,
@@ -90,8 +96,13 @@ void meta_shadow_factory_get_params (MetaShadowFactory *factory,
  */
 typedef struct _MetaShadow MetaShadow;
 
+META_EXPORT
 MetaShadow *meta_shadow_ref         (MetaShadow            *shadow);
+
+META_EXPORT
 void        meta_shadow_unref       (MetaShadow            *shadow);
+
+META_EXPORT
 void        meta_shadow_paint       (MetaShadow            *shadow,
                                      CoglFramebuffer       *framebuffer,
                                      int                    window_x,
@@ -101,6 +112,8 @@ void        meta_shadow_paint       (MetaShadow            *shadow,
                                      guint8                 opacity,
                                      cairo_region_t        *clip,
                                      gboolean               clip_strictly);
+
+META_EXPORT
 void        meta_shadow_get_bounds  (MetaShadow            *shadow,
                                      int                    window_x,
                                      int                    window_y,
@@ -108,8 +121,10 @@ void        meta_shadow_get_bounds  (MetaShadow            *shadow,
                                      int                    window_height,
                                      cairo_rectangle_int_t *bounds);
 
+META_EXPORT
 MetaShadowFactory *meta_shadow_factory_new (void);
 
+META_EXPORT
 MetaShadow *meta_shadow_factory_get_shadow (MetaShadowFactory *factory,
                                             MetaWindowShape   *shape,
                                             int                width,
diff --git a/src/meta/meta-shaped-texture.h b/src/meta/meta-shaped-texture.h
index ca79b6521..c36b8547f 100644
--- a/src/meta/meta-shaped-texture.h
+++ b/src/meta/meta-shaped-texture.h
@@ -27,32 +27,42 @@
 #include <X11/Xlib.h>
 
 #include "clutter/clutter.h"
+#include <meta/common.h>
 
 G_BEGIN_DECLS
 
 #define META_TYPE_SHAPED_TEXTURE (meta_shaped_texture_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaShapedTexture,
                       meta_shaped_texture,
                       META, SHAPED_TEXTURE,
                       ClutterActor)
 
 
+META_EXPORT
 void meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
                                             gboolean           create_mipmaps);
 
+META_EXPORT
 gboolean meta_shaped_texture_update_area (MetaShapedTexture *stex,
                                           int                x,
                                           int                y,
                                           int                width,
                                           int                height);
 
+META_EXPORT
 CoglTexture * meta_shaped_texture_get_texture (MetaShapedTexture *stex);
 
+META_EXPORT
 void meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
                                            CoglTexture       *mask_texture);
+
+META_EXPORT
 void meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex,
                                             cairo_region_t    *opaque_region);
 
+META_EXPORT
 cairo_surface_t * meta_shaped_texture_get_image (MetaShapedTexture     *stex,
                                                  cairo_rectangle_int_t *clip);
 
diff --git a/src/meta/meta-sound-player.h b/src/meta/meta-sound-player.h
index e6ddabd34..4183689cd 100644
--- a/src/meta/meta-sound-player.h
+++ b/src/meta/meta-sound-player.h
@@ -23,14 +23,21 @@
 
 #include <gio/gio.h>
 
+#include <meta/common.h>
+
 #define META_TYPE_SOUND_PLAYER (meta_sound_player_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaSoundPlayer, meta_sound_player,
                       META, SOUND_PLAYER, GObject)
 
+META_EXPORT
 void meta_sound_player_play_from_theme (MetaSoundPlayer *player,
                                         const char      *name,
                                         const char      *description,
                                         GCancellable    *cancellable);
+
+META_EXPORT
 void meta_sound_player_play_from_file  (MetaSoundPlayer *player,
                                         GFile           *file,
                                         const char      *description,
diff --git a/src/meta/meta-stage.h b/src/meta/meta-stage.h
index 700ae7876..afab102e5 100644
--- a/src/meta/meta-stage.h
+++ b/src/meta/meta-stage.h
@@ -25,6 +25,8 @@
 G_BEGIN_DECLS
 
 #define META_TYPE_STAGE (meta_stage_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaStage, meta_stage, META, STAGE, ClutterStage)
 
 G_END_DECLS
diff --git a/src/meta/meta-startup-notification.h b/src/meta/meta-startup-notification.h
index dfa7686df..f8dfae554 100644
--- a/src/meta/meta-startup-notification.h
+++ b/src/meta/meta-startup-notification.h
@@ -34,8 +34,10 @@ GType         meta_startup_notification_get_type      (void);
 /**
  * meta_startup_notification_get_sequences: (skip)
  */
+META_EXPORT
 GSList *      meta_startup_notification_get_sequences (MetaStartupNotification *sn);
 
+META_EXPORT
 MetaLaunchContext *
              meta_startup_notification_create_launcher (MetaStartupNotification *sn);
 
@@ -43,15 +45,31 @@ MetaLaunchContext *
 GType         meta_startup_sequence_get_type          (void);
 #endif
 
+META_EXPORT
 const char * meta_startup_sequence_get_id             (MetaStartupSequence *sequence);
+
+META_EXPORT
 gboolean     meta_startup_sequence_get_completed      (MetaStartupSequence *sequence);
+
+META_EXPORT
 const char * meta_startup_sequence_get_name           (MetaStartupSequence *sequence);
+
+META_EXPORT
 int          meta_startup_sequence_get_workspace      (MetaStartupSequence *sequence);
+
+META_EXPORT
 uint64_t     meta_startup_sequence_get_timestamp      (MetaStartupSequence *sequence);
+
+META_EXPORT
 const char * meta_startup_sequence_get_icon_name      (MetaStartupSequence *sequence);
+
+META_EXPORT
 const char * meta_startup_sequence_get_application_id (MetaStartupSequence *sequence);
+
+META_EXPORT
 const char * meta_startup_sequence_get_wmclass        (MetaStartupSequence *sequence);
 
+META_EXPORT
 void        meta_startup_sequence_complete           (MetaStartupSequence *sequence);
 
 #endif /* META_STARTUP_NOTIFICATION_H */
diff --git a/src/meta/meta-window-actor.h b/src/meta/meta-window-actor.h
index 0b1f79d45..09f73bcb0 100644
--- a/src/meta/meta-window-actor.h
+++ b/src/meta/meta-window-actor.h
@@ -29,15 +29,26 @@
 #include "meta/compositor.h"
 
 #define META_TYPE_WINDOW_ACTOR (meta_window_actor_get_type ())
+
+META_EXPORT
 G_DECLARE_DERIVABLE_TYPE (MetaWindowActor,
                           meta_window_actor,
                           META, WINDOW_ACTOR,
                           ClutterActor)
 
+META_EXPORT
 Window             meta_window_actor_get_x_window         (MetaWindowActor *self);
+
+META_EXPORT
 MetaWindow *       meta_window_actor_get_meta_window      (MetaWindowActor *self);
+
+META_EXPORT
 ClutterActor *     meta_window_actor_get_texture          (MetaWindowActor *self);
+
+META_EXPORT
 void               meta_window_actor_sync_visibility      (MetaWindowActor *self);
+
+META_EXPORT
 gboolean       meta_window_actor_is_destroyed (MetaWindowActor *self);
 
 typedef enum {
diff --git a/src/meta/meta-window-group.h b/src/meta/meta-window-group.h
index 8dc219887..cfc487e7c 100644
--- a/src/meta/meta-window-group.h
+++ b/src/meta/meta-window-group.h
@@ -6,6 +6,8 @@
 #include "clutter/clutter.h"
 
 #define META_TYPE_WINDOW_GROUP (meta_window_group_get_type())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaWindowGroup,
                       meta_window_group,
                       META, WINDOW_GROUP,
diff --git a/src/meta/meta-window-shape.h b/src/meta/meta-window-shape.h
index b10adf082..ec9fa7da1 100644
--- a/src/meta/meta-window-shape.h
+++ b/src/meta/meta-window-shape.h
@@ -26,6 +26,9 @@
 #include <cairo.h>
 #include <glib-object.h>
 
+#include <meta/common.h>
+
+META_EXPORT
 GType meta_window_shape_get_type (void) G_GNUC_CONST;
 
 /**
@@ -41,17 +44,30 @@ GType meta_window_shape_get_type (void) G_GNUC_CONST;
  */
 typedef struct _MetaWindowShape MetaWindowShape;
 
+META_EXPORT
 MetaWindowShape *  meta_window_shape_new         (cairo_region_t  *region);
+
+META_EXPORT
 MetaWindowShape *  meta_window_shape_ref         (MetaWindowShape *shape);
+
+META_EXPORT
 void               meta_window_shape_unref       (MetaWindowShape *shape);
+
+META_EXPORT
 guint              meta_window_shape_hash        (MetaWindowShape *shape);
+
+META_EXPORT
 gboolean           meta_window_shape_equal       (MetaWindowShape *shape_a,
                                                   MetaWindowShape *shape_b);
+
+META_EXPORT
 void               meta_window_shape_get_borders (MetaWindowShape *shape,
                                                   int             *border_top,
                                                   int             *border_right,
                                                   int             *border_bottom,
                                                   int             *border_left);
+
+META_EXPORT
 cairo_region_t    *meta_window_shape_to_region   (MetaWindowShape *shape,
                                                   int              center_width,
                                                   int              center_height);
diff --git a/src/meta/meta-workspace-manager.h b/src/meta/meta-workspace-manager.h
index da8125e49..035c074ab 100644
--- a/src/meta/meta-workspace-manager.h
+++ b/src/meta/meta-workspace-manager.h
@@ -30,30 +30,40 @@
 #include <meta/types.h>
 
 #define META_TYPE_WORKSPACE_MANAGER (meta_workspace_manager_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaWorkspaceManager,
                       meta_workspace_manager,
                       META, WORKSPACE_MANAGER,
                       GObject)
 
+META_EXPORT
 GList *meta_workspace_manager_get_workspaces (MetaWorkspaceManager *workspace_manager);
 
+META_EXPORT
 int meta_workspace_manager_get_n_workspaces (MetaWorkspaceManager *workspace_manager);
 
+META_EXPORT
 MetaWorkspace* meta_workspace_manager_get_workspace_by_index (MetaWorkspaceManager *workspace_manager,
                                                               int                   index);
 
+META_EXPORT
 void meta_workspace_manager_remove_workspace (MetaWorkspaceManager *workspace_manager,
                                               MetaWorkspace        *workspace,
                                               guint32               timestamp);
 
+META_EXPORT
 MetaWorkspace *meta_workspace_manager_append_new_workspace (MetaWorkspaceManager *workspace_manager,
                                                             gboolean              activate,
                                                             guint32               timestamp);
 
+META_EXPORT
 int meta_workspace_manager_get_active_workspace_index (MetaWorkspaceManager *workspace_manager);
 
+META_EXPORT
 MetaWorkspace *meta_workspace_manager_get_active_workspace (MetaWorkspaceManager *workspace_manager);
 
+META_EXPORT
 void meta_workspace_manager_override_workspace_layout (MetaWorkspaceManager *workspace_manager,
                                                        MetaDisplayCorner     starting_corner,
                                                        gboolean              vertical_layout,
diff --git a/src/meta/meta-x11-display.h b/src/meta/meta-x11-display.h
index 352ceb675..f5167af7d 100644
--- a/src/meta/meta-x11-display.h
+++ b/src/meta/meta-x11-display.h
@@ -28,21 +28,38 @@
 #include <meta/types.h>
 
 #define META_TYPE_X11_DISPLAY (meta_x11_display_get_type ())
+
+META_EXPORT
 G_DECLARE_FINAL_TYPE (MetaX11Display, meta_x11_display, META, X11_DISPLAY, GObject)
 
+META_EXPORT
 gboolean meta_x11_init_gdk_display (GError **error);
 
+META_EXPORT
 int      meta_x11_display_get_screen_number (MetaX11Display *x11_display);
+
+META_EXPORT
 Display *meta_x11_display_get_xdisplay      (MetaX11Display *x11_display);
+
+META_EXPORT
 Window   meta_x11_display_get_xroot         (MetaX11Display *x11_display);
 
+META_EXPORT
 int      meta_x11_display_get_xinput_opcode     (MetaX11Display *x11_display);
+
+META_EXPORT
 int      meta_x11_display_get_damage_event_base (MetaX11Display *x11_display);
+
+META_EXPORT
 int      meta_x11_display_get_shape_event_base  (MetaX11Display *x11_display);
+
+META_EXPORT
 gboolean meta_x11_display_has_shape             (MetaX11Display *x11_display);
 
+META_EXPORT
 void meta_x11_display_set_cm_selection (MetaX11Display *x11_display);
 
+META_EXPORT
 gboolean meta_x11_display_xwindow_is_a_no_focus_window (MetaX11Display *x11_display,
                                                         Window xwindow);
 
@@ -55,6 +72,7 @@ gboolean meta_x11_display_xwindow_is_a_no_focus_window (MetaX11Display *x11_disp
  * whether a window should be allowed to be focused should depend
  * on user_time events (see bug 167358, comment 15 in particular)
  */
+META_EXPORT
 void meta_x11_display_set_input_focus_window (MetaX11Display *x11_display,
                                               MetaWindow     *window,
                                               gboolean        focus_frame,
@@ -64,6 +82,7 @@ void meta_x11_display_set_input_focus_window (MetaX11Display *x11_display,
  * designated no_focus_window should be focused, but is otherwise the
  * same as meta_display_set_input_focus_window
  */
+META_EXPORT
 void meta_x11_display_focus_the_no_focus_window (MetaX11Display *x11_display,
                                                  guint32         timestamp);
 
diff --git a/src/meta/meta-x11-errors.h b/src/meta/meta-x11-errors.h
index 517e169b3..ec9fa5c71 100644
--- a/src/meta/meta-x11-errors.h
+++ b/src/meta/meta-x11-errors.h
@@ -27,10 +27,14 @@
 #include <meta/util.h>
 #include <meta/meta-x11-display.h>
 
+META_EXPORT
 void      meta_x11_error_trap_push (MetaX11Display *x11_display);
+
+META_EXPORT
 void      meta_x11_error_trap_pop  (MetaX11Display *x11_display);
 
 /* returns X error code, or 0 for no error */
+META_EXPORT
 int       meta_x11_error_trap_pop_with_return  (MetaX11Display *x11_display);
 
 
diff --git a/src/meta/prefs.h b/src/meta/prefs.h
index 2d75c47a1..9664b5c07 100644
--- a/src/meta/prefs.h
+++ b/src/meta/prefs.h
@@ -108,62 +108,129 @@ typedef enum
 typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
                                        gpointer       user_data);
 
+META_EXPORT
 void meta_prefs_add_listener    (MetaPrefsChangedFunc func,
                                  gpointer             user_data);
+
+META_EXPORT
 void meta_prefs_remove_listener (MetaPrefsChangedFunc func,
                                  gpointer             user_data);
 
+META_EXPORT
 void meta_prefs_init (void);
 
+META_EXPORT
 const char* meta_preference_to_string (MetaPreference pref);
 
+META_EXPORT
 MetaVirtualModifier         meta_prefs_get_mouse_button_mods  (void);
+
+META_EXPORT
 gint                        meta_prefs_get_mouse_button_resize (void);
+
+META_EXPORT
 gint                        meta_prefs_get_mouse_button_menu  (void);
+
+META_EXPORT
 GDesktopFocusMode           meta_prefs_get_focus_mode         (void);
+
+META_EXPORT
 GDesktopFocusNewWindows     meta_prefs_get_focus_new_windows  (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_attach_modal_dialogs (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_raise_on_click     (void);
+
 /* returns NULL if GTK default should be used */
+META_EXPORT
 const PangoFontDescription* meta_prefs_get_titlebar_font      (void);
+
+META_EXPORT
 int                         meta_prefs_get_num_workspaces     (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_dynamic_workspaces (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_disable_workarounds (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_auto_raise         (void);
+
+META_EXPORT
 int                         meta_prefs_get_auto_raise_delay   (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_focus_change_on_pointer_rest (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_gnome_accessibility (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_gnome_animations   (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_edge_tiling        (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_auto_maximize      (void);
+
+META_EXPORT
 gboolean                    meta_prefs_get_center_new_windows (void);
 
+META_EXPORT
 gboolean                    meta_prefs_get_show_fallback_app_menu (void);
+
+META_EXPORT
 void                        meta_prefs_set_show_fallback_app_menu (gboolean whether);
 
+META_EXPORT
 void                        meta_prefs_get_button_layout (MetaButtonLayout *button_layout);
 
 /* Double, right, middle click can be configured to any titlebar meta-action */
+META_EXPORT
 GDesktopTitlebarAction      meta_prefs_get_action_double_click_titlebar (void);
+
+META_EXPORT
 GDesktopTitlebarAction      meta_prefs_get_action_middle_click_titlebar (void);
+
+META_EXPORT
 GDesktopTitlebarAction      meta_prefs_get_action_right_click_titlebar (void);
 
+META_EXPORT
 void meta_prefs_set_num_workspaces (int n_workspaces);
 
+META_EXPORT
 const char* meta_prefs_get_workspace_name    (int         i);
+
+META_EXPORT
 void        meta_prefs_change_workspace_name (int         i,
                                               const char *name);
 
+META_EXPORT
 const char* meta_prefs_get_cursor_theme      (void);
+
+META_EXPORT
 int         meta_prefs_get_cursor_size       (void);
+
+META_EXPORT
 gboolean    meta_prefs_get_compositing_manager (void);
+
+META_EXPORT
 gboolean    meta_prefs_get_force_fullscreen  (void);
 
+META_EXPORT
 void meta_prefs_set_force_fullscreen (gboolean whether);
 
+META_EXPORT
 gboolean meta_prefs_get_workspaces_only_on_primary (void);
 
+META_EXPORT
 int      meta_prefs_get_draggable_border_width (void);
+
+META_EXPORT
 int      meta_prefs_get_drag_threshold (void);
 
 /**
@@ -393,12 +460,19 @@ typedef void (* MetaKeyHandlerFunc) (MetaDisplay     *display,
                                      MetaKeyBinding  *binding,
                                      gpointer         user_data);
 
+META_EXPORT
 GType meta_key_binding_get_type    (void);
 
+META_EXPORT
 MetaKeyBindingAction meta_prefs_get_keybinding_action (const char *name);
 
+META_EXPORT
 gboolean           meta_prefs_get_visual_bell      (void);
+
+META_EXPORT
 gboolean           meta_prefs_bell_is_audible      (void);
+
+META_EXPORT
 GDesktopVisualBellType meta_prefs_get_visual_bell_type (void);
 
 #endif
diff --git a/src/meta/theme.h b/src/meta/theme.h
index 66325536f..0fbd1e5af 100644
--- a/src/meta/theme.h
+++ b/src/meta/theme.h
@@ -30,8 +30,12 @@
  */
 typedef struct _MetaTheme MetaTheme;
 
+META_EXPORT
 MetaTheme* meta_theme_get_default (void);
 
+META_EXPORT
 MetaTheme* meta_theme_new      (void);
+
+META_EXPORT
 void       meta_theme_free     (MetaTheme *theme);
 #endif
diff --git a/src/meta/util.h b/src/meta/util.h
index 3619e8adb..e0b550d62 100644
--- a/src/meta/util.h
+++ b/src/meta/util.h
@@ -28,20 +28,35 @@
 
 #include <meta/common.h>
 
+META_EXPORT
 gboolean meta_is_verbose  (void);
+
+META_EXPORT
 gboolean meta_is_debugging (void);
+
+META_EXPORT
 gboolean meta_is_syncing (void);
+
+META_EXPORT
 gboolean meta_is_wayland_compositor (void);
 
+META_EXPORT
 void meta_debug_spew_real (const char *format,
                            ...) G_GNUC_PRINTF (1, 2);
+
+META_EXPORT
 void meta_verbose_real    (const char *format,
                            ...) G_GNUC_PRINTF (1, 2);
 
+META_EXPORT
 void meta_bug        (const char *format,
                       ...) G_GNUC_PRINTF (1, 2);
+
+META_EXPORT
 void meta_warning    (const char *format,
                       ...) G_GNUC_PRINTF (1, 2);
+
+META_EXPORT
 void meta_fatal      (const char *format,
                       ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN G_ANALYZER_NORETURN;
 
@@ -99,28 +114,45 @@ typedef enum
   META_DEBUG_DBUS            = 1 << 22
 } MetaDebugTopic;
 
+META_EXPORT
 void meta_topic_real      (MetaDebugTopic topic,
                            const char    *format,
                            ...) G_GNUC_PRINTF (2, 3);
+
+META_EXPORT
 void meta_add_verbose_topic    (MetaDebugTopic topic);
+
+META_EXPORT
 void meta_remove_verbose_topic (MetaDebugTopic topic);
 
+META_EXPORT
 void meta_push_no_msg_prefix (void);
+
+META_EXPORT
 void meta_pop_no_msg_prefix  (void);
 
+META_EXPORT
 gint  meta_unsigned_long_equal (gconstpointer v1,
                                 gconstpointer v2);
+
+META_EXPORT
 guint meta_unsigned_long_hash  (gconstpointer v);
 
+META_EXPORT
 const char* meta_frame_type_to_string (MetaFrameType type);
+META_EXPORT
 const char* meta_gravity_to_string (int gravity);
 
+META_EXPORT
 char* meta_external_binding_name_for_action (guint keybinding_action);
 
+META_EXPORT
 char* meta_g_utf8_strndup (const gchar *src, gsize n);
 
+META_EXPORT
 void  meta_free_gslist_and_elements (GSList *list_to_deep_free);
 
+META_EXPORT
 GPid meta_show_dialog (const char *type,
                        const char *message,
                        const char *timeout,
@@ -175,10 +207,13 @@ typedef enum {
   META_LATER_IDLE
 } MetaLaterType;
 
+META_EXPORT
 guint meta_later_add    (MetaLaterType  when,
                          GSourceFunc    func,
                          gpointer       data,
                          GDestroyNotify notify);
+
+META_EXPORT
 void  meta_later_remove (guint          later_id);
 
 typedef enum
@@ -187,8 +222,7 @@ typedef enum
   META_LOCALE_DIRECTION_RTL,
 } MetaLocaleDirection;
 
+META_EXPORT
 MetaLocaleDirection meta_get_locale_direction (void);
 
 #endif /* META_UTIL_H */
-
-
diff --git a/src/meta/window.h b/src/meta/window.h
index 7b9a7e2a2..f6eb75c68 100644
--- a/src/meta/window.h
+++ b/src/meta/window.h
@@ -100,167 +100,353 @@ typedef enum {
 
 typedef struct _MetaWindowClass   MetaWindowClass;
 
+META_EXPORT
 GType meta_window_get_type (void);
 
+META_EXPORT
 MetaFrame *meta_window_get_frame (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_has_focus (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_appears_focused (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_shaded (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_override_redirect (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_skip_taskbar (MetaWindow *window);
+
+META_EXPORT
 void meta_window_get_buffer_rect (const MetaWindow *window, MetaRectangle *rect);
 
+META_EXPORT
 void meta_window_get_frame_rect (const MetaWindow *window, MetaRectangle *rect);
 
+META_EXPORT
 void meta_window_client_rect_to_frame_rect (MetaWindow    *window,
                                             MetaRectangle *client_rect,
                                             MetaRectangle *frame_rect);
+
+META_EXPORT
 void meta_window_frame_rect_to_client_rect (MetaWindow    *window,
                                             MetaRectangle *frame_rect,
                                             MetaRectangle *client_rect);
 
+META_EXPORT
 MetaDisplay *meta_window_get_display (MetaWindow *window);
+
+META_EXPORT
 Window meta_window_get_xwindow (MetaWindow *window);
+
+META_EXPORT
 MetaWindowType meta_window_get_window_type (MetaWindow *window);
+
+META_EXPORT
 MetaWorkspace *meta_window_get_workspace (MetaWindow *window);
+
+META_EXPORT
 int      meta_window_get_monitor (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_on_all_workspaces (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_located_on_workspace (MetaWindow    *window,
                                            MetaWorkspace *workspace);
+
+META_EXPORT
 gboolean meta_window_is_hidden (MetaWindow *window);
+
+META_EXPORT
 void     meta_window_activate  (MetaWindow *window,guint32 current_time);
+
+META_EXPORT
 void     meta_window_activate_with_workspace (MetaWindow    *window,
                                               guint32        current_time,
                                               MetaWorkspace *workspace);
+
+META_EXPORT
 const char * meta_window_get_description (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_wm_class (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_wm_class_instance (MetaWindow *window);
+
+META_EXPORT
 gboolean    meta_window_showing_on_its_workspace (MetaWindow *window);
 
+META_EXPORT
 const char * meta_window_get_sandboxed_app_id (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_theme_variant (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_application_id (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_application_object_path (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_window_object_path (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_app_menu_object_path (MetaWindow *window);
+
+META_EXPORT
 const char * meta_window_get_gtk_menubar_object_path (MetaWindow *window);
 
+META_EXPORT
 void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
+
+META_EXPORT
 void meta_window_move_resize_frame (MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw, int 
w, int h);
+
+META_EXPORT
 void meta_window_move_to_monitor (MetaWindow *window, int monitor);
 
+META_EXPORT
 void meta_window_set_demands_attention (MetaWindow *window);
+
+META_EXPORT
 void meta_window_unset_demands_attention (MetaWindow *window);
 
+META_EXPORT
 const char* meta_window_get_startup_id (MetaWindow *window);
+
+META_EXPORT
 void meta_window_change_workspace_by_index (MetaWindow *window,
                                             gint        space_index,
                                             gboolean    append);
+
+META_EXPORT
 void meta_window_change_workspace          (MetaWindow  *window,
                                             MetaWorkspace *workspace);
+
+META_EXPORT
 GObject *meta_window_get_compositor_private (MetaWindow *window);
+
+META_EXPORT
 void meta_window_set_compositor_private (MetaWindow *window, GObject *priv);
+
+META_EXPORT
 const char *meta_window_get_role (MetaWindow *window);
+
+META_EXPORT
 MetaStackLayer meta_window_get_layer (MetaWindow *window);
+
+META_EXPORT
 MetaWindow* meta_window_find_root_ancestor    (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_ancestor_of_transient (MetaWindow            *window,
                                                MetaWindow            *transient);
 
 typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
                                            void       *user_data);
 
+META_EXPORT
 void     meta_window_foreach_transient        (MetaWindow            *window,
                                                MetaWindowForeachFunc  func,
                                                void                  *user_data);
+
+META_EXPORT
 void     meta_window_foreach_ancestor         (MetaWindow            *window,
                                                MetaWindowForeachFunc  func,
                                                void                  *user_data);
 
+META_EXPORT
 MetaMaximizeFlags meta_window_get_maximized (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_is_fullscreen (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_is_screen_sized (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_is_monitor_sized (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_is_on_primary_monitor (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_requested_bypass_compositor (MetaWindow *window);
+
+META_EXPORT
 gboolean          meta_window_requested_dont_bypass_compositor (MetaWindow *window);
 
+META_EXPORT
 gboolean meta_window_get_icon_geometry (MetaWindow    *window,
                                         MetaRectangle *rect);
+
+META_EXPORT
 void meta_window_set_icon_geometry (MetaWindow    *window,
                                     MetaRectangle *rect);
+
+META_EXPORT
 void meta_window_maximize   (MetaWindow        *window,
                              MetaMaximizeFlags  directions);
+
+META_EXPORT
 void meta_window_unmaximize (MetaWindow        *window,
                              MetaMaximizeFlags  directions);
+
+META_EXPORT
 void        meta_window_minimize           (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_unminimize         (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_raise              (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_lower              (MetaWindow  *window);
+
+META_EXPORT
 const char *meta_window_get_title (MetaWindow *window);
+
+META_EXPORT
 MetaWindow *meta_window_get_transient_for (MetaWindow *window);
+
+META_EXPORT
 void        meta_window_delete             (MetaWindow  *window,
                                             guint32      timestamp);
+
+META_EXPORT
 guint       meta_window_get_stable_sequence (MetaWindow *window);
+
+META_EXPORT
 guint32     meta_window_get_user_time (MetaWindow *window);
+
+META_EXPORT
 int         meta_window_get_pid (MetaWindow *window);
+
+META_EXPORT
 const char *meta_window_get_client_machine (MetaWindow *window);
+
+META_EXPORT
 gboolean    meta_window_is_remote (MetaWindow *window);
+
+META_EXPORT
 gboolean    meta_window_is_attached_dialog (MetaWindow *window);
+
+META_EXPORT
 const char *meta_window_get_mutter_hints (MetaWindow *window);
 
+META_EXPORT
 MetaFrameType meta_window_get_frame_type (MetaWindow *window);
 
+META_EXPORT
 cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window);
 
+META_EXPORT
 MetaWindow *meta_window_get_tile_match (MetaWindow *window);
 
+META_EXPORT
 void        meta_window_make_fullscreen    (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_unmake_fullscreen  (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_make_above         (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_unmake_above       (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_shade              (MetaWindow  *window,
                                             guint32      timestamp);
+
+META_EXPORT
 void        meta_window_unshade            (MetaWindow  *window,
                                             guint32      timestamp);
+
+META_EXPORT
 void        meta_window_stick              (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_unstick            (MetaWindow  *window);
 
+META_EXPORT
 void        meta_window_kill               (MetaWindow  *window);
+
+META_EXPORT
 void        meta_window_focus              (MetaWindow  *window,
                                             guint32      timestamp);
 
+META_EXPORT
 void        meta_window_check_alive        (MetaWindow  *window,
                                             guint32      timestamp);
 
+META_EXPORT
 void meta_window_get_work_area_current_monitor (MetaWindow    *window,
                                                 MetaRectangle *area);
+
+META_EXPORT
 void meta_window_get_work_area_for_monitor     (MetaWindow    *window,
                                                 int            which_monitor,
                                                 MetaRectangle *area);
+
+META_EXPORT
 void meta_window_get_work_area_all_monitors    (MetaWindow    *window,
                                                 MetaRectangle *area);
 
+META_EXPORT
 void meta_window_begin_grab_op (MetaWindow *window,
                                 MetaGrabOp  op,
                                 gboolean    frame_action,
                                 guint32     timestamp);
 
+META_EXPORT
 gboolean meta_window_can_maximize (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_can_minimize (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_can_shade (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_can_close (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_always_on_all_workspaces (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_above (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_allows_move (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_allows_resize (MetaWindow *window);
+
+META_EXPORT
 gboolean meta_window_is_client_decorated (MetaWindow *window);
 
+META_EXPORT
 gboolean meta_window_titlebar_is_onscreen    (MetaWindow *window);
+
+META_EXPORT
 void     meta_window_shove_titlebar_onscreen (MetaWindow *window);
 
+META_EXPORT
 uint64_t meta_window_get_id (MetaWindow *window);
 
+META_EXPORT
 MetaWindowClientType meta_window_get_client_type (MetaWindow *window);
 
 #endif
diff --git a/src/meta/workspace.h b/src/meta/workspace.h
index 18bf05d20..99aebee5d 100644
--- a/src/meta/workspace.h
+++ b/src/meta/workspace.h
@@ -33,24 +33,40 @@
 
 typedef struct _MetaWorkspaceClass   MetaWorkspaceClass;
 
+META_EXPORT
 GType meta_workspace_get_type (void);
 
+META_EXPORT
 int  meta_workspace_index (MetaWorkspace *workspace);
+
+META_EXPORT
 MetaDisplay *meta_workspace_get_display (MetaWorkspace *workspace);
+
+META_EXPORT
 GList* meta_workspace_list_windows (MetaWorkspace *workspace);
+
+META_EXPORT
 void meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
                                                int            which_monitor,
                                                MetaRectangle *area);
+
+META_EXPORT
 void meta_workspace_get_work_area_all_monitors (MetaWorkspace *workspace,
                                                 MetaRectangle *area);
+
+META_EXPORT
 void meta_workspace_activate (MetaWorkspace *workspace, guint32 timestamp);
+
+META_EXPORT
 void meta_workspace_activate_with_focus (MetaWorkspace *workspace,
                                          MetaWindow    *focus_this,
                                          guint32        timestamp);
 
+META_EXPORT
 void meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
                                         GSList        *struts);
 
+META_EXPORT
 MetaWorkspace* meta_workspace_get_neighbor (MetaWorkspace      *workspace,
                                             MetaMotionDirection direction);
 
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 7c0fe34d5..e7a00e4e6 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -28,7 +28,7 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <glib.h>
 
-#include "meta/common.h"
+#include "core/util-private.h"
 #include "meta/types.h"
 
 typedef struct _MetaUI MetaUI;
@@ -71,6 +71,8 @@ gboolean  meta_ui_window_should_not_cause_focus (Display *xdisplay,
 
 gboolean meta_ui_window_is_widget (MetaUI *ui,
                                    Window  xwindow);
+
+META_EXPORT_TEST
 gboolean meta_ui_window_is_dummy  (MetaUI *ui,
                                    Window  xwindow);
 
diff --git a/src/wayland/meta-wayland.h b/src/wayland/meta-wayland.h
index 0749e7980..2a0aa1140 100644
--- a/src/wayland/meta-wayland.h
+++ b/src/wayland/meta-wayland.h
@@ -24,50 +24,70 @@
 #define META_WAYLAND_H
 
 #include "clutter/clutter.h"
+#include "core/util-private.h"
 #include "meta/types.h"
 #include "wayland/meta-wayland-types.h"
 
+META_EXPORT_TEST
 void                    meta_wayland_override_display_name (const char *display_name);
 
+META_EXPORT_TEST
 void                    meta_wayland_pre_clutter_init           (void);
+META_EXPORT_TEST
 void                    meta_wayland_init                       (void);
+META_EXPORT_TEST
 void                    meta_wayland_finalize                   (void);
 
 /* We maintain a singleton MetaWaylandCompositor which can be got at via this
  * API after meta_wayland_init() has been called. */
+META_EXPORT_TEST
 MetaWaylandCompositor  *meta_wayland_compositor_get_default     (void);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_update          (MetaWaylandCompositor *compositor,
                                                                  const ClutterEvent    *event);
+META_EXPORT_TEST
 gboolean                meta_wayland_compositor_handle_event    (MetaWaylandCompositor *compositor,
                                                                  const ClutterEvent    *event);
+META_EXPORT_TEST
 void                    meta_wayland_compositor_update_key_state (MetaWaylandCompositor *compositor,
                                                                  char                  *key_vector,
                                                                   int                    key_vector_len,
                                                                   int                    offset);
+META_EXPORT_TEST
 void                    meta_wayland_compositor_repick          (MetaWaylandCompositor *compositor);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_set_input_focus (MetaWaylandCompositor *compositor,
                                                                  MetaWindow            *window);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_paint_finished  (MetaWaylandCompositor *compositor);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_destroy_frame_callbacks (MetaWaylandCompositor *compositor,
                                                                          MetaWaylandSurface    *surface);
 
+META_EXPORT_TEST
 const char             *meta_wayland_get_wayland_display_name   (MetaWaylandCompositor *compositor);
+META_EXPORT_TEST
 const char             *meta_wayland_get_xwayland_display_name  (MetaWaylandCompositor *compositor);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_restore_shortcuts      (MetaWaylandCompositor *compositor,
                                                                         ClutterInputDevice    *source);
+META_EXPORT_TEST
 gboolean                meta_wayland_compositor_is_shortcuts_inhibited (MetaWaylandCompositor *compositor,
                                                                         ClutterInputDevice    *source);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_flush_clients (MetaWaylandCompositor *compositor);
 
+META_EXPORT_TEST
 void                    meta_wayland_compositor_schedule_surface_association (MetaWaylandCompositor 
*compositor,
                                                                               int                    id,
                                                                               MetaWindow            *window);
+META_EXPORT_TEST
 void                    meta_wayland_compositor_notify_surface_id (MetaWaylandCompositor *compositor,
                                                                    int                    id,
                                                                    MetaWaylandSurface    *surface);
diff --git a/src/wayland/meta-xwayland.h b/src/wayland/meta-xwayland.h
index 0d120fee0..dac9c689f 100644
--- a/src/wayland/meta-xwayland.h
+++ b/src/wayland/meta-xwayland.h
@@ -27,9 +27,11 @@
 
 #include <glib.h>
 
+#include "core/util-private.h"
 #include "meta/types.h"
 #include "wayland/meta-wayland-types.h"
 
+META_EXPORT_TEST
 void
 meta_xwayland_override_display_number (int number);
 
diff --git a/src/x11/meta-x11-display-private.h b/src/x11/meta-x11-display-private.h
index e3382642f..7497f7512 100644
--- a/src/x11/meta-x11-display-private.h
+++ b/src/x11/meta-x11-display-private.h
@@ -184,6 +184,7 @@ void        meta_x11_display_unregister_sync_alarm (MetaX11Display *x11_display,
 gboolean meta_x11_display_process_barrier_xevent (MetaX11Display *x11_display,
                                                   XIEvent        *event);
 
+META_EXPORT
 void meta_x11_display_set_alarm_filter (MetaX11Display *x11_display,
                                         MetaAlarmFilter filter,
                                         gpointer        data);


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