domingo, mayo 25, 2014

Autotools, tutorial de uso (III): Las rutas de instalación

Una de las funciones que tiene el script configure es determinar las rutas donde se instalarán los diferentes componentes del software que se está configurando. Esta configuración se lleva a cabo a través de los parámetros que recibe. El ejemplo más clásico es --prefix, que determina la raíz de instalación bajo la cual se crearán el resto de los directorios.

El estándar GNU especifica una serie de variables que contienen las rutas donde se instalará el software. Estos valores pueden definirse a través de los parámetros en la línea de comandos que se le pase al script de configure, el cual los analizará y definirá una serie de variables con los valores que se les ha pasado.

Algunas de estas variables pueden consultarse en la siguiente tabla:

VariableDescripción
$prefixPrefijo común de todas las rutas que se usa para instalar todos los ficheros
$bindirRuta hacía los programas que los usuarios podrán ejecutar
$sbindirRuta hacía los programas que sólo puede usar el administrador del sistema
$sysconfdirRuta donde se instalará los ficheros de sólo lectura específicos de una máquina. Normalmente, ficheros de configuración
El resto de las posibles variables pueden consultarse en el enlace anterior.

Es importante hacer notar un hecho sobre estas variables. Están pensadas para ser usadas dentro de los ficheros Makefile, y que es preferible no evaluarlas dentro de los ficheros configure. Si se quiere el valor dentro de un programa, lo mejor es usar algún mecanismo para pasar el valor definido. Por ejemplo, si estamos usando C, se puede definir una macro con el valor de la variable que nos interesa y qcompilarla. No suele funcionar usarla como parámetros de macros.

A continuación un pequeño ejemplo que permite ver el comportamiento de estas variables en acción. Se trata del tut2, un pequeño programa que sirve para probar que está en autotools tutorial. A continuación el configure.ac y el tut2.c que se van a usar:

configure.ac

 1 dnl Esto es un comentario
 2 dnl Esta macro fuerza a una versión mínima de autoconf
 3 AC_PREREQ([2.59])
 4 AC_INIT([tut2],[1.0],[cterron@users.sourceforge.net],[tut2.tar.gz],
 5         [https://sourceforge.net/p/autotutorial/])
 6 dnl Necesitamos el compilador de C
 7 AC_CONFIG_HEADERS([config.h])
 8 AC_PROG_CC
 9 dnl Init automake 
10 AM_INIT_AUTOMAKE
11 dnl Definición de variables con los path
12 dnl Ver http://www.gnu.org/software/autoconf/manual/autoconf.html#Makefile-Substitutions
13 CFLAGS="$CFLAGS -DBINDIR=\\\"$bindir\\\""
14 CFLAGS="$CFLAGS -DDATADIR=\\\"$datadir\\\""
15 CFLAGS="$CFLAGS -DLIBDIR=\\\"$libexecdir\\\""
16 CFLAGS="$CFLAGS -DPREFIX=\\\"$prefix\\\""
17 CFLAGS="$CFLAGS -DSBINDIR=\\\"$sbindir\\\""
18 CFLAGS="$CFLAGS -DSHAREDSTATEDIR=\\\"$sharedstatedir\\\""
19 CFLAGS="$CFLAGS -DSYSCONFDIR=\\\"$sysconfdir\\\""
20 
21 
22 AC_CONFIG_FILES([Makefile])
23 AC_OUTPUT

tut2.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(int argc, char **argv)
 5 {
 6   printf("prefix \t\t= %s\n", PREFIX);
 7   printf("bindir \t\t= %s\n", BINDIR);
 8   printf("sbindir\t\t= %s\n",SBINDIR);
 9   printf("sysconfdir\t= %s\n", SYSCONFDIR);
10   exit(0);
11 }
12 
13 /* vim: ts=4: */

Estos dos ficheros nos permiten ver el comportamiento de las opciones que se le pasan al script configure a la hora de definir los path. Por ejemplo, si se compila con las siguientes opciones:

./autogen
./configure --prefix=/opt --sysconfdir=/etc
make clean
make
./tut2

La salida del programa es

prefix         = /opt
bindir         = /opt/bin
sbindir        = /opt/sbin
sysconfdir     = /etc
Se verá que la salida del programa el valor con el que se fijan algunas variables

Esto tiene espacial importancia a la hora de utilizar los ficheros makefiles generados para poder instalar el programa en las rutas que se desean. Además, permite una gran flexibilidad ya que incluso se pueden establecer esas variables a la hora de ejecutar una instalación a través de make install

Referencias

No hay comentarios: