From Mageia wiki
Jump to: navigation, search

KDE Team

Nickname Mail Name Time zone
neoclust neoclust (at) mageia (dot) org Neoclust
anaselli anaselli (at) mageia (dot) org anaselli UTC+1
mikala mikala (at) mageia (dot) org John UTC-3
schultz watersnowrock (at) gmail (dot) com Donald

Note: Changes/commits in Qt/KDE related packages by NON-kde packagers need to be reviewed and approved by the kde team or some representative.

Meetings

Proposals

  • Have someone elected (or by other decision) to represent the team in any other meeting or place (council)
  • Define strict rules about package naming (for example for library packages use only underscore _ instead a regular trace - )
  • Rules about major changes
  • Have a season for bug hunting and tests in cauldron (and commits are only done in a time defined by the team)
  • Have a season to dedicate to Mageia 1 (backports,updates) with also a time defined for commits
  • etc.

All these proposals are to be updated/changed and exist to keep the team tuned and syncronized.


Goals

Qt/KDE Packaging Policy

We decided try at most make some standards for upcoming KF5/ Plasma packaging, so any newcomer in Mageia tools and packaging will have some template to follow and some standard rules to follow as well.

WARNING: valid for Qt/KDE related packages.


Package application naming

In the past, we use to have nomenclatures like kdebase-konsole, kdegraphics-kpdf, etc..

All applications package ( or subpackage ) naming now should be exactly the same name as their main binary. Ex:

  • okular - Coming from package kdegraphics and splitted
  • akregator - Coming from package kdepim and splitted
  • konversation - Coming from their own package konversation


Library policy

Every library should be splitted with their proper soname. There's usual complain to have too many subpackages, but this is just a excuse for laziness. Some reasons behind splits:

  • Developers need to change soname and binary api. If we have library inside package, upgrade would be hard
  • Legacy applications should need the library only, not the whole package. If we decide install an application like akregator only, theres no reason to have whole kdepim package installed
  • Development packages can requires just library packages, not the whole package.

Package should not requires libraries explicitely. Mageia RPM build already set the necessary dependencies automatically

How it will be on spec file using standard Mageia style ?

%define kfoo_major 1
%define libkfoo %mklibname kfoo %kfoo_major

%package -n %libkfoo
Summary: Kfoo library
Group: System/Libraries

%description -n %libkfoo
Kfoo library.

%files -n %libkfoo
%_kf5_libdir/libkfoo.so.%{kfoo_major}*

WARNING: KDE have many modules that at first sight for new packagers looks like a library. You usually can find it in %{_kf5_libdir} They are not libraries at all, are dynamic loading modules, and:

  • Should not need ldconfig
  • Must go together with main application subpackage, not splitted nor in a library package

Patch policy

Every patch for a package MUST have this header :

#
# Description: 
# Forwarded: 
# Bug: 
# Author: 
#

Basic requires for every common KF5 / Plasma application

 * kf5-macros

Configure and building with one line ( be free from auto*hell )

Since start of KF5, the cmake build utility was adopted. Cmake is a good easy text base build utility that provides common ways to make out of the source buildings. With kf5-macros package, we provide a common framework to make the most complex build in plasma easy.

So, to build a kf5/Plasma package, you will need just this in %build section:

%build
%cmake_kf5
%make

If you need debug packages, just define _with_debug=1 in the rpm command line or bm. We strongly recommend use bm tool to build your specs.

bm -l --define _with_debug=1

Check that your spec & packages generated match the Mageia policy

Please also install rpmlint-mageia-policy package to check your spec, the src.rpm & the binary generated

rpmlint kmanyfoo.src.rpm
rpmlint kmanyfoo-1.1.mga1.i586.rpm
rpmlint libkmanyfoo1-1.1.mga1.i586.rpm
rpmlint kmanyfoo.spec

Errors found by rpmlint need to be fixed because the package even if it's build won't be upload by our Build System

SPEC defines provided by kf5-macros

TODO

SPEC Layout

This is kind of controversial for many old school packagers, but the nested layout style was adopted since some time by some stubborn packagers ( mostly this one who is kindly writing for you now ) and proves to be more efficient in big packages for edit. The basic idea is, all subpackages have all related entries nested in one block on their spec, instead of having all definitions, then all descriptions, then all post/postun sections then the files sections. In the template below we show an package kmanyfoo, which have two apps and one library.


Template

Name:          kmanyfoo
Summary:       K Desktop Environment
Group:         Graphical desktop/KDE
Version:       4.0.70
Release:       %mkrel 1
License:       GPLv2
URL:           http://www.kde.org
Source:·       ftp://ftp.kde.org/pub/kde/stable/%version/src/kfoo-%version.tar.bz2
BuildRequires: kf5-macros
Requires:      kfooblue
Requires:      kfoored

%description 
- kmanyfoo is a kfoo metapackage for all kfoo applications

# we let the files section empty or with a README to assure package is generated. 
# If the main package is just a convenience main description and doesn't need a meta pack,
we don't even need this section
%files

#------------------------------------------------------

%package kfooblue
Summary: KFoo Blue package
Group: Graphical desktop/KDE

%description kfooblue
KFoo Blue package

%files kfooblue
%_kf5_bindir/kfooblue
%_kf5_libdir/kde4/bluemodule.so
%_kf5_appsdir/kfooblue
# You don't need made all iconspaths explicit, use glob
%_kf5_iconsdir/*/*/*/kfooblue.* 

#------------------------------------------------------

%package kfoored
Summary: KFoo RED package
Group: Graphical desktop/KDE

%description kfoored
KFoo RED package

%files kfoored
%_kf5_bindir/kfoored
# You don't need made all iconspaths explicit, use glob
%_kf5_iconsdir/*/*/*/kfoored.* 
%_kf5_services/kfoored.desktop

#------------------------------------------------------

%define kfoo_major 1
%define libkfoo %mklibname kfoo %kfoo_major

%package -n %libkfoo
Summary: Kfoo library
Group: System/Libraries

%description -n %libkfoo
Kfoo library.


%files -n %libkfoo

%_kf5_libdir/libkfoo.so.%{kfoo_major}*

#------------------------------------------------------

%prep
%setup -q 

%build 
%cmake_kf5
%make

%install
%makeinstall_std -C build 


This page is available under the Creative Commons Attribution-ShareAlike 2.5 License

Authors

  • Helio Chissini de Castro
  • Gustavo Pichorim Boiko
  • Nicolas Lécureuil
  • Markus Espunkt
  • Daniel Kreuter
  • Rémy Clouard