All application packages (or subpackages) should have exactly the same name as they have in their 'main' package, e.g.:
Every library should be split in a package with proper soname. There is a common complain to have too many subpackages, but this is just a excuse for laziness. Some reasons behind splits:
Package should not require libraries explicitly. Rpmbuild in ROSA sets all necessary dependencies automatically.
How does this look like in a spec file following the standard ROSA 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 %defattr(-,root,roo,-) %_kde_libdir/libkfoo.so.%{kfoo_major}*
KDE have many modules that at first sight for new packagers looks like a library. You usually can find it in %_kde_libdir/kde4. They are not libraries at all, are dynamic loading modules, and:
Every patch for a kde package MUST have this header :
# # Description: # Forwarded: # Bug: # Author: #
Since start of KDE 4, 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 kde4-macros package, we provide a common framework to make the most complex build in kde4 easy.
So, to build a kde4 package, you will need just this in %build section:
%build %cmake_kde4 %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
Macro | Value | Description |
---|---|---|
%_kde_prefix | /usr | Main prefix for kde applications |
%_kde_libdir | %_kde_prefix/%_lib | Library directory |
%_kde_iconsdir | %_kde_prefix/share/icons | Icons directory |
%_kde_sysconfdir | %_sysconfdir | System configuration directory |
%_kde_datadir | %_kde_prefix/share | Common data dir for kde |
%_kde_configdir | %_kde_datadir/config | kde config dir |
%_kde_appsdir | %_kde_datadir/apps | Application specific dir |
%_kde_docdir | %_kde_prefix/share/doc | Documentation dir |
%_kde_bindir | %_kde_prefix/bin | Binary dir |
%_kde_sbindir | %_kde_prefix/sbin | SBinary dir |
%_kde_includedir | %_kde_prefix/include | Include dir |
%_kde_mandir | %_kde_prefix/share/man | Man dir for kde |
%_kde_autostart | %_kde_prefix/share/autostart | Autostart |
%_kde_services | %_kde_prefix/share/kde4/services | Sycoca services |
kde_servicetypes | %_kde_prefix/share/kde4/servicetypes | Service mimes |
This is kind of controversial for many old school packagers, but the nested layout style was adopted since some time 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 havin 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.
Name: kmanyfoo Summary: K Desktop Environment Version: 4.0.70 Group: Graphical desktop/KDE License: GPL URL: http://www.kde.org Release: 1 Source:· ftp://ftp.kde.org/pub/kde/stable/%version/src/kfoo-%version.tar.bz2 BuildRequires: kdelibs4-devel BuildRequires: desktop-file-utils 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 don't need a meta pack, we even don't need this section %files #------------------------------------------------------ %package kfooblue Summary: KFoo Blue package Group: Graphical desktop/KDE %descriton kfooblue KFoo Blue package %files kfooblue %defattr(-,root,root,-) %_kde_bindir/kfooblue %_kde_libdir/kde4/bluemodule.so %_kde_appsdir/kfooblue # You don't need made all iconspaths explicit, use glob %_kde_iconsdir/*/*/*/kfooblue.* #------------------------------------------------------ %package kfoored Summary: KFoo RED package Group: Graphical desktop/KDE %descriton kfoored KFoo RED package %files kfoored %defattr(-,root,root,-) %_kde_bindir/kfoored # You don't need made all iconspaths explicit, use glob %_kde_iconsdir/*/*/*/kfoored.* %_kde_servicesdir/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. %post -n %libkfoo -p /sbin/ldconfig %postun -n %libkfoo -p /sbin/ldconfig %files -n %libkfoo %defattr(-,root,root,-) %_kde_libdir/libkfoo.so.%{kfoo_major}* #------------------------------------------------------ %prep %setup -q %build %cmake_kde4 %make %install rm -fr %buildroot make -C build DESTDIR=%buildroot install %check for f in %{buildroot}%{_kde_datadir}/applications/kde4/*.desktop ; do desktop-file-validate $f done