[mutter] meta: Hide libmutter symbols by default and selectively export them



commit e02fef8e2f1b71214cf8a68fe2a5384f4e0d8cd4
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.
    The TEST version is meant to be used to flag symbols that are only used
    internally by mutter tests, but that should not be considered public API.
    
    This allows us to be more precise in selecting what is exported and what is
    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 b84e38cc3..760de54c4 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]