SOURCES: rpm-php-provides (HEAD) rpm-php-requires (HEAD)

Adam Gołębiowski adamg w biomerieux.pl
Pon, 1 Gru 2003, 21:42:53 CET


On Mon, Dec 01, 2003 at 08:59:44PM +0100, adamg wrote:
> Module name:	SOURCES
> Changes by:	adamg	03/12/01 20:59:42
> 
> Modified files:
> 	rpm-php-provides rpm-php-requires
> 
> Log message:
> - new php provides/requires dependcies generator, which makes use of
>   package.xml file that comes with each PEAR class or PECL extension.

No więc może parę słów o tej zmianie, i dlaczego w parze nie poszło
podbicie rel rpma.

Otóż jakiś czas temu, a nawet dużo razy jakiś czas temu, bo jeszcze we
wrześniu napomknąłem bluesowi (a może to on zaczął) o możliwości nieco
lepszego generowania zależności dla php-pe*.spec. Polegać to miało na
wyciąganiu informacji z plików package.xml dostarczanych w archiwach z
klasami PEAR czy rozszerzeniami PECL. 

Dotychczasowy system, mimo, że się sprawdzał przez długi czas, okazał
się być niewystarczający - gubił się przy większych projektach -
przykładem może być php-pear-PhpDocumentor.spec. Oznaczało to zwiastun
jego końca i jednoczesną potrzebę napisania czegoś nowego. I tak,
całkiem nieopatrznie zadeklarowałem się do napisania nowej automatyki.

W gruncie rzeczy ten nowy mechanizm był gotowy już od dobrych kilku
tygodni, ale zawsze coś sprawiało, że nie wrzucałem go do cvs. Aż w
końcu naszedł ten wielki dzień. Trzeba było uczcić początek ostatniego
miesiąca tego roku, a z braku mego ulubionego Żywca pod ręka, padło na
owe nieszczęsne skrypty.

Jak to działa. Otóż bierze pod obróbke pliczek package.xml, który, jak
zauważą co dociekliwsi, jest dokumentem xml. Na dobry początek wyciąga z
niego sekcje (czy jak tam to się w xml zwie) <name> </name>. To, co
znajdzie pomiędzy nimi traktuje jako nazwę pakietu i wrzuca to do
provides. Na tym kończy się działanie skryptu php.prov (w cvs:
rpm-php-provides). 

Nieco bardziej skomplikowane jest działanie php.req (rpm-php-requires).
Otóż wyciąga ono sekcję <deps>, z której pod uwagę bierze poszczególne
zależności (<dep> </dep>). Na podstawie rożnorakich atrybutów tego
znacznika[1], wyciąga informacje o innych klasach / modulach /
rozszerzeniach, jakich wymaga dany pakiet (wraz z wersjami) i na ich
podstawie tworzy odpowiednie Requires. 

Dzialać toto działa, testowalem z pętelki na wszystkich pliczkach
php-pear-* oraz kilku php-pecl, ale jest jedno malutkie 'ale'. Do
poprawnego działania musi toto przetworzyć ów pliczek package.xml.
Niestety moje próby nauczenia rpmdeps, aby brał pod uwage ten plik
konczyły się ślicznym segfaultem. 

Tak więc na chwilę obecną, aby ów skrypt dzialał, potrzebna jest brzydka
linijka w sekcji %%install:

install package.xml $RPM_BUILD_ROOT%{php_pear_dir}/%{_class}/package.xml.php

Co nie jest zbytnio piękne. Więc albo ktoś z lepszymi predyspozycjami
nauczy rpmdeps (dokładnie to build/rpm-fc.c) co ma zrobić z package.xml,
albo będzie to wyglądać tak jak wygląda... No i przy okazji nasuwa się
pytanie, czy aby dany plik został przetworzony przez system generowania
zalezności, musi byc kopiowany do $RPM_BUILD_ROOT ? Ideałem byłoby
nauczenie rpmdeps, aby zerknął do %{_builddir} i poszukał tam
package.xml. Anybody chętny?

Tyle. Skargi, wnioski, zażalenia, raport karny - wystąp.

[1] Nie bede się rozpisywał - jest w manualu na http://pear.php.net/ 

PS: Oh my God! It's long letter. I feel so, so, so... kloczkish.

-- 
http://www.mysza.eu.org/ | Everybody needs someone sure, someone true,
   PLD Linux developer   | Everybody needs some solid rock, I know I do.



Więcej informacji o liście dyskusyjnej pld-devel-pl