MIR_COMMON_5 {
 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 "^mircommon public" | sed "s/mircommon public: /    /" | sort  
    mir::detail::RefCountedLibrary::operator*;
    mir::detail::RefCountedLibrary::?RefCountedLibrary*;
    mir::detail::RefCountedLibrary::RefCountedLibrary*;
    mir::dispatch::ActionQueue::ActionQueue*;
    mir::dispatch::ActionQueue::?ActionQueue*;
    mir::dispatch::ActionQueue::watch_fd*;
    mir::dispatch::ActionQueue::dispatch*;
    mir::dispatch::ActionQueue::relevant_events*;
    mir::dispatch::ActionQueue::enqueue*;
    mir::dispatch::Dispatchable::?Dispatchable*;
    mir::dispatch::Dispatchable::Dispatchable*;
    mir::dispatch::Dispatchable::operator*;
    mir::dispatch::MultiplexingDispatchable::add_watch*;
    mir::dispatch::MultiplexingDispatchable::dispatch*;
    mir::dispatch::MultiplexingDispatchable::?MultiplexingDispatchable*;
    mir::dispatch::MultiplexingDispatchable::MultiplexingDispatchable*;
    mir::dispatch::MultiplexingDispatchable::operator*;
    mir::dispatch::MultiplexingDispatchable::relevant_events*;
    mir::dispatch::MultiplexingDispatchable::remove_watch*;
    mir::dispatch::MultiplexingDispatchable::watch_fd*;
    mir::dispatch::ThreadedDispatcher::ThreadedDispatcher*;
    mir::dispatch::ThreadedDispatcher::?ThreadedDispatcher*;
    mir::dispatch::ThreadedDispatcher::add_thread*;
    mir::dispatch::ThreadedDispatcher::remove_thread*;
    mir::fatal_error*;
    mir::fatal_error_abort*;
    mir::fatal_error_except*;
    mir::Fd::Fd*;
    mir::Fd::invalid*;
    mir::Fd::operator*;
    mir::geometry::Displacement::Displacement*;
    mir::geometry::Displacement::operator*;
    mir::geometry::Length::Length*;
    mir::geometry::Length::operator*;
    mir::geometry::operator*;
    mir::geometry::Point::operator*;
    mir::geometry::Point::Point*;
    mir::geometry::Rectangle::bottom_left*;
    mir::geometry::Rectangle::bottom_right*;
    mir::geometry::Rectangle::contains*;
    mir::geometry::Rectangle::intersection_with*;
    mir::geometry::Rectangle::overlaps*;
    mir::geometry::Rectangle::Rectangle*;
    mir::geometry::Rectangles::add*;
    mir::geometry::Rectangles::begin*;
    mir::geometry::Rectangles::bounding_rectangle*;
    mir::geometry::Rectangles::clear*;
    mir::geometry::Rectangles::confine*;
    mir::geometry::Rectangles::end*;
    mir::geometry::Rectangles::operator*;
    mir::geometry::Rectangles::Rectangles*;
    mir::geometry::Rectangles::remove*;
    mir::geometry::Rectangles::size*;
    mir::geometry::Rectangle::top_right*;
    mir::geometry::Size::operator*;
    mir::geometry::Size::Size*;
    mir::log*;
    mir::logging::log*;
    mir::logging::Logger::?Logger*;
    mir::logging::Logger::Logger*;
    mir::logging::Logger::operator*;
    mir::logging::set_logger*;
    mir::SharedLibrary::load_symbol*;
    mir::SharedLibrary::?SharedLibrary*;
    mir::SharedLibrary::SharedLibrary*;
    non-virtual?thunk?to?mir::dispatch::ActionQueue::?ActionQueue*;
    non-virtual?thunk?to?mir::dispatch::Dispatchable::?Dispatchable*;
    non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::dispatch*;
    non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::?MultiplexingDispatchable*;
    non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::relevant_events*;
    non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::watch_fd*;
    non-virtual?thunk?to?mir::logging::Logger::?Logger*;
    typeinfo?for?MirBufferPackage;
    typeinfo?for?mir::detail::RefCountedLibrary;
    typeinfo?for?mir::dispatch::ActionQueue;
    typeinfo?for?mir::dispatch::Dispatchable;
    typeinfo?for?mir::dispatch::MultiplexingDispatchable;
    typeinfo?for?mir::dispatch::ThreadedDispatcher;
    typeinfo?for?mir::Fd;
    typeinfo?for?mir::geometry::Displacement;
    typeinfo?for?mir::geometry::Length;
    typeinfo?for?mir::geometry::Point;
    typeinfo?for?mir::geometry::Rectangle;
    typeinfo?for?mir::geometry::Rectangles;
    typeinfo?for?mir::geometry::Size;
    typeinfo?for?mir::IntOwnedFd;
    typeinfo?for?mir::logging::Logger;
    vtable?for?MirBufferPackage;
    vtable?for?mir::detail::RefCountedLibrary;
    vtable?for?mir::dispatch::ActionQueue;
    vtable?for?mir::dispatch::Dispatchable;
    vtable?for?mir::dispatch::MultiplexingDispatchable;
    vtable?for?mir::dispatch::ThreadedDispatcher;
    vtable?for?mir::Fd;
    vtable?for?mir::geometry::Displacement;
    vtable?for?mir::geometry::Length;
    vtable?for?mir::geometry::Point;
    vtable?for?mir::geometry::Rectangle;
    vtable?for?mir::geometry::Rectangles;
    vtable?for?mir::geometry::Size;
    vtable?for?mir::IntOwnedFd;
    vtable?for?mir::logging::Logger;
    
    # These symbols are supposed to be "private" (they're under src/include)
    # but they are used by libmirplatform, libmirclient or libmirserver
    mir::default_server_socket;
    mir::libraries_for_path*;
    mir::logging::input_timestamp*;
    mir::logging::log*;
    mir::logging::SharedLibraryProberReport::SharedLibraryProberReport*;
    mir::RecursiveReadLock::?RecursiveReadLock*;
    mir::RecursiveReadLock::RecursiveReadLock*;
    mir::RecursiveReadWriteMutex::read_lock*;
    mir::RecursiveReadWriteMutex::read_unlock*;
    mir::RecursiveReadWriteMutex::write_lock*;
    mir::RecursiveReadWriteMutex::write_unlock*;
    mir::report::lttng::TracepointProvider::?TracepointProvider*;
    mir::report::lttng::TracepointProvider::TracepointProvider*;
    mir::set_thread_name*;
    vtable?for?mir::logging::DumbConsoleLogger;
    vtable?for?mir::time::SteadyClock;
    vtable?for?mir::time::Clock;

    mir::send_fds*;

    mir::fd_reception_error::fd_reception_error*;
    mir::receive_data*;
    mir::socket_error::socket_error*;
    mir::socket_error_is_transient*;
    mir::socket_disconnected_error*;
    typeinfo?for?mir::fd_reception_error;
    typeinfo?for?mir::socket_error;
    typeinfo?for?mir::socket_disconnected_error;

    mir::SignalBlocker::SignalBlocker*;
    mir::SignalBlocker::?SignalBlocker*;
  };
};

MIR_COMMON_5.1 {  # New functions in Mir 0.16
 global:
    __android_log_assert;
    __android_log_print;
    systemTime;
    toMillisecondTimeoutDelay;
    extern "C++" {
      android::InputChannel::InputChannel*;
      android::InputChannel::openInputFdPair*;
      android::InputConsumer::consume*;
      android::InputConsumer::hasDeferredEvent*;
      android::InputConsumer::hasPendingBatch*;
      android::InputConsumer::?InputConsumer*;
      android::InputConsumer::InputConsumer*;
      android::InputConsumer::sendFinishedSignal*;
      android::InputPublisher::?InputPublisher*;
      android::InputPublisher::InputPublisher*;
      android::InputPublisher::publishKeyEvent*;
      android::InputPublisher::publishMotionEvent*;
      android::InputPublisher::receiveFinishedSignal*;
      android::IntSet::contains*;
      android::IntSet::indexOf*;
      android::IntSet::?IntSet*;
      android::IntSet::IntSet*;
      android::IntSet::operator*;
      android::IntSet::remove*;
      android::KeyEvent::initialize*;
      android::MotionEvent::getAxisValue*;
      android::MotionEvent::getAxisValue*;
      android::MotionEvent::getHistoricalAxisValue*;
      android::MotionEvent::getRawAxisValue*;
      android::MotionEvent::getRawAxisValue*;
      android::PointerCoords::copyFrom*;
      android::PointerCoords::getAxisValue*;
      android::PointerCoords::operator*;
      android::PointerCoords::setAxisValue*;
      android::PointerProperties::copyFrom*;
      android::PointerProperties::operator*;
      android::RefBase::decStrong*;
      android::RefBase::incStrong*;
      android::RefBase::onFirstRef*;
      android::RefBase::onIncStrongAttempted*;
      android::RefBase::onLastStrongRef*;
      android::RefBase::onLastWeakRef*;
      android::RefBase::?RefBase*;
      android::RefBase::RefBase*;
      mir::write_to_log;
      typeinfo?for?android::RefBase;
      vtable?for?android::IntSet;
      mir::dispatch::ReadableFd::ReadableFd*;
      mir::dispatch::ReadableFd::?ReadableFd*;
      mir::dispatch::ReadableFd::watch_fd*;
      mir::dispatch::ReadableFd::dispatch*;
      mir::dispatch::ReadableFd::relevant_events*;
      mir::logger::Logger::log*;
    };
  local: *;
} MIR_COMMON_5;

MIR_COMMON_5v19 { # New functions in Mir 0.19.0
  global:
    extern "C++" {
      typeinfo?for?mir::logging::SharedLibraryProberReport;
      typeinfo?for?mir::time::SteadyClock;
      typeinfo?for?android::InputChannel;
      typeinfo?for?mir::logging::DumbConsoleLogger;
      mir::detail::libname_impl*;
    };
} MIR_COMMON_5.1;

MIR_COMMON_0.19.1 { # New functions in Mir 0.19.1
  global:
    extern "C++" {
      mir::select_libraries_for_path*;
    };
} MIR_COMMON_5v19;  # <- Note Mir 0.19.0 used the wrong syntax
