MIRPLATFORM_11 {
 global:
  extern "C++" {
# The following symbols come from running a script over the generated docs. Vis:
# ../tools/process_doxygen_xml.py doc/xml/*.xml | grep "^mirplatform public" | sed "s/mirplatform public: /    /" | sort  
    mir::graphics::BufferBasic::BufferBasic*;
    mir::graphics::Buffer::Buffer*;
    mir::graphics::Buffer::id*;
    mir::graphics::Buffer::native_buffer_base*;
    mir::graphics::Buffer::native_buffer_handle*;
    mir::graphics::Buffer::pixel_format*;
    mir::graphics::Buffer::size*;
    mir::graphics::Buffer::stride*;
    mir::graphics::Buffer::write*;
    mir::graphics::Cursor::?Cursor*;
    mir::graphics::Cursor::Cursor*;
    mir::graphics::Cursor::hide*;
    mir::graphics::CursorImage::as_argb_8888*;
    mir::graphics::CursorImage::?CursorImage*;
    mir::graphics::CursorImage::CursorImage*;
    mir::graphics::CursorImage::hotspot*;
    mir::graphics::CursorImage::operator*;
    mir::graphics::CursorImage::size*;
    mir::graphics::Cursor::move_to*;
    mir::graphics::Cursor::operator*;
    mir::graphics::Cursor::show*;
    mir::graphics::DisplayBuffer::DisplayBuffer*;
    mir::graphics::DisplayBuffer::native_display_buffer*;
    mir::graphics::DisplayBuffer::operator*;
    mir::graphics::DisplayBuffer::orientation*;
    mir::graphics::DisplayBuffer::post_renderables_if_optimizable*;
    mir::graphics::DisplayBuffer::view_area*;
    mir::graphics::Display::configuration*;
    mir::graphics::DisplayConfiguration::DisplayConfiguration*;
    mir::graphics::DisplayConfiguration::for_each_card*;
    mir::graphics::DisplayConfiguration::for_each_output*;
    mir::graphics::DisplayConfiguration::operator*;
    mir::graphics::DisplayConfigurationOutput::extents*;
    mir::graphics::DisplayConfigurationOutput::valid*;
    mir::graphics::DisplayConfigurationPolicy::apply_to*;
    mir::graphics::DisplayConfigurationPolicy::?DisplayConfigurationPolicy*;
    mir::graphics::DisplayConfigurationPolicy::DisplayConfigurationPolicy*;
    mir::graphics::DisplayConfigurationPolicy::operator*;
    mir::graphics::DisplayConfiguration::valid*;
    mir::graphics::Display::configure*;
    mir::graphics::Display::create_gl_context*;
    mir::graphics::Display::create_hardware_cursor*;
    mir::graphics::Display::Display*;
    mir::graphics::Display::for_each_display_buffer*;
    mir::graphics::Display::pause*;
    mir::graphics::Display::register_configuration_change_handler*;
    mir::graphics::Display::register_pause_resume_handlers*;
    mir::graphics::Display::resume*;
    mir::graphics::EventHandlerRegister::?EventHandlerRegister*;
    mir::graphics::EventHandlerRegister::EventHandlerRegister*;
    mir::graphics::EventHandlerRegister::operator*;
    mir::graphics::EventHandlerRegister::register_fd_handler*;
    mir::graphics::EventHandlerRegister::register_signal_handler*;
    mir::graphics::EventHandlerRegister::unregister_fd_handler*;
    mir::graphics::GLConfig::depth_buffer_bits*;
    mir::graphics::GLConfig::?GLConfig*;
    mir::graphics::GLConfig::GLConfig*;
    mir::graphics::GLConfig::operator*;
    mir::graphics::GLConfig::stencil_buffer_bits*;
    mir::graphics::GLContext::?GLContext*;
    mir::graphics::GLContext::GLContext*;
    mir::graphics::GLContext::make_current*;
    mir::graphics::GLContext::operator*;
    mir::graphics::GLContext::release_current*;
    mir::graphics::GraphicBufferAllocator::alloc_buffer*;
    mir::graphics::GraphicBufferAllocator::?GraphicBufferAllocator*;
    mir::graphics::GraphicBufferAllocator::GraphicBufferAllocator*;
    mir::graphics::GraphicBufferAllocator::operator*;
    mir::graphics::GraphicBufferAllocator::supported_pixel_formats*;
    mir::graphics::module_for_device*;
    mir::graphics::operator*;
    mir::graphics::Platform::create_buffer_allocator*;
    mir::graphics::Platform::create_display*;
    mir::graphics::PlatformIpcOperations::connection_ipc_package*;
    mir::graphics::PlatformIpcOperations::operator*;
    mir::graphics::PlatformIpcOperations::pack_buffer*;
    mir::graphics::PlatformIpcOperations::?PlatformIpcOperations*;
    mir::graphics::PlatformIpcOperations::PlatformIpcOperations*;
    mir::graphics::PlatformIpcOperations::unpack_buffer*;
    mir::graphics::Platform::make_ipc_operations*;
    mir::graphics::Platform::operator*;
    mir::graphics::Platform::Platform*;
    mir::graphics::Renderable::alpha*;
    mir::graphics::Renderable::buffer*;
    mir::graphics::Renderable::buffers_ready_for_compositor*;
    mir::graphics::Renderable::id*;
    mir::graphics::Renderable::operator*;
    mir::graphics::Renderable::?Renderable*;
    mir::graphics::Renderable::Renderable*;
    mir::graphics::Renderable::screen_position*;
    mir::graphics::Renderable::shaped*;
    mir::graphics::Renderable::transformation*;
    mir::graphics::UserDisplayConfigurationOutput::extents*;
    mir::graphics::UserDisplayConfigurationOutput::UserDisplayConfigurationOutput*;
    mir::options::arw_server_socket_opt*;
# Why are server-only options here in libmirplatform?...
    mir::options::composite_delay_opt*; 
    mir::options::compositor_report_opt*;
    mir::options::Configuration::?Configuration*;
    mir::options::Configuration::Configuration*;
    mir::options::Configuration::operator*;
    mir::options::Configuration::the_options*;
    mir::options::connector_report_opt*;
    mir::options::DefaultConfiguration::add_options*;
    mir::options::DefaultConfiguration::?DefaultConfiguration*;
    mir::options::DefaultConfiguration::DefaultConfiguration*;
    mir::options::DefaultConfiguration::parse_arguments*;
    mir::options::DefaultConfiguration::parse_config_file*;
    mir::options::DefaultConfiguration::parse_environment*;
    mir::options::DefaultConfiguration::the_options*;
    mir::options::display_report_opt*;
    mir::options::debug_opt*;
    mir::options::nbuffers_opt*;
    mir::options::enable_input_opt*;
    mir::options::enable_key_repeat_opt*;
    mir::options::fatal_abort_opt*;
    mir::options::frontend_threads_opt*;
    mir::options::glog*;
    mir::options::glog_log_dir*;
    mir::options::glog_minloglevel*;
    mir::options::glog_stderrthreshold*;
    mir::options::platform_path*;
    mir::options::host_socket_opt*;
    mir::options::input_report_opt*;
    mir::options::legacy_input_report_opt*;
    mir::options::log_opt_value*;
    mir::options::lttng_opt_value*;
    mir::options::msg_processor_report_opt*;
    mir::options::name_opt*;
    mir::options::no_server_socket_opt*;
    mir::options::platform_input_lib*;
    mir::options::off_opt_value*;
    mir::options::offscreen_opt*;
    mir::options::Option::get*;
    mir::options::Option::is_set*;
    mir::options::Option::operator*;
    mir::options::Option::?Option*;
    mir::options::Option::Option*;
    mir::options::platform_graphics_lib*;
    mir::options::ProgramOption::get*;
    mir::options::ProgramOption::is_set*;
    mir::options::ProgramOption::parse_arguments*;
    mir::options::ProgramOption::parse_environment*;
    mir::options::ProgramOption::parse_file*;
    mir::options::ProgramOption::ProgramOption*;
    mir::options::ProgramOption::unparsed_command_line*;
    mir::options::prompt_socket_opt*;
    mir::options::scene_report_opt*;
    mir::options::server_socket_opt*;
    mir::options::session_mediator_report_opt*;
    mir::options::shared_library_prober_report_opt*;
    mir::options::shell_report_opt;
    mir::options::touchspots_opt*;
    non-virtual?thunk?to?mir::graphics::Cursor::?Cursor*;
    non-virtual?thunk?to?mir::graphics::CursorImage::?CursorImage*;
    non-virtual?thunk?to?mir::graphics::DisplayConfigurationPolicy::?DisplayConfigurationPolicy*;
    non-virtual?thunk?to?mir::graphics::DisplayConfiguration::valid*;
    non-virtual?thunk?to?mir::graphics::EventHandlerRegister::?EventHandlerRegister*;
    non-virtual?thunk?to?mir::graphics::GLConfig::?GLConfig*;
    non-virtual?thunk?to?mir::graphics::GLContext::?GLContext*;
    non-virtual?thunk?to?mir::graphics::GraphicBufferAllocator::?GraphicBufferAllocator*;
    non-virtual?thunk?to?mir::graphics::PlatformIpcOperations::?PlatformIpcOperations*;
    non-virtual?thunk?to?mir::graphics::Renderable::?Renderable*;
    non-virtual?thunk?to?mir::options::Configuration::?Configuration*;
    non-virtual?thunk?to?mir::options::DefaultConfiguration::?DefaultConfiguration*;
    non-virtual?thunk?to?mir::options::DefaultConfiguration::parse_arguments*;
    non-virtual?thunk?to?mir::options::DefaultConfiguration::parse_config_file*;
    non-virtual?thunk?to?mir::options::DefaultConfiguration::parse_environment*;
    non-virtual?thunk?to?mir::options::DefaultConfiguration::the_options*;
    non-virtual?thunk?to?mir::options::Option::?Option*;
    non-virtual?thunk?to?mir::options::ProgramOption::get*;
    non-virtual?thunk?to?mir::options::ProgramOption::is_set*;
    typeinfo?for?mir::AbnormalExit;
    typeinfo?for?mir::FatalErrorStrategy;
    typeinfo?for?mir::graphics::Buffer;
    typeinfo?for?mir::graphics::BufferBasic;
    typeinfo?for?mir::graphics::BufferProperties;
    typeinfo?for?mir::graphics::Cursor;
    typeinfo?for?mir::graphics::CursorImage;
    typeinfo?for?mir::graphics::Display;
    typeinfo?for?mir::graphics::DisplayBuffer;
    typeinfo?for?mir::graphics::DisplayConfiguration;
    typeinfo?for?mir::graphics::DisplayConfigurationCard;
    typeinfo?for?mir::graphics::DisplayConfigurationMode;
    typeinfo?for?mir::graphics::DisplayConfigurationOutput;
    typeinfo?for?mir::graphics::DisplayConfigurationPolicy;
    typeinfo?for?mir::graphics::EventHandlerRegister;
    typeinfo?for?mir::graphics::GLConfig;
    typeinfo?for?mir::graphics::GLContext;
    typeinfo?for?mir::graphics::GraphicBufferAllocator;
    typeinfo?for?mir::graphics::Platform;
    typeinfo?for?mir::graphics::PlatformIpcOperations;
    typeinfo?for?mir::graphics::PlatformIPCPackage;
    typeinfo?for?mir::graphics::Renderable;
    typeinfo?for?mir::graphics::UserDisplayConfigurationOutput;
    typeinfo?for?mir::options::Configuration;
    typeinfo?for?mir::options::DefaultConfiguration;
    typeinfo?for?mir::options::Option;
    typeinfo?for?mir::options::ProgramOption;
    vtable?for?mir::AbnormalExit;
    vtable?for?mir::FatalErrorStrategy;
    vtable?for?mir::graphics::Buffer;
    vtable?for?mir::graphics::BufferBasic;
    vtable?for?mir::graphics::BufferProperties;
    vtable?for?mir::graphics::Cursor;
    vtable?for?mir::graphics::CursorImage;
    vtable?for?mir::graphics::Display;
    vtable?for?mir::graphics::DisplayBuffer;
    vtable?for?mir::graphics::DisplayConfiguration;
    vtable?for?mir::graphics::DisplayConfigurationCard;
    vtable?for?mir::graphics::DisplayConfigurationMode;
    vtable?for?mir::graphics::DisplayConfigurationOutput;
    vtable?for?mir::graphics::DisplayConfigurationPolicy;
    vtable?for?mir::graphics::EventHandlerRegister;
    vtable?for?mir::graphics::GLConfig;
    vtable?for?mir::graphics::GLContext;
    vtable?for?mir::graphics::GraphicBufferAllocator;
    vtable?for?mir::graphics::Platform;
    vtable?for?mir::graphics::PlatformIpcOperations;
    vtable?for?mir::graphics::PlatformIPCPackage;
    vtable?for?mir::graphics::Renderable;
    vtable?for?mir::graphics::UserDisplayConfigurationOutput;
    vtable?for?mir::options::Configuration;
    vtable?for?mir::options::DefaultConfiguration;
    vtable?for?mir::options::Option;
    vtable?for?mir::options::ProgramOption;
    
    # These are "private" (declared in src/include) but are used by libmirserver.
    # They are also likely to be needed by any 3rd party "graphics platform" 
    # implementation. They should probably become public at some stage.
    mir::graphics::alpha_channel_depth*;
    mir::graphics::blue_channel_depth*;
    mir::graphics::contains_alpha*;
    mir::graphics::EGLExtensions::EGLExtensions*;
    mir::graphics::EGLContextStore::?EGLContextStore*;
    mir::graphics::EGLContextStore::EGLContextStore*;
    mir::graphics::EGLContextStore::EGLContextStore*;
    mir::graphics::EGLContextStore::operator*;
    mir::graphics::EGLSurfaceStore::?EGLSurfaceStore*;
    mir::graphics::EGLSurfaceStore::EGLSurfaceStore*;
    mir::graphics::EGLSurfaceStore::EGLSurfaceStore*;
    mir::graphics::EGLSurfaceStore::operator*;
    mir::graphics::egl_category*;
    mir::graphics::green_channel_depth*;
    mir::graphics::OverlappingOutputGroup::bounding_rectangle*;
    mir::graphics::OverlappingOutputGroup::for_each_output*;
    mir::graphics::OverlappingOutputGrouping::for_each_group*;
    mir::graphics::OverlappingOutputGrouping::OverlappingOutputGrouping*;
    mir::graphics::red_channel_depth*;
    mir::graphics::tessellate_renderable_into_rectangle*;
    mir::udev::Context::?Context*;
    mir::udev::Context::Context*;
    mir::udev::Enumerator::begin*;
    mir::udev::Enumerator::end*;
    mir::udev::Enumerator::?Enumerator*;
    mir::udev::Enumerator::Enumerator*;
    mir::udev::Enumerator::iterator::operator*;
    mir::udev::Enumerator::match_parent*;
    mir::udev::Enumerator::match_subsystem*;
    mir::udev::Enumerator::match_sysname*;
    mir::udev::Enumerator::scan_devices*;
    mir::udev::Monitor::enable*;
    mir::udev::Monitor::fd*;
    mir::udev::Monitor::filter_by_subsystem*;
    mir::udev::Monitor::?Monitor*;
    mir::udev::Monitor::Monitor*;
    mir::udev::Monitor::process_events*;
    mir::udev::operator*;

    # Android input platform symbols
    android::getAbsAxisUsage*;
    android::getInputDeviceConfigurationFilePathByDeviceIdentifier*;
    android::isEligibleBuiltInKeyboard*;
    __android_log_assert;
    __android_log_print;
  };
 local: *;
};

MIR_PLATFORM_0.21 {  # New symbols in Mir 0.21
 global:
  extern "C++" {
    mir::udev::Context::ctx*;
  };
} MIRPLATFORM_11;
