martes, febrero 20, 2007

Autoconf, aclocal, macros m4 y otras hierbas: Configurando software Open Source

Reconozco que toda la familia de utilidades tipo autoconf, aclocal y configure me acaban causando dolor de cabeza en el momento que intento usarlas fuera de Linux. Pensadas para aumentar la portabilidad, al final, han conseguido que se complique las cosas: si el objetivo es la portabilidad debe de asegurarse que funciona (por no hablar del rendimiento que tiene alguno de estos mostruosos shell scripts....)

Para empezar el antidiluviano m4 como procesador de macros. Sintaxis más propia de mediados de los años 80, cuando hoy en día cualquier sistema tiene un buen interprete perl o python.

Aparte, la gente de Freedesktop tienen otro sistema para localizar donde están los ficheros includes y las librerías, llamado pkg-config.Este sistema es un ejecutable y una serie de ficheros que especifica donde están las librerías y ficheros includes. Por ejemplo MacOS incluye estos ficheros para algunas librerías en /usr/lib/pkgconfig. Claro, que en caso de que actualicemos por ejemplo a nuestra propia versión y la coloquemos en /usr/local, nos encontraremos que el pkg-config sólo esté buscando los paquetes en /usr/local/lib/pkgconfig. Para evitar estos problemas podemos utilizar la variable de entorno PKG_CONFIG_PATH. En esta variable se puede especificar una lista de directorios separados por ":" para que el programa busque en los mismos los ficheros necesarios. Así para que busque en /usr/lib/pkgconfig y /usr/local/lib/pkgconfig:

ibookdrizzt:~ terron$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig 
ibookdrizzt:~ terron$ pkg-config --libs glib-2.0
-L/usr/local/lib -lglib-2.0 -lintl -liconv  
ibookdrizzt:~ terron$ 

Un detalle, aparte, es que para usar autoconf y demás familia, pkg-config instala un fichero de macros llamado pkg.m4.Este fichero de macros depende de donde se ha configurado la instalación del mismo. Claro, que si lo queremos usar desde un aclocal para buscar las dependencias dependerá también de como este último se haya compilado. Para ello, aclocal tiene la opción -I directorio para especificar las rutas de búsqueda de los ficheros m4. Por ejemplo, si en nuestro sistema tenemos un fichero de macros m4 que necesite aclocal en /usr/local/share/aclocal, pues:

ibookdrizzt:~/tmp/os-sim-0.9.9rc3.drizzt terron$ aclocal -I /usr/local/share/aclocal 
ibookdrizzt:~/tmp/os-sim-0.9.9rc3.drizzt terron$ 

En fin, problemillas que me voy encontrando con las autotools ....

Technorati Tags: , ,

No hay comentarios: