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)
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
.
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).