Editorial - Vitajte na stránkach www.einsty.hostujem.sk
Editorial - Vitajte na stránkach www.einsty.hostujem.sk
Editorial - Vitajte na stránkach www.einsty.hostujem.sk
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
P R O G R A M U J E M EAuto tools / 12. èasBudeme sa venova téme, ktorú oceníte, a keï zaènete robi trošku rozsiahlejšie projek−ty alebo také, ktoré pouívajú trochu špecifickejšie kninice, pre ktoré nie je podporazahrnutá v štandardnej inštalácii Autotools.Kedysi som robil istý program v C++, ktorý spolupracoval s databázou MySQL. Keïeštandardné MySQL API nie je <strong>na</strong> ktovieakej vysokej úrovni, rozhodol som sa poui objek−tovo orientovanú kninicu SQL++ (nájdete <strong>na</strong> stránkach MySQL). Keïe projekt mal tro−chu viac súborov, potreboval som poui Autotools. Mono ste si všimli, e niektoré prog−ramy pri spustení configure vypisujú nieèo ako:checking for foo... yesPrípadne ešte vypíšu nájdenú verziu programu (alebo kninice), ktorú <strong>na</strong> svoju inšta−láciu alebo beh potrebujú. A tu u mòa <strong>na</strong>stal problém – pre ostatné kninice, ktoré môjprojekt pouíval, som si makrá alebo <strong>na</strong>šiel („poièal“) z iných programov, ktoré danúkninicu takisto pouívali, alebo ich podpora u bola zahrnutá v inštalácii, resp. staèilopoui podobné makro:AC_CHECK_LIB(kniznica, funkcia)Pre kninicu SQL++ som však niè ne<strong>na</strong>šiel. Mono staèilo lepšie h¾ada, ale ja som tovyriešil ináè – <strong>na</strong>písal som si vlastné makro. A teraz si ukáeme, ako také nieèo urobi.Všetko sa to bude toèi okolo makrojazyka M4, ktorý sa pouíva aj v súboroch confi−gure.in, a teda sme sa s ním u stretli, hoci sme o tom nevedeli. Doposia¾ sme sa všakobmedzili iba <strong>na</strong> pouívanie makier, tentoraz si ich budeme aj definova. Pri definovanímakier máme <strong>na</strong> výber dve monosti: ak sú to jednoduché a krátke makrá, jednoduchoich môete <strong>na</strong>písa priamo do súboru configure.in. Druhá monos je uloi ich do špe−ciálneho súboru acinclude.m4, o ktorý sa postará program aclocal. Ten pre<strong>sk</strong>enuje confi−gure.in a acinclude.m4 a makrá uloí do súboru aclocal.m4. Spoèiatku môeme pouiprvú monos, teda <strong>na</strong>še pokusy môeme robi priamo v súbore configure.in. Potom sivšak ukáeme nieèo väèšie a to u uloíme do samostatného súboru.DEFINOVANIE MAKRA. M4 je makrojazyk. Platí: všetko je makro. Teda <strong>sk</strong>oro :−).Napríklad aj keï chceme definova nové makro, pouijeme <strong>na</strong> to iné makro. Našastiemôeme v <strong>na</strong>šich nových makrách pouíva príkazy shell, take spojením týchto dvochvecí dokáeme u dos. Teraz si ukáeme, ako si môeme vytvori nové vlastné makro.Definícia vyzerá takto:AC_DEFUN(<strong>na</strong>zov_makra, telo)Predpokladajme, e telo bude obsahova viacero príkazov, preto ich všetky uzavriemedo bloku pomocou hra<strong>na</strong>tých zátvoriek (podobne ako v jazyku C/C++ <strong>na</strong> takýto úèelslúia krútené zátvorky). Teraz si <strong>sk</strong>úsime vytvori <strong>na</strong>še prvé makro. Otvoríme súbor con−figure.in a niekde <strong>na</strong> zaèiatok vloíme <strong>na</strong>sledujúce riadky:AC_DEFUN(MY_MACRO, [echo "Hello, M4!"echo "Hello, Autotools!"])Samozrejme, povolené sú prakticky všetky príkazy shellu, nielen echo. Keï sme si udefinovali makro MY_MACRO, je <strong>na</strong>èase poui ho. Do nášho otvoreného súboru zapíše−me názov makra a ostatné sa u spraví za nás. Dôleité je, aby nebolo makro definovanéza samotným „volaním“ makra (nie, makrá sa nevolajú, ale substituujú, ale o tom azdainokedy; prípadne si preèítajte manuál k M4). Teda niekde za definíciu makra <strong>na</strong>píšeme:MY_MACROTeraz spustíme náš známy súbor bootstrap, ktorý môe obsahova <strong>na</strong>príklad takétoriadky:aclocalautoheaderautomakeautoconfMyslím, e jednotlivé riadky sme si u dostatoène opísali v predošlých èastiach, nebu−deme sa nimi teraz zdriava. Teraz spustíme ./configure a medzi náš známy výpis sa do−stanú aj nové riadky:Hello, M4!Hello, Autotools!Miesto výpisu závisí od toho, kde sme umiestnili „volanie“ nového makra MY_MACRO.PARAMETRE MAKIER. Makrá môu ma aj parametre, podobne ako <strong>na</strong>príklad funkciejazyka C. Teraz si vytvoríme makro, ktoré sa nám ne<strong>sk</strong>ôr zíde a <strong>na</strong> ktorom si zároveòukáeme, ako pouíva parametre makier. Makro bude vyh¾adáva súbory v zadanýchadresároch. Má tri parametre. Prvý obsahuje zoz<strong>na</strong>m h¾adaných súborov, oddelenýchmedzerami. Druhý obsahuje zoz<strong>na</strong>m adresárov, v ktorých má prebehnú vyh¾adávanie.Tretí parameter je názov premennej, do ktorej sa uloí adresár, v ktorom sa po prvýkrát<strong>na</strong>šiel h¾adaný súbor. Definícia je relatívne jednoduchá:AC_DEFUN(FIND_FILE, [for i in $2; dofor j in $1; doif test −r "$i/$j"; then$3=$ibreak 2fidonedone])Teraz si ukáeme, ako toto makro môeme poui v praxi. Nie je to ve¾mi uitoèný prí−klad, ale ukáeme si <strong>na</strong> òom, ako môeme vola makrá s parametrami.FIND_FILE(stdio.h, /usr/local/include /usr/include, kde_je_stdio)echo $kde_je_stdioTieto riadky môeme, samozrejme, vloi hocikde za definíciou makra FIND_FILE. Poprvom riadku u budeme ma k dispozícii premennú kde_je_stdio, ktorá obsahuje prav−depodobne /usr/include.Je zrejmé, e aj v makrách môeme vola iné makrá. To sa dos hojne vyuíva. Teraz siopíšeme nieko¾ko u definovaných makier, ktoré sa èasto pouívajú pri tvorbe vlastnýchmakier.VÝSTUP. Najprv si ukáeme, ako môeme vypisova uitoèné informácie aj inou cestouako pomocou príkazu echo. Prvé z makier je AC_MSG_CHECKING. Jediný parameter je text,ktorý sa vypíše za checking for. Toto makro teda pouijeme <strong>na</strong> zaèiatku nášho komplex−nejšieho makra, ktoré môe <strong>na</strong>príklad kontrolova prítomnos nejakej potrebnej kninice(ako v úvode èlánku).Ïalšie makro je AC_MSG_RESULT. Ako u názov <strong>na</strong>povedá, makro oz<strong>na</strong>muje výsledok –teda nieèo ako yes, no, prípadne môe vypísa verziu nájdenej kninice. Všimnite si, èo vypi−sujú rôzne programy, ktoré kompilujete a ktoré majú aj súbor configure (teda drvivá väèši<strong>na</strong>).Môete sa inšpirova týmito programami, ale, samozrejme, fantázii sa medze nekladú :−).Romány by ste však vypisova nemali, rov<strong>na</strong>ko nie je dôleitá ani estetická stránka výpisu...Makro AC_MSG_WARN u nemá len informaèný charakter, ide o varovanie, e <strong>na</strong>stalinie celkom bené podmienky, ale program sa môe <strong>sk</strong>ompilova (teda nie je to niè fatálne).Posledné z makier, ktoré slúia <strong>na</strong> výpis informácií pouívate¾ovi, je AC_MSG_ERROR. Názov<strong>na</strong>z<strong>na</strong>èuje, e ide o chybové hlásenie. Mali by sme ho pouíva iba vo ványch prípadoch,<strong>na</strong>príklad keï program bez chýbajúcej kninice nie je schopný pracova. Toto makro toti uko−nèí beh configure a hlásenie sa vypíše <strong>na</strong> štandardný chybový výstup, a nie <strong>na</strong> stdout.VSTUP. Pod vstupom rozumieme zadanie parametrov <strong>na</strong> príkazový riadok pri spúšaníconfigure. Napríklad:./configure −−with−some−feature −−with−my−lib=/usr/local/lib/... −−without−x −−e<strong>na</strong>ble−fooPomocou príkazov shell dokáeme zabezpeèi aj interaktívny vstup, no nie je to celkombené. Stretol som sa s istým programom, ktorý pri spustení ./configure zrazu zastal apýtal si heslo, ktoré sa potom zakompilovalo do binárky. Zaujímavé... :−) Myslím však, eby to pre <strong>sk</strong>úsenejších uívate¾ov shellu nemal by problém, prípadne <strong>sk</strong>úste man bash.Zoz<strong>na</strong>m povolených argumentov dostaneme klasicky zadaním ./configure −−help. Všim−nime si, e niektoré programy majú vo svojom configure niekde <strong>na</strong> konci výpisu riadok−−e<strong>na</strong>ble and −−with options recognized:Za týmto riadkom <strong>na</strong>sleduje viacero povolených −−with a −−e<strong>na</strong>ble argumentov. Teraz siukáeme, ako také nieèo môeme prida.Ako prvé si ukáeme makro AC_ARG_ENABLE, ktoré umoní zvoli parameter −−e<strong>na</strong>ble<strong>na</strong> príkazovom riadku. Prvým parametrom je názov pridaného parametra, ktorý bude za−−e<strong>na</strong>ble− (resp. −−disable−, pozri ./configure −−help). Druhým parametrom je text, ktorý sazobrazí ako help. Tu je niekedy <strong>na</strong> mieste trošku sa „pohra“ s medzerami a vymera texttak, aby sedel s ostatnými riadkami. Ako úvodzovky môete poui opä hra<strong>na</strong>té zátvor−ky (to aby vám M4 neignoroval <strong>na</strong>dbytoèné medzery). Ïalšie dva parametre obsahujú prí−kazy, ktoré sa vyko<strong>na</strong>jú pri pouití e<strong>na</strong>ble, resp. disable. Ak <strong>na</strong> príkazovom riadku nezvo−líme ani jednu z týchto moností, štandardná hodnota je disable (teda vyko<strong>na</strong>jú sa príka−zy nie z tretieho, ale zo štvrtého parametra). Teraz si to celé predvedieme:AC_ARG_ENABLE(my−feature,[ −−e<strong>na</strong>ble−my−feature e<strong>na</strong>bles my feature...],[echo "My feature e<strong>na</strong>bled!"], [echo "My feature disabled!"])Skúste <strong>sk</strong>ombinova toto makro s makrami urèenými <strong>na</strong> výstup textu!Niekedy nestaèí da konfiguraènému programu len informáciu o poadovaných funk−ciách kompilovaného programu, èasto potrebujeme odovzda aj nejaké konkrétne hod−noty. To urobíme jednoducho – −−e<strong>na</strong>ble−my−feature=123. Túto hodnotu potom dostane−me v premennej $e<strong>na</strong>bleval. Tu je teda zlepšená verzia predchádzajúceho príkladu:AC_ARG_ENABLE(my−feature,[ −−e<strong>na</strong>ble−my−feature e<strong>na</strong>bles my feature...],[echo "My feature e<strong>na</strong>bled!"echo $e<strong>na</strong>bleval], [echo "My feature disabled!"])Program by <strong>na</strong> ïalšom riadku vypísal hodnotu 123. Ak nezadáme iadnu hodnotu,premenná bude obsahova yes, resp. no v závislosti od spôsobu volania.ZÁVER. To by bolo <strong>na</strong>teraz všetko. Prebrali sme mnoho nových vecí, preto si to nechaj−te ulea v hlave a <strong>sk</strong>úste si všetky nové makrá vo vlastných projektoch. Nabudúce si rozší−rime <strong>na</strong>šu zbierku o ïalšie makrá <strong>na</strong> vstup údajov a takisto si ukáeme s¾úbený komplex−nejší príklad. Dovidenia o mesiac!Oto Komiòák114 PC REVUE 1/2003