I programmi di KDE sono divisi in diversi componenti, molti dei quali possono essere generati da kdesrc-build. Comprenderne l'organizzazione aiuterà a selezionare correttamente i moduli che vuoi generare.
Al livello più basso c'è la libreria Qt™, che è una serie di strumenti molto potenti e multipiattaforma. KDE si basa su Qt™, e anche alcune delle librerie esterne richieste da KDE si basano su Qt™. kdesrc-build può generare Qt™ o usarne una versione già installata sul tuo sistema se è abbastanza recente.
Sopra Qt™ ci sono le librerie necessarie al funzionamento dei programmi di KDE. Alcune di queste non sono considerate parte di KDE per la loro natura generica, ma sono comunque essenziali alla piattaforma di KDE. Queste librerie sono raccolte in un raggruppamento di moduli
kdesupport
ma non sono considerate parte delle librerie «Frameworks».Sopra queste librerie essenziali si trova KDE Frameworks, di solito abbreviato in KF5, composto dalle librerie essenziali per il desktop KDE Plasma, KDE Applications e altro software di terze parti.
Sopra Frameworks ci sono diverse cose:
Applicazioni di «terze parti». Queste sono applicazioni che usano KDE Frameworks o sono progettate per funzionare sotto KDE Plasma ma non sono scritte da o associate al progetto KDE.
Plasma, che è un ambiente desktop completo basato sugli «spazi di lavoro». Questo è quello che gli utenti vedono quando «accedono a KDE».
La suite KDE Application. Questa è una raccolta di software incluso con la piattaforma e il desktop Plasma™, raggruppato in moduli individuali, incluso i programmi di utilità come Dolphin, giochi come KSudoku e software per la produttività, come Kontact, rilasciato da KDE.
Infine, c'è una raccolta di programmi (anch'essi organizzati in moduli) il cui sviluppo è supportato dalle risorse di KDE (traduzione, controllo del codice sorgente, tracciamento degli errori, eccetera) ma non è rilasciato da KDE come parte di Plasma o della suite Applications. Questi moduli sono noti come «Extragear».
La selezione di quali generare tra i moduli possibili è controllata dal file di configurazione. Dopo la sezione global
c'è un elenco di moduli da generare, delimitato da righe module
e end module
. Una voce esemplificativa per un modulo viene mostrata nelEsempio 2.4, «Voce esemplificativa di un modulo nel file di configurazione».
Esempio 2.4. Voce esemplificativa di un modulo nel file di configurazione
module kdesrc-build-git
# Le opzioni del modulo vanno qui, per esempio:
repository kde:kdesrc-build
make-options -j4 # Esegue 4 compilazioni alla volta
end module
Nota
Nella pratica, il costrutto di questo modulo non viene in genere usato direttamente. La maggior parte dei moduli, al contrario, è specificata tramite gruppi di moduli come descritto più avanti.
Quando usi solo le voci module
, kdesrc-build le genera nell'ordine elencato e non tenta di scaricare altri depositi oltre quelli che hai direttamente specificato.
Il codice sorgente di KDE è decomposto in un gran numero di depositi basati su Git relativamente piccoli. Per rendere più semplice la gestione del gran numero di depositi coinvolti in una qualsiasi installazione utile basata su KDE, kdesrc-build supporta il raggruppamento multiplo dei moduli e tratta il gruppo come un «insieme di moduli».
Usando un insieme di moduli, puoi dichiarare rapidamente molti moduli di Git da scaricare e generare, come se avessi scritto una dichiarazione del modulo a sé per ciascuno. L'opzione repository viene gestita specificatamente per configurare da dove ogni modulo viene scaricato, e ciascuna altra opzione dell'insieme di moduli viene copiata in ogni modulo generato in questo modo.
Esempio 2.5. Usare gli insiemi di moduli
globalgit-repository-base
kde-git
kde:
end global moduleqt
# Opzioni rimosse per brevità end module module-setkde-support-libs
repository
kde-git
use-modules
automoc
attica
akonadi
end module-set # Altri moduli secondo necessità... modulekdesupport
end module
Nel Esempio 2.5, «Usare gli insiemi di moduli» viene mostrato un breve insieme di moduli. Quando kdesrc-build lo rileva, si comporta come se, per ogni modulo dato sotto use-modules
, sia dichiarato un modulo a sé, con un deposito (repository
) uguale a quello dell'insieme di moduli subito seguito dal nome del modulo dato.
Inoltre, si possono passare altre opzioni in un insieme di moduli, le quali vengono copiate a ciascun modulo creato in questo modo. Usando module-set
è possibile creare rapidamente molti moduli Git tutti basati sullo stesso URL del deposito. Inoltre è possibile dare agli insiemi un nome (come mostrato nell'esempio), che permette di riferirsi a tutto il gruppo di moduli dalla riga di comando.
Il supporto per gli insiemi di moduli descritto finora è generico per qualsiasi modulo basato su Git. Per i depositi Git di KDE kdesrc-build include funzioni aggiuntive che facilitano il lavoro per gli utenti e gli sviluppatori. Questo supporto è abilitato specificando kde-projects
come repository
per l'insieme di moduli.
kdesrc-build normalmente genera solo i moduli elencati nel file di configurazione, nell'ordine che hai stabilito. Ma con un insieme di moduli kde-projects
, kdesrc-build può eseguire una risoluzione delle dipendenze dei moduli specifici di KDE e, in aggiunta, includere automaticamente i moduli nella generazione, anche se specificati solo indirettamente.
Esempio 2.6. Usare gli insiemi di moduli di kde-projects
# Aggiunge solo un modulo per juk (il deposito kde/kdemultimedia/juk) module-setjuk-set
repository
kde-projectsuse-modules
juk
end module-set # Aggiunge tutti i moduli presenti in kde/multimedia/*, incluso juk, # ma nessun altra dipendenza module-setmultimedia-set
repository
kde-projectsuse-modules
kde/multimedia
end module-set # Aggiunge tutti i moduli presenti in kde/multimedia/*, e tutte le dipendenze # kde-projects che si trovano fuori da kde/kdemultimedia module-setmultimedia-deps-set
repository
kde-projectsuse-modules
kde/multimedia
include-dependencies
true
end module-set # Tutti i moduli creati al di fuori di questi tre gruppi di moduli sono automaticamente inseriti # nell'ordine di dipendenza corretto, a prescindere dalle impostazioni di include-dependencies
Suggerimento
Questo costrutto di insiemi di moduli kde-projects
è il metodo principale per dichiarare quali moduli vuoi generare.
Tutti gli insiemi di moduli utilizzano le opzioni repository e use-modules. Gli insiemi di moduli kde-projects
hanno un valore repository
predefinito, ma gli altri tipi di insiemi utilizzeranno anche l'opzione git-repository-base.
I depositi Git di KDE consentono il raggruppamento dei moduli collegati a Git all'interno di collezioni di moduli collegati (per es. kdegraphics). Git non riconosce questi raggruppamenti, ma kdesrc-build lo può fare utilizzando gli insiemi di moduli con un'opzione repository
impostata a «kde-projects
».
kdesrc-build riconoscerà che il deposito kde-projects
va trattato in modo speciale, e modificherà il processo di generazione conseguentemente. Tra le altre cose, kdesrc-build:
Scaricherà la più recente banca dati dei moduli dall'archivio git di KDE.
Cercherà di trovare in quella banca dati un modulo con il nome dato nell'impostazione
use-modules
dell'insieme di moduli.Per ciascun modulo trovato kdesrc-build cercherà nella banca dati il corretto deposito, basato sull'impostazione branch-group in vigore. Se per il gruppo del ramo esiste un deposito ed è attivo, kdesrc-build utilizzerà automaticamente quello per scaricare o aggiornare il codice sorgente.
Nota
Nella banca dati attuale, alcuni gruppi di moduli non solo hanno una raccolta di moduli, ma dichiarano anche il loro deposito Git. In queste situazioni, kdesrc-build al momento preferisce il deposito Git del gruppo invece di includere i depositi dei figli.
L'esempio seguente mostra come usare la banca dati dei moduli di KDE per installare la libreria multimediale Phonon.
module-setmedia-support
# Questa opzione deve essere kde-projects per usare la banca dati dei moduli.repository
kde-projects
# Questa opzione sceglie quali moduli cercare nella banca dati.use-modules
phonon/phonon
phonon-gstreamer
phonon-vlc
end module-set
Suggerimento
Si usa phonon/phonon
perché (con la presente banca dati dei progetti) kdesrc-build dovrebbe altrimenti decidere tra il gruppo di progetti chiamato «phonon» e il progetto individuale omonimo. Attualmente kdesrc-build sceglierebbe il primo, che genererebbe molti più motori del necessario.
L'esempio seguente è forse più realistico, e mostra una funzionalità disponibile solo con la banca dati dei moduli di KDE: generare tutte le applicazioni grafiche di KDE con una sola dichiarazione.
module-setkdegraphics
# Questa opzione deve essere kde-projects per usare la banca dati dei moduli.repository
kde-projects
# Questa opzione sceglie quali moduli cercare nella banca dati.use-modules
kdegraphics/libs
kdegraphics/*
end module-set
Due importanti capacità sono qui dimostrate:
kdesrc-build permette di specificare moduli discendenti di un dato modulo, senza generare il modulo antenato, usando la sintassi
. In questo caso è anche necessario, perché il modulo base, kdegraphics, è indicato come disattivato in modo che non sia generato per sbaglio con i suoi moduli figli. Specificare i moduli discendenti permette a kdesrc-build di saltare il modulo disattivato.nome-modulo
/*kdesrc-build, inoltre, non aggiungerà un certo modulo all'elenco di generazione più di una volta. Questo permette di impostare manualmente di generare prima
kdegraphics/libs
, prima del resto dikdegraphics
, senza prima cercare di generare due voltekdegraphics/libs
. Ciò era di solito richiesto per la gestione corretta delle dipendenze, e oggi resta un'opzione di ripiego nel caso in cui la banca dati del progetto KDE non trovi i metadati delle dipendenze.
Potresti decidere di voler generare tutti i programmi di un certo gruppo di moduli di KDE tranne uno in particolare.
Per esempio, il gruppo kdeutils
contiene un programma chiamato kremotecontrol. Se la tua macchina non ha l'hardware necessario per ricevere i segnali inviati da un telecomando, potresti decidere di non voler scaricare, generare e installare kremotecontrol ogni volta che aggiorni kdeutils
.
Puoi farlo utilizzando l'opzione di configurazione ignore-modules. Sulla riga di comando l'opzione --ignore-modules esegue la stessa cosa, ma è più comoda per filtrare un modulo solo una volta.
Esempio 2.7. Esempio per ignorare un modulo del progetto KDE in un gruppo
module-setutils
repository
kde-projects
# Questa opzione sceglie quali moduli cercare nella banca dati.use-modules
kdeutils
# Questa opzione «sottrae» i moduli da quelli scelti da use-modules sopra.ignore-modules
kremotecontrol
end module-set module-setgraphics
repository
kde-projects
# Questa opzione sceglie quali moduli cercare nella banca dati.use-modules
extragear/graphics
# Questa opzione «sottrae» i moduli da quelli scelti da use-modules sopra. # In questo caso, sia extragear/graphics/kipi-plugins che # extragear/graphics/kipi-plugins/kipi-plugins-docs vengono ignorati.ignore-modules
extragear/graphics/kipi-plugins
end module-set