Além do previamente mencionado CODING, a equipe da Mandriva Conectiva em Manaus também desenvolveu um modelo de build-system baseado em autotools (autoconf, automake, libtool) que acredito ser muito útil. Ele também estava destinado ao esquecimento, mas resolvi ressuscitá-lo e disponibilizá-lo sob a GNU-GPL.
Pra quem o conhece, a parte principal continua a mesma. Eu adicionei algumas funcionalidades (como a geração de bibliotecas, plugins, suporte a pthread) e um pouco de documentação.
Algumas caracterÃsticas desse modelo:
- Recursos modernos do autoconf, automake e libtool;
- Modular, limpo e facilmente extensÃvel;
- Suporte a unit-tests em C usando o check;
- Suporte a code-coverage dos unit-tests com lcov;
- Suporte a pkgconfig;
- Modo debug, flags de warnings do gcc, electric-fence, pthreads;
- make distcheck limpo e funcional;
- Integrado com doxygen;
Escrevi um pequeno README sobre o uso do modelo que deve ser suficiente para quem já tem os conhecimentos básicos e encontrei um extenso tutorial que deve ser útil até para quem já é experiente. De qualquer modo, vale o bom e velho conselho: “Use the source, Luke”, ele é relativamente intuitivo.
O código está disponÃvel em meu repositório SVN git: http://git.ademar.org/, e deve ser atualizado conforme as necessidades ou contribuições sejam feitas.
BTW, o grosso do trabalho inicial foi feito ainda em 2005 e paradoxalmente, o autor original é o Leonardo Boiko (paradoxalmente porque quem conhece autotools e o leoboiko sabe que o primeiro é conhecido pelo número de gambiarras/xunxos e o segundo pelo à s vezes absurdo perfeccionismo). Acho que quando ele ver esse modelo vai querer me matar pelas novas “gambiarras” que adicionei… :-)
Correções e contribuições, como sempre, são muito bem vindas.
Caramba!! Isso vai quebrar uma árvore. Muito bom.
valeus.
Link pra um paper que explica por que usar makefiles recursivos é uma idéia ruim: (sugestão recebida por e-mail do leoboiko)
http://members.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
Nesse template, é usado um único makefile pra todo o projeto (libs, plugins, programas, etc). Isso é uma boa prática. IMHO, múltiplos makefiles devem ser utilizados apenas quando o projeto é segmentado em múltiplos sub-projetos – com diferentes mantenedores.
Encontrei um tutorial que parece promissor. É bastante extenso e cobre as técnicas mais modernas de uso do autotools:
http://www-src.lip6.fr/homepages/Alexandre.Duret-Lutz/autotools.html
Atualizei o texto do artigo pra referenciar esse tutorial também.
Ademar
Olhei no repositorio sobre a licenca, em qual arquivo que aparece?
E voce escolheu a GPL por algum motivo especial? Por que nao LGPL?
Abraco
Adenilson
Adenilson, adicionei uma nota no README e também adicionei uma cópia da GNU-GPL no repositório. Obrigado por ter notado isso. :-)
Creio não haver diferença prática entre a GPL e LGPL no caso desse build-system, pois não há o processo de link-edição entre os scripts. É possÃvel argumentar que um novo arquivo .m4 seja equivalente a link-edição, mas acredito que esse cenário seja pouco relevante, dado que esse tipo de arquivo é bem simples e o código fonte sempre é visÃvel.
Note que o fato do build-system ser GPL não implica que o projeto que o use tenha que ser GPL ou que o próprio build-system tenha que ser público. É perfeitamente possÃvel ter um projeto fechado que utilize esse build-system desde que o build-system em sà nunca seja distribuÃdo.
A motivação pra escolha da GPL é que modificações no build-system devem se tornar públicas e licenciadas sob a GPL se distribuÃdas.
Bem, essa é a idéia original, mas estou aberto a sugestões.
Massa. Vou guardar isso nem que seja de recordação. he he he :]
Boa noite, estou pesquisando na web uma maneira de montar uma jukebox. Me parece que vc já projetou uma na época da faculdade, se possivil gostaria de algumas dicas. Desde já agradeço.