Obsah

Popis problemu

Zavislosti

Balik je jednoznacne identifikovany svojim menom a verziou. Kazdy balik moze mat poziadavky na pritomnost alebo nepritomnost inych balikov v urcitej verzii. Jedna takato poziadavka sa sklada z operatora (>=,>,=,<,<=), mena a verzie ziadaneho balika, typu zavislosti a moze byt negovana.

Existuju tri typy zavislosti: depend (build-time dependency), pdepend (post-build dependency) a rdepend (run-time dependency). Ak balik A zavisi na B zavislostou typu depend, potom B musi byt nainstalovany pred A (aby bola prislusna zavislost splnena). rdepend hovori, ze B musi byt pritomny pri spusteni A (teda je nutne aby B pritomny bol, ale nezalezi na tom, kedy bude nainstalovany). pdepend vyzaduje, aby B bol nainstalovany az po A.

Operator urcuje aka verzia balika B je pozadovana. Operator > znamena, ze nainstalovana verzia musi byt vacsia ako uvedena (aby bola prislusna poziadavka splnena), operator = znamena presne uvedenu verziu, ostatne operatory maju takisto intuitivny vyznam.

Negacia poziadavky znamena, ze baliky popisane pomocou poziadavky nesmu byt pritomne (teda vyjadruje konflikt).

Kazdemu baliku budu prisluchat 3 grafy zavislosti, jeden pre kazdy typ poziadaviek. Vrcholy v grafe zavislosti budu poziadavky, hrany budu typu A alebo typu ALEBO. A sused vrcholu X bude taky vrchol Y, ktory susedi s X cez A hranu. Podobna definicia plati pre ALEBO hranu. V nasledujucom texte budem hovorit o splneni poziadavky vtedy, ked do konfiguracie bude zahrnuty balik, ktory vyhovuje jej podmienkam. O splneni vrcholu budem hovorit v dvoch pripadoch

  1. ked bude splnena jemu prisluchajuca poziadavka a jeho A sused
  2. ked bude splneny jeho ALEBO sused a jeho A sused

Takyto graf budem povazovat za splneny, ked bude splneny jeho koren. Kazdy takyto graf zavislosti sa da previest na taky, v ktorom bude z kazdeho vrcholu viest najviac jedna A hrana a najviac jedna ALEBO hrana, preto sa dalej budem zaoberat iba takymito grafmi.

USE flagy

USE flagy su mnozinou priznakov, pricom kazdy z nich moze byt zapnuty alebo vypnuty. Spolu predstavuju rozhodnutia pouzivatela o konfiguracii, mozu urcovat napriklad platformu na ktorej system bezi alebo kniznice, ktore si pouzivatel praje/nepraje pouzivat. Platnost kazdej zavislosti moze byt podmienena pritomnostou alebo nepritomnostou niektorych USE flagov. Takato podmienka je vlastne podobna poziadavke. Napr. poziadavka "balik 1 zavisi na baliku 2 iba vtedy, ked je zapnuty flag f1" sa da formulovat aj "balik 1 vyzaduje bud nepritomnost flagu f1 alebo pritomnost baliku 2". Z tohoto dovodu budem podmienenie USE flagy reprezentovat poziadavkou v grafe zavislosti.

Virtualne baliky

Balik moze poskytovat funkcionalitu. Funkcionalita je identifikovana podobne ako balik, teda menom a verziou. Baliky potom mozu uvadzat zavislost na funkcionalite (teda funkcionalita sa da povazovat za virtualny balik). Na splnenie takejto zavislosti treba, aby aspon jeden balik poskytujuci danu funkcionalitu bol vybrany. Jeden balik moze poskytovat viacero funkcionalit a kazda z nich moze byt podmienena USE flagom, preto ma vyznam reprezentovat ich grafom funkcionalit, ktory je podobny ako graf zavislosti. Medzi tymito grafmi existuju dve odlisnosti. V grafe funkcionalit nemoze existovat ALEBO hrana medzi dvomi funkcionalitami (iba medzi funkcionalitou a USE flagom) a funkcionalita nemoze byt negovana.