Integrando Doxygen ao GNU Build System
Depois de procurar muito e só achar coisas que não funcionavam, eu resolvi meter a mão na massa! Foi até divertido!
Como todos sabem, ou deveriam saber, o GNU Build System - autohell para os mais íntimos - é o sistema de compilação mais famoso no mundo UNIX, ele tem suporte padrão a algumas linguagens (como C, C++ e Fortran), compilação de documentação na forma de man pages e LaTeX, e até uma suite de testes - essa eu não sei nem pra onde vai.
Até aí tudo bem com o autohell, o problema é que eu não queria gerar man pages e muito menos documentos TeX: eu queria HTML pra ficar bonitinho que nem aquelas documentações de gente que sabe programar. Foi aí que encontrei o Doxygen, ele gera HTML e também tem suporte a uma pancada de formatos. O que eu queria mesmo era poder gerar a documentação usando o próprio autohell, e aí eu saí procurando e acabei achando algumas soluções como uma que está no arquivo de macros do autoconf. Só que a unica coisa que elas estavam fazendo era procurar o doxygen e outras ferramentas que ele precisa no sistema. O aminclude de algumas soluções que encontrei, estava muito mal escrito e o make relatava problemas o tempo todo.
Bom, vamos deixar de enrolação e por logo a mão na massa. Primeiro, no configure.ac, você tem que adicionar o código a seguir:
No Makefile.am da raiz do seu projeto você só precisa colocar o seguinte:
O diretório da documentação também precisa de um Makefile.am, é esse o arquivo responsável por executar a compilação da documentação.
Para finalizar, você precisa ter um arquivo Doxyfile.in no diretório da documentação. Ahn? Por que você precisa? Pelo simples fato de que é melhor usar paths absolutas para determinar o caminho do diretório onde está o source e do de saída da documentação. Assim evitamos problemas caso desejemos dar um make all dentro do diretório da documentação. No Doxyfile você precisa mudar o valor de algumas variáveis como no exemplo abaixo:
PROJECT_NAME = "@PACKAGE_NAME@"
PROJECT_NUMBER = "@PACKAGE_VERSION@"
OUTPUT_DIRECTORY = @abs_top_srcdir@/doc
STRIP_FROM_PATH = @abs_top_srcdir@
Uma vantagem de se fazer isso é não precisar ficar atualizando o nome do projeto ou a versão, toda vez que você resolver mudar.
Até a próxima.