[Kde-scm-interest] [Proposal] Package splitting with thin meta-repos

Maciej Mrozowski reavertm at gmail.com
Sat Feb 6 15:41:03 CET 2010


On Saturday 06 of February 2010 12:54:46 Thiago Macieira wrote:
> Em Sexta-feira 5. Fevereiro 2010, às 22.38.58, Ingo Klöcker escreveu:
> > On Sunday 31 January 2010, Thiago Macieira wrote:
> > > Em Domingo 31. Janeiro 2010, às 14.39.31, Maciej Mrozowski escreveu:
> > > > Source distro packagers (like here in Gentoo) surely prefer
> > > > splitting - as they (we) do it anyway now, by the means of
> > > > custom/hacked solutions like recursively commenting out certain
> > > > add_subdirectory sections using clever sed scripts often
> > > > accompanied with total override of
> > > > find_package(..REQUIRED) lines like with the example of kdepim
> > > > (this one is not going to be split easily, I'm not sure whether
> > > > it's even worth it).
> > > 
> > > Source distros are the minority. Sure, for you, splitting is much
> > > better, since you need to download the source before compiling.
> > > 
> > > For traditional binary distros, it doesn't really matter if the
> > > source comes in separate packages or in one big bundle. They're
> > > going to split it anyway.
> > 
> > I doubt that it doesn't matter for them. If we'd provide the splitting
> > then they wouldn't have to spend a lot of time thinking of a clever
> > splitting.
> 
> It matters for the packagers. But I meant that it doesn't matter for the
> user. Sorry for not being clear.
> 
> > > And they usually split differently, from one distro to the next.
> > 
> > Doh! Of course, they split differently. But only because we do not
> > provide a sensible splitting for them.
> 
> So which distro's splitting is the sensible one?
> 
> > > PS: we have not discussed what happens if our split doesn't match the
> > > distros' split. Any/all of them.
> > 
> > We also have not discussed what happens if we spoil a distro's split by
> > adding a new intra-module dependency.
> 
> Usually dependencies are in libraries, and that's automatic in the package
> managers. They find out all libraries required and all libraries provided.
> 
> > Instead of making wild guesses about what the distros think about
> > package splitting we should simply ask them. All distros we need to care
> > about should be present on the kde-packagers list.
> 
> Right. So if we have two different answers (or more), which one is the
> right one?
Actually we haven't heard binary distro point of view - "In contrast; various 
non-source packagers said the opposite." doesn't qualify as legitimate 
opinion. I'd like to hear real answer from real binary distro developers - 
hence I'm CC-in kde-packager and kde-buildsystem as it's related as well.

But to answer your question - obviously the one which you - KDE developers - 
prefer. Lets' try to get it right. Please list below (in reply to my mail) 
your goals you want to achieve with source code layout. I would see the 
following (I have certainly mixed some of the cases) :

a) reduced build system complexity and redundancy - like sharing *.cmake 
files, less duplication of cmake checks

- modules - little redundancy. In some cases unfortunately things are messed 
up as some parts (kdepim-runtime, kdepim/akonadi, some apps from kdenetwork) 
seem to want to be built standalone - so they duplicate cmake checks - some of 
them only pretend to be built standalone but don't build anymore due to some 
issues (like using module-common .cmake files)
- split packages - in typical approach - considerable duplication as they need 
to be independent
Solution?
How about moving all shared .cmake files to either separate package (or maybe 
with modules fetched from Internet, sth like knewstuff or PEAR or just SVN) - 
as current kdelibs cmake policies are too strict, besides rebuilding kdelibs 
just to get newer cmake files seems silly. That would benefit both cases imho. 
Any other solutions?

b) bugzilla compatibility

- modules - now you just say 'kmail from kde 4.3.5' - from drop down list
- split packages - you'd probably need to specify precise kmail version and/or 
rework kde bugzilla a bit
Solution?
Maybe hybrid approach ossi proposed:
> why not (mostly) keep our current layout in form of a meta structure (be
> it git submodules or not)? build order would be determined by cmakelists
> which declare subdirectories (and nothing else) as ever. breaking out
> of that layout would happen at own peril, but any breakage will be
> quickly detected anyway (as the projects' cmakelists must be
> self-contained and dependency-complet
So - effectively built-separately but tagged/branched/tarballed as modules
No bugzilla changes needed, can be distributed in tarballs like now, but would 
allow thing to built separately and thus - distro-packaged in more 
straightforward manner. 

c) easy to bump versions, tag (what about branching? branching whole kdegames 
vs branching just one game? It's non issue in SVN, in git however - same with 
kdereview)

- modules - easy and straightforward - just tag on whole KDE subdir in SVN - 
in git still needs to be done for every git module (kdelibs.git, kdegames.git 
etc) 
- split packages - nor easy for straightforward - all git modules need to be 
updated consistently
Solution?
In either case - scripts are needed to do tagging and requirements bumping for 
all KDE SC git repos - (so to update KDE version in CMakeLists.txt and to 
create remote tags). As far as feature branches are concerned - split packages 
seem to be preferred weapon, still git branches are cheap enough.
Review branches seem to be more straightforward with modules - consider 
example:
- create review branch 'review-kmynewgame' in kdegames.git
- commit kmynewgame to this branch and immediately adjust kdegames buildsystem 
so that builds there
- commit patches to review-kmynewgame branch
- simply merge review-kmynewgame branch to master when done and delete review-
kmynewgame remote branch

d) easy to make consistent tarballs

- modules - in SVN and git - straightforward
- split packages - if current modules distribution is to be kept - problematic 
- otherwise straightforward
Solution?
It really depends from chosen distribution model - in any case adjusting 
current 'make tarball' scripts to understand git is needed.
For git - sha1 could be placed in each tarball in toplevel dir in some 
.gitversion file to indicate what exact scm commit does it come from - that 
could be applied instead of embedding sha1/svnversion in file name like it's 
the case now with unstable svn snapshots.

e) PR related - ability to promote some individual packages

- modules - impossible unless package is in standalone tarball. In reality 
however this issue affects only Win32 and maybe Mac platforms as in Linux, 
distro package is preferred over manually built or generic binary backage 
(tar.gz) anyway. 
- split packages - allows straightforward source-from-repo -> binary-package 
or source-from-repo -> source-tarball transition
Solution?
Some modules incorporate cmake duplication to allow sort of standalone 
building (from svn) already. Of course ideal solution is to move to split 
packages.

f) straightforward distro packaging

- modules - impossible. Nearly all distributions split KDE so it seems that's 
common use case. 
>"You know those simple rules we had you follow so far?
It is by no means simple rule even for them (binary distros) - as they need to 
discover dependencies anyway. It may only make building package easier (as it 
bulds one big module), but splitting this already built package to separate 
packages is different story as they need to:
- decide what split-package provides which files
- set inter-dependencies for each package individually  - Debian discovers 
them analyzing link dependencies + manual intervention, in Gentoo is less 
automatic be we have means to detect link deps as well - deps are manually set 
anyway, not sure what RPM-distros do.
By splitting packages KDE devs could probably lift them from the first case - 
still they'd need to split particular package pkg to pkg and pkg-devel 
probably - in Gentoo it's not the case as we install headers anyway.

- split-packages - possible and straightforward. No need to discover 
dependencies are they're reflected directly in build system.

Solution?
If packages were split in such fashion that's directly suitable for their 
distribution downstream - like *cough*Gnome*cough* - at least distro packagers 
wouldn't need to worry about discovering dependencies.
But.. it moves a bit of dependency maintenance burden from distro packagers to 
KDE developers.

And one note about Thiago response:
> I don't like the option of going from a dozen big modules plus some extra, 
> interesting apps, to 140 packages. I really don't. What are we going to tell 
> packagers?

>"You know those simple rules we had you follow so far? Forget them. Now it's 
> as complex as GNOME. Actually, only a bot now knows what depends on what. We 
> want you to use this script to build KDE in your distribution (yeah, forget 
> your current dependency mechanisms too)."

In Gentoo we're perfectly capable of build-time splitting and maintaining 
multiple packages. Currently we have ~280 packages  for every KDE SC release. 
We maintain following releases:
- in main tree: 4.3.3, 4.3.4, 4.3.5
- in developers tree - 4.3.98 (rc3), 4.4.0 (not yet released but it's already 
there - masked until announcement on kde.org), and two SVN 'releases' - 9999 
(trunk) and 4.4.9999 (4.4 branch) - 4.3.9999 (4.3 branch) was dropped recently 
due to 'unpopular' vote
(SVN 'release' means when you reemerge package - it updates source from 
anonsvn, then builds and installs it)

That gives ~280 * 7 packages maintained by a few folks from understaffed, 
"irrelevant", minority distro . If relevant, mainstream distros fail to grasp 
just ~150 Gnome packages, then maybe they should call it quits or improve 
their tools.

My overall suggestion would be:
If you want to have git migration done, postpone package splitting (for now).

-- 
regards
MM
Gentoo developer


More information about the Kde-buildsystem mailing list