Organização e selecção dos módulos

Organização do 'Software' do KDE

As aplicações do KDE estão divididas em diversos componentes, muitos dos quais poderão ser compilados pelo kdesrc-build. A compreensão desta organização ajudá-lo-á a seleccionar adequadamente os módulos de aplicações que deseja compilar.

  1. No nível inferior vem a biblioteca Qt™, que é uma plataforma multi-plataforma e muito poderosa. O KDE baseia-se no Qt™ e algumas das bibliotecas fora do KDE que são necessárias por este também se baseiam no Qt™. O kdesrc-build poderá compilar o Qt™ ou usar o que já está instalado no seu sistema, caso seja uma versão recente o suficiente.

  2. No topo do Qt™ estão as bibliotecas necessárias para o sistema KDE funcionar. Algumas destas bibliotecas não são consideradas como fazendo parte do KDE propriamente dito, devido à sua natureza genérica, mas são à mesma essenciais para a Plataforma do KDE. Estas bibliotecas costumavam estar reunidas sob um único módulo kdesupport.

    Nota

    Desde a Plataforma do KDE 4.6, muitos desses módulos do 'kdesupport' estão a ser migrados para o arquivo de Git do KDE, ainda que continuem a não fazer parte da Plataforma.

  3. Sobre essas bibliotecas essenciais, vem a Plataforma do KDE. Estas são as bibliotecas que são necessárias para que as aplicações do KDE funcionem. Todavia, não é fornecido um ambiente de trabalho completo com esta plataforma.

    Para o kdesrc-build, a camada da Plataforma consiste nos módulos kdelibs, kdepimlibs e kde-runtime.

  4. No topo da Plataforma, vêm diversas coisas diferentes:

    • Aplicações de terceiros. Estas são aplicações que usam a Plataforma do KDE mas não são da autoria ou estão associadas ao projecto KDE.

    • Um ambiente e respectiva área de trabalho completos. Isto é o que os utilizadores normalmente vêem quando se autenticarem no KDE. Isto é fornecido pelo Ambiente do Plasma™, maioritariamente em kde-workspace.

    • A Compilação de 'Software' do KDE (SC). Esta é uma colecção de aplicações úteis que vem incluída na Plataforma e no Ambiente de Trabalho Plasma™, agrupada em módulos individuais. Estes são os módulos que têm nomes que começam por kde. Por exemplo, o kdepim é um componente da Compilação de 'Software' que contém aplicações de e-mail, leitura de notícias, organização e calendários, etc., enquanto o kdegames contém uma colectânea de jogos de alta qualidade para lhe ocupar o tempo.

    • Finalmente, existe uma colecção de aplicações (também agrupada em módulos) cujo desenvolvimento é suportado pelos recursos do KDE (como as traduções, o controlo de código, o registo de erros, etc.) mas que não é lançada pelo KDE ou considerada como parte da Compilação de 'Software'. Estes módulos são conhecidos como Extragear e têm nomes do tipo extragear/network. Como no kdesupport, algumas dessas aplicações do Extragear estão a migrar para o arquivo de Git do KDE.

Seleccionar os módulos a compilar

A selecção de qual dos módulos possíveis a compilar é controlada pelo ficheiro de configuração. Depois da secção global, existe uma lista com os módulos a compilar, delimitada pelas linhas 'module ... end module'. Aparece um item de exemplo para um módulo em Exemplo 2.1, “Item de exemplo de módulo no ficheiro de configuração”.

Exemplo 2.1. Item de exemplo de módulo no ficheiro de configuração

module nome-módulo
    # As opções deste módulo vão aqui, por exemplo:
    make-options -j4 # Correr 4 compilações de cada vez
end module

Dica

É possível declarar um módulo sem opções. De facto, a maioria dos seus módulo serão provavelmente declarados desta forma.

O kdesrc-build só compila os módulos que tiver apresentado no seu ficheiro de configuração. Para além disso, os módulos são compilados pela ordem indicada no ficheiro de configuração. Por essa razão, deverá garantir que a ordem dos módulos no seu ficheiro de configuração é consistente com a organização indicada em “Organização do 'Software' do KDE”.

Existe um ficheiro de exemplo, que vem com o kdesrc-build, chamado kdesrc-buildrc-sample. Recomenda-se que copie este ficheiro para um outro chamado ~/.kdesrc-buildrc (Repare no ponto inicial à frente do 'kdesrc-buildrc'!). Depois disso, edite o ficheiro novo para ajustar as opções predefinidas a seu gosto. (Cada opção está descrita com mais detalhe no Capítulo 4, Configurar o kdesrc-build). Os módulos predefinidos deverão ser suficientes para garantir a instalação de um KDE relativamente completo; contudo, poderá remover muitos dos módulos que aparecem a seguir ao kdebase, caso queira poupar espaço em disco ou tempo de compilação.

Conjuntos de Módulos

O kdesrc-build é normalmente capaz de adivinhar onde transferir o código-fonte para um dado módulo de forma bastante simples, usando a sua configuração do svn-server e o nome do módulo para criar um único URL do Subversion, que descreve exactamente de onde transferir o código-fonte.

Com a passagem para o Git, muitos módulos maiores do Subversion foram sub-divididos por seu turno no processo, não existindo garantia de como encontrar um módulo com base no seu módulo. Devido a isto, foi desenvolvido um conceito chamado conjuntos de módulos para o kdesrc-build 1.12.1.

Se usar um conjunto de módulos, poderá declarar rapidamente muitos módulos do Git para serem transferidos e compilados, como se tivesse definido uma declaração de módulo em separado para cada um. A opção repository é tratada de forma especial para definir de onde foi transferido cada módulo, sendo todas as outras opções existentes no conjunto de módulos copiadas para cada módulo gerado desta forma.

Exemplo 2.2. Usar os conjuntos de módulos

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

module qt
    # Opções removidas para resumir
end module

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

# Outros módulos porventura necessários...
module kdesupport
end module

Em Exemplo 2.2, “Usar os conjuntos de módulos”, aparece um breve conjunto de módulos. Quando o kdesrc-build encontrar este conjunto de módulos, irá actuar como se, para cada módulo indicado em use-modules, fosse declarado um módulo individual com o seu repository igual à opção repository do conjunto, seguida do nome do módulo indicado.

Para além disso, poderá passar outras opções num conjunto de módulos, as quais são copiadas para os novos módulos que forem criados desta forma. Ao usar os conjuntos de módulos, é possível declarar rapidamente vários módulos do Git que se baseiam todos no mesmo URL de repositório. Para além disso, desde o kdesrc-build 1.13, é possível atribuir um nome aos conjuntos de módulos (como demonstrado no exemplo), o que lhe permite referenciar directamente o grupo inteiro de módulos a partir da linha de comandos.

Nota

Os conjuntos de módulos são usados no suporte para transferências de módulos a partir da base de dados de módulos do arquivo de Git do KDE para o KDE. Veja também em “Procurar automaticamente módulos da base de dados oficial do KDE.

Os conjuntos de módulos usam as opções

git-repository-base
use-modules

Procurar automaticamente módulos da base de dados oficial do KDE

Com a migração do código-fonte do KDE para se migrar para o git.kde.org, houve um crescimento explosivo no número de módulos (por exemplo, um único módulo do Subversion chamado kdegraphics transforma-se em 16 módulos diferentes no Git).

Isto foi derivado principalmente por cada módulo do Git conter o histórico completo do projecto (isto desperdiça de facto menos espaço em disco do que acontece a maioria dos repositórios do KDE, dado que o Git é extremamente eficiente a gravar repositórios).

O KDE permite agrupar os repositórios do Git em colecções de módulos relacionados (p.eex., o 'kdegraphics'). Estes módulos poderão por sua vez ser agrupados (p.ex., Compilação de Software do KDE). O Git não reconhece estes agrupamentos, mas o kdesrc-build pode ser configurado para lidar com estes grupos.

A forma como isto é feito é através da utilização de conjuntos de módulos. Em vez de usar um repositório específico git:// ou o nome de um repositório criado pelo git-repository-base, é usado o nome de repositório especial kde-projects.

O kdesrc-build irá reconhecer que o repositório kde-projects precisa de tratamento especial e ajustar o processo de compilação em conformidade. Entre outras coisas, o kdesrc-build irá:

  • Obter a última base de dados de módulos do arquivo de Git do KDE.

  • Tentar procurar um módulo com o nome indicado na opção use-modules do conjunto de módulos.

  • Para cada módulo que encontrar, o kdesrc-build irá ver se existe uma opção do repositório para esse módulo na base de dados. Se existir um repositório, o kdesrc-build usá-la-á automaticamente para transferir ou actualizar o código-fonte. Se não estiver definido nenhum, o kdesrc-build irá tratar desse módulo como um grupo, tentando incluir todos os repositórios de código do Git que encontrar nesse grupo.

Nota

Na base de dados actual, não só alguns grupos de módulos têm uma colecção de módulos, como também declaram o seu próprio repositório de Git. Nestas situações, o kdesrc-build irá preferir o repositório de Git do grupo em vez de incluir os repositórios dos filhos.

O seguinte exemplo demonstra como usar a base de dados de módulos do KDE para instalar a biblioteca multimédia Phonon.

module-set media-support
    # Esta opção deverá ser 'kde-projects' para usar a base de dados de módulos.
    repository kde-projects

    # Esta opção escolhe quais os módulos a procurar na base de dados.
    use-modules phonon/phonon phonon-gstreamer phonon-vlc
end module-set

Dica

O phonon/phonon é usado porque (com a base de dados do projecto actual), o kdesrc-build teria de optar entre o grupo de projectos phonon ou o projecto individual phonon. De momento, o kdesrc-build iria escolher o primeiro, o qual iria compilar muitas mais infra-estruturas que as necessárias.

O exemplo seguinte será porventura mais realista e demonstra uma funcionalidade que só está disponível na base de dados de módulos do KDE: a compilação de todas as aplicações gráficas do KDE com apenas uma única declaração.

module-set nunca-tente-isto
    # Esta opção deverá ser igual a 'kde-projects' para usar a base de dados de módulos
    repository kde-projects

    # Esta opção escolhe os módulos a pesquisar na base de dados.
    use-modules kdegraphics/libs kdegraphics/*
end module-set

Existem duas capacidades importantes aqui demonstradas:

  1. O kdesrc-build permite-lhe definir módulos descendentes de um dado módulo, sem ter de compilar o módulo-pai, usando a sintaxe nome-módulo/*. De facto, é obrigatório neste caso, dado que o módulo de base, o 'kdegraphics', está marcado como inactivo, para que não seja compilado por acaso, em conjunto com os seus módulos-filhos. A indicação dos módulos descendentes permite ao kdesrc-build saltar os módulos inactivos.

  2. O kdesrc-build também não irá adicionar um módulo indicado à lista de compilação mais que uma vez. Isto permite-lhe configurar manualmente o kdegraphics/libs para ser compilado em primeiro lugar, antes do resto do kdegraphics, sem ter de tentar compilar o kdegraphics/libs duas vezes.

Nota

Convém apontar que o kdesrc-build irá tentar compilar os módulos pela ordem correcta (por exemplo, se só o kdegraphics/* tiver sido incluído em cima), mas isso depende de manter as outras bases de dados actualizadas. Poderá fazer a coisa certa manualmente, se necessário, usando a técnica descrita acima.

Filtrar módulos do projecto do KDE

Poderá decidir que gostaria de compilar todos os módulos de um dado agrupamento de módulos do KDE, excepto um dado programa.

Por exemplo, o grupo kdeutils inclui um programa chamado kremotecontrol. Se o seu computador não tiver o 'hardware' adequado para receber os sinais enviados pelos comandos à distância, poderá optar por não transferir, compilar e instalar o kremotecontrol de cada vez que actualiza o kdeutils.

Desde o kdesrc-build 1.16, poderá conseguir isto com a opção de configuração ignore-modules.

Exemplo 2.3. Exemplo para excluir um módulo do projecto KDE num grupo

module-set utils
    repository kde-projects

    # Esta opção escolhe os módulos a pesquisar na base de dados.
    use-modules kdeutils

    # Esta opção "retira" os módulos dos módulos escolhidos pelo "use-modules" acima.
    ignore-modules kremotecontrol
end module-set

module-set graphics
    repository kde-projects

    # Esta opção escolhe os módulos a pesquisar na base de dados.
    use-modules extragear/graphics

    # Esta opção "retira" os módulos dos escolhidos acima pelo "use-modules".
    # Neste caso, *tanto* o 'extragear/graphics/kipi-plugins' como o
    # 'extragear/graphics/kipi-plugins/kipi-plugins-docs' são ignorados
    ignore-modules extragear/graphics/kipi-plugins
end module-set