KDE-programvara är uppdelad i olika komponenter, där en stor del kan byggas av kdesrc-build. Att förstå organisationen hjälper till att välja programvarumoduler att bygga.
På lägsta nivån finns Qt™-biblioteket, som är en mycket kraftfull, plattformsoberoende ”verktygslåda”. KDE är baserat på Qt™ och vissa av de bibliotek som inte hör till KDE, men krävs av KDE, är också baserade på Qt™. kdesrc-build kan bygga Qt™ eller använda ett som redan är installerat på systemet om versionen är tillräckligt ny.
Ovanpå Qt™ finns nödvändiga bibliotek som krävs för att KDE-programvara ska fungera. Vissa av dessa bibliotek anses inte vara en del av själva KDE, på grund av deras generella natur, med är ändå väsentliga för KDE-plattformen. Dessa bibliotek samlas i modulen
kdesupport
, men anses inte vara en del av ”Ramverk-biblioteken”.Ovanpå de här väsentliga biblioteken kommer KDE Ramverk, ibland förkortat som KF5, vilka är väsentliga bibliotek för KDE:s Plasma-skrivbord, KDE-program och annan tredjepartsprogramvara.
Ovanpå ramverket, finns flera olika saker:
”Tredjepartsprogram”. Detta är program som använder KDE:s ramverk eller är konstruerade för att köra med KDE Plasma, men inte skapas av eller i samröre med KDE-projektet.
Plasma, som är en komplett skrivbordsmiljö, ”arbetsyta”. Det är vad användare normalt ser när de ”loggar in med KDE”.
KDE:s programvarusvit. Det är en samling användbar programvara som inkluderas med plattformen och Plasma™-skrivbord, grupperade i individuella moduler, inklusive verktyg som Dolphin, spel som Ksudoku och produktivitetsprogram som ges ut av KDE, såsom Kontact.
Till sist, finns en samling programvara (också samlad i moduler) vars utveckling stöds av resurser som tillhandahålls av KDE (såsom översättning, källkodskontroll, feluppföljning, etc.), men inte ges ut av KDE eller som en del av Plasma eller programvarusamlingen. Dessa moduler kallas för ”extragear”.
Att välja vilka av möjliga moduler som ska byggas styrs av inställningsfilen. Efter sektionen global
finns en lista av moduler att bygga, omgivna av raderna module ... end module. Ett exempel på en post för en modul visas i Exempel 2.4, ”Exempel på modulpost i inställningsfilen”.
Exempel 2.4. Exempel på modulpost i inställningsfilen
module kdesrc-build-git
# Alternativ för modulen anges här, exempelvis:
repository kde:kdesrc-build
make-options -j4 # Kör 4 kompileringar samtidigt
end module
Notera
I praktiken används oftast inte modulkonstruktionen direkt. Istället anges de flesta moduler via moduluppsättningar som beskrivs nedan.
När bara poster som module
används, bygger kdesrc-build dem i ordningen som anges, och försöker inte ladda ner några andra arkiv utom de som är direkt angivna.
KDE:s källkod är uppdelad i ett stort antal relativ små Git-baserade arkiv. För att göra det enklare att hantera det stora antalet arkiv som är inblandade i alla användbara KDE-baserade installationer, stöder kdesrc-build gruppering av flera moduler och att behandla gruppen som en ”moduluppsättning”.
Genom att använda en moduluppsättning kan man enkelt deklarera att många Git-moduler ska laddas ner och byggas, som om en separat moduldeklaration skrevs ut för var och en av dem. Alternativet repository hanteras på ett särskilt sätt för att ställa in varifrån varje modul laddas ner, medan alla andra alternativ som finns i moduluppsättningen kopieras till varje modul som skapas på detta sätt.
Exempel 2.5. Använda moduluppsättningar
globalgit-repository-base
kde-git
kde:
end global moduleqt
# Alternativ borttagna för korthets skull end module module-setkde-support-libs
repository
kde-git
use-modules
automoc
attica
akonadi
end module-set # Övriga moduler efter behov... modulekdesupport
end module
I Exempel 2.5, ”Använda moduluppsättningar” visas en kortfattad moduluppsättning. När kdesrc-build träffar på moduluppsättningen, beter det sig som om en individuell modul har skapats för varje modul angiven i use-modules
lika med moduluppsättningens repository
omedelbart följt av det angivna modulnamnet.
Dessutom kan andra alternativ tas med i en moduluppsättning, som kopieras till varje ny modul som skapas på detta sätt. Genom att använda moduluppsättningar är det möjligt att snabbt deklarera många Git-moduler som är baserade på webbadressen för samma arkiv. Dessutom är det möjligt att namnge moduluppsättningar (som visas i exemplet), vilket gör det möjligt att snabbt referera till hela gruppen av moduler på kommandoraden.
Stödet för moduluppsättningar som hittills beskrivits är generell för vilken Git-baserad modul som helst. För KDE:s Git-arkiv innehåller kdesrc-build ytterligare funktioner för att göra saker lättare för användare och utvecklare. Stödet aktiveras genom att ange kde-projects
som repository
för moduluppsättningen.
kdesrc-build bygger normalt bara modulerna som är listade i inställningsfilen, i ordningen som de listas. Men med moduluppsättningen kde-projects
, kan kdesrc-build utföra beroendehantering för KDE-specifika moduler, och dessutom automatiskt inkludera moduler i bygget även om de bara specificeras indirekt.
Exempel 2.6. Använda kde-projects moduluppsättningar
# Lägger bara till en modul för juk (arkivet kde/kdemultimedia/juk) module-setjuk-set
repository
kde-projectsuse-modules
juk
end module-set # Lägger till alla moduler som finns i kde/multimedia/*, inklusive juk, # men inga andra beroenden module-setmultimedia-set
repository
kde-projectsuse-modules
kde/multimedia
end module-set # Lägger till alla moduler som finns i kde/multimedia/*, och alla beroenden # på kde-projects utanför kde/kdemultimedia module-setmultimedia-deps-set
repository
kde-projectsuse-modules
kde/multimedia
include-dependencies
true
end module-set # Alla moduler som skapas av dessa tre moduluppsättningar läggs automatiskt i # korrekt beroendeordning, oberoende av inställningen av include-dependencies
Tips
Konstruktionen med moduluppsättningen kde-projects
är huvudmetoden för att ange vilka moduler som man vill bygga.
Alla moduluppsättningar använder alternativen repository och use-modules. Moduluppsättningarna kde-projects
har ett fördefinierat värde på repository
, men andra typer av moduluppsättningar använder också alternativet git-repository-base.
KDE:s Git-arkiv tillåter att relaterade Git-moduler grupperas i samlingar av relaterade moduler (t.ex. kdegraphics). Git känner inte till sådana grupperingar, men kdesrc-build kan förstå grupperna genom att använda moduluppsättningar med alternativet repository
inställt till ”kde-projects
”.
kdesrc-build förstår att arkivet kde-projects
kräver särskild hantering, och justerar kompileringsprocessen därefter. Bland annat kommer kdesrc-build att:
Ladda ner den senaste moduldatabasen från KDE:s git-arkiv.
Försök att hitta en modul med det givna namnet i moduluppsättningens inställning i databasen,
use-modules
.För varje modul som hittas, slår kdesrc-build upp lämpligt arkiv i databasen, i själva verket baserat på inställningen branch-group. Om ett arkiv finns och är aktivt för grengruppen, använder kdesrc-build det automatiskt för att ladda ner eller uppdatera källkoden.
Notera
I den nuvarande databasen har vissa modulgrupper inte bara en samling moduler, utan de anger också sitt eget Git-arkiv. I dessa situationer föredrar kdesrc-build för närvarande gruppens Git-arkiv istället för att inkludera delmodulernas arkiv.
Nästa exempel visar hur man använder KDEs moduldatabas för att installera multimediabiblioteket Phonon.
module-setmedia-support
# Denna väljare måste vara kde-projects för att använda moduldatabasen.repository
kde-projects
# Denna väljare anger vilken modul som ska sökas efter i databasen.use-modules
phonon/phonon
phonon-gstreamer
phonon-vlc
end module-set
Tips
Här används phonon/phonon
eftersom kdesrc-build annars skulle behöva välja mellan projektgruppen vid namn ”phonon” eller det enskilda projektet vid namn ”phonon” (med den nuvarande projektdatabasen). För närvarande skulle kdesrc-build välja det första, vilket skulle bygga många fler gränssnitt än vad som behövs.
Nästa exempel är kanske mer realistiskt, och visar en funktion som bara är tillgänglig med KDEs moduldatabas: Att bygga alla KDE:s grafikprogram med en enda deklaration.
module-setkdegraphics
# Denna väljare måste vara kde-projects för att använda moduldatabasen.repository
kde-projects
# Denna väljare anger vilka moduler som ska sökas efter i databasen.use-modules
kdegraphics/libs
kdegraphics/*
end module-set
Här åskådliggörs två viktiga möjligheter:
kdesrc-build låter dig ange moduler som är härstammar från en given modul, utan att bygga modulen själv, genom att använda syntaxen
. Det krävs i själva verket i det här fallet, eftersom basmodulen, kdegraphics, är markerad som inaktiv, så att den inte av misstag byggs med sina ättlingar. Att ange ättlingar låter kdesrc-build hoppa förbi den inaktiverade modulen.modulnamn
/*kdesrc-build lägger inte heller till en given modul i bygglistan mer än en gång. Det låter oss manuellt ange att
kdegraphics/libs
ska byggas först, innan resten avkdegraphics
utan att försöka byggakdegraphics/libs
två gånger. Det krävdes tidigare för riktig beroendehantering, och är idag ett reservalternativ i fall KDE:s projektdatabas saknar metadata för beroenden.
Du kan bestämma dig för att du vill bygga alla program i en gruppering av KDE-moduler utom ett visst program.
Exempelvis inkluderar gruppen kdeutils
ett program som heter kremotecontrol. Om datorn inte har lämplig hårdvara för att ta emot signaler som skickas från fjärrkontroller kanske du bestämmer att du inte vill ladda ner, bygga och installera kremotecontrol varje gång som kdeutils
uppdateras.
Du kan åstadkomma det genom att använda inställningsalternativet ignore-modules. På kommandoraden gör väljaren --ignore-modules samma sak, men är bekvämare för att bara filtrera bort en modul en enstaka gång.
Exempel 2.7. Exempel på att ignorera en kde-project modul i en grupp
module-setutils
repository
kde-projects
# Denna väljare anger vilka moduler som ska sökas efter i databasen.use-modules
kdeutils
# Denna väljare "subtraherar bort" moduler från modulerna som väljes av use-modules ovan.ignore-modules
kremotecontrol
end module-set module-setgraphics
repository
kde-projects
# Denna väljare anger vilka moduler som ska sökas efter i databasen.use-modules
extragear/graphics
# Denna väljare "subtraherar bort" moduler från modulerna som väljes av use-modules ovan. # I detta fall, ignoreras *både* extragear/graphics/kipi-plugins # och extragear/graphics/kipi-plugins/kipi-plugins-docsignore-modules
extragear/graphics/kipi-plugins
end module-set