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