RPM-MACROS(7)

NUME
rpm-macros - procesor macrocomenzi RPM

SINOPSIS

  Definirea
%NUME CORP

%NUME([OPȚIUNI]) CORP

  Expandarea
%NUME

%NUME [OPȚIUNI] [ARGUMENTE]

%{NUME}

%{NUME [OPȚIUNI] ARGUMENTE}

%{NUME:ARGUMENT}

%{?NUME}

%{?NUME:VALOARE-DACĂ-DEFINITĂ}

%{!?NUME:VALOARE-DACĂ-NU_ ESTE-DEFINITĂ}

%(COMANDĂ-SHELL)

%[EXPRESIE]

%[EXPRESIE ? VALOARE-DACĂ-ADEVĂRAT : VALOARE-DACĂ-FALS]

%{lua:COD-LUA}

DESCRIERE

RPM are un procesor de macrocomenzi încorporat puternic. Utilizările principale ale macrocomenzilor sunt configurarea și alte funcții utilitare pentru RPM în sine, precum și ca ajutor pentru împachetare în fișierele spec.

Pe lângă simpla substituire a textului, procesorul de macrocomenzi acceptă următoarele funcții:
•   funcție de tip MACROCOMENZI PARAMETRICE cu opțiuni și procesare de argumente și macrocomenzi definite de utilizator și automate cu domeniu de aplicare local
•   Expansiune shell
•   Expansiune expresie
•   Expansiune Lua pentru procesarea Lua încorporată
•   diverse MACROCOMENZI INTEGRATE pentru procesarea șirurilor de caractere și interacțiunea cu sistemul de operare

Sintaxa pentru definirea macrocomenzilor simple este:

    NUME CORP

Toate spațiile albe din jurul CORPULUI sunt eliminate. NUME poate fi compus din caractere alfanumerice și din caracterul de subliniere (_) și trebuie să aibă cel puțin două caractere. Corpul este (re)extins la fiecare invocare a macrocomenzii. Numele macrocomenzilor și opțiunile sunt sensibile la majuscule și minuscule.

Consultați MACROCOMENZI PARAMETRICE pentru varianta mai avansată de macrocomenzi cu procesarea opțiunilor și argumentelor.

Macrocomenzile pot fi definite prin fișiere rpm-macrofile(5) și gestionate integral cu ajutorul macrocomenzilor primitive %define, %global și %undefine, linia de comandă RPM descrisă în rpm-common(8) și API (C, Python, Lua).

Cu excepția celor definite în macrocomenzile parametrice, macrocomenzile au întotdeauna domeniu global.

Macrocomenzile RPM sunt stivuite, adică atunci când se redefinește o macrocomandă deja existentă, aceasta acoperă definiția anterioară în loc să o înlocuiască, iar anularea definiției unei macrocomenzi elimină doar definiția de sus, activând astfel definiția macrocomenzii anterioare.

Rețineți că acest manual descrie doar motorul procesorului de microcomenzi în sine. Într-un sistem normal bazat pe RPM, există un număr mare de alte microcomenzi definite prin fișiere rpm-macrofile(5) care nu vor fi abordate aici.

EXPANDARE
Pentru a extinde o macrocomandă, plasați % în fața acesteia. Sunt acceptate mai multe forme:

%NUME
    Extinde macrocomanda NUME.

%{NUME}
    Extinde macrocomanda NAME, permițând plasarea lângă alt text (similar cu ${ENV} în shell).

%NUME [OPȚIUNI] [ARGUMENTE]
    Extinde macrocomanda parametrică/încorporată NUME, utilizând opțiunile și argumentele analizate până la sfârșitul șirului sau până la următorul caracter de linie nouă.

    -- poate fi utilizat pentru a separa opțiunile de argumente.

%{NUME [OPȚIUNI] [ARGUMENTE]}
    Extinde macrocomanda parametrică/încorporată NUME, utilizând opțiunile și argumentele analizate până la închiderea }. Permite utilizarea în vecinătatea altui text.

%{NUME:ARGUMENT}
    Extinde macrocomanda parametrică/încorporată NUME, utilizând șirul de caractere după : ca argument unic. Permite utilizarea în vecinătatea altui text.

Notă: Sintaxele pentru apelarea macrocomenzilor parametrice și încorporate sunt în general interschimbabile în prezent, dar înainte de versiunea 4.18, sintaxa %{NUME:ARGUMENT} era exclusivă pentru macrocomenzile încorporate.

Extinderea macrocomenzii poate fi evitată prin plasarea unui al doilea % în fața macrocomenzii, de exemplu %%{nume} ar fi extins la %{nume}.

Încercarea de a extinde o macrocomandă nedefinită se extinde la invocarea literală, de exemplu %_undefined se extinde la %_undefined. Dacă acest lucru nu este dorit, utilizați condiționale.

Expansiunile macrocomenzii pot recurge până la 64 de niveluri.

  Expansiune shell
Extinderea shell-ului poate fi efectuată folosind %(comanda shell). comanda_shell este extinsă înainte de a fi executată cu /bin/sh, a cărei ieșire devine extinderea macrocomenzii. Caracterul de linie nouă de la sfârșit este șters.

Exemplu:
    %(echo aa-bb-cc | tr '-' '.')

  Extindere condițională
Procesorul de macrocomenzi acceptă testarea dacă o macrocomandă este definită sau nu.

%{?NUME:VALOARE}
    Se extinde la extinderea VALOARE dacă NUME este definit, altfel la un șir gol.

%{!?NUME:VALOARE}
    Se extinde la extinderea VALoarE dacă NUME nu este definit, altfel se extinde la un șir gol.

%{?NUME}
    Prescurtare pentru %{?NUME:%{NUME}}.

Pentru teste mai complexe, utilizați Expansiune expresie sau Expansiune Lua. Rețineți că %if, %ifarch și altele similare nu sunt macrocomenzi, ci directive spec și pot fi utilizate numai în acel context.

Rețineți că în RPM >= 4.17, condițiile din macrocomenzile încorporate verifică pur și simplu existența acelei macrocomenzi încorporate, la fel ca în cazul oricărei alte macrocomenzi. În versiunile mai vechi, comportamentul condițiilor din macrocomenzile încorporate este nedefinit.

  Expansiune expresie
Extinderea expresiei poate fi efectuată utilizând %[EXPRESIE]. O expresie este formată din termeni care pot fi combinați utilizând operatori.

RPM acceptă trei tipuri de termeni:
•   numere formate din cifre
•   șiruri de caractere între ghilimele duble (de exemplu, "vreun -șir")
•   versiuni între ghilimele duble precedate de v (de exemplu, v"3:1.2-1")

RPM va extinde macrocomenzile atunci când evaluează termenii.

Puteți utiliza operatorii standard pentru a combina termenii:
•   operatori logici &&, ||, !
•   operatori relaționali !=, ==, <, >, <=, >=
•   operatori aritmetici +, -, /, *,
•   operatorul ternar ? :
•   paranteze

De exemplu, %[ 3 + 4 * (1 + %two) ] se va extinde la 15 dacă %two se extinde la 2. Termenii versiunii sunt comparați folosind algoritmul de comparare a versiunii RPM ([epoch:]version[-release]), și nu prin compararea obișnuită a șirurilor de caractere.

Rețineți că expansiunea %[EXPRESIE] este diferită de macrocomanda %{expr:EXPRESIE}. În cazul celei din urmă, macrocomenzile din expresie sunt mai întâi expandate, iar apoi expresia este evaluată (fără a reexpanda termenii). Astfel

    rpm --define 'foo 1 + 2' --eval '%{expr:%foo}'

va afișa 3. Utilizarea %[%foo] va genera eroarea "1 + 2" nu este un număr.

Efectuarea expansiunii macrocomenzii în timpul evaluării termenilor are două avantaje. În primul rând, permite RPM să efectueze o procesare corectă a scurtcircuitelor în timpul evaluării operatorilor logici. În al doilea rând, rezultatul expansiunii nu influențează analizarea expresiei, de exemplu %[„%file”] va funcționa chiar și dacă macrocomanda %file se extinde la un șir care conține ghilimele duble.

Adăugată: 4.16.0

  Expansiune Lua
Cea mai puternică dintre metodele de expansiune a macrocomenzilor este utilizarea interpretului Lua încorporat în RPM:

%{lua:COD-LUA}
    Executați LUA-CODE folosind interpretul Lua încorporat în RPM, extinzându-l la codul print() și afișând rezultatul.

Pentru detalii, consultați rpm-lua(7).

MACROCOMENZI PARAMETRICE
Macrocomenzile parametrice sunt un mecanism puternic care permite crearea de macrocomenzi utilitare similare funcțiilor, cu procesare opțională și acceptarea unui număr variabil de argumente, similar instrumentelor shell obișnuite.

Sintaxa pentru definirea macrocomenzilor parametrice este:

    NUME([OPȚIUNI]) CORP

Dacă sunt prezente, OPȚIUNILE (adică șirul dintre paranteze) sunt transmise exact așa cum sunt către getopt(3) pentru procesarea argc/argv la începutul invocării macrocomenzii. Sunt acceptate numai opțiunile scurte.

- ca singurul câmp OPȚIUNI dezactivează procesarea opțiunilor RPM. Acest lucru permite macrocomenzilor să decidă în totalitate modul de gestionare a intrărilor lor, de exemplu, dacă argumentele macrocomenzii constau numai/în mare parte din elemente care încep cu -, procesarea implicită nu face decât să încurce.

  Macrocomenzi automate
În timpul extinderii unei macrocomenzi parametrizate, sunt disponibile următoarele macrocomenzi automate de tip shell:

Macrocomanda | Descriere
%0 | numele macrocomenzii care este invocată
%* | toate argumentele (spre deosebire de shell, fără a include niciun fanion procesat)
%** | toate argumentele (inclusiv orice fanioane procesate)
%# | numărul de argumente
%{-f} | dacă este prezent la invocare, ultima apariție a fanionului f (fanion și argument)
%{-f*} | dacă este prezent la invocare, argumentul pentru ultima apariție a fanionului f
%1, %2, ... | argumentele în sine (după procesarea getopt(3))

Dacă procesarea opțiunilor încorporate a fost dezactivată cu - ca câmp OPȚIUNI , sunt disponibile numai următoarele macrocomenzi automate:

Macrocomanda | Descriere
%0 | numele macrocomenzii care este invocată
%*, %** | toate argumentele
%# | numărul de argumente
%1, %2, ... | argumentele în sine

Macrocomenzile automate sunt definite și redefinite automat la intrarea și ieșirea din macrocomanda parametrică.

  Accesarea opțiunilor
În cadrul unei macrocomenzi parametrice, există mai multe construcții care permit testarea prezenței parametrilor opționali. Cea mai simplă construcție este %{-f} care se extinde (literalmente) la -f dacă -f a fost menționat atunci când macrocomanda a fost invocată. Există, de asemenea, prevederi pentru includerea textului dacă era prezent un fanion folosind %{-f:X}. Această macrocomandă se extinde la (extinderea lui) X dacă fanionul era prezent. Forma negativă, %{!-f:Y}, care se extinde la (extinderea lui) Y dacă -f nu era prezent, este de asemenea acceptată.

  Domeniul de aplicare și vizibilitatea
În general, macrocomenzile au o aplicabilitate globală, indiferent de locul și modul în care au fost definite. Cu toate acestea, macrocomenzile definite în cadrul macrocomenzilor parametrice au o aplicabilitate non-globală, după cum urmează:
•   macrocomenzile automate au domeniu de aplicare local, adică sunt vizibile numai la nivelul apelului macrocomenzii respective
•   macrocomenzile locale definite de utilizator au un domeniu de aplicare imbricat, adică sunt vizibile la nivelul apelului macrocomenzii în sine și la niveluri mai profunde.

Adică, o macrocomandă parametrică nu poate vedea opțiunile sau argumentele altei macrocomenzi, dar o macrocomandă locală definită de utilizator într-o macrocomandă de apel poate fi accesată în macrocomanda (macrocomenzile) apelată (apelate).

Pentru a defini o macrocomandă globală în interiorul unei macrocomenzi parametrice, trebuie să utilizați %global în loc de %define. De asemenea, rețineți că, deoarece o astfel de macrocomandă poate face referire la alte macrocomenzi vizibile numai în domeniul curent, %global extinde corpul macrocomenzii o singură dată în momentul definirii.

  Convenția de apelare
Când o macrocomandă parametrică este extinsă, se utilizează următoarea convenție de apelare:
1.  orice argumente ale macrocomenzii sunt extinse la nivelul apelului destinatarului apelului
2.  orice opțiuni pentru macrocomandă sunt procesate
3.  macrocomenzile automate sunt configurate pentru opțiuni și argumente
4.  corpul macrocomenzii este extins recursiv
5.  toate macrocomenzile definite la acest nivel de apel sunt eliminate

MACROCOMENZI INTEGRATE
RPM acceptă următoarele macrocomenzi încorporate pentru diverse operațiuni. Macrocomenzile încorporate nu pot fi redefinite sau suprascrise.

Notă: Stilul %{name:arg} este utilizat aici deoarece este cel mai compatibil cu versiunile anterioare și nu necesită citarea spațiilor albe, dar poate fi în general înlocuit și cu alte forme de expansiune. Funcțiile încorporate care acceptă mai multe argumente trebuie să utilizeze alte stiluri, după cum se indică mai jos.

  Manipularea macrocomenzilor
Macrocomenzile primitive sunt utilizate pentru manipularea macrocomenzilor în fișierele spec și în alte macrocomenzi. Rețineți că toate acestea funcționează pe numele macrocomenzii fără caracterul % precedent.

%define NUME[([OPȚIUNI])] CORP
    Acesta este modul principal de definire a macrocomenzilor. A %define este întotdeauna complet declarativ: nu are loc nicio expansiune a macrocomenzii și nu are efecte secundare. Macrocomenzile definite cu acesta se află în domeniul global, cu excepția cazului în care definiția apare în interiorul unei macrocomenzi parametrice.

    Exemplu:
        %define ruta-mea /usr/bin/mine

%global NUME[([OPȚIUNI])] CORP
    Primitiva %global are o sintaxă identică cu %define, dar prezintă două diferențe comportamentale extrem de importante: după cum sugerează și numele, o macro definită cu %global are întotdeauna un domeniu de aplicare global, indiferent de locul în care este utilizată.

    A doua diferență este că CORPUL este extins o singură dată în momentul definirii, iar extinderea devine corpul macrocomenzii propriu-zis. Astfel, atunci când se utilizează %global, pot apărea execuții de cod arbitrar și efecte secundare, în funcție de conținutul și de celelalte macrocomenzi utilizate în CORP. Cea din urmă poate fi utilă pentru a evita extinderile macrocomenzii redundante și posibil costisitoare dacă valoarea nu se modifică, dar trebuie să fiți conștienți de efectele secundare.

    Rețineți că, deși %global acceptă din punct de vedere tehnic un câmp OPȚIUNI, aceasta nu este potrivită pentru definirea macrocomenzilor parametrice din cauza comportamentului de expansiune al CORPULUI.

    Exemplu:
        %global snapver 0-0.48.20240616git

%undefine NUME
    Rețineți că %undefine doar scoate o definiție macro din stivă, astfel încât utilizarea sa nu garantează că NAME este nedefinit după apelarea %undefine asupra acestuia. Macrocomenzile automate și macrocomenzile încorporate nu pot fi nedefinite.

    Exemplu:
        %undefine ruta-mea

%{load:FIȘIER}
     Încarcă un fișier rpm-macrofile(5). (Adăugată: 4.12.0)

    Exemplu:
        %{load:/vreun/dir/macros.foo}

  Extinderea macrocomenzii
%{expand:CORP}
    Extinde CORPUL ca și cum ar fi un corp al unei macrocomenzi. Util pentru o indirecție sporită, cum ar fi extinderea unui nume de macrocomandă construit din două sau mai multe macrocomenzi.

    Exemplu:
        %{expand:%{foo_prefix}%{foo_suffix}}

%{expr:EXPRESIE}
    Extinde EXPRESIA. Consultați Extinderea expresiei. (Adăugată în versiunea: 4.15.0)

    Exemplu:
        %{expr:5*1024}

%{lua:COD-LUA}
    Extinde la ieșirea LUA-CODE folosind interpretul Lua încorporat. Consultați Extindere Lua.

    Exemplu:
        %{lua:for i=65,90 do print(șir.char(i)) end}

%{macrobody:NUME}
    Extinde la corpul literal al macrocomenzii NUME. (Adăugată în versiunea: 4.16.0)

    Exemplu:
        %{macrobody:_libdir}

  Operații cu șiruri de caractere
%dnl
    Ignoră la linia următoare (fără a extinde nimic). %dnl este metoda recomandată pentru a comenta elementele din fișierele spec, deoarece funcționează peste tot și dezactivează procesarea macrocomenzii pentru linia respectivă. (Adăugată în versiunea: 4.15.0)

    Exemplu:
        %dnl Acesta este un comentariu privind comportamentul %{mymacro}

%{gsub ȘIR, MODEL, ÎNLOCUIRE [,N]}
    Înlocuiește toate aparițiile (sau primele N, dacă sunt specificate) ale MODELULUI din ȘIR cu ÎNLOCUIREA.

    Adăugată în versiunea: 4.19.0

    Exemplu:
        %{gsub aabbaacc aa dd 1}

%{len:ȘIR}
    Extinde la lungimea ȘIRULUI. (Adăugată în versiunea: 4.19.0)

    Exemplu:
        %{len:9bf7da058a7c582878310e75be3d56a5a8b67f95}

%{lower:ȘIR}
    Extinde la litere mici ȘIRUL. (Adăugată în versiunea: 4.19.0)

    Exemplu:
        %{lower:CamelCase}'

%{quote:Șir}
    Citează argumentele pentru transmiterea șirurilor goale și a șirurilor cu spații albe încorporate ca argumente ale macrocomenzii parametrice. (Adăugată în versiunea: 4.14.0)

    Exemplu:
        %myzip -x %{quote:empty spaces.zip}

%{rep ȘIR, N [,SEP]}
    Extinde la un șir care este concatenarea a N copii ale ȘIR, separate prin SEP (dacă este specificat).

    Adăugată în versiunea: 4.19.0

    Exemplu:
        %{rep a 5}

%{reverse:ȘIR}
    Inversează un șir. (Adăugată în versiunea: 4.19.0)

    Exemplu:
        %{reverse:tac}

%{shescape:ȘIR}
    Citează simplu ȘIRUL cu caractere de eludare pentru utilizare în shell. (Adăugată în versiunea: 4.18.0)

    Exemplu:
        %{shescape:foo's}

%{shrink:ȘIR}
    Elimină spațiile albe din fața și din spatele ȘIRULUI, reduce spațiile albe intermediare la un singur spațiu. (Adăugată în versiunea: 4.14.0)

    Exemplu:
        %{shrink:aa  bb   ccc   }

%{span:ȘIR}
    Șirul așa cum este, util pentru încadrarea macrocomenzilor pe mai multe linii. (Adăugată în versiunea: 6.0.0)

    Exemplu:
        %{span:
        	%un lucru
        	%un alt lucru
        }

%{sub ȘIR, I, [,J]}
    Extinde la subșirul din ȘIR care începe la I și continuă până la J. I și J pot fi negative pentru a indexa de la sfârșitul șirului. Dacă J este absent, se presupune că este egal cu -1 (adică sfârșitul șirului).

    Adăugată în versiunea: 4.19.0

    Exemplu:
        *%{sub fișierul-meu.zip 3 6}*

%{upper:ȘIR}
    Extinde la majuscule ȘIRUL. (Adăugată în versiunea: 4.19.0)

    Exemplu:
        %{upper:CamelCase}'

  Operații cu fișiere și rute
%{basename:RUTA}
    basename(1) macrocomandă analoagă.

    Exemplu:
        %{nume-bazăe:/vreun/dir/fișier.suf}

%{dirname:RUTA}
    dirname(1) macrocomandă analoagă.

    Exemplu:
        %{dirname:/vreun/dir/fișier.suf}

%{exists:RUTA}
    Verifică existența fișierului, expandează la 1/0. (Adăugată în versiunea: 4.18.0)

    Exemplu:
        %{exists:%{builddir}/myflag.txt}

%{suffix:RUTA}
    Expandează partea de sufix a unui nume de fișier.

    Exemplu:
        %{suffix:fișierul-meu.zip}

%{url2path:URL}
    Convertește adresa URL într-o rută locală.

    Exemplu:
        %{url2path:http://rpm.org/not/there}

%{uncompress:RUTA}
    Extinde la o comandă pentru a afișa argumentul RUTA la ieșirea standard, decomprimând după cum este necesar.

    Exemplu:
        %{uncompress /sursa/mea.tar.gz}

%{xdg:TIP}
    Extinde la rutele directorului de bază XDG. Valorile acceptate pentru TIP sunt:
    •   cache: date neesențiale specifice utilizatorului (stocate în cache)
    •   config: fișiere de configurare specifice utilizatorului
    •   data: fișiere de date specifice utilizatorului
    •   state: date de stare specifice utilizatorului

    Adăugată: 6.0.0

    Exemplu:
        %{xdg config}

  Informații despre mediu
%getncpus
    Extinde la numărul de CPU-uri disponibile. (Adăugată în versiunea: 4.15.0)

%{getncpus:TIP}
    Extinde la numărul de CPU-uri disponibile, valorile acceptate pentru TIP sunt
    •   total: numărul total de CPU-uri disponibile (la fel ca %getncpus)
    •   proc: numărul de CPU-uri disponibile pentru procese
    •   thread: numărul de CPU-uri disponibile pentru fire de execuție

    proc și thread contabilizează memoria disponibilă, inclusiv limitările spațiului de adrese pentru firele de execuție.

    Adăugată: 4.19.0.

    Exemplu:
        %{getncpus proc}

%getconfdir
    Extinde la directorul „home” RPM (de obicei „/usr/lib/rpm”).

%{getenv:NUME}
    getenv(1) macrocomandă analoagă.

    Exemplu:
        %{getenv:HOME}

%rpmversion
    Extinde la versiunea RPM în execuție.

  Ieșire
%{echo:ȘIR}
    Imprimă ȘIRUL pentru a procesa ieșirea standard.

    Exemplu:
        %{echo:Construirea cu foo}

%{warn:ȘIR}
    Imprimă ȘIRUL precedat de „warning: ” pentru a procesa ieșirea de eroare standard.

    Exemplu:
        %{warning:Foo este depreciat}

%{error:ȘIR}
    Imprimă ȘIRUL prefixat cu „error:” pentru a procesa eroarea standard și a semnaliza o eroare în procesorul macrocomenzii.

    Exemplu:
        %{error:Argument nevalid}

%verbose
    Expandează la 1/0 indiferent dacă RPM este în modul descriptiv sau nu. (Adăugată în versiunea: 4.17.1)

%{verbose:ȘIR}
    Extinde la ȘIR dacă RPM este în modul descriptiv, șirul gol dacă nu este. (Adăugată în versiunea: 4.17.1)

    Exemplu:
        %{verbose:-x}

  Macrocomenzi specifice spec
%{S:NUMĂR}
    Extinde la numele fișierului sursei specificate NUMĂR. %{S:n} este echivalent cu %{SOURCEn}.

%{P:NUMĂR}
    Extinde la numele fișierului patch-ului specificat NUMĂR. %{P:n} este echivalent cu %{PATCHn}.

  Diagnosticare
%trace
    Comută afișarea informațiilor de depanare înainte/după extindere.

%dump
    Imprimă tabelul de macrocomenzi active (adică neacoperite).

%__nume_fișier
    Extinde la numele fișierului curent (dacă se analizează un fișier). (Adăugată în versiunea: 4.15)

%__fișier_nr.linie
    Extindeți la numărul liniei curente din fișierul curent (dacă se analizează un fișier). (Adăugată în versiunea: 4.15)

EXEMPLE

  Exemplul 1. Definiți o macrocomandă simplă
Definiți macrocomanda mylib ca o rută relativă la macrocomanda %{_libdir} într-un fișier spec:

    %define mylib %{_libdir}/mine

  Exemplul 2. Definiți o macrocomandă parametrică
Definiți macrocomanda parametrică myhelper care execută programul specificat de %myprog cu primul argument al acestuia și trecând întotdeauna opțiunea --some-opt către acesta, precum și opțiunea --xtra dacă a primit opțiunea -x:

    %define myhelper(x) %{myprog} --vreo-opțiune %{?-x:--xtra} %{1}

  Exemplul 3. Definiți o macrocomandă utilizând expansiunea shell-ului
Definiți macrocomanda %today care se extinde la data curentă în formatul AALLZZ apelând ustensila shell date(1). Rețineți că este necesară a doua macrocomandă % pentru a eluda argumentele către date(1):

    %define today %(date +%%y%%m%%d)

  Exemplul 4. Definiți o macrocomandă condițională
Definiți macrocomanda mypath dacă nu a fost definită anterior:

    %{!?mypath: %define mypath /vreun/loc}

  Exemplul 5. Expansiune conditională
Expandează la 1 dacă use_foo este definit și 0 în caz contrar:

    %{?use_foo:1}%{!?use_foo:0}

  Exemplul 6. Expresii
Calculează 5 * 1024:

    %[5 * 1024]

Extinde la literalul true sau false în funcție de o condiție:

    %[1 < 2 ? "true" : "false"]

Compară versiunile, extinzând la 1 sau 0 pentru true/false:

    %[ v"3.1.0-1" < v"1.0~alpha-2" ? 1 : 0]

Expandează la 1 dacă %aa se extinde la 5, altfel se extinde la 2:

    %[ "%{aa}" == "5" ? 1 : 2]

DEPANAREA
Câteva instrumente utile pentru lucrul cu macrocomenzi și depanarea acestora:

rpm --eval "VALOARE"
    Extinde VALOAREA în linia de comandă.

rpm --define "aa 11" --eval "%aa"
    Definește și evauează o macrocomandă în linia de comandă.

rpm --eval "%global unamer %(uname -r)" --eval "%{macrobody:unamer}"
    Definește și examinează corpul macrocomenzii folosind %global în linia de comandă.

rpm --eval "%define unamer %(uname -r)" --eval "%{macrobody:unamer}"
    Definește și examinează corpul macrocomenzii folosind %define în linia de comandă.

rpmlua
    Rulează un shell interactiv în mediul Lua încorporat.

rpmlua -e 'print(macros.defined("_libdir"))'
    Folosind interpretul Lua încorporat în formă autonomă, afișează 1/0 indiferent dacă macrocomanda _libdir este definită sau nu.

rpmspec --shell
    Rulează un shell interactiv în mediul macrocomenzii.

rpmspec --shell telnet.spec
    Rulează un shell interactiv în mediul macrocomenzii după analizarea telnet.spec.

CONSULTAȚI ȘI
rpm(8) rpm-common(8) rpm-macrofile(5) rpm-config(5) rpm-lua(7) rpmspec(1) rpmlua(1)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.