Usar o svn-buildpackage com pacotes nativos

Um pacote nativo é desenhado para funcionar com Debian em vez da generalidade de distribuições de GNU/Linux, muitos dependem directamente de comportamentos específicos da Debian e outras ferramentas nativas da Debian. O svn-buildpackage é um desses tais pacotes nativos.

Com um pacote nativo, o conteúdo do directório debian/ está incluído no tarball fonte (que usa um sufixo normal .tar.gz e não o sufixo .orig.tar.gz) e nenhum .diff.gz é gerado.

O marcador principal para um pacote nativo é a string de versão Debian. Um pacote da origem usa:

 foo (0.1.2-3)

Um pacote nativo usa:

 foo (0.1.2)

Pacotes nativos compilados

Alguns pacotes nativos são compilados a partir de código fonte e muitos destes pacotes usam autotools como ./configure, autoreconf e make dist. Tais pacotes podem usar suporte a autotools para gerar um tarbal típico GNU ou ao estilo autotools com suporte para EXTRA_DIST e regras semelhantes em Makefile.am. Isto permite que aos responsáveis não precisarem de manter os ficheiros (configure, aclocal.m4, ltmain.sh e libtool) gerados no repositório subversion. Com este suporte, o pacote pode controlar directamente quais os ficheiros são incluídos na fonte para o pacote nativo.

Para construir tais pacotes com svn-buildpackage, pode ser usado o mergeWithUpstream mesmo que a string de versão Debian indique um pacote nativo. O tarball da origem é aquele criado pelo alvo make dist e o responsável pode escolher como tornar esse tarball disponível ao svn-buildpackage:

Exemplo 3.4. Usando um tarball nativo e mergeWithUpstream

Makefile.am

all-local: Makefile
	ln -sf $(PACOTE)-$(VERSÃO).tar.gz $(PACOTE)_$(VERSÃO).orig.tar.gz

(Sim, é um artefacto usar mergeWithUpstream. O .orig.tar.gz na realidade não é usado - a string de versão Debian sobrescreve a propriedade de fusão.)


Propriedades do SVN:

$ svn proplist ./debian/
Propriedades em 'debian':
  mergeWithUpstream

Exemplo 3.5. Resultado de usar mergeWithUpstream dentro de um pacote nativo

O tarball gerado por make dist é localizado usando a propriedade origDir, neste exemplo, definido para o directório do pacote de nível de topo onde o make dist iria normalmente criá-lo e onde também é criado o link simbólico, como em cima.

resultados do svn-buildpackage

(a usar o langupdate como o pacote do exemplo)

$ svn-buildpackage -us -uc
	origDir: ./
Complete layout information:
	buildArea=/opt/working/emdebian/host/trunk/langupdate/build-area
	origDir=./
	tagsDir=/opt/working/emdebian/host/trunk/langupdate/tags
	tagsUrl=svn+ssh://codehelp@buildd.emdebian.org/var/emdebian/svn/current/host/trunk/langupdate/tags
	trunkDir=/opt/working/emdebian/host/trunk/langupdate/trunk
	trunkUrl=svn+ssh://codehelp@buildd.emdebian.org/var/emdebian/svn/current/host/trunk/langupdate/trunk
mergeWithUpstream mode detected, looking for .//langupdate_0.1.1.orig.tar.gz
I: mergeWithUpstream property set, looking for upstream source tarball...
 tar --no-same-owner --no-same-permissions --extract --gzip --file /opt/working/emdebian/host/trunk/langupdate/trunk/langupdate-0.1.1.tar.gz --directory <1 more argument>
 mv /opt/working/emdebian/host/trunk/langupdate/build-area/tmp-0.15173904069616/langupdate-0.1.1 /opt/working/emdebian/host/trunk/langupdate/build-area/langupdate-0.1.1
svn --force export /opt/working/emdebian/host/trunk/langupdate/trunk /opt/working/emdebian/host/trunk/langupdate/build-area/langupdate-0.1.1
Export complete.

Note como o tarball (criado pelo make dist e localizado por mergeWithUpstream devido ao link simbólico) é desempacotado e depois o SVN exportado é aplicado no topo. Isto permite aos responsáveis testar alterações locais usando --svn-ignore.


Pacotes nativos que não usam autotools

A propriedade useNativeDist

Quando make dist não está disponível, ainda existem situações onde os ficheiros gerados podem precisar de ser incluídos no tarball fonte do pacote nativo. O svn-buildpackage suporta a propriedade SVN useNativeDist (aplicada ao directório ./debian/) o qual permite um destino make native-dist personalizado seja executado imediatamente após a exportação do svn.

Exemplo 3.6. A propriedade useNativeDist

O svn-buildpackage usa esta funcionalidade para incluir o ficheiro POT para ajudar os tradutores. A regra de make personalizada precisa ser definida no Makefile do nível do topo:

# adiciona o ficheiro POT ao tarball da fonte
native-dist: Makefile
	po4a-build --pot-only

O alvo do native-dist precisa de ser idempotente e ser capaz de correr direito a partir da exportação do SVN. Quaisquer alterações feitas ao correr o alvo serão reflectidas directamente no tarball da fonte. Certifique que nenhuns ficheiros são removidos que possam prevenir que o pacote seja construído como um pacote Debian normal, usando apenas o pacote fonte resultante. (ex. cd para build-area, desempacotar o .dsc com dpkg-source -x e reconstruir o pacote, então remover o directório de teste.)

O próximo resultado é que o tarball fonte resultante inclui o po/svn-buildpackage.pot gerado pelo alvo do make native-dist se a necessidade de adicionar o ficheiro POT gerado ao SVN (e requerer submissões repetidas para cada vez que é alterada a hora no ficheiro POT).