RFC: Makra do bcondów (Re: SOURCES: rpm.macros (HEAD))

Michal Moskal malekith w pld-linux.org
Pią, 6 Cze 2003, 12:01:36 CEST


On Fri, Jun 06, 2003 at 11:50:14AM +0200, malekith wrote:
> Module name:	SOURCES
> Changes by:	malekith	03/06/06 11:50:12
> 
> Modified files:
> 	rpm.macros
> 
> Log message:
> - %with, %without, %ifwith %ifwithout macros added

Jakiś czas temu dodałem makra %defined, %undefined, %ifdef, %ifndef (by
jeff&wiget).

Po głębszych przemyśleniach, dochodzę do wniosku, że nie wiem dokładnie
po co one, skoro lepsze są tę, które dodałem teraz. Anyway nowa metoda
pisania bcondów:

Zamiast komentarzy o bcondach -- makra.

%bcond_with foo # Foo.org support
%bcond_without bar # ...

Od tego czy bcond_with czy bcond_without zależy default dla opcji (dla
_with jest default off, dla _without default on).

Następnie w specu:

%if %{with foo} && ! %{with bar}
...
%endif

%if %{with foo}
# lub %ifwith foo
...
%else
...
%endif

%{?with_foo: ...}
%{?with_bar: ...}
%{!?with_foo: ...}
%{!?with_bar: ...}

Nie używamy _with{,out}_{foo,bar}. Pozwoli to na zmianę default w jednej
linii. O ile można się kłucić o czytelność %{!?with_bar:...} nad 
%{?_without_bar: ...} to:

  %if %{with foo} && %{with bar}
  
wydaje mi się *znacznie* czytelniejsze od 

  %if %{?_with_foo:%{!?_without_bar:1}}0

RFC:
a) czy to w ogóle ma sens?
b) wywalić %if{n,}def, %{un,}defined? (nie używane do bcond, ale może do
   czegoś innego?)
c) wywalić %ifwith,%ifwithout (%if %{with bar} nie jest dużo dłuższe od
   %ifwith bar, ale nie wiem jak z czytelnością)?
d) dodać coś?

-- 
: 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