Merge lp:~afrantzis/mir/mir-client-ensure-global-symbol-resolution into lp:mir
Status: | Work in progress |
---|---|
Proposed branch: | lp:~afrantzis/mir/mir-client-ensure-global-symbol-resolution |
Merge into: | lp:mir |
Diff against target: |
219 lines (+151/-1) 7 files modified
debian/rules (+2/-1) include/client/mir_toolkit/mir_client_ensure_global_symbol_resolution.h (+40/-0) src/client/CMakeLists.txt (+2/-0) src/client/mir_client_ensure_global_symbol_resolution.cpp (+28/-0) tests/CMakeLists.txt (+5/-0) tests/special-linkage-tests/CMakeLists.txt (+24/-0) tests/special-linkage-tests/test_client_symbol_resolution.cpp (+50/-0) |
To merge this branch: | bzr merge lp:~afrantzis/mir/mir-client-ensure-global-symbol-resolution |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Daniel van Vugt | Needs Fixing | ||
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Alan Griffiths | Approve | ||
Review via email: mp+196110@code.launchpad.net |
Commit message
client: Provide a way to ensure libmirclient's symbols are available for symbol resolution in other shared objects
This is useful if libmirclient, or another library linking to libmirclient, is loaded
at runtime with dlopen() using RTLD_LOCAL (e.g., through a plugin mechanism)
and libmirclient's symbols need to be resolved at runtime in other shared objects
(like Mesa's libEGL).
Description of the change
client: Provide a way to ensure libmirclient's symbols are available for symbol resolution in other shared objects
This is useful if libmirclient, or another library linking to libmirclient, is loaded
at runtime with dlopen() using RTLD_LOCAL (e.g., through a plugin mechanism)
and libmirclient's symbols need to be resolved at runtime in other shared objects
(like Mesa's libEGL).
The specific problem that we are trying to solve is that with Qt client applications on the desktop, EGL fails to recognize native MirConnections as valid EGLNativeDispla
(See reference diagram: http://
Concerning our options for using this:
Ideally we would want to deal with the issue in libEGL, but unfortunately we cannot, since it would defeat the purpose of the runtime resolution, which is to transparently support applications linking against either libmirserver or libmirclient or both (or neither) and doing the right thing.
Next choice would be the Qt platform plugin (libqubuntumirc
Moving down a step we reach the platform-api from where we do have direct access to libmirclient. It's easy to call mir_client_
We could even make libmirclient itself force all of its symbols to become available for global resolution, but this seems too intrusive for now (but it is an option if we find that this problem is widespread).
Unmerged revisions
- 1250. By Alexandros Frantzis
-
tests: Rename special-tests to special-
linkage- tests - 1249. By Alexandros Frantzis
-
special-tests: Add explicit dependency to mirclient library
- 1248. By Alexandros Frantzis
-
build: Disable special tests when building the package for armhf
- 1247. By Alexandros Frantzis
-
client: Provide function to ensure libmirclient's symbols are available for symbol resolution in other shared objects
This is useful if libmirclient, or another library linking to libmirclient, is loaded
at runtime with dlopen() using RTLD_LOCAL (e.g., through a plugin mechanism)
and libmirclient's symbols need to be resolved at runtime in other shared objects
(like Mesa's libEGL).
FAILED: Continuous integration, rev:1247 jenkins. qa.ubuntu. com/job/ mir-team- mir-development -branch- ci/415/ jenkins. qa.ubuntu. com/job/ mir-android- trusty- i386-build/ 253/console jenkins. qa.ubuntu. com/job/ mir-clang- trusty- amd64-build/ 250 jenkins. qa.ubuntu. com/job/ mir-team- mir-development -branch- trusty- amd64-ci/ 144 jenkins. qa.ubuntu. com/job/ mir-team- mir-development -branch- trusty- amd64-ci/ 144/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-team- mir-development -branch- trusty- armhf-ci/ 144/console
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/mir- team-mir- development- branch- ci/415/ rebuild
http://