Primeiros passos

JHBuild exige algumas etapas de configurações para ser executado antes de compilar softwares. JHBuild tem como pré-requisito alguns softwares e também algumas ferramenta, para obter e compilar os módulos de softwares.

2.1. Instalando JHBuild

JHBuild requer um Python. Verifique se >= 2.3 está instalado.

Uma forma recomendada para baixar JHBuild é por meio do sistema de controle de versão, git. Isso pode ser alcançado com o seguinte comando. É recomendado executar o comando de um novo diretório onde todo código fonte será instalado, por exemplo, ~/jhbuild/checkout.

$ git clone https://gitlab.gnome.org/GNOME/jhbuild.git
...
$

Isso vai baixar o JHBuild em uma pasta chamada jhbuild dentro do diretório atual. Agora, para compilar e instalar o JHBuild:

$ cd jhbuild
$ ./autogen.sh
...
$ make
...
$ make install
...
$

Se gnome-common, yelp-tools e autotools estiverem disponíveis, autogen.sh vai configurar o JHBuild para instalar via autotools. Se gnome-common, yelp-tools e autotools não estiverem disponíveis, autogen.sh vai configurar JHBuild para instalar por meio de um Makefile simples. Para sempre usar o método Makefile simples passe --simple-install para o autogen.sh.

Se os passos acima concluírem com sucesso, um pequeno script de shell será instalado em ~/.local/bin para executar JHBuild. Adicione ~/.local/bin no PATH:

$ PATH=$PATH:~/.local/bin
$

Para adicionar permanentemente ~/.local/bin à variável PATH, execute o seguinte comando:

$ echo 'PATH=$PATH:~/.local/bin' >> ~/.bashrc
$

2.2. Configurando JHBuild

JHBuild pode ser configurado por um arquivo de configuração. A localização padrão é ~/.config/jhbuildrc. Se um arquivo de configuração não existir, o padrão. O arquivo de configuração usa uma sintaxe Python. Um exemplo é fornecido em examples/sample.jhbuildrc. Copie examples/sample.jhbuildrc para ~/.config/jhbuildrc e personalize da forma que precisar.

A amostra de configuração fará com que o JHBuild compile os módulos de meta-gnome-core e meta-gnome-apps-tested e as dependências da coleção de módulos gnome-apps. JHBuild vai descompactar as árvores de fontes para ~/jhbuild/checkout/ e instalar todos os arquivos em subdiretórios de ~/jhbuild/install/. Os dois diretórios devem ser poder ser escritos.

Variáveis de configuração estão documentadas em Section 6 ― Referência de arquivo de configuração. A maioria das variáveis normalmente usadas são:

repos

Um dicionário que pode ser usado para especificar uma localização alternativa de repositório para um repositório particular. Esta variável de configuração é útil para desenvolvedores de módulos. Por padrão, JHBuild vai baixar o código de repositórios usando uma localização anônima de repositório. As chaves de dicionário são nomes curtos de repositórios e os nomes são textos com a localização alternativa do repositório. Por exemplo:

repos['git.gnome.org'] = 'ssh://usuário@git.gnome.org/git/'
moduleset

Um texto ou uma lista de textos especificando os nomes das coleções de módulos a serem usados. Pode ser o nome do arquivo de uma coleção de módulos inclusa no JHBuild (excluindo o caminho e extensão) ou uma URL de HTTP completa para uma coleção de módulos gerenciada externamente. Coleções de módulos de URL de HTTP são mantidas no cache localmente. Se um módulo com o mesmo nome estiver presente em mais de uma coleção de módulos, a última coleção listada terá prioridade. As coleções de módulos fornecidas com o JHBuild são atualizadas para corresponder à versão de desenvolvimento atual do GNOME.

modules

Uma lista de textos especificando módulos para compilar. A lista de módulos realmente compilada será expandida recursivamente para incluir todas as dependências, a menos que o comando buildone seja usado. Padrão é ['meta-gnome-desktop'].

checkoutroot

Um texto especificando o diretório para o qual serão desempacotadas as árvores de fontes. Se buildroot estiver definido para None, as compilações vão ocorrer neste diretório também. Padrão é ~/jhbuild/checkout.

prefix

Um texto especificando o prefixo no qual serão instalados os módulos. prefix deve ser um caminho absoluto. Deve haver permissão de escrita para este diretório. Padrão é '~/jhbuild/install/'.

autogenargs

Um texto contendo argumentos passados para o script autogen.sh de todos os módulos. Pode ser sobrescrito por módulos em particular usando o dicionário module_autogenargs.

cmakeargs

Um texto contendo argumentos passados para a chamada de cmake de todos os módulos. Pode ser sobrescrito por módulos em particular usando o dicionário module_cmakeargs.

makeargs

Um texto listando argumentos adicionais a serem passados para o make. JHBuild vai anexar automaticamente a opção de execução paralela (-j) baseada nos núcleos de CPU disponíveis. Padrão é "".

mesonargs

Um texto contendo argumentos passados para a chamada de meson de todos os módulos. Pode ser sobrescrito por módulos em particular usando o dicionário module_mesonargs.

ninjaargs

Uma string listando argumentos a serem passados para o ninja. Por padrão, usa ''.

2.3. Pré-requisitos de compilação

Antes que qualquer módulo possa ser compilado, é necessário ter certas ferramentas de compilação instaladas. Ferramentas de compilação comuns incluem o GNU Autotools (autoconf, automake, libtool e gettext), o conjunto de ferramentas GNU (binutils, gcc, g++), make, pkg-config e Python, dependendo de quais módulos serão compilados.

JHBuild pode verificar se as ferramentas estão instaladas usando o sanitycheck command:

$ jhbuild sanitycheck

Se este comando exibir quaisquer mensagens, por favor instale o pacote necessário do repositório de sua distribuição. Uma lista de nomes de pacotes para diferentes distribuições é mantida no wiki do GNOME. Execute o comando sanitycheck novamente após a instalação dos pacotes da distribuição para certificar de que as ferramentas necessárias estão presentes.

2.4. Usando JHBuild

Após a configuração ter sido concluída, JHBuild poderá ser usado para compilar softwares. Para compilar todos os módulos selecionados no arquivo ~/.config/jhbuildrc, execute o seguinte comando:

$ jhbuild build

JHBuild vai baixar, configurar, compilar e instalar cada um dos módulos. Se um erro ocorrer em qualquer estágio, o JHBuild vai apresentar um menu perguntando o que deve ser feito. As escolhas incluem entrar em um shell para corrigir o erro, executar novamente a compilação de vários estágios, desistir do módulo ou ignorar o erro e continuar.

Desistir do módulo vai levar qualquer módulo que dependa dele a falhar.

Logo abaixo está um exemplo do menu exibido:

  [1] Re-executar fase build
  [2] Ignorar erro e continuar para install
  [3] Desistir do módulo
  [4] Iniciar shell
  [5] Recarregar configuração
  [6] Ir para fase "limpar diretório e iniciar novamente"
  [7] Ir para fase "configure"
  [8] Ir para fase "clean"
  [9] Ir para fase "distclean"
escolha: 

Também é possível compilar uma coleção diferente de módulos e suas dependências passando os nomes de módulos para o comando build. Por exemplo, para compilar gtk+:

$ jhbuild build gtk+

Se JHBuild for cancelado no meio de uma compilação, é possível resumi-la em um módulo em particular usando a opção --start-at:

$ jhbuild build --start-at=pango

Para compilar um ou mais módulos, ignorando suas dependências, JHBuild tem o comando buildone. Para o comando buildone concluir com sucesso, todas as dependências devem estar previamente compiladas e instaladas ou fornecidas por pacotes de distribuição.

$ jhbuild buildone gtk+

Quando desenvolvendo ativamente um módulo, você provavelmente o faz no diretório de trabalho dos fontes. O make vai chamar o sistema de compilação e instalar o módulo. Isso será uma parte chave do ciclo de editar-compilar-instalar-testar.

$ jhbuild make

Para obter uma lista de módulos e dependências que o JHBuild vai compilar e a ordem na qual eles serão compilados, use o comando list:

$ jhbuild list

Para obter informações sobre um módulo em particular, use o comando info:

$ jhbuild info gtk+

Para baixar ou atualizar os fontes de softwares sem compilá-los, use o comando update. O comando update fornece uma oportunidade para modificar os fontes antes de compilar e pode ser útil se a conexão com a Internet ficar variando.

$ jhbuild update

Posteriormente, JHBuild pode compilar tudo sem baixar ou atualizar os fontes:

$ jhbuild build --no-network

Para executar um comando em particular com o mesmo ambiente usado pelo JHBuild, use o comando run:

$ jhbuild run program

Para iniciar um shell com o mesmo ambiente usado pelo JHBuild, use o comando shell:

$ jhbuild shell