Nowe Wspaniałe Bcondy
Michal Moskal
malekith w pld-linux.org
Wto, 20 Maj 2003, 23:50:47 CEST
...a właściwie stare z lepszą składnią.
RPM teraz (a może już dawno?) pozwala na zdefiniowanie użytecznych makr
(by jbj):
%defined
%undefined
%ifdef
%ifndef
Każdy zaznajomiony z CPP pewnie wie do czego one służą, ale, mały
przykład nie zaszkodzi:
%if %{defined foo} && ! %{defined bar}
albo
%if %{defined foo} && %{undefined bar}
co wydaje się być znacznie czytelniejsze od:
%if %{?foo:%{?bar:1}}0
(choć dłuższe :-)
%ifdef X == %if %{defined X}
Oczywiście wszystko po to, żeby bcondy się łatwiej pisało.
Teraz gwóźdź programu (thnx to wiget), bcondy można teraz pisać tak:
%bcond_with super_fonts # build with SuperFonts support
%bcond_without ssl # build without OpenSSL support
Co powoduje zdefiniowanie symboli:
with_super_fonts jeśli --with super_fonts
with_ssl jeśli *nie* --without ssl
Co z kolei powoduje ujednolicenie bcondów dla --with i --without (tzn.
jeśli w przyszłości trzeba zmienić --with super_fonts na --without, to
wystarczy zmienić tę jedną linijkę w specu). Pozatym:
%{?with_ssl: --with-ssl}
wydaje się łatwiejsze w czytaniu, niż:
%{!?_without_ssl: --with-ssl}
Wrzuciłem eksperymentalnie te makra do rpm'a z HEAD. Dodatkowo rpm z
head obsługuje zagnieżdżone %if.
Aha, dlaczego definuje symbol 'with_ssl' a nie po prostu 'ssl'? Na
wypadek bconda, np. --with setup. Ale to jest jeszcze do przemyślenia.
To wszystko jest wstecznie kompatybilne ze starymi specami, ale nie ze
starym rpmem.
--
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h
Więcej informacji o liście dyskusyjnej pld-devel-pl