Funcionalidades avançadas

Compilar parcialmente um módulo

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

Extrair partes de um módulo

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

Dica

Se você ainda não souber o que vai transferir de um determinado 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', você poderá usar o checkout-only da seguinte forma:

module kdeadmin
  checkout-only kuser ksystemlog
end module

Importante

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

Da mesma forma, algumas vezes um aplicativo poderá necessitar de outras pastas e isso pode ser difícil de descobrir. Isto poderá ser solucionado através de tentativa e erro, adicionando constantemente pastas à opção para descobrir qual é a necessária.Esta opção depende do suporte no sistema de compilação do módulo, só sendo útil para os módulos que sejam coleções de aplicações individuais.

Uma nota final sobre esta opção: Se você alterar esta opção deverá usar o kdesrc-build --refresh-build módulo para garantir que o módulo é configurado de novo convenientemente. Além disso, o kdesrc-build nunca irá remover os arquivos existentes, se você 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.

Removendo pastas de uma compilação

Em vez de restringir o que é baixado, é possível transferir tudo mas fazer com que o sistema de compilação deixe de fora algumas pastas ao compilar. Isto pode ser útil se uma pasta estiver sempre invalidando 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 seja reconfigurado 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. Assim, ela 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 o gerenciamento 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 trabalhando 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) também possua desenvolvimentos em curso nela.

Uma marca, por outro lado, é uma imagem do repositório de código numa determinada posição no tempo. Isto é usado pela equipe de administração do KDE para marcar uma versão do código adequada para lançamento, permitindo ainda aos programadores trabalharem no código.

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 usuários mais avançados.

O método mais simples é usar as opções branch e tag. Você 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 baixar. Na maioria dos módulos do KDE, isto funciona muito bem.

Para baixar 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 baixar o 'kdemultimedia' como foi lançado no KDE 4.6.1:

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

Dica

Você 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 incorreta: o module-base-path e o override-url.

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

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

    Isto deverá fazer com que o kdesrc-build baixe 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 você tiver problemas ao usar uma definição antiga do 'module-base-path', talvez deva confirmar se a localização atual é a mesma que o kdesrc-build está esperando, usando a opção --pretend.

  • A opção override-url, por outro lado, necessita que você indique o local exato de onde baixar. Contudo, isto permite-lhe transferir de locais que versões anteriores do kdesrc-build não teriam chances de baixar. Atualmente, a opção module-base-path deve ser suficiente para qualquer URL de fonte de Subversion.

    Importante

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

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

Recompilações automáticas

O kdesrc-build costumava incluir recursos para automaticamente tentar recompilar o módulo após uma falha (uma vez que esta nova tentativa poderia funcionar, devido a falhas no sistema de compilação naquela época). Graças a mudança para o CMake, o sistema de compilação não sofre mais destas falhas, e assim o kdesrc-build não tentará compilar um módulo mais de uma vez. Existem situações onde o kdesrc-build automaticamente executará uma recompilação:

  • Se você mudar o configure-flags ou o cmake-options para um módulo, então o kdesrc-build detectará e automaticamente re-executará o 'configure' ou o 'cmake' para aquele módulo.

  • Se o sistema de compilação não existir (mesmo se o kdesrc-build não o removeu) então o kdesrc-build automaticamente irá recriá-lo. Isto é útil para permitir a execução de um --refresh-build completo para um módulo específico sem ter que executá-lo em outros módulos.

Recompilando manualmente um módulo

Se você tiver feito alterações em 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, você poderá ter que recompilar o módulo manualmente.

Você poderá se isto executando simplesmente o kdesrc-build --refresh-build módulo.

Se você quiser que o kdesrc-build recompile de forma automática o módulo, durante a próxima atualização normal, você poderá criar um arquivo especial. Cada módulo possui uma pasta de compilação. Se você criar um arquivo 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 rodar, mesmo que fosse executar normalmente a compilação incremental.

Dica

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

Recompilar usando o .refresh-me para o módulo kdelibs:

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

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

Normalmente, o kdesrc-build usa o ambiente que está presente quando inicia e executa os programas para atualizar e compilar. Isto é útil para quando você está rodando o kdesrc-build a partir da linha de comando.

Contudo, você poderá desejar alterar a configuração das variáveis de ambiente para as quais o kdesrc-build não possui uma opção direta. (Por exemplo, para configurar qualquer variável de ambiente ao rodar o kdesrc-build em um agendador de tarefas como o Cron) Isto é possível com a opção set-env.

Ao contrário da maioria das opções, ela poderá ser definida mais de 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.

Configura a 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

Você poderá indicar ao kdesrc-build para começar a compilar a partir de um módulo diferente daquele 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 no meio. Você poderá controlar isto com as opões --resume-from e --resume-after.

Nota

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

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

% kdesrc-build --resume-from=kdebase

Prosseguir a compilação começando após o 'kdebase' (no caso de você corrigir manualmente um problema e ter instalado o módulo você mesmo):

% kdesrc-build --resume-after=kdebase

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

Ignorando os módulos numa compilação

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

Você poderá fazer isso com a opção --ignore-modules. Esta opção diz ao kdesrc-build para ignorar todos os módulos da linha de comando, ao efetuar a atualização e a compilação.

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

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

Mudando as opções na linha de comando

Modificando as opções globais

Você poderá alterar a configuração das opções lidas do arquivo de configuração diretamente a partir da linha de comando. Esta alteração irá substituir a configuração do arquivo, mas é apenas temporária. Só terá efeito enquanto ainda estiver presente na linha de comando.

O kdesrc-build permite-lhe alterar as opções com nome do tipo nome-opção passando um argumento na linha de comando 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, ele irá avisá-lo, caso contrário irá recordar o valor que definiu e substituir o valor do arquivo de configuração.

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

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

Mudando 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 arquivo de configuração e só se aplica enquanto a opção for passada na linha de comando.

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

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