Crear parches con diff

Normalmente al compilar nuestros paquetes desde el código fuente debemos verificar que contamos con las dependencias necesarias y algunas veces sin son las versiones adecuadas de cada una de ellas, una vez comprobado esto, procedemos de manera confiada a ejecutar nuestros comandos de compilación.

./configure --prefix=/usr
make

Pero de manera inesperada nos da el siguiente error:

/usr/include/glib-2.0/glib/deprecated/gthread.h:165:4: aviso: la declaración no declara nada
In file included from shape_typeinfo.c:30:0:
/usr/include/glib-2.0/glib/gstrfuncs.h:28:2: error: #error "Only can be included directly."
make[3]: *** [shape_typeinfo.lo] Error 1
make[3]: se sale del directorio `/media/datos/sources/pnavarro/dia-0.97.1.orig/objects/custom'
make[2]: *** [all-recursive] Error 1
make[2]: se sale del directorio `/media/datos/sources/pnavarro/dia-0.97.1.orig/objects'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/media/datos/sources/pnavarro/dia-0.97.1.orig'
make: *** [all] Error 2

Gracias al mensaje de error, podemos determinar que es lo que está mal (no siempre es así) en este caso el fichero “shape_typeinfo.c” tiene declarado una cabecera que esta obsoleta y debe ser sustituido por la correcta que es “glib.h” en lugar de “glib/gstrfuncs.h“, esto debemos hacerlo a mano, pero antes debemos desempaquetar el codigo fuente en dos directorios, en este caso he creado dos con los sufijos .new y .orig, en el .new, haremos las modificaciones necesarias, el .orig lo dejamos tal cual.

tar xvf dia-0.97.1.tar.bz2
mv dia-0.97.1 dia-0.97.1.orig #renombramos dia-0.97.1 con el sufijo .orig
cp -r dia-0.97.1.orig dia-0.97.1.new # hacemos una copia identica con el sufijo .new

Dentro del código fuente vamos a modificar manualmente con un editor de texto de preferencia los siguientes ficheros conflictivos:

nano dia-0.97.1.new/objects/custom/shape_typeinfo.c
nano dia-0.97.1.new/tests/test-boundingbox.c
nano dia-0.97.1.new/tests/test-objects.c

En cada uno de los anteriores sustituimos “glib/gstrfuncs.h” con “glib.h

Entra en juego el comando diff:

Un poco de teoría:
La wikipedia lo define como:

Una utilidad para la comparación de archivos que genera las diferencias entre dos archivos o los cambios realizados en un archivo determinado comparándolo con una versión anterior del mismo archivo”

Ahora que ya entramos en materia, vamos a lo tanto esperado, crear el parche con las correcciones que hicimos en dia-0.97.1.new:

diff -Naur dia-0.97.1.orig dia-0.97.1.new > parche.patch

Donde:
-N Trata los ficheros que no existan como vacíos.
-a Trata todos los ficheros como de tipo texto.
-u Muestra NÚM (3 por omisión) líneas de contexto unificado.
-r Compara recursivamente todos los subdirectorios.

diff no hace más que comparar dia-0.97.1.orig con dia-0.97.1.new y envía la salida a el fichero de texto parche.patch el cual se ve de esta forma:

patch_dia

Para aplicarlo al código fuente en futuras ocaciones, se escribe lo siguiente dentro del directorio del código fuente original:

patch -Np1 -i ../parche.patch

de ser exitoso nos da la siguiente salida:

patching file objects/custom/shape_typeinfo.c
patching file tests/test-boundingbox.c
patching file tests/test-objects.c

Cualquier duda, pueden expresarlo mediante los comentarios.

Happy Hacking.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s