<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" style="task" id="weatherAutotools.js" lang="cs">
  <info>
    <link type="guide" xref="weatherApp.js#main" group="#last"/>
    <revision version="0.1" date="2012-03-09" status="stub"/>

    <credit type="author copyright">
      <name>Susanna Huhtanen</name>
      <email its:translate="no">ihmis.suski@gmail.com</email>
      <years>2012</years>
    </credit>

    <desc/>
  </info>

  <title>Autotools a ikony</title>
  <synopsis>
    <p>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:</p>

    <list>
      <item><p><link xref="#autotools">Autotools</link></p></item>
      <item><p><link xref="#icons">Vlastní ikony pro vaši aplikaci</link></p></item>
    </list>
  </synopsis>



  <section id="autotools">
  <title>Autotools a nutné soubory</title>
  <p>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 <link href="http://en.wikipedia.org/wiki/GNU_build_system">článku na Wikipedii</link>.</p>
    <list>
      <item><p>weatherapp.desktop</p></item>
      <item><p>weatherapp.sh.in</p></item>
      <item><p>Makefile.am</p></item>
      <item><p>configure.ac</p></item>
      <item><p>autogen.sh</p></item>
    </list>
    <p>weatherapp.desktop</p>
    <code mime="text/.desktop" style="numbered">
[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;</code>
    <p>Věc, která v tomto souboru stojí za pozornost, je, že řádek <code>Exec</code> bude v tomto souboru .desktop funkční až teprve po proběhnutí všech ostatních souboru <file>Makefile</file>. Soubor <file>weatherapp.sh</file> je malý shellový skript vytvořený z <file>weatherapp.sh.in</file>.</p>

    <p>weatherapp.sh.in</p>
    <code mime="text/sh.in" style="numbered">
#!/bin/sh
export GJS_PATH=@bindir@
gjs @bindir@/weatherapp.js</code>
    <p>Tento soubor je šablonou, podle které Makefile udělá soubor <file>.desktop</file> pro spouštění aplikace.</p>

    <p>Makefile.am</p>
    <code mime="text/am" style="numbered">
# 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) $&lt; &gt; $@
	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</code>
    <p>Toto potřebuje lehké vysvětlení. V porovnání s <file>Makefile.am</file> z HelloWorld zde došlo k drobným změnám. Pojďme se podívat na všechny nové části:</p>
    <p><code>bin_scripts</code> 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í. </p>
    <p><code>EXTRA_DIST</code> jsou soubory, které budou šířeny.</p>
    <p>Blok <code>do_subst</code> jsou drobnosti, které ale musí být tam, kde jsou.</p>
    <p>Za komentářem <code># Ikony v aplikaci</code> 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í <code>install-icons</code>.</p>

    <p>configure.ac</p>
    <code mime="text/ac" style="numbered">
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</code>
    <p>autogen.sh</p>
    <code mime="text/sh" style="numbered">
#!/bin/sh
# Toto nám spustí autoconf, automake, atd.
autoreconf --force --install</code>
  </section>
  <section id="icons">
  <title>Vlastní ikony pro vaši aplikaci</title>
  <p>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 <file>/usr/share/hicolor</file>, v opačném (např. ikony počasí ve vaší aplikaci) <file>/usr/share/$application/bla/bla</file>.</p>
  <p>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 <code>Icon=weather-icon</code>. V souboru <file>Makefile.am</file> přidejte tyto dva řádky na konec vašeho bloku <code># Ikona aplikace</code>.</p>
  <p>appicondir=$(datadir)/icons/hicolor/scalable/apps</p>
  <p>appicon_DATA=weather-icon.svg</p>
  </section>

</page>
