Module Organization and selectionKDE Software Organization
&kde; software is split into different components, many of which can be built
by &kdesrc-build;. Understanding this organization will help you properly
select the software modules that you want built.
At the lowest level comes the &Qt; library, which is a
very powerful, cross-platform toolkit library. &kde; is based on
&Qt;, and some of the non-&kde; libraries required by &kde; are also based on
&Qt;. &kdesrc-build; can build &Qt;, or use the one already installed on your
system if it is a recent enough version.On top of &Qt; are required libraries that are necessary for
&kde; software to work. Some of these libraries are not considered part of
&kde; itself due to their generic nature, but are still essential to the &kde;
Platform. These libraries are collected under a kdesupport
module grouping but are not considered part of the Frameworks
libraries.On top of these essential libraries come the &kde; Frameworks, sometimes
abbreviated as KF5, which are essential libraries for the &kde; Plasma desktop,
&kde; Applications, and other third-party software.
On top of the Frameworks, come several different things:Third-party applications. These are
applications that use the &kde; Frameworks or are designed to run under
&kde; Plasma but are not authored by or in association with the &kde;
project.Plasma, which is a full workspace desktop
environment. This is what users normally see when they log-in to
&kde;.The &kde; Application suite. This is a collection of
useful software included with the Platform and &plasma; Desktop, grouped into
individual modules, including utilities like &dolphin;, games like
KSudoku, and productivity software released by &kde;
such as &kontact;.Finally, there is a collection of software (also
collected in modules) whose development is supported by &kde; resources
(such as translation, source control, bug tracking, &etc;) but is not
released by &kde; as part of Plasma or the Application suite. These
modules are known as Extragear.
Selecting modules to buildSelecting which of the possible modules to build is controlled by
the configuration file.
After the global section is a list of modules to build,
bracketed by module ... end module lines. An example entry for a module is
shown in .Example module entry in the configuration file
module kdesrc-build-git
# Options for this module go here, example:
repository kde:kdesrc-build
make-options -j4 # Run 4 compiles at a time
end module
In practice, this module construct is not usually used directly. Instead
most modules are specified via module-sets as described below.When using only module entries, &kdesrc-build; builds them in the order
you list, and does not attempt to download any other repositories other than what you specify
directly.
Module SetsThe &kde; source code is decomposed into a great number of relatively
small Git-based repositories. To make it easier to manage the large number of
repositories involved in any useful &kde;-based install, &kdesrc-build; supports
grouping multiple modules and treating the group as a module set.
The basic module set conceptBy using a module set, you can quickly declare many Git modules to be
downloaded and built, as if you'd typed out a separate module declaration for
each one. The repository option is
handled specially to setup where each module is downloaded from, and every
other option contained in the module set is copied to every module generated
in this fashion.Using module sets
global
kde-gitkde:
end global
module qt
# Options removed for brevity
end module
module-set kde-support-libskde-gitautomocatticaakonadi
end module-set
# Other modules as necessary...
module kdesupport
end module
In a brief module set is
shown. When &kdesrc-build; encounters this module set, it acts as if, for
every module given in , that an individual module
has been declared, with its equal to the
module-set's followed immediately by the given
module name.In addition, other options can be passed in a module set, which are
copied to every new module that is created this way. By using module-set it is
possible to quickly declare many Git modules that are all based on the same
repository URL. In addition, it is possible to give module-sets a name (as shown
in the example), which allows you to quickly refer to the entire group of
modules from the command line.Special Support for KDE module setsThe module set support described so far is general to any Git-based
modules. For the &kde; Git repositories, &kdesrc-build; includes additional
features to make things easier for users and developers. This support is
enabled by specifying kde-projects as the
for the module set.
&kdesrc-build; normally only builds the modules you have listed in your
configuration file, in the order you list them. But with a
kde-projects module set, &kdesrc-build; can do dependency
resolution of &kde;-specific modules, and in addition automatically include
modules into the build even if only indirectly specified.Using kde-projects module sets
# Only adds a module for juk (the kde/kdemultimedia/juk repo)
module-set juk-set
kde-projects
juk
end module-set
# Adds all modules that are in kde/multimedia/*, including juk,
# but no other dependencies
module-set multimedia-set
kde-projects
kde/multimedia
end module-set
# Adds all modules that are in kde/multimedia/*, and all kde-projects
# dependencies from outside of kde/kdemultimedia
module-set multimedia-deps-set
kde-projects
kde/multimediatrue
end module-set
# All modules created out of these three module sets are automatically put in
# proper dependency order, regardless of the setting for include-dependencies
This kde-projects module set construct is the main method
of declaring which modules you want to build.All module sets use the repository
and use-modules options. kde-projects module
sets have a predefined value, but other types of
module sets also will use the git-repository-base option.
The official &kde; module database&kde;'s Git repositories allow for grouping related Git modules into
collections of related modules (e.g. kdegraphics). Git doesn't recognize these
groupings, but &kdesrc-build; can understand these groups, using module sets with a
option set to kde-projects.&kdesrc-build; will recognize that the kde-projects
repository requires special handling, and adjust the build process
appropriately. Among other things, &kdesrc-build; will:Download the latest module database from the &kde; git archive.Try to find a module with the name given in the module set's
setting in that database.For every module that is found, &kdesrc-build; will lookup the
appropriate repository in the database, based upon the branch-group setting in effect. If a
repository exists and is active for the branch group, &kdesrc-build; will
automatically use that to download or update the source code.
In the current database, some module groups not only have a
collection of modules, but they also declare their own
&git; repository. In these situations &kdesrc-build; will currently prefer the
group's &git; repository instead of including the childrens' repositories.
The following example shows how to use the &kde; module database to
install the Phonon multimedia library.
module-set media-support
# This option must be kde-projects to use the module database.
kde-projects
# This option chooses what modules to look for in the database.
phonon/phononphonon-gstreamerphonon-vlc
end module-set
phonon/phonon is used since (with the current
project database) &kdesrc-build; would otherwise have to decide between the
group of projects called phonon or the individual project named
phonon. Currently &kdesrc-build; would pick the former, which
would build many more backends than needed.The following example is perhaps more realistic, and shows a feature only
available with the &kde; module database: Building all of the &kde; graphics
applications with only a single declaration.
module-set kdegraphics
# This option must be kde-projects to use the module database.
kde-projects
# This option chooses what modules to look for in the database.
kdegraphics/libskdegraphics/*
end module-set
There are two important abilities demonstrated here:&kdesrc-build; allows you to specify modules that are
descendents of a given module, without building the parent module, by using the
syntax module-name/*. It is
actually required in this case since the base module, kdegraphics, is marked as
inactive so that it is not accidentally built along with its children modules.
Specifying the descendent modules allows &kdesrc-build; to skip around the
disabled module.
&kdesrc-build; will also not add a given module to the build
list more than once. This allows us to manually set
kdegraphics/libs to build first, before the rest of
kdegraphics, without trying to build
kdegraphics/libs twice. This used to be required for proper
dependency handling, and today remains a fallback option in case the &kde;
project database is missing dependency metadata.
Filtering out &kde; project modulesYou might decide that you'd like to build all programs within a &kde;
module grouping except for a given program.For instance, the kdeutils group includes a program
named kremotecontrol. If your computer does not have
the proper hardware to receive the signals sent by remote controls then you may
decide that you'd rather not download, build, and install
kremotecontrol every time you update
kdeutils.You can achieve this by using the ignore-modules configuration option.
On the command line the
&cmd-ignore-modules; option
does the same thing, but is more convenient for filtering out a module just once.
Example for ignoring a kde-project module in a group
module-set utilskde-projects
# This option chooses what modules to look for in the database.
kdeutils
# This option "subtracts out" modules from the modules chosen by use-modules, above.
kremotecontrol
end module-set
module-set graphicskde-projects
# This option chooses what modules to look for in the database.
extragear/graphics
# This option "subtracts out" modules from the modules chosen by use-modules, above.
# In this case, *both* extragear/graphics/kipi-plugins and
# extragear/graphics/kipi-plugins/kipi-plugins-docs are ignored
extragear/graphics/kipi-plugins
end module-set