Eu tenho um aplicativo foobar
para o qual alguém escreveu um patch para adicionar um recurso que eu gosto. Como posso usar o patch?
Eu tenho um aplicativo foobar
para o qual alguém escreveu um patch para adicionar um recurso que eu gosto. Como posso usar o patch?
Respostas:
Os patches geralmente estão contidos nos .diff
arquivos, porque os patches são criados usando o diff
comando
Um patch é uma série de inserções e exclusões no código-fonte. Por esse motivo, para usar o patch, você deve construir o aplicativo (por exemplo, "foobar") a partir da fonte após aplicar o patch. Então, nas etapas:
1. Obtenha o pacote de origem do foobar .
A maioria das distribuições linux (o patch nb não é exclusivo do linux) tem "pacotes fonte" que você pode usar para esse fim, mas como são heterogêneos, vou me referir apenas ao formato da fonte original aqui. A fonte original não faz parte da distribuição e pode ser difícil de encontrar. Um bom lugar para começar é a wikipedia, que possui artigos para muitos aplicativos populares, e o artigo deve conter um link para uma página inicial com um download da fonte. Você também pode pesquisar no Google, obviamente. O pacote fonte será chamado algo como foobar.0.1.tar.bz2
. Descompacte - você agora tem um diretório chamado foobar.0.1
.
2. Adicione o patch.
Às vezes, os patches são arquivos únicos e, às vezes, são um conjunto de vários arquivos. Copie-os para foobar.0.1
e cd foobar.0.1
. Em seguida, você precisa executar o patch
comando. Isso é lido da entrada padrão, então você deseja canalizar o .diff
arquivo. A parte complicada é determinar o que usar para a -p
opção (se não houver instruções com o patch). Para fazer isso, você precisa observar o início do arquivo de correção. Por exemplo:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
Nesse caso, comm.c
é o nome do arquivo de origem que será alterado. No entanto, observe que há um diretório anexado a ele. Como esses não são o mesmo diretório ("antigo" vs. "novo"), é uma grande pista que essa parte do caminho é lixo (para nossos propósitos). O objetivo do -p
switch (consulte man patch
) é eliminar esse prefixo. É preciso um número, que é o número de barras ( /
) para eliminar, com tudo no meio; neste caso, usaríamos -p1
para reduzir o caminho para simplesmente comm.c
.
Isso pressupõe que comm.c
esteja realmente no mesmo diretório, o que será outra pista para saber se sua interpretação está correta. Se ambas as linhas estavam src/comm.c
e comm.c
estão realmente no src
subdiretório da sua árvore de construção, você precisa usar -p0
- cuidado: o não uso de -p
todas removerá TODAS as barras. Se o caminho for absoluto (ou seja, começa com /
), provavelmente é isso que você deseja. Agora aplique o patch:
patch -p1 < patch.diff
A fonte foi modificada agora. Se houver mais .diff
arquivos, aplique-os da mesma maneira.
3. Crie e instale.
Este é o processo normal, você iria passar por construir algo a partir da fonte - primeiro ./configure
, então make
, make check
, make install
. Antes de fazer a última, se você já possui uma instalação foobar
, decida se deseja remover ou substituir isso ou como vai lidar com o conflito de nomenclatura. Você provavelmente quer foobar
se referir à sua nova versão corrigida, e não à antiga.