Merge lp:~raof/mir/new-dso-versioning-policy into lp:mir
| Status: | Merged |
|---|---|
| Approved by: | Daniel van Vugt on 2015-10-06 |
| Approved revision: | 2984 |
| Merged at revision: | 2994 |
| Proposed branch: | lp:~raof/mir/new-dso-versioning-policy |
| Merge into: | lp:mir |
| Diff against target: |
137 lines (+49/-16) 3 files modified
CMakeLists.txt (+8/-0) cmake/MirCommon.cmake (+26/-0) doc/dso_versioning_guide.md (+15/-16) |
| To merge this branch: | bzr merge lp:~raof/mir/new-dso-versioning-policy |
| Related bugs: |
| Reviewer | Review Type | Date Requested | Status |
|---|---|---|---|
| Andreas Pokorny (community) | Approve on 2015-10-05 | ||
| Alan Griffiths | 2015-10-02 | Approve on 2015-10-05 | |
| Daniel van Vugt | Abstain on 2015-10-05 | ||
| PS Jenkins bot | continuous-integration | Approve on 2015-10-02 | |
|
Review via email:
|
|||
Commit Message
New DSO versioning guide, plus a new release-checks target to help the release manager follow it.
Description of the Change
New DSO versioning guide, plus a release check.
| Alan Griffiths (alan-griffiths) wrote : | # |
I don't have a strong opinion against, but this "unreleased" stuff wasn't part of the discussion I thought this was summarizing. Why has it been added?
| Chris Halse Rogers (raof) wrote : | # |
Because while writing up the discussion I thought that doing the unreleased thing would be a good idea, and so I proposed it for discussion here. :)
Specifically - this makes it very clear what to do when introducing new symbols: you add it to MIR_*_unreleased, or create the MIR_*_unreleased stanza if one does not already exist. The scheme proposed in the ML thread solves the problem of “was MIR_CLIENT_9.1 in the latest release, or do I have to bump it?”, but replaces this problem with “have we branched for release yet?”¹. This _unreleased proposal solves both problems.
That then puts a bit more burden on the release manager, which I've attempted to ameliorate with the “release-checks” target.
This *does* mean that we break ABI between development and release, but since we only ship releases, that's fine.
¹: You crazy folk on European time might have a better idea of when this happens than I do, though.
| Chris Halse Rogers (raof) wrote : | # |
Additionally: If we wanted to, I could probably wrangle an abi-check target to fail if the branch changes any ABI *except* by removal and/or addition to an _unreleased stanza. This would then require you to comment out any symbols that you change the ABI of and move them to _unreleased.
For example, adding a new method foo to the graphics::Display interface you'd need to comment out vtable?
This would be something approximating the append-only ABI specification we've discussed in the past. I think it'd be onerous for us to use at the moment for anything but mirclient, but maybe in the golden vaguely-stable-ABI future...
| Daniel van Vugt (vanvugt) wrote : | # |
Thanks; that's my preferred design too, relating ABIs to Mir releases:
MIR_CLIENT_0.17 {
Only one gothcha: As this now relates to Mir releases and we hope to not break ABIs every release, some unusual symlinks will be needed when it's implemented:
libmirclient
libmirclient
Slightly confusing, but good I think. It's less confusing than all the different number series we maintain today.
| Chris Halse Rogers (raof) wrote : | # |
This does not change the SONAME or filename of any of our libraries.
The MIR_CLIENT_0.17 symbols will reside inside libmirclient.so.9 as
they do now (at least until we break ABI).
| Daniel van Vugt (vanvugt) wrote : | # |
That sounds like a reasonable transition, although a little confusing. We might choose to force an ABI break to complete the transition to the new scheme. Although definitely not till after wily is done and we're sure we're targeting 16.04 only...
| Chris Halse Rogers (raof) wrote : | # |
No more confusing than std::system_error having a symbol version of
GLIBCXX_3.4.11 but being defined in libstdc++.so.6. This is a common
practice.
To be clear, in this proposal when we break mirclient ABI
libmirclient.so.9 will be replaced by libmirclient.so.10.
| Daniel van Vugt (vanvugt) wrote : | # |
If that's true then I disapprove. However since we're talking about the future, I will assume the file names will catch up as I've suggested.
| Alan Griffiths (alan-griffiths) wrote : | # |
> That then puts a bit more burden on the release manager, which I've attempted
> to ameliorate with the “release-checks” target.
Yes, both in creating the release branch *and* in merging back changes to a stanza that may get updated during the release process.
> ¹: You crazy folk on European time might have a better idea of when this
> happens than I do, though.
I don't think we do.

PASSED: Continuous integration, rev:2984 jenkins. qa.ubuntu. com/job/ mir-ci/ 5112/ jenkins. qa.ubuntu. com/job/ mir-android- vivid-i386- build/4239 jenkins. qa.ubuntu. com/job/ mir-clang- vivid-amd64- build/3146 jenkins. qa.ubuntu. com/job/ mir-mediumtests -vivid- touch/4181 jenkins. qa.ubuntu. com/job/ mir-mediumtests -wily-touch/ 139/console jenkins. qa.ubuntu. com/job/ mir-wily- amd64-ci/ 1266 jenkins. qa.ubuntu. com/job/ mir-wily- amd64-ci/ 1266/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-wily- i386-ci/ 139/console jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- vivid-armhf/ 4182 jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- vivid-armhf/ 4182/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-mediumtests -runner- mako/6855 s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 23884 jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- wily-armhf/ 140/console
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/mir- ci/5112/ rebuild
http://