Organizzazione e selezione dei moduli

Organizzazione dei programmi di KDE

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.

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

  2. 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».

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

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

Selezionare i moduli da generare

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.

Insiemi di moduli

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

Il concetto di insieme di moduli di base

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

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

module qt
    # Opzioni rimosse per brevità
end module

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

# Altri moduli secondo necessità...
module kdesupport
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.

Supporto speciale per gli insiemi di moduli KDE

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

# Aggiunge tutti i moduli presenti in kde/multimedia/*, incluso juk,
# ma nessun altra dipendenza
module-set multimedia-set
    repository kde-projects
    use-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-set multimedia-deps-set
    repository kde-projects
    use-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.

La banca dati dei moduli ufficiale di KDE

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

  1. kdesrc-build permette di specificare moduli discendenti di un dato modulo, senza generare il modulo antenato, usando la sintassi nome-modulo/*. 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.

  2. 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 di kdegraphics, senza prima cercare di generare due volte kdegraphics/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.

Scartare dei moduli del progetto KDE

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-set utils
    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-set graphics
    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