Funcionalidades avançadas

Compilar parcialmente um módulo

É possível compilar apenas partes de um único módulo do KDE. Por exemplo, pode querer compilar apenas um programa de um módulo. O kdesrc-build tem funcionalidades para simplificar isto. Existem várias formas complementares de o fazer.

Extrair partes de um módulo

Esta será talvez a melhor forma de o fazer. Quando funciona, poupar-lhe-á tempo de transferência e espaço em disco. O que acontece é que o kdesrc-build irá transferir apenas as partes do módulo que indicar. Isto é feito com a opção checkout-only para um dado módulo, que irá indicar uma lista das pastas a transferir.

Dica

Se não souber já o que vai transferir de um dado módulo, poderá ser uma boa ideia navegar pela disposição no Subversion para um módulo, em primeiro lugar, usando o WebSVN.

Para obter apenas o KUser e o KSystemLog do 'kdeadmin', poderá usar o checkout-only da seguinte forma:

module kdeadmin
  checkout-only kuser ksystemlog
end module

Importante

As pastas serão compiladas pela ordem que forem indicadas na opção. Se uma das pastas necessitar de algo do módulo para compilar, então terá de garantir que ambas se encontram na linha checkout-only e que a dependência necessária vai antes da pasta que necessita dela.

Da mesma forma, algumas vezes uma aplicação poderá necessitar de outras pastas e isso ser difícil de descobrir; nesse caso poderá ser razão para tentativa e erro, adicionando constantemente pastas à opção para descobrir. Esta opção depende do suporte no sistema de compilação do módulo, pelo que só é útil para os módulos que sejam colecções de aplicações individuais.

Uma nota final sobre esta opção: Se alterar esta opção deverá usar o kdesrc-build --refresh-build módulo para garantir que o módulo é configurado de novo convenientemente. Para além disso, o kdesrc-build nunca irá remover os ficheiros existentes, se retirar o número de pastas da sua opção checkout-only ou adicionar a opção a um módulo que já foi extraído.

Remover pastas de uma compilação

Em vez de restringir o que é obtido, é possível transferir tudo mas fazer com que o sistema de compilação deixe algumas pastas por compilar. Isto pode ser útil se uma pasta estiver sempre a invalidar a compilação e for desnecessária para o resto do módulo.

Isto é controlado com a opção do-not-compile. Funciona de forma semelhante à opção checkout-only descrita acima, e é apenas uma lista das pastas que não deverão ser compiladas.

Importante

Da mesma forma que no checkout-only, esta opção necessita pelo menos que o sistema de compilação do módulo volte a ser configurado de novo para o módulo, após a alteração. Isto é feito com o comando kdesrc-build --reconfigure módulo.

Para remover a pasta python do processo de compilação do 'kdebindings':

module kdebindings
  do-not-compile python
end module

Nota

Esta função depende de algumas convenções normais, usadas na maioria dos módulos do KDE. Como tal, poderá não funcionar para todos os programas.

Suporte de marcas e ramificações do kdesrc-build

O que são ramificações e marcas?

O Subversion suporta a gestão do histórico do código do KDE. O KDE usa esse suporte para criar ramificações ('branches') para desenvolvimento e para marcar o repositório com marcas ('tags'), sempre que lança uma nova versão.

Por exemplo, os programadores do KMail poderão estar a trabalhar numa nova funcionalidade, numa ramificação diferente, para evitar corromper a versão que está em uso pela maioria dos programadores. Esta ramificação tem desenvolvimentos em curso nela, mesmo quando a ramificação principal (chamada de /trunk) possa também ter desenvolvimentos em curso nela.

Uma marca, por outro lado, é uma imagem do repositório de código numa dada posição no tempo. Isto é usado pela equipa de administração do KDE para marcar uma versão do código adequada para lançamento, permitindo à mesma aos programadores continuarem a desenvolver.

No Subversion, não existem diferenças entre ramificações, marcas ou o 'trunk' no código. É apenas uma convenção usada pelos programadores. Isso torna difícil suportar convenientemente as ramificações e marcas no kdesrc-build. Contudo, existem algumas coisas que poderão ser feitas.

Como usar as ramificações e marcas

O suporte para ramificações e marcas é tratado por um conjunto de opções, que vão desde um simples pedido de uma versão até um URL específico de transferência, para os utilizadores mais avançados.

O método mais simples é usar as opções branch e tag. Poderá usar a opção em conjunto com o nome da marca ou ramificação de um módulo, para que o kdesrc-build determine o local apropriado, dentro do repositório do KDE, de onde deve transferir. Na maioria dos módulos do KDE, isto funciona muito bem.

Para transferir o 'kdelibs' do KDE 4.6 (que é simplesmente conhecido pela ramificação '4.6'):

module kdelibs
  branch 4.6
  # outras opções...
end module

Ou, para transferir o 'kdemultimedia' como foi lançado aquando do KDE 4.6.1:

module kdemultimedia
  tag 4.6.1
  # outras opções...
end module

Dica

Poderá definir aqui um valor global para o 'branch'. Mas, se o fizer, não se esqueça de indicar uma ramificação diferente para os módulos que não devem usar a ramificação global!

Opções avançadas de suporte a ramificações

O kdesrc-build suporta duas opções para as situações em que o branch e o tag adivinham o local de forma incorrecta: o module-base-path e o override-url.

  • O module-base-path é usado para ajudar o kdesrc-build a preencher a parte em falta da localização de um módulo. No repositório do KDE, todos os locais têm o formato raizSvn/module-base-path/nome-módulo. Normalmente, o kdesrc-build pode descobrir a parte intermédia apropriada por si só. Quando não conseguir, poderá usar o module-base-path da seguinte forma:

    module kdesupport
        # o 'kdesupport' suporta várias marcas para organizar facilmente as
        # aplicações necessárias para uma dada versão da plataforma do KDE.
        module-base-path tags/kdesupport-do-4.5
    end module
    

    Isto deverá fazer com que o kdesrc-build transfira o 'kdesupport' de (neste exemplo) svn://anonsvn.kde.org/home/kde/tags/kdesupport-for-4.5.

    Dica

    Nas versões anteriores do kdesrc-build, o module-base-path era tratado de forma diferente. Se tiver problemas ao usar uma definição antiga do 'module-base-path', talvez deva confirmar se a localização actual é a mesma que o kdesrc-build está à espera, usando a opção --pretend.

  • A opção override-url, por outro lado, necessita que você indique o local exacto de onde transferir. Contudo, isto permite-lhe transferir dos locais onde o kdesrc-build não terá hipóteses de adivinhar o local.

    Importante

    O kdesrc-build não irá mexer ou corrigir o valor que indicar no override-url de todo, por isso, se mudar a sua configuração do svn-server, também terá de actualizar isto.

Como o kdesrc-build tenta garantir uma compilação com sucesso

Recompilações automáticas

O kdesrc-build costumava incluir funcionalidades para tentar automaticamente reconstruir o módulo em caso de falha (dado que, às vezes, essa nova tentativa iria funcionar, por causa dos erros no sistema de compilação da altura). Graças à mudança para o CMake, o sistema de compilação já não passa mais por esses erros, pelo que o kdesrc-build não irá tentar mais compilar um módulo mais que uma vez. Todavia, existem situações em que o kdesrc-build irá tomar alguma acção automaticamente:

  • Se quiser alterar as opções configure-flags ou cmake-options para um dado módulo, o kdesrc-build irá detectar isso e tentar executar de novo o 'configure' ou o 'cmake' para esse módulo.

  • Se o sistema de compilação não existir (mesmo se o kdesrc-build não o apagou), então o kdesrc-build irá tentar criá-lo de novo. Isto é útil para permitir a execução de um --refresh-build completo para um módulo específico, sem ter de efectuar isso para os outros módulos.

Compilar manualmente um módulo de novo

Se tiver feito alterações a alguma opção de um módulo, ou se o código-fonte do módulo mudar de uma forma que o kdesrc-build não reconheça, poderá ter de compilar o módulo de novo manualmente.

Podê-lo-á fazer se executar simplesmente o kdesrc-build --refresh-build módulo.

Se quiser que o kdesrc-build compile de novo de forma automática o módulo, durante a próxima actualização normal, poderá criar um ficheiro especial. Cada módulo tem uma pasta de compilação. Se criar um ficheiro chamado .refresh-me na pasta de compilação de um módulo, o kdesrc-build irá reconstruir o módulo da próxima vez que o processo de compilação correr, mesmo que fosse executar normalmente a compilação incremental.

Dica

Por omissão, a pasta de compilação é a ~/kdesrc/build/módulo/. Se mudar a opção build-dir, então use essa em vez da ~/kdesrc/build.

Compile de novo com o .refresh-me para o módulo kdelibs:

% touch ~/kdesrc/build/kdelibs/.actualize-me
% kdesrc-build

Mudar a configuração das variáveis de ambiente

Normalmente o kdesrc-build usa o ambiente que está presente no arranque, quando executa os programas de actualização e compilação. Isto é útil quando estiver a executar o kdesrc-build a partir da linha de comandos.

Contudo, poderá querer alterar a configuração das variáveis de ambiente para as quais o kdesrc-build não tem uma opção directa (Por exemplo, para configurar qualquer variáveis de ambiente necessárias na execução do kdesrc-build num escalonador de tarefas como o Cron). Isto é possível com a opção set-env.

Ao contrário da maioria das opções, poderá ser definida mais que uma vez e aceita dois itens separados por um espaço. O primeiro item é o nome da variável de ambiente a definir e o resto da linha é o valor.

Configurar o DISTRO=BSD para todos os módulos:

global
  set-env DISTRO BSD
end global

Prosseguir com as compilações

Prosseguir uma compilação falhada ou cancelada

Poderá indicar ao kdesrc-build para começar a compilar a partir de um módulo diferente do que onde iria prosseguir. Isto poderá ser útil quando falhou um conjunto de módulos ou se tiver cancelado a execução de uma compilação a meio. Poderá controlar isto com a opção --resume-after.

Nota

As versões mais antigas do kdesrc-build iriam saltar a actualização do código ao prosseguir com uma compilação. Isto já não é mais feito por omissão, mas poderá continuar à mesma a usar a opção da linha de comandos --no-src para saltar a actualização do código.

Prosseguir a compilação a começar no 'kdebase':

% kdesrc-build --resume-from=kdebase

Prosseguir a compilação logo a seguir ao 'kdebase' (no caso de ter corrigido manualmente o problema e tiver instalado o módulo você mesmo):

% kdesrc-build --resume-after=kdebase

Se a última compilação do kdesrc-build terminou com uma condição de erro, poderá também usar a opção --resume da linha de comandos, a qual prossegue com a última compilação a partir do módulo que falhou. As actualizações de código e meta-dados também são ignoradas (porém, se precisar delas, normalmente é melhor usar a opção --resume-from em alternativa).

Ignorar os módulos numa compilação

Como acontece quando deseja prosseguir com a compilação de um módulo, poderá optar em alternativa por actualizar e compilar tudo normalmente, só que ignorando um conjunto de módulos.

Poderá fazer isso com a opção --ignore-modules. Esta opção diz ao kdesrc-build para ignorar todos os restantes módulos da linha de comandos, ao efectuar a actualização e a compilação.

Ignorar o extragear/multimedia e o kdereview numa execução completa:

% kdesrc-build --ignore-modules extragear/multimedia kdereview

Mudar as opções na linha de comandos

Modificar as opções globais

Poderá alterar a configuração das opções lidas do ficheiro de configuração directamente a partir da linha de comandos. Esta alteração irá substituir a configuração do ficheiro, mas é apenas temporária. Só fará efeito enquanto estiver à mesma presente na linha de comandos.

O kdesrc-build permite-lhe alterar as opções com nome do tipo nome-opção se passar um argumento na linha de comandos com o formato --nome-opção=valor. O kdesrc-build irá reconhecer se não souber qual a opção, e irá procurar o nome na sua lista de nomes de opções. Se não reconhecer o nome, avisá-lo-á, caso contrário irá recordar o valor que definir e substituir o valor do ficheiro de configuração.

Configurar o source-dir como /dev/null para fins de teste:

% kdesrc-build --pretend --source-dir=/dev/null

Mudar as opções do módulo

Também é possível alterar as opções apenas para um módulo específico. A sintaxe é semelhante: --módulo,nome-opção=valor.

Esta alteração substitui qualquer opção duplicada do módulo encontrado no ficheiro de configuração e só se aplica enquanto a opção for passada na linha de comandos.

Usar uma pasta de compilação diferente para o módulo 'kdeedu':

% kdesrc-build --kdeedu,build-dir=temporaria