Mir

Merge lp:~alan-griffiths/mir/fix-1415321 into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alberto Aguirre
Approved revision: no longer in the source branch.
Merged at revision: 2408
Proposed branch: lp:~alan-griffiths/mir/fix-1415321
Merge into: lp:mir
Diff against target: 1010 lines (+300/-258)
28 files modified
debian/changelog (+1/-1)
debian/control (+2/-2)
debian/libmirclient-dev.install (+1/-0)
debian/libmircommon4.install (+1/-1)
examples/CMakeLists.txt (+10/-2)
include/client/mir_toolkit/cursors.h (+6/-0)
include/client/mir_toolkit/mir_client_library.h (+1/-0)
include/common/mir_toolkit/common.h (+0/-2)
src/client/CMakeLists.txt (+13/-2)
src/client/events/CMakeLists.txt (+2/-2)
src/client/input/CMakeLists.txt (+7/-13)
src/client/input/input_event.cpp (+1/-1)
src/client/mir_cursor_api.cpp (+17/-15)
src/client/symbols-debug.map (+0/-8)
src/client/symbols.map (+164/-24)
src/common/CMakeLists.txt (+2/-7)
src/common/sharedlibrary/CMakeLists.txt (+4/-1)
src/common/symbols.map (+48/-163)
src/common/udev/CMakeLists.txt (+8/-0)
src/include/common/mir/logging/input_timestamp.h (+1/-5)
src/server/CMakeLists.txt (+3/-1)
src/server/graphics/nested/CMakeLists.txt (+0/-4)
src/server/input/default_configuration.cpp (+2/-0)
tests/integration-tests/CMakeLists.txt (+1/-2)
tests/unit-tests/CMakeLists.txt (+2/-1)
tests/unit-tests/client/input/test_android_input_receiver.cpp (+1/-1)
tests/unit-tests/input/test_cursor_controller.cpp (+1/-0)
tests/unit-tests/input/test_xcursor_loader.cpp (+1/-0)
To merge this branch: bzr merge lp:~alan-griffiths/mir/fix-1415321
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Kevin DuBois (community) Approve
Daniel van Vugt Abstain
Alberto Aguirre (community) Approve
Chris Halse Rogers Abstain
Review via email: mp+253186@code.launchpad.net

This proposal supersedes a proposal from 2015-03-16.

Commit message

common, client: move client library code into libmirclient

Description of the change

common, client: move client library code into libmirclient

This version has reflects a preexisting problem that the MIR_CLIENT_8 stanza contained wildcards leading to previous releases incorrectly publishing new entry points as @MIR_CLIENT_8. (Which is likely what leads to lp:1432998)

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote : Posted in a previous version of this proposal

"dpkg: error processing archive /home/phablet/archive/./libmirclient-dev_0.13.0bzr2404pkg0vivid1587+autopilot0_armhf.deb (--unpack):
 trying to overwrite '/usr/include/mirclient/mir_toolkit/debug/surface.h', which is also in package libmirclient-debug-extension-dev:armhf 0.13.0bzr2404pkg0vivid1587+autopilot0"

Rats! Those debian/* files are out to get me!

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote : Posted in a previous version of this proposal

lgtm, explicitly naming the functions in the mirclient map seems better.

review: Approve
Revision history for this message
Chris Halse Rogers (raof) wrote : Posted in a previous version of this proposal

You don't need to bump the SONAME of mirclient-debug-extension.

Like kdub, I like explicitly listing the symbols for mircilent.

I don't think you need to bump mirclient SONAME? The only loss I can see is the symbols exposed purely for the tests and PrivateProtobuf, neither of which are public. abi-compliance-checker will complain, but will be wrong in this case.

I'm not wild about symbols shared between the server and the client being in mirclient - the event builders and the cursor names are used in both. Why shouldn't they be in mircommon?

review: Needs Information
Revision history for this message
Daniel van Vugt (vanvugt) wrote : Posted in a previous version of this proposal

(1) This is a big deal:
   34 -Package: libmirclient8
   35 +Package: libmirclient9
We need to discuss this a bit (mir-devel?), as it will require a bunch of packages in vivid to be rebuilt that have never needed rebuilding before. Not your fault. This is probably unavoidable since the bug got released with 0.11.0.

Given we haven't broken the COMMON ABI in a long time, we can afford to wait and not fix the bug until we're ready for a client ABI bump. Maybe resubmit first thing after vivid?...
[Resubmit]

(2) The regression test needs to be enabled in examples/CMakeLists.txt:
   # FIXME: Bug not fixed yet.
   if (MIR_ENABLE_TESTS AND MIR_TEST_CLIENT_ABI)
     # Regression tests for LP: #1415321
[Needs Fixing]

review: Needs Resubmitting
Revision history for this message
Alan Griffiths (alan-griffiths) wrote : Posted in a previous version of this proposal

> (2) The regression test needs to be enabled in examples/CMakeLists.txt:
> # FIXME: Bug not fixed yet.
> if (MIR_ENABLE_TESTS AND MIR_TEST_CLIENT_ABI)
> # Regression tests for LP: #1415321
> [Needs Fixing]

Oddly this fails with clang. E.g.

$ objdump -p bin/.mir_demo_client_basic-uninstalled | grep NEEDED | grep libmir | grep -v libmirclient
  NEEDED libmircommon.so.4
  NEEDED libmirprotobuf.so.0

It looks as though the clang linker creates empty entries for these in the .dynstr section:

$ readelf --string-dump=.dynstr bin/.mir_demo_client_basic-uninstalled

String dump of section '.dynstr':
  [ 1] libmirclient.so.9
  [ 13] mir_buffer_stream_swap_buffers_sync
  [ 37] mir_surface_create
  [ 4a] mir_surface_get_buffer_stream
  [ 68] mir_surface_get_error_message
  [ 86] mir_connection_get_error_message
  [ a7] mir_connection_release
  [ be] mir_surface_spec_release
  [ d7] _Jv_RegisterClasses
  [ eb] mir_connection_is_valid
  [ 103] mir_connect
  [ 10f] mir_wait_for
  [ 11c] mir_surface_release
  [ 130] mir_surface_spec_set_name
  [ 14a] mir_connection_get_available_surface_formats
  [ 177] mir_buffer_stream_get_current_buffer
  [ 19c] mir_connection_get_platform
  [ 1b8] _ITM_deregisterTMCloneTable
  [ 1d4] mir_surface_is_valid
  [ 1e9] __gmon_start__
  [ 1f8] mir_buffer_stream_get_platform_type
  [ 21c] mir_connection_create_spec_for_normal_surface
  [ 24a] _ITM_registerTMCloneTable
  [ 264] libboost_date_time.so.1.55.0
  [ 281] libboost_system.so.1.55.0
  [ 29b] libboost_program_options.so.1.55.0
  [ 2be] libboost_filesystem.so.1.55.0
  [ 2dc] libprotobuf.so.9
  [ 2ed] libxkbcommon.so.0
  [ 2ff] libdl.so.2
  [ 30a] libmircommon.so.4
  [ 31c] libudev.so.1
  [ 329] libmirprotobuf.so.0
  [ 33d] libstdc++.so.6
  [ 34c] libm.so.6
  [ 356] libgcc_s.so.1
  [ 364] libpthread.so.0
  [ 374] libc.so.6
  [ 37e] puts
  [ 383] __assert_fail
  [ 391] getopt
  [ 398] optarg
  [ 39f] stderr
  [ 3a6] atoi
  [ 3ab] fprintf
  [ 3b3] opterr
  [ 3ba] strcmp
  [ 3c1] __libc_start_main
  [ 3d3] _edata
  [ 3da] __bss_start
  [ 3e6] _end
  [ 3eb] _IO_stdin_used
  [ 3fa] __data_start
  [ 407] __libc_csu_init
  [ 417] __libc_csu_fini
  [ 427] demo_client
  [ 433] GLIBC_2.2.5
  [ 43f] MIR_CLIENT_9

Revision history for this message
Alan Griffiths (alan-griffiths) wrote : Posted in a previous version of this proposal

> I'm not wild about symbols shared between the server and the client being in
> mirclient - the event builders and the cursor names are used in both. Why
> shouldn't they be in mircommon?

libmircommon is "common" between by libmirplatform, libmirclient and libmirserver - it should contain symbols that are used by all three. (There's a follow-up MP that removes some symbols used only by libmirplatform and libmirserver.)

libmirclient is used by libmirserver so why shouldn't it contain symbols shared with the latter?

Practically, the mir_toolkit/event/event.h header obviously belongs in client and is a dependency of the builders so splitting those out into libmircommon would involve some rework.

Revision history for this message
Alan Griffiths (alan-griffiths) wrote : Posted in a previous version of this proposal

> You don't need to bump the SONAME of mirclient-debug-extension.
...
> I don't think you need to bump mirclient SONAME? The only loss I can see is
> the symbols exposed purely for the tests and PrivateProtobuf, neither of which
> are public. abi-compliance-checker will complain, but will be wrong in this
> case.

I thought that rewriting the symbol maps as I have would require the SONAME bump? As xxx@MIR_CLIENT_8 etc won't resolve?

Am I just wrong or is there an alternative incantation?

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote : Posted in a previous version of this proposal

>> You don't need to bump the SONAME of mirclient-debug-extension.
...
>> I don't think you need to bump mirclient SONAME? The only loss I can see is
>> the symbols exposed purely for the tests and PrivateProtobuf, neither of which
>> are public. abi-compliance-checker will complain, but will be wrong in this
>> case.

> I thought that rewriting the symbol maps as I have would require the SONAME bump? As xxx@MIR_CLIENT_8 etc won't resolve?

Rewriting the symbol maps as you had done *would* require the SONAME bump, but as you've now listed all the xxx@MIR_CLIENT_8 symbols in the MIR_CLIENT_8 block they'll all resolve correctly (other than the ones we've always said are private).

Needs fixing: You don't need to postfix all the C symbols with “*”; we do that for the C++ symbols because the parameter signature is a part of the function name in C++. That's obviously not relevant for C symbols, and is potentially dangerous if one of our functions ends up being named a prefix of another one.

Needs fixing: The changelog should no longer document a mirclient ABI bump :)

> libmircommon is "common" between by libmirplatform, libmirclient and libmirserver - it should contain symbols that > are used by all three. (There's a follow-up MP that removes some symbols used only by libmirplatform and
> libmirserver.)

I'm not sure why that is the definition of mircommon; I don't see why symbols shared by mirclient and mirserver shouldn't be in there.

> libmirclient is used by libmirserver so why shouldn't it contain symbols shared with the latter?

Two reasons:
1) I'd ideally like libmirclient to export only a C ABI,
2) I expect in the not too distant future that libmirserver will *not* depend on libmirclient; that it currently does is a strange arrangement forced on us by the nested platform not being loadable.

While I agree it makes sense for symbols shared only between mirserver and mirplatform to be in mirplatform, this is because mirplatform exists only to provide infrastructure for mirserver components. mirclient and mirserver should both be top-level objects.

I won't block on the somewhat philosophial issue of mirserver → mirclient dependency.

review: Needs Fixing
Revision history for this message
Daniel van Vugt (vanvugt) wrote : Posted in a previous version of this proposal

(3) Changing the versions of old-ish symbols from MIR_CLIENT_8 to MIR_CLIENT_8.x I think is an ABI break that will break some existing downstreams. :(

446 +MIR_CLIENT_8.4 {
447 + global:
448 + mir_default_cursor_name;
449 + mir_disabled_cursor_name;
450 + mir_arrow_cursor_name;
451 + mir_busy_cursor_name;
452 + mir_caret_cursor_name;
453 + mir_pointing_hand_cursor_name;
454 + mir_open_hand_cursor_name;
455 + mir_closed_hand_cursor_name;
456 + mir_horizontal_resize_cursor_name;
457 + mir_vertical_resize_cursor_name;
458 + mir_diagonal_resize_bottom_to_top_cursor_name;
459 + mir_diagonal_resize_top_to_bottom_cursor_name;
460 + mir_omnidirectional_resize_cursor_name;
461 + mir_vsplit_resize_cursor_name;
462 + mir_hsplit_resize_cursor_name;
463 +} MIR_CLIENT_8.3;
464 +
465 +MIR_CLIENT_8.5 {
466 + global:
467 + mir_event_get_close_surface_event*;
468 + mir_event_get_input_event*;
469 + mir_event_get_keymap_event*;

(4) Yeah those new wildcards just add a little bit of risk, but no value.

Looks like too much risk of breaking the client ABI still. I vote just resubmit in a simpler form (client ABI 9) after vivid is finalized.

review: Needs Resubmitting
Revision history for this message
Alan Griffiths (alan-griffiths) wrote : Posted in a previous version of this proposal

> (3) Changing the versions of old-ish symbols from MIR_CLIENT_8 to
> MIR_CLIENT_8.x I think is an ABI break that will break some existing
> downstreams. :(

Yeah, looks like that stopped the CI mako booting.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

I worked a bit on clarifying some of the nested/offscreen interfaces internally, but stopped short of splitting out a new .so (mostly so we don't have the maintenence burden of a new .so, and a new public distinction between "host" (android/mesa) and "guest" (nested/offscreen) "platforms", that only provide a display.). I think it is cleaner if mirclient only exports a c abi too, but I don't think this solution makes the dependency chain any more or less safe than the current status quo. I guess abstain for some more discussion on the MP.

review: Abstain
Revision history for this message
Chris Halse Rogers (raof) wrote :

Still not wild on deliberately exporting C++ symobls from mirclient, and not wild about exporting implementation details from mirclient.

I don't think this is the right way to fix the bug, but I don't particularly feel like fixing it the right way myself at the moment, and this isn't going to make it any harder should I later choose to :).

review: Abstain
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

ABI break: A bunch of symbols have changed version stanzas:

447 MIR_CLIENT_8.2 {
448 - global:
449 - mir_surface_set_preferred_orientation;
450 - mir_surface_get_preferred_orientation;
451 - mir_surface_spec_set_preferred_orientation;
452 } MIR_CLIENT_8.1;
453
454 MIR_CLIENT_8.3 {
455 - global:
456 - mir_connection_create_spec_for_menu;
457 - mir_connection_create_spec_for_tooltip;
458 - mir_connection_create_spec_for_dialog;
459 + global:
460 mir_connection_platform_operation;
461 } MIR_CLIENT_8.2;

(and beyond in the new stanzas 8.4, 8.5)

As it seems we have to break the client ABI regardless, I think the most sensible solution is wait till post-vivid and lump everything into MIR_CLIENT_9.

review: Needs Resubmitting
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> ABI break: A bunch of symbols have changed version stanzas:

Nope.

"Note that the script is read top to bottom; wildcards are greedily bound when first encountered, so to avoid surprises you should only have a wildcard in the final stanza."
 - http://unity.ubuntu.com/mir/dso_versioning_guide.html

FWIW That's the surprise I had in -r 2407 (which did cause an ABI break that stopped the CI makos booting).

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

OK. I accept that it would be a reasonable goal to make the symbols from libmirclient C only.

But the existing script also mentioned some internal C++ symbols so I don't feel that blocks this MP which is an improvement on the status quo.

Revision history for this message
Alberto Aguirre (albaguirre) wrote :

So it looks like we missed versioning some symbols correctly in trunk/devel (like mir_connection_create_spec_for_input_method, mir_connection_create_spec_for_modal_dialog) for example

http://pastebin.ubuntu.com/10621901/

However it does look like the functions mentioned in the versioned stanzas are indeed versioned correctly:
http://pastebin.ubuntu.com/10622070/
http://pastebin.ubuntu.com/10622077/
http://pastebin.ubuntu.com/10622081/

So we should at least keep those in their respective stanzas.

Regarding exposing C++ symbols and implementation details - that is a pre-existing issue so I would consider that outside the scope of this MP.

@Chris:
>I don't think this is the right way to fix the bug, but I don't particularly feel like fixing >it the right way myself at the moment

Why not? The alternative I see is replicating symbols by wrapping them in the client and versioning them under a MIR_CLIENT_8.x stanza. I guess the advantage there is server code or other places that need them can just link to libmircommon instead of libmirclient.

review: Needs Fixing
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> So it looks like we missed versioning some symbols correctly in trunk/devel
> (like mir_connection_create_spec_for_input_method,
> mir_connection_create_spec_for_modal_dialog) for example
>
> http://pastebin.ubuntu.com/10621901/
>
> However it does look like the functions mentioned in the versioned stanzas are
> indeed versioned correctly:
> http://pastebin.ubuntu.com/10622070/
> http://pastebin.ubuntu.com/10622077/
> http://pastebin.ubuntu.com/10622081/

OK I'll copy the stanzas from the released libs

Revision history for this message
Alberto Aguirre (albaguirre) wrote :

LGTM.

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Looks like we might be getting closer to something ABI safe. Haven't re-examined in detail.
We really need automation to take the guesswork out... :)

review: Abstain
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Looking for a way to retrieve the upstream tarball
> Using apt to look for the upstream tarball.
> apt could not find the needed tarball.
> Trying to use get-packaged-orig-source to retrieve needed tarball.
> dh get-packaged-orig-source --parallel --fail-missing
> sh: 1: arm-linux-gnueabihf-gcc-4.9: not found
> dpkg-architecture: warning: couldn't determine gcc system type, falling back to default (native compilation)
> sh: 1: arm-linux-gnueabihf-gcc-4.9: not found

I don't this change could cause this

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

I keep flip-flopping in my head over this MP between abstain (for mirclient having c++ abi, and the current status quo) and approve... It seems like a step toward better abi control though, so I guess approve wins out

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Alberto Aguirre (albaguirre) wrote :

make abi-check-mirclient reports no compatibility issues with mir/ubuntu

Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2015-03-06 03:52:41 +0000
3+++ debian/changelog 2015-03-19 10:32:29 +0000
4@@ -8,7 +8,7 @@
5 . TODO: mention more enhancements
6 - ABI summary: Servers need rebuilding, but clients do not;
7 . Mirclient ABI unchanged at 8
8- . Mircommon ABI unchanged at 3
9+ . Mircommon ABI bumped to 4
10 . Mirplatform ABI bumped to 7
11 . Mirserver ABI bumped to 31 (TODO 30 is in series 0.12)
12 - Bug fixes:
13
14=== modified file 'debian/control'
15--- debian/control 2015-03-12 03:19:52 +0000
16+++ debian/control 2015-03-19 10:32:29 +0000
17@@ -95,7 +95,7 @@
18 Architecture: i386 amd64 armhf arm64
19 Multi-Arch: same
20 Pre-Depends: ${misc:Pre-Depends}
21-Depends: libmircommon3 (= ${binary:Version}),
22+Depends: libmircommon4 (= ${binary:Version}),
23 libprotobuf-dev (>= 2.4.1),
24 libxkbcommon-dev,
25 ${misc:Depends},
26@@ -255,7 +255,7 @@
27 .
28 Contains a tool for stress testing the Mir display server
29
30-Package: libmircommon3
31+Package: libmircommon4
32 Section: libs
33 Architecture: i386 amd64 armhf arm64
34 Multi-Arch: same
35
36=== modified file 'debian/libmirclient-dev.install'
37--- debian/libmirclient-dev.install 2014-10-23 13:29:28 +0000
38+++ debian/libmirclient-dev.install 2015-03-19 10:32:29 +0000
39@@ -1,3 +1,4 @@
40 usr/include/mirclient/mir_toolkit/*.h
41+usr/include/mirclient/mir_toolkit/events
42 usr/lib/*/pkgconfig/mirclient.pc
43 usr/lib/*/libmirclient.so
44
45=== renamed file 'debian/libmircommon3.install' => 'debian/libmircommon4.install'
46--- debian/libmircommon3.install 2015-01-21 07:34:50 +0000
47+++ debian/libmircommon4.install 2015-03-19 10:32:29 +0000
48@@ -1,1 +1,1 @@
49-usr/lib/*/libmircommon.so.3
50+usr/lib/*/libmircommon.so.4
51
52=== modified file 'examples/CMakeLists.txt'
53--- examples/CMakeLists.txt 2015-03-18 21:26:34 +0000
54+++ examples/CMakeLists.txt 2015-03-19 10:32:29 +0000
55@@ -183,8 +183,7 @@
56 mircommon
57 )
58
59-# FIXME: Bug not fixed yet.
60-if (MIR_ENABLE_TESTS AND MIR_TEST_CLIENT_ABI)
61+if (MIR_ENABLE_TESTS)
62 # Regression tests for LP: #1415321
63
64 # To see reasons for failure: ctest -V -R Clients-only-use-client-symbols
65@@ -193,9 +192,18 @@
66 COMMAND /bin/sh -c "!(nm -u .mir_demo_client_* mir_demo_client* | grep -v @@MIR_CLIENT | grep 'U mir_')"
67 )
68
69+# We use a slightly weaker version of the test with clang as that generates spurious NEEDED
70+if (NOT "${CMAKE_CXX_COMPILER}" MATCHES "clang")
71 # To see reasons for failure: ctest -V -R Clients-only-use-client-ABI
72 add_test(NAME Clients-only-use-client-ABI
73 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
74 COMMAND /bin/sh -c "!(objdump -p .mir_demo_client_* mir_demo_client* | grep NEEDED | grep libmir | grep -v libmirclient)"
75 )
76+else()
77+ # To see reasons for failure: ctest -V -R Clients-only-use-client-ABI
78+ add_test(NAME Clients-only-use-client-ABI
79+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
80+ COMMAND /bin/sh -c "!(nm -u .mir_demo_client_* mir_demo_client* | grep -v @@MIR_CLIENT | grep @@MIR_)"
81+ )
82+endif ()
83 endif ()
84
85=== added directory 'include/client/mir'
86=== renamed file 'include/common/mir_toolkit/client_types.h' => 'include/client/mir_toolkit/client_types.h'
87=== renamed file 'include/common/mir_toolkit/cursors.h' => 'include/client/mir_toolkit/cursors.h'
88--- include/common/mir_toolkit/cursors.h 2014-07-01 16:53:35 +0000
89+++ include/client/mir_toolkit/cursors.h 2015-03-19 10:32:29 +0000
90@@ -27,6 +27,9 @@
91 */
92
93 /* This is C code. Not C++. */
94+#ifdef __cplusplus
95+extern "C" {
96+#endif
97
98 /**
99 * A special cursor name for use with mir_cursor_configuration_from_name
100@@ -110,6 +113,9 @@
101 */
102 extern char const* const mir_hsplit_resize_cursor_name;
103
104+#ifdef __cplusplus
105+}
106+#endif
107 /**@}*/
108
109 #endif
110
111=== renamed file 'include/common/mir_toolkit/event.h' => 'include/client/mir_toolkit/event.h'
112=== renamed directory 'include/common/mir_toolkit/events' => 'include/client/mir_toolkit/events'
113=== modified file 'include/client/mir_toolkit/mir_client_library.h'
114--- include/client/mir_toolkit/mir_client_library.h 2015-03-06 03:52:41 +0000
115+++ include/client/mir_toolkit/mir_client_library.h 2015-03-19 10:32:29 +0000
116@@ -24,5 +24,6 @@
117 #include <mir_toolkit/mir_buffer_stream.h>
118 #include <mir_toolkit/version.h>
119 #include <mir_toolkit/mir_platform_message.h>
120+#include <mir_toolkit/cursors.h>
121
122 #endif /* MIR_CLIENT_LIBRARY_H */
123
124=== removed directory 'include/common/mir/input'
125=== modified file 'include/common/mir_toolkit/common.h'
126--- include/common/mir_toolkit/common.h 2015-01-21 07:34:50 +0000
127+++ include/common/mir_toolkit/common.h 2015-03-19 10:32:29 +0000
128@@ -21,8 +21,6 @@
129 #ifndef MIR_COMMON_H_
130 #define MIR_COMMON_H_
131
132-#include <mir_toolkit/cursors.h>
133-
134 /**
135 * \addtogroup mir_toolkit
136 * @{
137
138=== modified file 'src/client/CMakeLists.txt'
139--- src/client/CMakeLists.txt 2015-03-12 03:19:52 +0000
140+++ src/client/CMakeLists.txt 2015-03-19 10:32:29 +0000
141@@ -30,14 +30,20 @@
142 add_definitions(-DCLIENT_PLATFORM_VERSION="${MIR_CLIENT_PLATFORM_VERSION}")
143 add_definitions(-DMIR_LOGGING_COMPONENT_FALLBACK="mirclient")
144
145+set(MIR_CLIENT_SOURCES)
146+set(MIR_CLIENT_REFERENCES mircommon)
147+
148 add_subdirectory(rpc/)
149 add_subdirectory(lttng/)
150+add_subdirectory(events)
151+add_subdirectory(input)
152
153 add_library(mirclientobjects OBJECT
154
155 client_buffer_depository.cpp
156 display_configuration.cpp
157 error_connections.cpp
158+ event.cpp
159 mir_connection.cpp
160 mir_connection_api.cpp
161 mir_wait_handle.cpp
162@@ -63,14 +69,19 @@
163 buffer_stream.cpp
164 mir_buffer_stream_api.cpp
165 default_client_buffer_stream_factory.cpp
166+ ${MIR_CLIENT_SOURCES}
167 )
168
169 # Ensure protobuf C++ headers have been produced before
170 # trying to compile mirclientobjects
171 add_dependencies(mirclientobjects mirprotobuf)
172
173-add_library(mirclient SHARED $<TARGET_OBJECTS:mirclientobjects>)
174-add_library(mirclient-static STATIC $<TARGET_OBJECTS:mirclientobjects>)
175+add_library(mirclient SHARED $<TARGET_OBJECTS:mirclientobjects> $<TARGET_OBJECTS:mirsharedinput>)
176+add_library(mirclient-static STATIC $<TARGET_OBJECTS:mirclientobjects> $<TARGET_OBJECTS:mirsharedinput>)
177+
178+target_link_libraries(mirclient
179+ ${MIR_CLIENT_REFERENCES}
180+)
181
182 set_target_properties(mirclient
183
184
185=== renamed file 'src/common/event.cpp' => 'src/client/event.cpp'
186=== renamed directory 'src/common/events' => 'src/client/events'
187=== modified file 'src/client/events/CMakeLists.txt'
188--- src/common/events/CMakeLists.txt 2015-01-22 22:56:47 +0000
189+++ src/client/events/CMakeLists.txt 2015-03-19 10:32:29 +0000
190@@ -14,8 +14,8 @@
191 #
192 # Authored by: Robert Carr <robert.carr@canonical.com>
193
194-list(APPEND MIR_COMMON_SOURCES
195+list(APPEND MIR_CLIENT_SOURCES
196 ${CMAKE_CURRENT_SOURCE_DIR}/event_builders.cpp
197 )
198
199-set(MIR_COMMON_SOURCES ${MIR_COMMON_SOURCES} PARENT_SCOPE)
200+set(MIR_CLIENT_SOURCES ${MIR_CLIENT_SOURCES} PARENT_SCOPE)
201
202=== renamed directory 'src/common/input' => 'src/client/input'
203=== modified file 'src/client/input/CMakeLists.txt'
204--- src/common/input/CMakeLists.txt 2015-03-06 03:52:41 +0000
205+++ src/client/input/CMakeLists.txt 2015-03-19 10:32:29 +0000
206@@ -25,22 +25,16 @@
207
208 add_library(mirsharedinput OBJECT
209 ${ANDROID_SHARED_INPUT_SOURCES}
210- udev_wrapper.cpp
211 input_event.cpp
212 ${CMAKE_CURRENT_SOURCE_DIR}/xkb_mapper.cpp
213 )
214
215-list(APPEND MIR_COMMON_SOURCES
216- $<TARGET_OBJECTS:mirsharedinput>
217-)
218-
219-# As we put android-input in MIR_COMMON_REFERENCES it ends up linked into
220+# As we put android-input in MIR_CLIENT_REFERENCES it ends up linked into
221 # libmirserver. But linking into libmircommon fails as it in turn needs
222 # mir::mir::terminate_with_current_exception() from mirserver
223-list(APPEND MIR_COMMON_REFERENCES android-input)
224-
225-list(APPEND MIR_COMMON_REFERENCES ${XKBCOMMON_LIBRARIES})
226-list(APPEND MIR_COMMON_REFERENCES ${UDEV_LDFLAGS} ${UDEV_LIBRARIES})
227-
228-set(MIR_COMMON_SOURCES ${MIR_COMMON_SOURCES} PARENT_SCOPE)
229-set(MIR_COMMON_REFERENCES ${MIR_COMMON_REFERENCES} PARENT_SCOPE)
230+list(APPEND MIR_CLIENT_REFERENCES android-input)
231+
232+list(APPEND MIR_CLIENT_REFERENCES ${XKBCOMMON_LIBRARIES})
233+
234+set(MIR_CLIENT_SOURCES ${MIR_CLIENT_SOURCES} PARENT_SCOPE)
235+set(MIR_CLIENT_REFERENCES ${MIR_CLIENT_REFERENCES} PARENT_SCOPE)
236
237=== modified file 'src/client/input/input_event.cpp'
238--- src/common/input/input_event.cpp 2015-03-06 03:52:41 +0000
239+++ src/client/input/input_event.cpp 2015-03-19 10:32:29 +0000
240@@ -18,7 +18,7 @@
241
242 #define MIR_INCLUDE_DEPRECATED_EVENT_HEADER
243
244-#define MIR_LOGGING_COMPONENT "input-event-access"
245+#define MIR_LOG_COMPONENT "input-event-access"
246
247 #include "mir/event_type_to_string.h"
248 #include "mir/log.h"
249
250=== modified file 'src/client/mir_cursor_api.cpp'
251--- src/client/mir_cursor_api.cpp 2015-03-06 03:52:41 +0000
252+++ src/client/mir_cursor_api.cpp 2015-03-19 10:32:29 +0000
253@@ -25,21 +25,23 @@
254
255 #include <memory>
256
257-char const *const mir_default_cursor_name = "default";
258-char const *const mir_disabled_cursor_name = "disabled";
259-char const* const mir_arrow_cursor_name = "arrow";
260-char const* const mir_busy_cursor_name = "busy";
261-char const* const mir_caret_cursor_name = "caret";
262-char const* const mir_pointing_hand_cursor_name = "pointing-hand";
263-char const* const mir_open_hand_cursor_name = "open-hand";
264-char const* const mir_closed_hand_cursor_name = "closed-hand";
265-char const* const mir_horizontal_resize_cursor_name = "horizontal-resize";
266-char const* const mir_vertical_resize_cursor_name = "vertical-resize";
267-char const* const mir_diagonal_resize_bottom_to_top_cursor_name = "diagonal-resize-bottom-to-top";
268-char const* const mir_diagonal_resize_top_to_bottom_cursor_name = "diagonal-resize-top_to_bottom";
269-char const* const mir_omnidirectional_resize_cursor_name = "omnidirectional-resize";
270-char const* const mir_vsplit_resize_cursor_name = "vsplit-resize";
271-char const* const mir_hsplit_resize_cursor_name = "hsplit-resize";
272+
273+extern "C" char const *const mir_default_cursor_name = "default";
274+extern "C" char const *const mir_disabled_cursor_name = "disabled";
275+extern "C" char const* const mir_arrow_cursor_name = "arrow";
276+extern "C" char const* const mir_busy_cursor_name = "busy";
277+extern "C" char const* const mir_caret_cursor_name = "caret";
278+extern "C" char const* const mir_pointing_hand_cursor_name = "pointing-hand";
279+extern "C" char const* const mir_open_hand_cursor_name = "open-hand";
280+extern "C" char const* const mir_closed_hand_cursor_name = "closed-hand";
281+extern "C" char const* const mir_horizontal_resize_cursor_name = "horizontal-resize";
282+extern "C" char const* const mir_vertical_resize_cursor_name = "vertical-resize";
283+extern "C" char const* const mir_diagonal_resize_bottom_to_top_cursor_name = "diagonal-resize-bottom-to-top";
284+extern "C" char const* const mir_diagonal_resize_top_to_bottom_cursor_name = "diagonal-resize-top_to_bottom";
285+extern "C" char const* const mir_omnidirectional_resize_cursor_name = "omnidirectional-resize";
286+extern "C" char const* const mir_vsplit_resize_cursor_name = "vsplit-resize";
287+extern "C" char const* const mir_hsplit_resize_cursor_name = "hsplit-resize";
288+
289
290 MirCursorConfiguration::MirCursorConfiguration(char const* name) :
291 name{name ? name : std::string()}
292
293=== modified file 'src/client/symbols-debug.map'
294--- src/client/symbols-debug.map 2015-03-06 03:52:41 +0000
295+++ src/client/symbols-debug.map 2015-03-19 10:32:29 +0000
296@@ -3,11 +3,3 @@
297 mir_debug_*;
298 local: *;
299 };
300-
301-MIR_CLIENT_8 {
302- local: mir_connection_platform_operation;
303-};
304-
305-MIR_CLIENT_8.3 {
306- local: mir_connection_platform_operation;
307-};
308
309=== modified file 'src/client/symbols.map'
310--- src/client/symbols.map 2015-03-06 03:52:41 +0000
311+++ src/client/symbols.map 2015-03-19 10:32:29 +0000
312@@ -1,46 +1,186 @@
313 MIR_CLIENT_8 {
314 global:
315- mir_connection_platform_operation;
316- mir_*;
317- extern "C++" {
318- # used by PrivateProtobuf
319- mir::client::the_rpc_channel*;
320-
321- # used by test framework - see lp:1349788
322- MirConnection::MirConnection*;
323- MirConnection::connect*;
324- MirConnection::disconnect*;
325- mir::client::DefaultConnectionConfiguration::*;
326- vtable?for?mir::client::DefaultConnectionConfiguration;
327- typeinfo?for?mir::client::DefaultConnectionConfiguration;
328- };
329+ mir_arrow_cursor_name;
330+ mir_busy_cursor_name;
331+ mir_caret_cursor_name;
332+ mir_closed_hand_cursor_name;
333+ mir_connect;
334+ mir_connection_api_impl;
335+ mir_connection_apply_display_config;
336+ mir_connection_create_display_config;
337+ mir_connection_create_prompt_session_sync;
338+ mir_connection_create_screencast_sync;
339+ mir_connection_create_spec_for_input_method;
340+ mir_connection_create_spec_for_modal_dialog;
341+ mir_connection_create_surface;
342+ mir_connection_create_surface_sync;
343+ mir_connection_drm_auth_magic;
344+ mir_connection_drm_set_gbm_device;
345+ mir_connection_get_available_surface_formats;
346+ mir_connection_get_display_info;
347+ mir_connection_get_egl_native_display;
348+ mir_connection_get_error_message;
349+ mir_connection_get_platform;
350+ mir_connection_is_valid;
351+ mir_connection_platform_operation;
352+ mir_connection_release;
353+ mir_connection_set_display_config_change_callback;
354+ mir_connection_set_lifecycle_event_callback;
355+ mir_connect_sync;
356+ mir_cursor_configuration_destroy;
357+ mir_cursor_configuration_from_name;
358+ mir_default_cursor_name;
359+ mir_diagonal_resize_bottom_to_top_cursor_name;
360+ mir_diagonal_resize_top_to_bottom_cursor_name;
361+ mir_disabled_cursor_name;
362+ mir_display_config_destroy;
363+ mir_horizontal_resize_cursor_name;
364+ mir_hsplit_resize_cursor_name;
365+ mir_omnidirectional_resize_cursor_name;
366+ mir_open_hand_cursor_name;
367+ mir_platform_message_create;
368+ mir_platform_message_get_data;
369+ mir_platform_message_get_fds;
370+ mir_platform_message_get_opcode;
371+ mir_platform_message_release;
372+ mir_platform_message_set_data;
373+ mir_platform_message_set_fds;
374+ mir_pointing_hand_cursor_name;
375+ mir_prompt_session_error_message;
376+ mir_prompt_session_is_valid;
377+ mir_prompt_session_new_fds_for_prompt_providers;
378+ mir_prompt_session_release_sync;
379+ mir_screencast_egl_native_window;
380+ mir_screencast_release_sync;
381+ mir_surface_configure_cursor;
382+ mir_surface_get_current_buffer;
383+ mir_surface_get_dpi;
384+ mir_surface_get_egl_native_window;
385+ mir_surface_get_error_message;
386+ mir_surface_get_focus;
387+ mir_surface_get_graphics_region;
388+ mir_surface_get_id;
389+ mir_surface_get_orientation;
390+ mir_surface_get_parameters;
391+ mir_surface_get_platform_type;
392+ mir_surface_get_state;
393+ mir_surface_get_swapinterval;
394+ mir_surface_get_type;
395+ mir_surface_get_visibility;
396+ mir_surface_is_valid;
397+ mir_surface_release;
398+ mir_surface_release_sync;
399+ mir_surface_set_event_handler;
400+ mir_surface_set_state;
401+ mir_surface_set_swapinterval;
402+ mir_surface_set_type;
403+ mir_surface_spec_release;
404+ mir_surface_swap_buffers;
405+ mir_surface_swap_buffers_sync;
406+ mir_vertical_resize_cursor_name;
407+ mir_vsplit_resize_cursor_name;
408+ mir_wait_for;
409+ mir_wait_for_one;
410 local: *;
411 };
412-
413 MIR_CLIENT_8.1 {
414- global:
415+ global:
416 mir_connection_create_spec_for_normal_surface;
417 mir_surface_create;
418 mir_surface_create_sync;
419+ mir_surface_spec_set_buffer_usage;
420+ mir_surface_spec_set_fullscreen_on_output;
421+ mir_surface_spec_set_height;
422 mir_surface_spec_set_name;
423+ mir_surface_spec_set_pixel_format;
424 mir_surface_spec_set_width;
425- mir_surface_spec_set_height;
426- mir_surface_spec_set_pixel_format;
427- mir_surface_spec_set_buffer_usage;
428- mir_surface_spec_set_fullscreen_on_output;
429 } MIR_CLIENT_8;
430
431 MIR_CLIENT_8.2 {
432- global:
433+ global:
434+ mir_surface_get_preferred_orientation;
435 mir_surface_set_preferred_orientation;
436- mir_surface_get_preferred_orientation;
437 mir_surface_spec_set_preferred_orientation;
438 } MIR_CLIENT_8.1;
439
440 MIR_CLIENT_8.3 {
441- global:
442+ global:
443+ mir_connection_create_spec_for_dialog;
444 mir_connection_create_spec_for_menu;
445 mir_connection_create_spec_for_tooltip;
446- mir_connection_create_spec_for_dialog;
447 mir_connection_platform_operation;
448 } MIR_CLIENT_8.2;
449+
450+MIR_CLIENT_8.4 {
451+ global:
452+ mir_default_cursor_name;
453+ mir_disabled_cursor_name;
454+ mir_arrow_cursor_name;
455+ mir_busy_cursor_name;
456+ mir_caret_cursor_name;
457+ mir_pointing_hand_cursor_name;
458+ mir_open_hand_cursor_name;
459+ mir_closed_hand_cursor_name;
460+ mir_horizontal_resize_cursor_name;
461+ mir_vertical_resize_cursor_name;
462+ mir_diagonal_resize_bottom_to_top_cursor_name;
463+ mir_diagonal_resize_top_to_bottom_cursor_name;
464+ mir_omnidirectional_resize_cursor_name;
465+ mir_vsplit_resize_cursor_name;
466+ mir_hsplit_resize_cursor_name;
467+ mir_event_get_close_surface_event;
468+ mir_event_get_input_event;
469+ mir_event_get_keymap_event;
470+ mir_event_get_orientation_event;
471+ mir_event_get_prompt_session_event;
472+ mir_event_get_resize_event;
473+ mir_event_get_surface_event;
474+ mir_event_get_type;
475+ mir_event_ref;
476+ mir_event_unref;
477+ mir_input_event_get_device_id;
478+ mir_input_event_get_event_time;
479+ mir_input_event_get_key_input_event;
480+ mir_input_event_get_pointer_input_event;
481+ mir_input_event_get_touch_input_event;
482+ mir_input_event_get_type;
483+ mir_key_input_event_get_action;
484+ mir_key_input_event_get_key_code;
485+ mir_key_input_event_get_modifiers;
486+ mir_key_input_event_get_scan_code;
487+ mir_keymap_event_get_rules;
488+ mir_orientation_event_get_direction;
489+ mir_pointer_input_event_get_action;
490+ mir_pointer_input_event_get_axis_value;
491+ mir_pointer_input_event_get_button_state;
492+ mir_pointer_input_event_get_modifiers;
493+ mir_prompt_session_event_get_state;
494+ mir_resize_event_get_height;
495+ mir_resize_event_get_width;
496+ mir_surface_event_get_attribute;
497+ mir_surface_event_get_attribute_value;
498+ mir_surface_set_swapinterval;
499+ mir_surface_swap_buffers;
500+ mir_surface_swap_buffers_sync;
501+ mir_touch_input_event_get_modifiers;
502+ mir_touch_input_event_get_touch_action;
503+ mir_touch_input_event_get_touch_axis_value;
504+ mir_touch_input_event_get_touch_count;
505+ mir_touch_input_event_get_touch_id;
506+ mir_touch_input_event_get_touch_tooltype;
507+ mir_surface_get_buffer_stream;
508+ mir_buffer_stream_get_current_buffer;
509+ mir_buffer_stream_get_platform_type;
510+ mir_buffer_stream_swap_buffers_sync;
511+ mir_screencast_get_buffer_stream;
512+ mir_buffer_stream_get_egl_native_window;
513+ mir_buffer_stream_get_graphics_region;
514+} MIR_CLIENT_8.3;
515+
516+MIR_CLIENT_DETAIL_8 {
517+ global:
518+ extern "C++" {
519+ mir::events::make_event*;
520+ mir::input::android::Lexicon::translate*;
521+ };
522+};
523
524=== modified file 'src/common/CMakeLists.txt'
525--- src/common/CMakeLists.txt 2015-03-16 03:39:55 +0000
526+++ src/common/CMakeLists.txt 2015-03-19 10:32:29 +0000
527@@ -10,7 +10,6 @@
528
529 add_subdirectory(fd)
530 add_subdirectory(geometry)
531-add_subdirectory(input)
532 add_subdirectory(logging)
533 add_subdirectory(report/lttng)
534 add_subdirectory(env)
535@@ -18,12 +17,12 @@
536 add_subdirectory(thread)
537 add_subdirectory(time)
538 add_subdirectory(dispatch)
539+add_subdirectory(udev)
540
541 list(APPEND MIR_COMMON_SOURCES
542 $<TARGET_OBJECTS:mirtime>
543 ${CMAKE_CURRENT_SOURCE_DIR}/log.cpp
544 )
545-add_subdirectory(events)
546
547 set(PREFIX "${CMAKE_INSTALL_PREFIX}")
548 set(EXEC_PREFIX "${CMAKE_INSTALL_PREFIX}")
549@@ -35,10 +34,6 @@
550 ${MIR_GENERATED_INCLUDE_DIRECTORIES}
551 PARENT_SCOPE)
552
553-list(APPEND MIR_COMMON_SOURCES
554- ${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
555-)
556-
557 add_library(mircommon
558 SHARED
559 ${MIR_COMMON_SOURCES}
560@@ -49,7 +44,7 @@
561 )
562
563 # TODO we need a place to manage ABI and related versioning but use this as placeholder
564-set(MIRCOMMON_ABI 3)
565+set(MIRCOMMON_ABI 4)
566 set(symbol_map ${CMAKE_CURRENT_SOURCE_DIR}/symbols.map)
567
568 set_target_properties(mircommon
569
570=== modified file 'src/common/sharedlibrary/CMakeLists.txt'
571--- src/common/sharedlibrary/CMakeLists.txt 2015-03-06 03:52:41 +0000
572+++ src/common/sharedlibrary/CMakeLists.txt 2015-03-19 10:32:29 +0000
573@@ -24,7 +24,10 @@
574 $<TARGET_OBJECTS:mirsharedsharedlibrary>
575 )
576
577-list(APPEND MIR_COMMON_REFERENCES dl)
578+list(APPEND MIR_COMMON_REFERENCES
579+ dl
580+ ${Boost_LIBRARIES}
581+)
582
583 set(MIR_COMMON_SOURCES ${MIR_COMMON_SOURCES} PARENT_SCOPE)
584 set(MIR_COMMON_REFERENCES ${MIR_COMMON_REFERENCES} PARENT_SCOPE)
585
586=== modified file 'src/common/symbols.map'
587--- src/common/symbols.map 2015-03-16 03:39:55 +0000
588+++ src/common/symbols.map 2015-03-19 10:32:29 +0000
589@@ -1,20 +1,32 @@
590
591-MIR_COMMON_3 {
592+MIR_COMMON_4 {
593 global: mir_*;
594 extern "C++" {
595 # The following symbols come from running a script over the generated docs. Vis:
596 # ../tools/process_doxygen_xml.py doc/xml/*.xml | grep "^mircommon public" | sed "s/mircommon public: / /" | sort
597- mir_arrow_cursor_name*;
598- mir_busy_cursor_name*;
599- mir_caret_cursor_name*;
600- mir_closed_hand_cursor_name*;
601- mir_default_cursor_name*;
602- mir_diagonal_resize_bottom_to_top_cursor_name*;
603- mir_diagonal_resize_top_to_bottom_cursor_name*;
604- mir_disabled_cursor_name*;
605+ mir::detail::RefCountedLibrary::operator*;
606+ mir::detail::RefCountedLibrary::?RefCountedLibrary*;
607+ mir::detail::RefCountedLibrary::RefCountedLibrary*;
608+ mir::dispatch::Dispatchable::?Dispatchable*;
609+ mir::dispatch::Dispatchable::Dispatchable*;
610+ mir::dispatch::Dispatchable::operator*;
611+ mir::dispatch::MultiplexingDispatchable::add_watch*;
612+ mir::dispatch::MultiplexingDispatchable::dispatch*;
613+ mir::dispatch::MultiplexingDispatchable::?MultiplexingDispatchable*;
614+ mir::dispatch::MultiplexingDispatchable::MultiplexingDispatchable*;
615+ mir::dispatch::MultiplexingDispatchable::operator*;
616+ mir::dispatch::MultiplexingDispatchable::relevant_events*;
617+ mir::dispatch::MultiplexingDispatchable::remove_watch*;
618+ mir::dispatch::MultiplexingDispatchable::watch_fd*;
619+ mir::dispatch::SimpleDispatchThread::?SimpleDispatchThread*;
620+ mir::dispatch::SimpleDispatchThread::SimpleDispatchThread*;
621 mir::Fd::Fd*;
622 mir::Fd::invalid*;
623 mir::Fd::operator*;
624+ mir::geometry::Displacement::Displacement*;
625+ mir::geometry::Displacement::operator*;
626+ mir::geometry::Length::Length*;
627+ mir::geometry::Length::operator*;
628 mir::geometry::operator*;
629 mir::geometry::Point::operator*;
630 mir::geometry::Point::Point*;
631@@ -37,120 +49,53 @@
632 mir::geometry::Rectangle::top_right*;
633 mir::geometry::Size::operator*;
634 mir::geometry::Size::Size*;
635- mir_horizontal_resize_cursor_name*;
636- mir_hsplit_resize_cursor_name*;
637- mir::input::receiver::android::AndroidInputPlatform::?AndroidInputPlatform*;
638- mir::input::receiver::android::AndroidInputPlatform::AndroidInputPlatform*;
639- mir::input::receiver::android::AndroidInputPlatform::create_input_thread*;
640- mir::input::receiver::android::AndroidInputPlatform::operator*;
641- mir::input::receiver::android::InputReceiver::fd*;
642- mir::input::receiver::android::InputReceiver::?InputReceiver*;
643- mir::input::receiver::android::InputReceiver::InputReceiver*;
644- mir::input::receiver::android::InputReceiver::next_event*;
645- mir::input::receiver::android::InputReceiver::operator*;
646- mir::input::receiver::android::InputReceiverThread::?InputReceiverThread*;
647- mir::input::receiver::android::InputReceiverThread::InputReceiverThread*;
648- mir::input::receiver::android::InputReceiverThread::join*;
649- mir::input::receiver::android::InputReceiverThread::operator*;
650- mir::input::receiver::android::InputReceiverThread::start*;
651- mir::input::receiver::android::InputReceiverThread::stop*;
652- mir::input::receiver::android::InputReceiver::wake*;
653- mir::input::receiver::InputPlatform::create*;
654- mir::input::receiver::InputPlatform::create_input_thread*;
655- mir::input::receiver::InputPlatform::InputPlatform*;
656- mir::input::receiver::InputPlatform::operator*;
657- mir::input::receiver::InputReceiverThread::InputReceiverThread*;
658- mir::input::receiver::InputReceiverThread::join*;
659- mir::input::receiver::InputReceiverThread::operator*;
660- mir::input::receiver::InputReceiverThread::start*;
661- mir::input::receiver::InputReceiverThread::stop*;
662- mir_omnidirectional_resize_cursor_name*;
663- mir_open_hand_cursor_name*;
664- mir_pointing_hand_cursor_name*;
665- mir::time::Clock::?Clock*;
666- mir::time::Clock::Clock*;
667- mir::time::Clock::sample*;
668- mir_vertical_resize_cursor_name*;
669- mir_vsplit_resize_cursor_name*;
670- non-virtual?thunk?to?mir::input::receiver::android::AndroidInputPlatform::?AndroidInputPlatform*;
671- non-virtual?thunk?to?mir::input::receiver::android::AndroidInputPlatform::create_input_thread*;
672- non-virtual?thunk?to?mir::input::receiver::android::InputReceiver::?InputReceiver*;
673- non-virtual?thunk?to?mir::input::receiver::android::InputReceiver::next_event*;
674- non-virtual?thunk?to?mir::input::receiver::android::InputReceiverThread::?InputReceiverThread*;
675- non-virtual?thunk?to?mir::input::receiver::android::InputReceiverThread::join*;
676- non-virtual?thunk?to?mir::input::receiver::android::InputReceiverThread::start*;
677- non-virtual?thunk?to?mir::input::receiver::android::InputReceiverThread::stop*;
678- non-virtual?thunk?to?mir::input::receiver::android::InputReceiver::wake*;
679- non-virtual?thunk?to?mir::time::Clock::?Clock*;
680+ mir::log*;
681+ mir::logging::log*;
682+ mir::logging::Logger::?Logger*;
683+ mir::logging::Logger::Logger*;
684+ mir::logging::Logger::operator*;
685+ mir::logging::set_logger*;
686+ non-virtual?thunk?to?mir::dispatch::Dispatchable::?Dispatchable*;
687+ non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::dispatch*;
688+ non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::?MultiplexingDispatchable*;
689+ non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::relevant_events*;
690+ non-virtual?thunk?to?mir::dispatch::MultiplexingDispatchable::watch_fd*;
691+ non-virtual?thunk?to?mir::logging::Logger::?Logger*;
692 typeinfo?for?MirBufferPackage;
693- typeinfo?for?MirDisplayCard;
694- typeinfo?for?MirDisplayConfiguration;
695- typeinfo?for?MirDisplayInfo;
696- typeinfo?for?MirDisplayMode;
697- typeinfo?for?MirDisplayOutput;
698- typeinfo?for?MirEventDelegate;
699+ typeinfo?for?mir::detail::RefCountedLibrary;
700+ typeinfo?for?mir::dispatch::Dispatchable;
701+ typeinfo?for?mir::dispatch::MultiplexingDispatchable;
702+ typeinfo?for?mir::dispatch::SimpleDispatchThread;
703 typeinfo?for?mir::Fd;
704+ typeinfo?for?mir::geometry::Displacement;
705+ typeinfo?for?mir::geometry::Length;
706 typeinfo?for?mir::geometry::Point;
707 typeinfo?for?mir::geometry::Rectangle;
708 typeinfo?for?mir::geometry::Rectangles;
709 typeinfo?for?mir::geometry::Size;
710- typeinfo?for?MirGraphicsRegion;
711- typeinfo?for?mir::input::receiver::android::AndroidInputPlatform;
712- typeinfo?for?mir::input::receiver::android::InputReceiver;
713- typeinfo?for?mir::input::receiver::android::InputReceiverThread;
714- typeinfo?for?mir::input::receiver::InputPlatform;
715- typeinfo?for?mir::input::receiver::InputReceiverThread;
716 typeinfo?for?mir::IntOwnedFd;
717- typeinfo?for?MirKeyEvent;
718- typeinfo?for?MirMotionEvent;
719- typeinfo?for?MirMotionPointer;
720- typeinfo?for?MirOrientationEvent;
721- typeinfo?for?MirPlatformPackage;
722- typeinfo?for?MirPromptSessionEvent;
723- typeinfo?for?MirRectangle;
724- typeinfo?for?MirResizeEvent;
725- typeinfo?for?MirScreencastParameters;
726- typeinfo?for?MirSurfaceEvent;
727- typeinfo?for?MirSurfaceParameters;
728- typeinfo?for?mir::time::Clock;
729+ typeinfo?for?mir::logging::Logger;
730 vtable?for?MirBufferPackage;
731- vtable?for?MirDisplayCard;
732- vtable?for?MirDisplayConfiguration;
733- vtable?for?MirDisplayInfo;
734- vtable?for?MirDisplayMode;
735- vtable?for?MirDisplayOutput;
736- vtable?for?MirEventDelegate;
737+ vtable?for?mir::detail::RefCountedLibrary;
738+ vtable?for?mir::dispatch::Dispatchable;
739+ vtable?for?mir::dispatch::MultiplexingDispatchable;
740+ vtable?for?mir::dispatch::SimpleDispatchThread;
741 vtable?for?mir::Fd;
742+ vtable?for?mir::geometry::Displacement;
743+ vtable?for?mir::geometry::Length;
744 vtable?for?mir::geometry::Point;
745 vtable?for?mir::geometry::Rectangle;
746 vtable?for?mir::geometry::Rectangles;
747 vtable?for?mir::geometry::Size;
748- vtable?for?MirGraphicsRegion;
749- vtable?for?mir::input::receiver::android::AndroidInputPlatform;
750- vtable?for?mir::input::receiver::android::InputReceiver;
751- vtable?for?mir::input::receiver::android::InputReceiverThread;
752- vtable?for?mir::input::receiver::InputPlatform;
753- vtable?for?mir::input::receiver::InputReceiverThread;
754 vtable?for?mir::IntOwnedFd;
755- vtable?for?MirKeyEvent;
756- vtable?for?MirMotionEvent;
757- vtable?for?MirMotionPointer;
758- vtable?for?MirOrientationEvent;
759- vtable?for?MirPlatformPackage;
760- vtable?for?MirPromptSessionEvent;
761- vtable?for?MirRectangle;
762- vtable?for?MirResizeEvent;
763- vtable?for?MirScreencastParameters;
764- vtable?for?MirSurfaceEvent;
765- vtable?for?MirSurfaceParameters;
766+ vtable?for?mir::logging::Logger;
767
768 # These symbols are supposed to be "private" (they're under src/include)
769 # but they are used by libmirplatform, libmirclient or libmirserver
770 mir::default_server_socket;
771- mir::input::android::Lexicon::translate*;
772+ mir::libraries_for_path*;
773 mir::logging::input_timestamp*;
774 mir::logging::log*;
775- mir::logging::set_logger*;
776 mir::logging::SharedLibraryProberReport::SharedLibraryProberReport*;
777 mir::RecursiveReadLock::?RecursiveReadLock*;
778 mir::RecursiveReadLock::RecursiveReadLock*;
779@@ -199,63 +144,3 @@
780 };
781 local: *;
782 };
783-
784-MIR_COMMON_3.1 {
785- global:
786- extern "C++" {
787- mir_event_get*;
788- mir_event_get*;
789- mir_input_event_get*;
790- mir_key_input_event_get*;
791- mir_touch_input_event_get*;
792- mir::log*char*;
793- mir::logv*;
794- mir::libraries_for_path*;
795- };
796-} MIR_COMMON_3;
797-
798-MIR_COMMON_3.2 {
799- global:
800- extern "C++" {
801- mir::dispatch::SimpleDispatchThread::SimpleDispatchThread*;
802- mir::dispatch::SimpleDispatchThread::?SimpleDispatchThread*;
803- typeinfo?for?mir::dispatch::SimpleDispatchThread;
804- vtable?for?mir::dispatch::SimpleDispatchThread;
805-
806- mir::events::*;
807- mir::input::receiver::XKBMapper::XKBMapper*;
808- mir::input::receiver::XKBMapper::XKBMapper*;
809- mir::input::receiver::XKBMapper::set_rules*;
810- typeinfo?for?mir::input::receiver::XKBMapper;
811- vtable?for?mir::input::receiver::XKBMapper;
812-
813- mir::dispatch::MultiplexingDispatchable::MultiplexingDispatchable*;
814- mir::dispatch::MultiplexingDispatchable::?MultiplexingDispatchable*;
815- mir::dispatch::MultiplexingDispatchable::watch_fd*;
816- mir::dispatch::MultiplexingDispatchable::dispatch*;
817- mir::dispatch::MultiplexingDispatchable::relevant_events*;
818- mir::dispatch::MultiplexingDispatchable::add_watch*;
819- mir::dispatch::MultiplexingDispatchable::remove_watch*;
820-
821- typeinfo?for?mir::dispatch::MultiplexingDispatchable;
822- vtable?for?mir::dispatch::MultiplexingDispatchable;
823-
824- mir::dispatch::ActionQueue::ActionQueue*;
825- mir::dispatch::ActionQueue::?ActionQueue*;
826- mir::dispatch::ActionQueue::watch_fd*;
827- mir::dispatch::ActionQueue::dispatch*;
828- mir::dispatch::ActionQueue::relevant_events*;
829- mir::dispatch::ActionQueue::enqueue*;
830-
831- typeinfo?for?mir::dispatch::ActionQueue;
832- vtable?for?mir::dispatch::ActionQueue;
833-
834- mir::detail::RefCountedLibrary::operator*;
835- mir::detail::RefCountedLibrary::?RefCountedLibrary*;
836- mir::detail::RefCountedLibrary::RefCountedLibrary*;
837- vtable?for?mir::detail::RefCountedLibrary;
838- typeinfo?for?mir::detail::RefCountedLibrary;
839-
840- mir::events::*
841- };
842-} MIR_COMMON_3.1;
843
844=== added directory 'src/common/udev'
845=== added file 'src/common/udev/CMakeLists.txt'
846--- src/common/udev/CMakeLists.txt 1970-01-01 00:00:00 +0000
847+++ src/common/udev/CMakeLists.txt 2015-03-19 10:32:29 +0000
848@@ -0,0 +1,8 @@
849+list(APPEND MIR_COMMON_SOURCES
850+ ${CMAKE_CURRENT_SOURCE_DIR}/udev_wrapper.cpp
851+)
852+
853+list(APPEND MIR_COMMON_REFERENCES ${UDEV_LDFLAGS} ${UDEV_LIBRARIES})
854+
855+set(MIR_COMMON_SOURCES ${MIR_COMMON_SOURCES} PARENT_SCOPE)
856+set(MIR_COMMON_REFERENCES ${MIR_COMMON_REFERENCES} PARENT_SCOPE)
857\ No newline at end of file
858
859=== renamed file 'src/common/input/udev_wrapper.cpp' => 'src/common/udev/udev_wrapper.cpp'
860=== renamed directory 'include/common/mir/events' => 'src/include/client/mir/events'
861=== added directory 'src/include/client/mir/input'
862=== renamed file 'include/common/mir/input/input_platform.h' => 'src/include/client/mir/input/input_platform.h'
863=== modified file 'src/include/common/mir/logging/input_timestamp.h'
864--- src/include/common/mir/logging/input_timestamp.h 2015-03-06 03:52:41 +0000
865+++ src/include/common/mir/logging/input_timestamp.h 2015-03-19 10:32:29 +0000
866@@ -1,5 +1,5 @@
867 /*
868- * Copyright © 2013 Canonical Ltd.
869+ * Copyright © 2013-2015 Canonical Ltd.
870 *
871 * This program is free software: you can redistribute it and/or modify it
872 * under the terms of the GNU Lesser General Public License version 3,
873@@ -19,10 +19,6 @@
874 #ifndef MIR_LOGGING_INPUT_TIMESTAMP_H_
875 #define MIR_LOGGING_INPUT_TIMESTAMP_H_
876
877-#define MIR_INCLUDE_DEPRECATED_EVENT_HEADER
878-
879-#include "mir_toolkit/event.h"
880-
881 #include <string>
882 #include <chrono>
883
884
885=== modified file 'src/server/CMakeLists.txt'
886--- src/server/CMakeLists.txt 2015-03-06 03:52:41 +0000
887+++ src/server/CMakeLists.txt 2015-03-19 10:32:29 +0000
888@@ -5,8 +5,10 @@
889
890 include_directories(
891 ${PROJECT_SOURCE_DIR}/include/platform
892+ ${PROJECT_SOURCE_DIR}/include/client
893+ ${PROJECT_SOURCE_DIR}/include/server
894 ${PROJECT_SOURCE_DIR}/src/include/platform
895- ${PROJECT_SOURCE_DIR}/include/server
896+ ${PROJECT_SOURCE_DIR}/src/include/client
897 ${PROJECT_SOURCE_DIR}/src/include/server
898 ${GLIB_INCLUDE_DIRS}
899 )
900
901=== modified file 'src/server/graphics/nested/CMakeLists.txt'
902--- src/server/graphics/nested/CMakeLists.txt 2015-01-21 07:34:50 +0000
903+++ src/server/graphics/nested/CMakeLists.txt 2015-03-19 10:32:29 +0000
904@@ -1,7 +1,3 @@
905-include_directories(
906- ${PROJECT_SOURCE_DIR}/include/client
907-)
908-
909 add_library(
910 mirnestedgraphics OBJECT
911
912
913=== modified file 'src/server/input/default_configuration.cpp'
914--- src/server/input/default_configuration.cpp 2015-03-18 18:48:02 +0000
915+++ src/server/input/default_configuration.cpp 2015-03-19 10:32:29 +0000
916@@ -51,6 +51,8 @@
917 #include "mir/report/legacy_input_report.h"
918 #include "mir/main_loop.h"
919
920+#include "mir_toolkit/cursors.h"
921+
922 #include <InputDispatcher.h>
923 #include <EventHub.h>
924 #include <InputReader.h>
925
926=== modified file 'tests/integration-tests/CMakeLists.txt'
927--- tests/integration-tests/CMakeLists.txt 2015-03-16 03:39:55 +0000
928+++ tests/integration-tests/CMakeLists.txt 2015-03-19 10:32:29 +0000
929@@ -69,7 +69,6 @@
930 mir_integration_tests
931 ${INTEGRATION_TESTS_SRCS}
932 ${MIR_SERVER_OBJECTS}
933- $<TARGET_OBJECTS:mirclientobjects>
934 ${MIR_PLATFORM_OBJECTS}
935 ${MIR_COMMON_OBJECTS}
936 )
937@@ -87,7 +86,7 @@
938 mir-test-framework
939 mir-test-doubles
940 mirclient-debug-extension
941-
942+ mirclient-static
943 mirdraw
944 mirclientrpc
945 mirclientlttngstatic
946
947=== modified file 'tests/unit-tests/CMakeLists.txt'
948--- tests/unit-tests/CMakeLists.txt 2015-03-06 03:52:41 +0000
949+++ tests/unit-tests/CMakeLists.txt 2015-03-19 10:32:29 +0000
950@@ -82,7 +82,6 @@
951 mir_add_wrapped_executable(mir_unit_tests
952 ${UNIT_TEST_SOURCES}
953 ${MIR_SERVER_OBJECTS}
954- $<TARGET_OBJECTS:mirclientobjects>
955 ${MIR_PLATFORM_OBJECTS}
956 ${MIR_COMMON_OBJECTS}
957 )
958@@ -100,6 +99,7 @@
959 mirclientrpc
960 mirclientlttngstatic
961 demo-shell
962+ mirclient-static
963 mircommon
964
965 mir-test
966@@ -130,6 +130,7 @@
967 ${MIR_PLATFORM_REFERENCES}
968 ${MIR_COMMON_REFERENCES}
969 ${MIR_SERVER_REFERENCES}
970+ ${XKBCOMMON_LIBRARIES}
971 )
972
973 if (MIR_BUILD_PLATFORM_ANDROID)
974
975=== modified file 'tests/unit-tests/client/input/test_android_input_receiver.cpp'
976--- tests/unit-tests/client/input/test_android_input_receiver.cpp 2015-03-06 03:52:41 +0000
977+++ tests/unit-tests/client/input/test_android_input_receiver.cpp 2015-03-19 10:32:29 +0000
978@@ -18,7 +18,7 @@
979
980 #define MIR_INCLUDE_DEPRECATED_EVENT_HEADER
981
982-#include "src/common/input/android/android_input_receiver.h"
983+#include "src/client/input/android/android_input_receiver.h"
984 #include "mir/input/null_input_receiver_report.h"
985 #include "mir/input/xkb_mapper.h"
986 #include "mir_toolkit/event.h"
987
988=== modified file 'tests/unit-tests/input/test_cursor_controller.cpp'
989--- tests/unit-tests/input/test_cursor_controller.cpp 2015-03-12 03:19:52 +0000
990+++ tests/unit-tests/input/test_cursor_controller.cpp 2015-03-19 10:32:29 +0000
991@@ -27,6 +27,7 @@
992 #include "mir/graphics/cursor.h"
993
994 #include "mir_toolkit/common.h"
995+#include "mir_toolkit/cursors.h"
996
997 #include "mir_test/fake_shared.h"
998 #include "mir_test_doubles/stub_scene_surface.h"
999
1000=== modified file 'tests/unit-tests/input/test_xcursor_loader.cpp'
1001--- tests/unit-tests/input/test_xcursor_loader.cpp 2015-01-21 07:34:50 +0000
1002+++ tests/unit-tests/input/test_xcursor_loader.cpp 2015-03-19 10:32:29 +0000
1003@@ -22,6 +22,7 @@
1004 #include "mir_test_framework/executable_path.h"
1005
1006 #include <mir_toolkit/common.h>
1007+#include <mir_toolkit/cursors.h>
1008
1009 #include <gtest/gtest.h>
1010 #include <gmock/gmock.h>

Subscribers

People subscribed via source and target branches