modules and source code organization

The Module
groups its software into modules of various size. This was initially a loose grouping of a few large modules, but with the introduction of the Git-based source code repositories, these large modules were further split into many smaller modules.
uses this module concept as well. In essence, a module is a grouping of code that can be downloaded, built, tested, and installed.

Individual modules
It is easy to set to build a single module. The following listing is an example of what a declaration for a Git-based module would look like in the configuration file.

module kdefoo
    cmake-options -DCMAKE_BUILD_TYPE=Debug
end module

This is a Git-based module since it doesn't use a repository option. Also, the cmake-options option is listed as an example only, it is not required.

Groups of related modules
Now most source modules are Git-based , and are normally combined into groups of modules.
therefore supports groups of modules as well, using module sets. An example:

module-set base-modules
    repository kde-projects
    use-modules kde-runtime kde-workspace kde-baseapps
end module-set

You can leave the module set name (base-modules in this case) empty if you like. This repository setting tells where to download the source from, but you can also use a git:// URL.
One special feature of the repository kde-projects is that will automatically include any Git modules that are grouped under the modules you list (in the KDE Project database).

Module branch groups
Taking the concept of a group of modules further, the developers eventually found that synchronizing the names of the Git branches across a large number of repositories was getting difficult, especially during the development push for the new Frameworks for 5.
So the concept of branch groups was developed, to allow users and developers to select one of only a few groups, and allow the script to automatically select the appropriate Git branch.
supports this feature as of version 1.16-pre2, via the branch-group option.

Example of using branch-group
branch-group can be used in the configuration file as follows:

global
    # Select KDE Frameworks 5 and other Qt5-based apps
    branch-group kf5-qt5

    # Other global options here ...
end global

module-set
    # branch-group only works for kde-projects
    repository kde-projects

    # branch-group is inherited from the one set globally, but could
    # specified here.

    use-modules kdelibs kde-workspace
end module-set

# kdelibs's branch will be "frameworks"
# kde-workspace's branch will be "master" (as of August 2013)

In this case the same branch-group gives different branch names for each Git module.
This feature requires some data maintained by the developers in a Git repository named kde-build-metadata, however this module will be included automatically by (though you may see it appear in the script output).
modules that do not have a set branch name for the branch group you choose will default to an appropriate branch name, as if you had not specified branch-group at all.