Ho un'applicazione foobar
per la quale qualcuno ha scritto una patch per aggiungere una funzione che mi piace. Come posso usare la patch?
Ho un'applicazione foobar
per la quale qualcuno ha scritto una patch per aggiungere una funzione che mi piace. Come posso usare la patch?
Risposte:
Le patch sono generalmente contenute nei .diff
file, perché le patch vengono create usando il diff
comando.
Una patch è una serie di inserimenti ed eliminazioni nel codice sorgente. Per questo motivo, al fine di utilizzare la patch, è necessario creare l'applicazione (ad esempio "foobar") dal sorgente dopo aver applicato la patch. Quindi, nei passaggi:
1. Ottieni il pacchetto sorgente per foobar .
La maggior parte delle distribuzioni di Linux (il patch nb non è univoco per Linux) hanno "pacchetti sorgente" che puoi usare a questo scopo, ma poiché questi sono eterogenei, qui farò solo riferimento al formato della fonte originale. La fonte originale non fa parte della distribuzione e potrebbe essere difficile da trovare. Un buon punto di partenza è Wikipedia, che contiene articoli per molte applicazioni popolari e l'articolo dovrebbe contenere un collegamento a una home page con un download di origine. Puoi anche google te stesso, ovviamente. Il pacchetto sorgente si chiamerà qualcosa del genere foobar.0.1.tar.bz2
. Decomprimilo: ora hai una directory chiamata foobar.0.1
.
2. Aggiungi la patch.
A volte le patch sono file singoli e altre volte sono un insieme di più file. Copia quelli in foobar.0.1
e cd foobar.0.1
. Successivamente, è necessario eseguire il patch
comando. Questo si legge dall'input standard, quindi vuoi reindirizzare il .diff
file. La parte difficile è determinare cosa usare per l' -p
opzione (se non ci sono istruzioni con la patch). Per fare ciò è necessario guardare all'inizio del file patch. Per esempio:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
In questo caso, comm.c
è il nome del file di origine che verrà modificato. Tuttavia, si noti che è stata aggiunta una directory. Dal momento che queste non sono la stessa directory ("vecchio" vs. "nuovo"), questo è un grande indizio che questa parte del percorso è spazzatura (per i nostri scopi). Lo scopo -p
dell'interruttore (vedi man patch
) è di eliminare questo prefisso. Ci vuole un numero, che è il numero di barre ( /
) da eliminare, con tutto in mezzo; in questo caso utilizzeremo -p1
per ridurre il percorso a semplicemente comm.c
.
Quel presupposto comm.c
è in realtà nella stessa directory, che sarà un altro indizio sul fatto che la tua interpretazione sia corretta. Se entrambe le linee erano src/comm.c
, ed comm.c
è effettivamente nella src
sottodirectory del tuo albero di compilazione, allora devi usare -p0
- stai attento che non usare -p
affatto rimuoverà TUTTE le barre. Se il percorso è assoluto (cioè inizia con /
), è probabilmente quello che vuoi. Ora applica la patch:
patch -p1 < patch.diff
La fonte è stata ora modificata. Se ci sono più .diff
file, applicali allo stesso modo.
3. Compilare e installare.
Questo è il processo normale si dovrebbe passare attraverso di costruire qualcosa da fonte - prima ./configure
, poi make
, make check
, make install
. Prima di eseguire l'ultimo, se si dispone già di un'installazione esistente foobar
, decidere se si desidera rimuovere o sovrascrivere quello o come affrontare il conflitto di denominazione. Probabilmente vuoi foobar
fare riferimento alla tua nuova versione con patch e non a quella precedente.