Vítejte zpátky v seriálu návodů, jak vytvářet aplikace xdg-app. V první části jsme nainstalovali vše, co potřebujeme a ručně jsme vytvořili první aplikaci. V této části pomocí nástrojů, které nám poskytuje xdg-app, sestavíme poněkud komplexnější aplikaci.

Vybral jsem aplikaci gnome-dictionary, protože to je malá aplikace bez žádných závislostí. K jejímu sestavení použijeme SDK (software development kit), který odpovídá běhovému prostředí, které jsme použili v minulé části. SDK obsahuje vývojářské nástroje a hlavičky, které jsou potřeba k sestavení aplikací, jež využívají knihovny v běhovém prostředí.

Ze všeho nejdříve musíme SDK nainstalovat. Je poněkud velké a může to chvíli trvat:

xdg-app --user install gnome-nightly org.gnome.Sdk

Potřebujeme také zdrojové kódy aplikace, kterou chceme sestavit:

wget https://download.gnome.org/sources/gnome-dictionary/3.19/gnome-dictionary-3.19.90.tar.xz

Stejně jako minule začneme vytvořením adresáře, kde bude aplikace nainstalovaná. Nicméně tentokrát k jeho vytvoření použijeme příkaz build-init:

xdg-app build-init appdir2 org.gnome.Dictionary org.gnome.Sdk org.gnome.Platform

To vytvoří adresář nazvaný "appdir2" se souborem s metadaty a správnou strukturou. Jediným rozdílem oproti minulé části je, že soubor s metadaty nyní specifikuje kromě běhového prostředí také SDK. SDK je opravdu jen běhové prostředí, akorát se používá během sestavovací fáze, ne když aplikaci spouští uživatel.

Nyní, když máme specifikované SDK, můžeme použít příkaz xdg-app build. Ten je velmi podobný příkazu run s tím rozdílem, že operuje nad adresářem pro sestavení aplikace a ne nad nainstalovanou aplikací a používá SDK místo standardního běhového prostředí. Dává také sandboxu přístup ke všem souborům. Například můžete udělat:

$ xdg-app build appdir2 touch /app/some_file
$ xdg-app build appdir2 ls -l /app
total 0
-rw-r--r-- 1 alex wheel 0 Feb 19 16:03 some_file

To vytvoří soubor "appdir2/files/some_file" ve vašem adresáři pro zkoušení tohoto návodu.

Pomocí tohoto příkazu můžete sestavit aplikaci, jak jste normálně zvyklí jen s tím rozdílem, že je to v sandboxu. Jelikož to je sandbox, automaticky se použije překladač a další nástroje z SDK. gnome-dictionary se sestaví bez problémů s tradiční trojicí configure; make; make install. Jen musíme přidat prefix xdg-app:

tar xvf gnome-dictionary-3.19.90.tar.xz
cd gnome-dictionary-3.19.90/
xdg-app build ../appdir2 ./configure --prefix=/app
xdg-app build ../appdir2 make
xdg-app build ../appdir2 make install
cd ..

Musíme také aplikaci dát přístup k X11 a síti a určit, jaký příkaz se má použít ke spuštění aplikace. Toho lze docílit příkazem build-finish:

xdg-app build-finish appdir2 --socket=x11 --share=network --command=gnome-dictionary

To přidá další informace do souboru s metadaty a vytvoří adresář s exporty, ke kterému se dostaneme později. Nyní můžete aplikaci nainstalovat a vyzkoušet:

xdg-app build-export repo appdir2
xdg-app --user install tutorial-repo org.gnome.Dictionary
xdg-app run org.gnome.Dictionary

Uvidíte nějaká varování, protože jsme aplikaci neudělili přístup do databáze dconf, ale kromě toho by mělo všechno fungovat.

Zajímavou novinkou jsou tady ony exporty zmíněné výše. Podíváte-li se do adresáře appdir2/export/, najdete tam tuto strukturu:

appdir2/export
└── share
├── applications
│ └── org.gnome.Dictionary.desktop
└── dbus-1
└── services
└── org.gnome.Dictionary.service

Když se aplikace instaluje, tyto soubory se zkopírují do ~/.local/share/xdg-app/exports/. Balíček xdg-app potom nastaví proměnnou prostředí XDG_DATA_DIRS tak, aby ukazovala na tento adresář, což znamená, že se do něj podívá desktopové prostředí. To zní trochu komplikovaně, ale znamená to, že když se aplikace nainstaluje, objeví se automaticky mezi normálními aplikacemi v desktopovém prostředí.

Je tu ale jeden limit pro to, co se exportuje. Všechny názvy souborů (ne adresářů) musí mít ID aplikace jako prefix, což v našem případě platí, protože soubor .desktop je org.gnome.Dictionary.desktop, což je to, co jsme použili jako ID. Toto omezení zaručuje, že aplikace nezpůsobí konflikty a také že nemůžou přepsat aplikace nainstalované systémem.

Nyní máme sestavenou jednoduchou aplikaci bez žádných závislostí. Pokud má aplikace nějaké závislosti, které nejsou v běhovém prostředí, musíte je sestavit také. To znamená více cyklů configure; make; make install. Ačkoliv nejde o nic těžkého, je to hodně opakované manuální práce. V další části tohoto seriálu si ukážeme, jak to můžeme automatizovat pomocí nástroje xdg-app-builder.

Původním autorem textu je Alex Larsson, který jej publikoval na svém blogu. Na mojefedora.cz jej vydáváme s jeho souhlasem přeložený do češtiny.