Differenze tra le versioni di "Patch"

Da Wiki :: openmamba.
Jump to navigation Jump to search
(Nuova pagina: = Patch = Una patch è normalmente costituita da un file che contiene, in uno specifico formato, informazioni circa le differenze da applicare ad uno o più file di codice sorgente. L...)
 
m (Meglio utilizzare il nome completo della patch (al posto di %name) per evitare che dipenda dal nome del programma principale (e dello spec file))
 
(3 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
= Patch =
 
 
Una patch è normalmente costituita da un file che contiene, in uno specifico formato, informazioni circa le differenze da applicare ad uno o più file di codice sorgente.
 
Una patch è normalmente costituita da un file che contiene, in uno specifico formato, informazioni circa le differenze da applicare ad uno o più file di codice sorgente.
  
Riga 49: Riga 48:
 
  Void CMotionVector::scaleup ()
 
  Void CMotionVector::scaleup ()
  
A questo punto torniamo nella cartella di build e creiamo la patch utilizzando il comando '''diff''':
+
A questo punto torniamo nella cartella di build e creiamo la patch utilizzando il comando '''diff''' con l'opzione '''-Nru''':
  
 
<pre>
 
<pre>
Riga 60: Riga 59:
  
 
<pre>
 
<pre>
Patch0:        %{name}-1.5.0.1-gcc4.patch
+
Patch0:        mpeg4ip-1.5.0.1-gcc4.patch
 
</pre>
 
</pre>
  
e la applichiamo nella sezione '''%prep''' con:
+
e la applichiamo nella sezione '''%prep''' subito dopo che l'archivio sorgente viene scompattato con la macro '''%setup'''. Esempio:
  
 
<pre>
 
<pre>
 +
%prep
 +
%setup -q
 
%patch0 -p1
 
%patch0 -p1
 
</pre>
 
</pre>

Versione attuale delle 13:23, 5 dic 2010

Una patch è normalmente costituita da un file che contiene, in uno specifico formato, informazioni circa le differenze da applicare ad uno o più file di codice sorgente.

La seguente patch modifica il codice sorgente di mpeg4ip per la compilazione con GCC 4:

--- mpeg4ip-1.5.0.1/common/video/iso-mpeg4/src/type_basic.cpp	2005-05-04 21:56:00.000000000 +0200
+++ mpeg4ip-1.5.0.1.patched/common/video/iso-mpeg4/src/type_basic.cpp	2008-06-06 01:35:06.000000000 +0200
@@ -317,13 +317,13 @@
 	iHalfY = m_vctTrueHalfPel.y - iMVY * 2;
 }
 
-Void CMotionVector::setToZero (Void)
+Void CMotionVector::setToZero ()
 {
 	memset (this, 0, sizeof (*this));
 }
 
 // RRV insertion
-Void CMotionVector::scaleup (Void)
+Void CMotionVector::scaleup ()
 {
 	if(m_vctTrueHalfPel.x == 0){
 		m_vctTrueHalfPel_x2.x = 0;

Poiché il codice sorgente è stato scritto per versioni precedenti del compilatore GCC occore applicare (tra le altre) questa modifica.

Creazione di una patch

Supponendo di avere in locale i sorgenti del pacchetto RPM per il quale andiamo a creare ed applicare la patch, lo prepariamo nella cartella /usr/src/RPM/BUILD con il comando:

rpmbuild -bp mpeg4ip.spec

Effettuiamo una copia della cartella sorgente:

cd /usr/src/RPM/BUILD
cp -a mpeg4ip-1.5.0.1 mpeg4ip-1.5.0.1.orig

Entriamo nella cartella mpeg4ip e modifichiamo il file common/video/iso-mpeg4/src/type_basic.cpp sostituendo

Void CMotionVector::setToZero (Void)

con

Void CMotionVector::setToZero ()

e

Void CMotionVector::scaleup (Void)

con

Void CMotionVector::scaleup ()

A questo punto torniamo nella cartella di build e creiamo la patch utilizzando il comando diff con l'opzione -Nru:

cd /usr/src/RPM/BUILD
diff -Nru mpeg4ip-1.5.0.1.orig mpeg4ip-1.5.0.1 > ../SOURCES/mpeg4ip-1.5.0.1-gcc4.patch

Applicazione di una patch

Aggiungiamo nello specfile di mpeg4ip il nome del file contenente la patch:

Patch0:        mpeg4ip-1.5.0.1-gcc4.patch

e la applichiamo nella sezione %prep subito dopo che l'archivio sorgente viene scompattato con la macro %setup. Esempio:

%prep
%setup -q
%patch0 -p1