autoconf y automake - también configure con dev-cpp

Solicite, consulte o publique recursos de referencia para desarrolladores.

autoconf y automake - también configure con dev-cpp

Notapor AnimAlf » Mié Oct 11, 2006 10:28 am

Hola,
es mi primer mensaje en el foro, así que un saludo para todos :))

Este mensaje se podría convertir en un cross donde aportar información sobre este tema. Yo estoy muy flojo en él y es muy apasionante.

Voy a explicar como podemos utilizar las autotools en nuestros proyectos (autoconf, automake), también para usuarios windows de dev-cpp o mingw. La habilidad de proveer a windows de la posibilidad de utilizar los scripts configure no las da el POSIX/Bourne shell que nos provee MSYS (Minimal System) que pertenece al proyecto Mingw, luego explico como instalarlo.

Las autotools son una herramienta genial para gestionar nuestros proyectos y que luego estos sean portables. Claro que intimidan un poco, al menos en principio, al menos a mi. La documentación en este caso la encuentro excesiva, no encontrando nunca algo sencillo que me diga como empezar, por lo que en un principio se me hacía cuesta arriba iniciarme en esto. Aunque una vez iniciado, no pueda estar ya sin ello. Antes de continuar con las autotools haré un alto para la configuración del sistema en windows.

El dev-cpp utiliza Mingw, y Mingw nos ofrece el MSYS (Mínimal system), que nos proveerá de una shell como si estuviesemos en línux intalando muy pocas cosas para que sea una realidad. Si lo instalamos, nos preguntará si utilizamos Mingw, le decimos que sí y como directorio del Mingw le indicamos la ruta al directotio dev-cpp por defecto: c:/dev-cpp.

Cuando hallamos terminado instalaremos el paquete de herramientas para el programador de MSYS (MSYS Developer Tool Kit) que incluye herramientas como bison autoconf automake y libtool

Ahora cada vez que entremos por medio de Msys veremos que tenemos una shell bash de linux, cuya raiz es el directorio C:\msys (/) y resto de nuestras unidades están montadas como /a /c /d ...

Los usuarios de windows x64 deberán modificar el acceso directo que lanza el Mysys para que no les de error, para que la llamada quede de este modo:
%WINDIR%\syswow64\cmd.exe /c T:\msys\1.0\msys.bat


A partir de este momento podremos coger cualquier proyecto y construirlo con el mismo método que que utilizamos en Linux:
Código: Seleccionar todo
./configure
./make
./make install


Bien, vamos a por nuestro proyecto.
Los proyectos por lo general serán un directorio. Para organizar un poco las cosas, los archivos fuentes de nuestro proyecto los pondremos en src un subdirectorio del proyecto es decir:

/proyecto
/proyecto/src

La raiz del proyecto siempre deberá contener dos archivos, el archivo Makefile.am y el archivo configure.in
en el Makefile.am de la raiz del proyecto le indicaremos que directorios forman parte del proyecto, simplemente creando un archivo con el siguiente contenido:

Código: Seleccionar todo
SUBDIRS = src


Cada directorio deberá conener además otro Makefile.am, pero este con los archivos fuentes, por ejemplo, en este caso sólo tenemos el directorio src pues su makefile.am puede ser:
Código: Seleccionar todo
bin_PROGRAMS = miPrograma
miPrograma_SOURCES = \
        defpong.c  defpong.h \
        juego.c  main.c
noinst_HEADERS = defpong.h

con
bin_PROGRAMS le indica el nombre del binario resultante y que será intalado en el archivo bin
miPrograma_SOURCES le indica los fuentes, fijate que miPrograma se refiere a lo establecido en PROGRAMS
noinst_HEADERS le inidica que esas cabeceras no deben ser instaladas.

en nuestro caso, no tenemos más.

Ahora el archivo configure.in és el mas importante en este proceso, es el que creará nuestro configure final, y en el que le indicaremos las reglas y que necesitamos para poder compilar el proyecto. Básicamente lo que contiene este archivo son macros. Muestro un ejemplo de este archivo y a continuación explico cada una de las macros.
Código: Seleccionar todo
AC_INIT([miPrograma],[0.1],[errores@sdl-listas.org])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CYGWIN
AM_PROG_CC_STDC

# Comprobar que existe SDL
pkg_modules="sdl >= 1.2.7"
PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
AC_SUBST(PACKAGE_CFLAGS)
AC_SUBST(PACKAGE_LIBS)

# Comprobar que también tenemos SDL_mixer
AC_CHECK_LIB(SDL_mixer, main, , AC_MSG_ERROR([
  *** No se ha encontrado la libreria SDL_mixer
  (http://www.libsdl.org/projects/SDL_mixer/)
]))

# Comprobat que tenemos SDL_image con soporte para PNG
AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([
  *** No se ha encontrado la libreria SDL_image con soporte para PNG
  (http://www.libsdl.org/projects/SDL_image/)
]))

AC_OUTPUT([
  Makefile
  src/Makefile
])


AC_INIT([miPrograma],[0.1],[errores@sdl-listas.org]) Inicializamos con el nombre del proyecto, su versión y la dirección de correo a la que enviar bugs
AM_INIT_AUTOMAKE añadir todas las funcionalidades de Automake.
AC_PROG_CC asegurarnos la disponibilidad de un compilador de C
CYGWIN Nos creará una variable puesta a yes si estamos en el entorno CYGWIN
AM_PROG_CC_STDC Se crea una variable con ac_cv_prog_cc_stdc=no si el compilador no puede compilar código ISO Standard C
PKG_CHECK_MODULES si existe pkg-config chequea las librerias con el
AC_SUBST extraemos resultados
AC_CHECK_LIB chequeamos por una librería
AC_OUTPUT Maquefiles que se han de crear

Luego podemos ejecutar autoscan, que nos mostraría que nos hemos dejado, además nos creará un configure.scan que podemos utilizar para ampliar nuestro configure.in

Llegados aquí podemos ejecutar aclocal

Luego autoconf

Finalmente automake --add-missing, este seguramente nos marcara un error diciendo que nos faltan archivos
Código: Seleccionar todo
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found

los creamos ...
Código: Seleccionar todo
touch NEWS README AUTHORS ChangeLog

y volvemos a ejecutarlo automake --add-missing

ya tendremos listo nuestro configure.

En windows no se puede ejecutar lo anterior a no se que se intale el modulo de perl XML:Parser, yo aún sigo con eso, tengo un win64 beta, en el que hago pruebas, pero me pongo nervioso si estoy mucho tiempo en ese entorno.

Creo que podemos augmentar considerablemente esta documentación, para poder lograr proyectos geniales.

Personalmente, cuando preparo un proyecto, suelo tener los archivos CVS en un directorio y luego enlazo simbolicamente desde otros para no mezclar los archivos que se crean con los del proyecto.
Avatar de Usuario
AnimAlf
 
Mensajes: 10
Registrado: Jue Ago 24, 2006 2:16 am
Ubicación: Tarragona

Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado