Přiznám se, že autotools znám jen zběžně. Používat jej (configure & make & make install) umím, vytvořit menší projekt o několika souborech také. Ale "hrabat" se ve velkém projektu plném vychytávek a jiných maker, tak to jsem doslova obestlaný manuály, dokumentací a info stránkami. Existuje něco podobně mocného, jako autotools, ale přesto přenositelného a se stejnými možnostmi? Ano. Waf.
Obrovskou výhodou autotools (jinými slovy ./configure & make & make install) je fakt, že ke svému běhu potřebují jen shell (sh). Díky autotools lze kompilovat programy na odlišných UNIXových systémech i jinde. Dnes je situace jiná - není třeba zas tak velké přenositelnosti. Typicky se autor programu snaží docílit překladu na Linuxu, MacOS a Windows. Když se program přeloží bez větších obtíží na BSD, je to bonus. Shell jako minimum je prostě overkill. Waf potřebuje jen Python, který k němu lze snadno přiložit.
Tématem zápisku je waf - miniaturní skript (méně než 100 kB), který ke svému běhu potřebuje pouze interpret Pythonu verze 2.3 nebo vyšší (až do verze 3.1), případně Jython. To řada systémů splňuje bez problémů, případně lze Python k programu připojit (např jython.jar).
V tomto jediném souboru (skriptu) je všechno, co potřebujete. Po prvním spuštění se Waf rozbalí do skrytého adresáře s projektem (.waf-verze-hash - jsou to soubory v Pythonu) a poté se již nerozbaluje. Umí vše, co se od takového nástroje očekává.
Skript waf je velice mocný a plně zastoupí autotools (autoconf, automake, configure, make, make install). Psaní build skriptů je snadné, k základům postačí pár minut čtení dokumentace.
Waf přináší mnoho nových a zajímavých vlastností. Kromě nadstandardních balíčkovacích a testovacích možností nabízí napojení na server kontinuální integrace. Můžete si aktivovat vlastní ccache, nebo si nastavit barvy výstupu na konzoli včetně progress baru. Waf je vysoce rozšiřitelný a pokud umíte základy Pythonu, psaní build skriptů bude hračkou.
Na několika velkých projektech jsem si již ověřil, že jakmile se posunete za hranice obyčejného sestavování a chcete víc, vždy se pak snažíte "naroubovat" jiné nástroje a postupy na utility typu GNU Make nebo Apache Maven/Ant. Výsledky pak někdy nejsou ideální. Waf je na budoucí rozšiřování nejen připraven, on vlastně k tomu svým návrhem vybízí. A díky Pythonu jsou skripty lépe přenositelné než kdy jindy.
Když už začnete experimentovat s Wafem, zkuste také velmi pěkné odlehčené programovací prostředí (IDE) pojmenované Geanie. Je podobně jako Waf nenáročné, přesto nabízí mnoho zajímavých funkcí. Ačkoli s Wafem nesouvisí, při brouzdání jsem na něj narazil.
Waf je zajjímavý nástroj a možná může vyřešit váš problém.
Bolí vás z autotools hlava? Zkuste waf!
June 1, 2010