Organisatie en selectie van modulen

Organisatie van KDE Software

KDE software is opgesplitst in verschillende onderdelen, veel daarvan kan door kdesrc-build worden gebouwd. Begrip van de indeling hiervan helpt u bij het correct selecteren van de software modules die u wilt bouwen.

  1. Op het laagste niveau komt de Qt™ library, wat een erg krachtige, cross-platform toolkit library is. KDE is gebaseerd op Qt™, en sommige van de niet-KDE libraries die vereist zijn door KDE zijn ook gebaseerd op Qt™. kdesrc-build kan Qt™ bouwen, of diegene gebruiken die al op uw systeem is geïnstalleerd als deze recent genoeg is.

  2. Boven op die van Qt™ zijn er meer vereiste libraries die nodig zijn voor KDE software om te kunnen werken. Sommige van deze libraries worden niet als onderdeel van KDE zelf beschouwt vanwege hun algemene inzetbaarheid, maar zijn toch essentieel voor het KDE Platform. Deze libraries zijn verzameld in een kdesupport module maar worden toch niet als een onderdeel van Frameworks beschouwt.

  3. Boven op deze essentiële libraries komen de KDE Frameworks, soms afgekort als KF5, wat essentiële libraries zijn voor de KDE Plasma desktop, KDE programma's, en software van anderen.

  4. Boven op het Platform, komen verschillende anderen dingen:

    • Third-party programma's. Dit zijn programma's die het KDE Frameworks wel gebruiken maar niet door het KDE project zijn geprogrammeerd of daarmee geassocieerd zijn.

    • Plasma, wat een volledige workspace desktop omgeving is. Dit is wat gebruikers normaal gesproken zien als ze inloggen bij KDE.

    • Het programma-pakket van KDE. Dit is een verzameling van handige software dat met het Platform en de Plasma™ Desktop wordt meegeleverd, onderverdeelt in aparte modules, waaronder ook hulpprogramma's zoals Dolphin, spelletjes zoals KSudoku, en produktie software gereleased doorKDE zoals Kontact.

    • Tenslotte, is er een verzameling software (ook in modules verzameld) waarvan de ontwikkeling door KDE resources wordt ondersteunt (zoals vertalingen, source control, bug tracking, etc.) maar niet door KDE is gereleased als onderdeel van Plasma of de verzameling programma's. Deze modules staan bekent als Extragear.

Selectie van te bouwen modules

De selectie van de mogelijke modules voor het bouwen, regelt u in het configuratiebestand. Na de sectie global is een lijst van te bouwen modules, Omsloten door module ... end module regels. Een voorbeeld van een module is te zien in Voorbeeld 2.4, “Voorbeeld van een module-item in het configuratiebestand”.

Voorbeeld 2.4. Voorbeeld van een module-item in het configuratiebestand

module kdesrc-build-git
    # Opties voor deze module komen hier, voorbeeld:
    repository kde:kdesrc-build
    make-options -j4 # Voer 4 compilaties tegelijk uit
end module

Opmerking

In de praktijk wordt deze module constructie meestal niet direct gebruikt. In plaats daarvan zijn de meeste modules zoals hierboven beschreven gespecificeerd via module-sets.

Als u alleen module entries gebruikt, dan zal kdesrc-build ze in de opgegeven volgorde bouwen, en zal niet proberen om andere dan de door u opgegeven repositories te downloaden.

Module Sets

De broncode van KDE is onderverdeelt in een groot aantal relatief kleine op Git gebaseerde repositories. Om het grote aantal repositories dat nodig is bij een op KDE-gebaseerde installatie makkelijk te beheren, ondersteunt kdesrc-build het groeperen van meerdere modules en behandelt een dergelijke groep als een module set.

Het basisidee module set

Door een module set te gebruiken, kunt u op een snelle manier declareren welke Git modules u wilt downloaden en bouwen, net alsof u voor elk een aparte module declaratie heeft getyped. De optie repository is speciaal bedoelt om in te stellen waar elke module vandaan moet worden gedownload, en elke andere optie die in de module set voorkomt op dezelfde manier naar elke andere module wordt gekopieerd.

Voorbeeld 2.5. Modulen sets gebruiken

global
    git-repository-base kde-git kde:
end global

module qt
    # Opties verwijderd voor beknoptheid
end module

module-set kde-support-libs
    repository kde-git
    use-modules automoc attica akonadi
end module-set

# Andere modules indien nodig...
module kdesupport
end module

In Voorbeeld 2.5, “Modulen sets gebruiken” ziet u een kleine module set. Als kdesrc-build deze module set tegenkomt, dan handelt het alsof, bij elke module opgegeven in use-modules, dat een individuele module is gedeclareerd met zijn repository overeenkomstig met de module-set's repository onmiddellijk gevolgd door de opgegeven modulenaam.

Daarnaast kunt u in een module set andere opties opgegeven, die naar elke nieuwe module wordt gekopieerd dat op deze manier wordt gecreëerd. Door module-set te gebruiken, is het mogelijk om op een snelle manier veel Git modules te declareren die alle op dezelfde repository URL zijn gebaseerd. Daarnaast is het mogelijk om een bepaalde module-sets een naam te geven (zoals in het voorbeeld te zien is), zodat u vanaf de commandoregel makkelijk naar een hele groep van modules kunt refereren.

Speciale ondersteuning voor KDE module sets

De tot nu toe beschreven ondersteuning voor module set is voor alle op Git gebaseerde modules. Voor de Git repositories van KDE, heeft kdesrc-build extra functionaliteiten om het makkelijker voor de gebruikers en de ontwikkelaars te maken. U schakelt deze functionaliteit in door kde-projects te specificeren voor de repository in de module set.

kdesrc-build bouwt normaal gesproken alleen de modules die u heeft opgegeven in uw configuratiebestand, in de opgegeven volgorde. Maar bij een kde-projects module set, kan kdesrc-build de dependency van de KDE-specifieke modules oplossen, en kan automatisch modules aan de bouw toevoegen zelfs als ze indirect zijn gespecificeerd.

Voorbeeld 2.6. kde-projects module sets gebruiken

# Voegt alleen een module voor juk toe (de kde/kdemultimedia/juk repo)
module-set juk-set
    repository kde-projects
    use-modules juk
end module-set

# Voegt alle modules toe die in kde/multimedia/* aanwezig zijn, inclusief juk,
# maar geen andere dependencies
module-set multimedia-set
    repository kde-projects
    use-modules kde/multimedia
end module-set

# Voegt alle modules toe die in kde/multimedia/* aanwezig zijn, en all kde-projects
# dependencies die buiten kde/kdemultimedia zijn
module-set multimedia-deps-set
    repository kde-projects
    use-modules kde/multimedia
    include-dependencies true
end module-set

# Alle modules die in deze drie module sets zijn gecreëerd worden automatisch in
# juiste dependency volgorde gezet, onafhankelijk van de instellingen voor de include-dependencies

Tip

Deze module set constructie kde-projects is de belangrijkste methode om te declareren welke modules u wilt bouwen.

Alle module sets gebruiken de opties repository en use-modules. kde-projects module sets hebben de voorgedefinieerde waarde repository, maar andere types module sets kunnen ook de optie git-repository-base gebruiken.

De officiële database voor KDE-modulen

Bij de Git repositories van KDE is mogelijk om bij elkaar horende Git modules te groeperen in verzamelingen van bij elkaar horen modules (b.v. kdegraphics). Git herkent deze groeperingen niet, maar kdesrc-build kan deze groepen wel begrijpen, door module sets met de optie repository ingesteld op kde-projects.

kdesrc-build zal herkennen dat de kde-projects repository een speciale behandeling vereist, en zal het bouwproces aanpassen. Naast andere dingen, zal kdesrc-build:

  • De laatste modulendatabase vanaf het Git-archief van KDE downloaden.

  • In die database een module proberen te vinden met de naam opgegeven in de use-modules instelling van de moduleset.

  • Voor elke gevonden module, zal kdesrc-build de juisterepository in de database opzoeken, gebaseerd op de instelling branch-group. Als een repository bestaat en geldig is voor de branch group, dan zal kdesrc-build deze automatisch gebruiken om de broncode te downloaden of up te daten.

Opmerking

In de huidige database, hebben sommige module groepen niet alleen een verzameling modules, maar ze declareren ook hun eigen Git repository. In zulke situaties zal kdesrc-build op dit moment de voorkeur geven aan de Git repository van de groep in plaats van de repositories van de onderdelen.

Het volgende voorbeeld toont hoe u de KDE module database moet gebruiken om de Phonon multimedia library te installeren.

module-set media-support
    # Deze optie moet kde-projects zijn om de module database te gebruiken.
    repository kde-projects

    # Deze optie geeft aan naar welke modules gezocht moet worden in de database.
    use-modules phonon/phonon phonon-gstreamer phonon-vlc
end module-set

Tip

phonon/phonon is gebruikt omdat (met de huidige project database) kdesrc-build anders moet kiezen tussen de groep projecten genaamd phonon en het individuele project genaamd phonon. Op dit moment zal kdesrc-build de eerste selecteren, zodat er veel meer backends dan nodig worden gebouwd.

Het volgende voorbeeld is misschien realistischer, en toont een functionaliteit die alleen bij de KDE module database beschikbaar is: het met alleen maar een enkele declaratie bouwen van alle KDE grafische programma's.

module-set kdegraphics
    # Deze optie moet kde-projects zijn om de module database te gebruiken.
    repository kde-projects

    # Deze optie geeft aan naar welke modules gezocht moet worden in de database.
    use-modules kdegraphics/libs kdegraphics/*
end module-set

Er worden hier twee belangrijke mogelijkheden gedemonstreerd:

  1. kdesrc-build staat het u toe dat u modules opgeeft die afstammen van een bepaalde module, zonder dat de ouder module gebouwd moet worden, door gebruik van de syntax module-name/*. In dit geval is dat eigenlijk vereist omdat de basismodule, kdegraphics, als inactief is gemarkeerd zodat het niet per ongeluk samen met zijn kinderen gebouwd kan worden. Door de afstammende modules op te geven, kan kdesrc-build de uitgeschakelde module overslaan.

  2. kdesrc-build zal een bepaalde module niet meer dan een keer aan de bouwlijst toevoegen. Hierdoor kunnen wij handmatig kdegraphics/libs bovenaan de lijst toevoegen, voor de rest van kdegraphics, zonder dat geprobeerd wordt om kdegraphics/libs twee keer te bouwen. Dit was vroeger nodig voor het afhandelen van de juiste dependencies, en is nu een reserve voor het geval dat de dependency metadata in de KDE project database ontbreekt.

KDE project modules uitfilteren

U zou kunnen besluiten dat u alle programma's in een KDE module groep wilt bouwen behalve een bepaald programma.

Bijvoorbeeld, in de groep kdeutils is ook een programma genaamdkremotecontrol. Als uw computer niet de juiste hardware heeft om de door een afstandsbediening verzonden signalen te ontvangen, dan zou u kunnen besluiten dat u kremotecontrol niet iedere keer wilt downloaden, compileren en installeren als u kdeutils update.

U kunt dit bereiken door de configuratieoptie modules negeren te gebruiken. Op de opdrachtregel doet de optie --ignore-modules hetzelfde, maar het is gemakkelijker om een module eenmalig uit te filteren.

Voorbeeld 2.7. Voorbeeld van het negeren van een kde-project module in een groep

module-set utils
    repository kde-projects

    # Hier stelt u in welke modules in de database worden opgezocht.
    use-modules kdeutils

    # Hier stelt u in welke modules worden "uitgefilterd" van de modules gekozen via use-modules, hierboven.
    ignore-modules kremotecontrol
end module-set

module-set graphics
    repository kde-projects

    # Hier stelt u in welke modules in de database worden opgezocht.
    use-modules extragear/graphics

    # Hier stelt u in welke modules worden "uitgefilterd" van de modules gekozen via use-modules, hierboven.
    # In dit geval, zijn *zowel* extragear/graphics/kipi-plugins en
    # extragear/graphics/kipi-plugins/kipi-plugins-docs genegeerd
    ignore-modules extragear/graphics/kipi-plugins
end module-set