Arquivo configure.ac
Este arquivo é responsável por toda a checagem e nele é especificado o nome do projeto, versão, autor, e-mail para reportar bugs e página do desenvolvedor, além das checagem do compilador, de bibliotecas e arquivos instalados e as saídas que a configuração irá gerar.
Vamos entender sua composição através do exemplo abaixo:
AC_INIT(Projeto, 1.0.0, sombra@alcionesytes.net , projeto , http://www.alcionesytes.net/)
AC_PREREQ([2.50])
AM_INIT_AUTOMAKE([gnu 1.11 -Wall])
AC_PROG_CXX
AC_LANG([C++]
AC_HEADER_STDC
AC_CHECK_HEADERS([iostream string fstream vector])
PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 >= 2.10])
AC_CHECK_PROGS([PG_CONFIG], [pg_config])
if test x"$PG_CONFIG" = x; then
AC_MSG_ERROR([$PACKAGE requires pg_config])
fi
AC_SUBST(PG_LIBS, [`$PG_CONFIG libdir`])
AC_SUBST(PG_CPPFLAGS, [`$PG_CONFIG cppflags`])
AC_SUBST(PG_LDFLAGS, [`$PG_CONFIG ldflags`])
AC_DEFINE([CONF_FILE],["conf/db.conf"],[Arquivo de Configuração])
AC_TYPE_SIZE_T
AC_PREFIX_DEFAULT([~/bin])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
AC_INIT - define o cabeçalho do arquivo e é onde informamos o nome do projeto, versão, e-mail para reportar bugs, nome do arquivo tar e site do desenvolvedor.
AC_PREREQ - informamos a versão do autoconf utilizada.
AM_INIT_AUTOMAKE - iniciamos a checagem do automake, os parâmetros são:
- gnu - padrão GNU/Linux de projetos
- 1.11 - versão do automake necessária
- -Wall - flag de compilação para o gcc ou g++
AC_PROG_CXX - checa se o compilador do C++ está instalado no sistema, para checar o compilador do C retiramos o XX.
AC_LANG - checa se determinada linguagem de programação está presente no sistema no caso do exemplo a linguagem C++.
AC_HEADER_STDC - checa se os cabeçalhos da Standard C estão presentes, esta checagem pode ser omitida se não for utilizar headers que são presentes em C e C++.
AC_CHECK_HEADERS - checa as headers necessárias para o seu programa, nesse ponto você deve listar todos as headers que deseja incluir no seu projeto.
PKG_CHECK_MODULES - esse macro é utilizado para checar a instalação de uma determinada biblioteca, que é mantida em uma lista pelo comando "pkg-config". Após checado ele gera variáveis internas para serem utilizadas nos "Makefile.am" utilizando o prefixo informado, no exemplo o GTKMM, seguido dos sufixos _CPPFLAGS, _LDFLAGS.
AC_CHECK_PROGS - esse macro serve para testar a existência de um programa que será utilizado, veja que sua estrutura é formada por duas partes, a primeira você nomeia a variável local que irá armazenar o caminho do programa, e a segunda é o nome do programa que irá ser checado no PATH padrão do seu sistema.
Usando o "if", observe que essa estrutura condicional está utilizando o padrão bash, você pode testar se obteve sucesso na checagem da existência do programa testado, e enviar uma mensagem de erro caso o mesmo não foi encontrado.
AC_SUBST - esse macro serve para você declarar variáveis que podem ser utilizadas nos Makefile.am para auxiliar na compilação do programa.
AC_DEFINE - utilizamos esse macro para definir "macros" da linguagem C/C++ para checagem do preprocessador.
AC_TYPE_SIZE_T - se estiver utilizando a biblioteca time.h é recomendado utilizar esse macro para checar a declaração do size_t na linguagem.
AC_PREFIX_DEFAULT - aqui nos definimos o diretório onde será instalado o programa após compilado, ou seja, quando executarmos o "make install", ele irá utilizar a informação contida nessa linha para determinar onde será instalado o programa, porém se omitido podemos modificá-lo na hora do "./configure" utilizando o argumento "--prefix=".
AC_CONFIG_HEADERS - esse macro é utilizado para definirmos o nome do arquivo headers que será gerado ao final de toda a checagem feita, ou seja, a listagem da existências dos headers checados, dos defines criados e além disso o nome do projeto, juntamente com as informações passadas no início do "configure.ac".
AC_CONFIG_FILES - aqui nos colocamos os arquivos que serão gerados, geralmente os caminhos dos Makefiles, utilizando as informações preprocessadas.
AC_OUTPUT - finalizamos com esse macro para dizer para o script (configure) que já pode gerar os outputs necessários que já foram definidos acima.
Arquivo Makefile.am
Nesse arquivo especificaremos quais serão as pastas compiladas e quais os arquivos que pertencem ao projeto.
Vejamos um exemplo básico:
SUBDIRS = src
Projetodir = $(prefix)
Projeto_DATA = README\
COPYING\
AUTHORS\
ChangeLog\
INSTALL\
NEWS\
CREDITS
EXTRA_DIST = $(Projeto_DATA)
Vamos observar alguns detalhes importantes nesse arquivo:
SUBDIRS - essa variável vai receber a lista de todos os diretórios que tem outros Makefile.am, cada diretório é separado por um espaço, podendo existir mais de um diretório.