
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.
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.
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.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.
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”.
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.
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”.
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
globalgit-repository-base
kde-git
kde:
end global moduleqt
# Opties verwijderd voor beknoptheid end module module-setkde-support-libs
repository
kde-git
use-modules
automoc
attica
akonadi
end module-set # Andere modules indien nodig... modulekdesupport
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.
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-setjuk-set
repository
kde-projectsuse-modules
juk
end module-set # Voegt alle modules toe die in kde/multimedia/* aanwezig zijn, inclusief juk, # maar geen andere dependencies module-setmultimedia-set
repository
kde-projectsuse-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-setmultimedia-deps-set
repository
kde-projectsuse-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.
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-setmedia-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-setkdegraphics
# 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:
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
. 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.module-name
/*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 vankdegraphics
, zonder dat geprobeerd wordt omkdegraphics/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.
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-setutils
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-setgraphics
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 genegeerdignore-modules
extragear/graphics/kipi-plugins
end module-set