11.07.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!