Susanna Huhtanen
ihmis.suski@gmail.com 2012

# Autotools a ikony

        V této části lekce sestrojíme soubory pro autotools a vlastní ikony, které budeme potřebovat pro aplikaci s počasím, aby perfektně zapadla do pracovního prostředí. Abyste si mohli napsat a spustit kód příkladu sami, budete potřebovat v počítači nainstalovaný editor pro psaní kódu, terminál a GNOME 3.0 nebo novější. V této lekci budeme postupovat následujícími částmi:

          Autotools
          Vlastní ikony pro vaši aplikaci

# Autotools a nutné soubory

To, že máté ve své složce více než jeden soubor, trochu komplikuje použití autotools. Potřebujete soubor .desktop, autogen.sh, Makefile.am, configure.as a nově soubor myapp.sh.in. Uprava souborů autotools je složitá záležitost. Více informací můžete najít v různých zdrojích, dobrý přehled na dané téma je v článku na Wikipedii.

weatherapp.desktop

weatherapp.sh.in

Makefile.am

configure.ac

autogen.sh

weatherapp.desktop

[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=Weather app Comment=Weather showing application Exec=weatherapp.sh Icon=application-default-icon Terminal=false Type=Application StartupNotify=true Categories=GNOME;GTK;Utility;

Věc, která v tomto souboru stojí za pozornost, je, že řádek `Exec` bude v tomto souboru .desktop funkční až teprve po proběhnutí všech ostatních souboru Makefile. Soubor weatherapp.sh je malý shellový skript vytvořený z weatherapp.sh.in.

weatherapp.sh.in

#!/bin/sh export GJS_PATH=@bindir@ gjs @bindir@/weatherapp.js

Tento soubor je šablonou, podle které Makefile udělá soubor .desktop pro spouštění aplikace.

Makefile.am

# Skutečný spustitelný program je nastaven do primitiva SCRIPTS # Prefix bin_ říká, kam to nakopírovat bin_SCRIPTS = weatherapp.js geonames.js weatherapp.sh # Seznam souborů, které se mají šířit EXTRA_DIST= \ $(bin_SCRIPTS) \ $(private_icons) \ $(NULL)

CLEANFILES =

# Soubory .desktop desktopdir = $(datadir)/applications desktop_DATA =weatherapp.desktop

# Užitečný příkaz provádějící substituce proměnných Makefile v jiných souborech # než Makefile (skriptech, souborech service atd.) do_subst = sed -e 's|@abs_top_srcdir[@]|$(abs_top_srcdir)|g' \ -e 's|@abs_top_builddir[@]|$(abs_top_builddir)|g' \ -e 's|@localedir[@]|$(localedir)|g' \ -e 's|@bindir[@]|$(bindir)|g' \ -e 's|@libexecdir[@]|$(libexecdir)|g' \ -e 's|@pkglibdir[@]|$(pkglibdir)|g' \ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \ -e 's|@have_libnotify[@]|$(HAVE_LIBNOTIFY)|g' \ -e 's|@have_libsoup[@]|$(HAVE_LIBSOUP)|g' \ -e 's|@have_cheese[@]|$(HAVE_CHEESE)|g'

weatherapp.sh: weatherapp.sh.in $(AM_V_GEN) $(do_subst) $< > $@ chmod +x $@

CLEANFILES += weatherapp.sh EXTRA_DIST += weatherapp.sh.in

# Ikona aplikace appicondir=$(datadir)/icons/hicolor/scalable/apps appicon_DATA=weather-icon.svg

# Ikony v aplikaci NULL =

private_icons = \ weather-clear.svg \ weather-few-clouds.svg \ weather-fog.svg \ weather-icon.svg \ weather-overcast.svg \ weather-showers.svg \ weather-showers-scattered.svg \ weather-snow.svg \ $(NULL)

install-icons: for icon in $(private_icons); do \ mkdir -p $(DESTDIR)$(pkgdatadir)/icons/; \ $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(pkgdatadir)/icons/; \ done

install-data-local: install-icons

Toto potřebuje lehké vysvětlení. V porovnání s Makefile.am z HelloWorld zde došlo k drobným změnám. Pojďme se podívat na všechny nové části:

`bin_scripts` jsou soubory, které jsou zapotřebí k běhu aplikace. V tomto případě jsou první dva soubory vlastní program a třetí soubor je skript, který aplikací spouští.

`EXTRA_DIST` jsou soubory, které budou šířeny.

Blok `do_subst` jsou drobnosti, které ale musí být tam, kde jsou.

Za komentářem `# Ikony v aplikaci` jsou všechny ikony, které používáme v programu. Aby byly použitelné, je potřeba je nainstalovat na správná místa a to zařídí `install-icons`.

configure.ac

dnl This file is processed by autoconf to create a configure script AC_INIT([Weather App], 1.0) AM_INIT_AUTOMAKE([1.10 no-define foreign]) AC_CONFIG_FILES(Makefile) AC_OUTPUT

autogen.sh

#!/bin/sh # Toto nám spustí autoconf, automake, atd. autoreconf --force --install

# Vlastní ikony pro vaši aplikaci

Pokud uvažujete o vlastních ikonách, je dobré pravidlo: očekáváte, že uvidíte tuto ikono použitou i někde jinde, nebo je výhradně pro vaši aplikaci? V prvním případě (např. ikony v souboru .desktop zobrazuje shell) potřebujete /usr/share/hicolor, v opačném (např. ikony počasí ve vaší aplikaci) /usr/share/$application/bla/bla.

Pokud používáte autotools, budete muset provést některé změny ve svých souborech .desktop a Makefile.am. V souboru .desktop změňte název ikony na `Icon=weather-icon`. V souboru Makefile.am přidejte tyto dva řádky na konec vašeho bloku `# Ikona aplikace`.

appicondir=$(datadir)/icons/hicolor/scalable/apps

appicon_DATA=weather-icon.svg