Organisation och urval av moduler

Organisation av KDE-programvara

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.

  1. 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.

  2. 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 modulenkdesupport, men anses inte vara en del av Ramverk-biblioteken.

  3. 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.

  4. 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.

Välja moduler att bygga

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.

Moduluppsättningar

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.

Moduluppsättningarnas grundkoncept

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

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

module qt
    # Alternativ borttagna för korthets skull
end module

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

# Övriga moduler efter behov...
module kdesupport
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.

Särskilt stöd för KDE:s moduluppsättningar

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-set juk-set
    repository kde-projects
    use-modules juk
end module-set

# Lägger till alla moduler som finns i kde/multimedia/*, inklusive juk,
# men inga andra beroenden
module-set multimedia-set
    repository kde-projects
    use-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-set multimedia-deps-set
    repository kde-projects
    use-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 officiella moduldatabas

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-set media-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-set kdegraphics
    # 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:

  1. 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 modulnamn/*. 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.

  2. 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 av kdegraphics utan att försöka bygga kdegraphics/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.

Filtrera bort KDE:s projektmoduler

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-set utils
    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-set graphics
    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-docs
    ignore-modules extragear/graphics/kipi-plugins
end module-set