Byla vydána nová stabilní verze 7.6 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 140. Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána verze 1.90.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.25.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byla vydána nová major verze 7.0 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Nově je postavena je na Debianu 13 (Trixie) a GNOME 48 (Bengaluru). Další novinky v příslušném seznamu.
Společnost Meta na dvoudenní konferenci Meta Connect 2025 představuje své novinky. První den byly představeny nové AI brýle: Ray-Ban Meta (Gen 2), sportovní Oakley Meta Vanguard a především Meta Ray-Ban Display s integrovaným displejem a EMG náramkem pro ovládání.
Po půl roce vývoje od vydání verze 48 bylo vydáno GNOME 49 s kódovým názvem Brescia (Mastodon). S přehrávačem videí Showtime místo Totemu a prohlížečem dokumentů Papers místo Evince. Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.
Open source softwarový stack ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán ve verzi 7.0.0. Přidána byla podpora AMD Instinct MI355X a MI350X.
Byla vydána nová verze 258 správce systému a služeb systemd (GitHub).
Byla vydána Java 25 / JDK 25. Nových vlastností (JEP - JDK Enhancement Proposal) je 18. Jedná se o LTS verzi.
Věra Pohlová před 26 lety: „Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala“. Jde o odpověď na anketní otázku deníku Metro vydaného 17. září 1999 na téma zneužití údajů o sporožirových účtech klientů České spořitelny.
%if
Bylo by nadmíru zvláštní, kdyby existovaly %ifarch
a %ifos
, a přitom žádné %if
. A ono také existuje. Syntaxe je stejná jako u %ifarch
a velmi připomíná preprocesor C (část s %else
je nepovinná):
%if logický_výraz … %else … %endif
Logické výrazy vypadají, jak jsme zvyklí z většiny ostatních jazyků. Nula je nepravda, nenulové číslo pravda. Můžeme testovat existenci maker
%if %{?WITH_SELINUX:1}%{!?WITH_SELINUX:0}
porovnávat řetězce
%if "%{with_sasl1}" == "yes" || "%{with_sasl2}" == "yes"
nebo ověřovat platnost elementárních matematických tvrzení
%configure \ %if 2 + 2 == 5 --with-funny-math \ %endif …
Z posledního příkladu také vidíme, že řádky s podmínkami jsou po expansi kompletně vynechány (stejně jako řádky s %define
a dalšími direktivami), a tak je můžeme bezpečně vkládat doprostřed čehokoli.
Funkce připomínají makra, ale zatímco makro při použití na něco expanduje, funkce něco vykoná. Syntaxe volání funkcí je
%{název_funkce:argument} %{název_funkce} %{!název_funkce}
přičemž poslední dva příklady se týkají funkcí bez argumentů, které nastavují nějaký příznak.
K disposici máme následující funkce:
%{echo:…}
, %{warn:…}
, %{error:…}
%{trace}
, %{!trace}
%{verbose}
, %{!verbose}
rpm --verbose
).%{dump}
rpm --showrc
), jak vypadá právě v místě, kde se funkce provede.%{expand:…}
%{expand:…}
jsou lokální; mají-li být globální, musíme je definovat %global
.%{lua:…}
%{basename:…}
%{dirname:…}
%{suffix:…}
%{url2path:…}
, %{u2p:…}
%{uncompress:…}
gzip
em, bzip2
em, zip
em a nekomprimované.%{S:…}
, %{P:…}
%SOURCEargument
a %PATCHargument
– neexpandované, tj. ne na jejich hodnoty.%{F:…}
fileargument.file
. Pokud někdo tuší, k čemu to může být dobré, docela by mě to zajímalo.S většinou funkcí se v existujících spec souborech potkáte zřídka, některé se však hodí při ladění.
Odskočit do shellu, tedy vykonat v rámci expanse makra libovolný příkaz shellu, můžeme konstrukcí
%(příkaz_shellu)
Výstup příkazu se stane expansí makra. Lze to využít k ledasčemu, od nevinných konstrukcí
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
přes úlety typu
%define vendorstring Unsupported Custom Build by %(whoami)
až po věci, které sem raději nebudu psát, kterých však najdete dost ve spec souborech oblíbené rpmoidní distribuce. Kupříkladu standardní makra pro zjištění perlích adresářů (v nichž je pěkný guláš) vypadají:
%define perl_archlib %(eval "`perl -V:installarchlib`"; echo $installarchlib)
Těla maker se ovšem expandují až při použití. Proto když desetkrát použijeme
%perl_archlib
, bude se desetkrát spouštět perl
a sdělovat nám, kde má jakýsi adresář. Efektivnější by bylo
%{expand:%global perl_archlib %(…)}
Takto však lze definovat makro jen ve spec souboru, nikoli v macros
.
Makra %setup
a %patch
, i když to vlastně nejsou makra, mají různé volby, jež řídí jejich chování. Umí tohle náš kečup? Umí, i když nám po zjištění, z čeho se vaří, možná přestane chutnat.
Makro s argumenty definujeme
%define makro(volby) tělo_makra
Volby jsou seznam písmen volitelně následovaných dvojtečkami, jak jsme zvyklí z getopt(3). Makro %nibbler
se dvěma volbami, -s
bez argumentu a -t
s argumentem, tak definujeme
%define nibbler(st:) …
Expanse maker s argumenty se liší od obyčejných maker. Nejenže se makro nahradí svým tělem, ale spolkne přitom celý zbytek řádku, který se stává jeho argumenty:
$ rpm --define 'nibbler %%nibbler' --eval 'Makro %nibbler a argumenty' Makro %nibbler a argumenty $ rpm --define 'nibbler() %%nibbler' --eval 'Makro %nibbler a argumenty' Makro %nibbler
Omezit nenažranost makra můžeme jeho uzavřením do funkce %{expand:…}
nebo prostě jen složenými závorkami:
$ rpm --define 'nibbler() %%nibbler' --eval 'Makro %{expand:%nibbler} a argumenty' Makro %nibbler a argumenty $ rpm --define 'nibbler(s) %%nibbler' --eval 'Makro %{nibbler -s} a argumenty' Makro %nibbler a argumenty
A teď bychom rádi ty spolykané argumenty z makra zase nějak dostali ven. Hodnotu argumentu -s
, případně volbu samu získáme různými variacemi na %{-s}
. Volbová makra (začínající pomlčkou) mají hodnotu voleb či argumentů jen uvnitř těla příslušného makra; volbová makra odpovídající nepřítomným či neexistujícím volbám se chovají částečně jako makra s prázdným tělem, částečně jako nedefinovaná.
Uvažujme definici
%define nibbler(prs:t:) …
použitou
%nibbler -r -s plit -tall is short
Pak se různá volbová a argumentová makra expandují následovně:
%{-p}
-p
se nevyskytuje, proto expanduje na nic – jako prázdné makro.%{-q}
-q
není ani deklarována, ale chová se stejně jako -p
a expanduje na nic.%{?-p:ppp}
-p
se nevyskytuje, proto expanduje na nic – jako nedefinované makro.%{!?-p:ppp}
-p
se nevyskytuje, proto expanduje na ppp
– jako nedefinované makro.%{-r}
-r
, tedy volbu samu.%{?-r:rrr}
, %{?-r:rrr}
-r
je přítomna, makro se tudíž chová jako definované a žádné překvapení se nekoná – první expanduje na rrr
, druhé na nic.%{-s}
-s plit
, tedy na celou volbu s argumentem.%{-t}
-t all
, argument byl převeden na standardní tvar, tj. oddělen mezerou.%{-t*}
all
, tedy samotný argument volby -t
.%{*}
is short
.%{**}
-r -s plit -tall is short
(bez makra samého).%{#}
2
, tedy počet zbývajících argumentů makra.%{2}
short
, tedy druhý zbývající argument.%{0}
nibbler
.%defined()
a %undefined()
V novějších verzích RPM obsahuje standardní soubor macros
definice testovacích maker %defined()
a %undefined()
pro jednoduché testování existence makra:
%if %{defined makro1} || %{defined makro2} … %endif
Jejich definice by už nyní měly být srozumitelné:
%define defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}} %define undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}}
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
%{?-r:rrr}, %{!?-r:rrr}Volba -r je přítomna, makro se tudíž chová jako definované a žádné překvapení se nekoná – první expanduje na rrr, druhé na nic.