Σε αυτό το τμήμα του οδηγού θα κατασκευάσουμε τα αυτόματα εργαλεία και θα προσαρμόσουμε τα απαιτούμενα εικονίδια για την εφαρμογή καιρού για να είναι άρραφο μέρος της επιφάνειας εργασίας σας. Για να γράψετε και να τρέξετε όλα τα παραδείγματα κώδικα οι ίδιοι, χρειαζόσαστε έναν επεξεργαστή για να γράψιμο του κώδικα, τερματικό και GNOME 3 ή μεταγενέστερο εγκατεστημένο στον υπολογιστή σας. Σε αυτόν τον οδηγό θα εξετάσουμε τα παρακάτω μέρη:
Αυτόματα εργαλεία (Autotools)
Προσαρμοσμένα εικονίδια για την εφαρμογή σας
Έχοντας περισσότερα από ένα αρχεία στον φάκελό σας κάνει τη χρήση του autotools λίγο περίπλοκο. Χρειαζόσαστε το αρχείο .desktop, autogen.sh, Makefile.am, configure.ac και ως νέο αρχείο: το αρχείο myapp.sh.in. Η επεξεργασία του αρχείου autotools είναι ένα περίπλοκο πεδίο. Περισσότερες πληροφορίες μπορείτε να βρείτε σε πολλές διαφορετικές πηγές, το άρθρο της βίκι παρέχει μια καλή επισκόπηση του θέματος.
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;
Αυτό που πρέπει να σημειώσετε σε αυτό το αρχείο είναι ότι η γραμμή Exec θα κάνει αυτό το αρχείο .desktop να δουλέψει μόνο μετά την εκτέλεση όλων των άλλων makefiles. Το Weatherapp.sh είναι ένα μικρό σενάριο κελύφους που δημιουργήθηκε με το weatherapp.sh.in.
weatherapp.sh.in
#!/bin/sh
export GJS_PATH=@bindir@
gjs @bindir@/weatherapp.js
Αυτό το αρχείο είναι ένα πρότυπο στο αρχείο Makefile για να εκτελεστεί από .desktop.
Makefile.am
# Το ενεργό εκτελέσιμο πρόγραμμα ορίζεται στο θεμελιακό SCRIPTS . Το πρόθεμα bin_ λέει πού θα αντιγραφεί αυτό
bin_SCRIPTS = weatherapp.js geonames.js weatherapp.sh
# Ο κατάλογος αρχείων για διανομή
EXTRA_DIST= \
$(bin_SCRIPTS) \
$(private_icons) \
$(NULL)
CLEANFILES =
# Τα αρχεία της επιφάνειας εργασίας
desktopdir = $(datadir)/applications
desktop_DATA =weatherapp.desktop
# Κατάλληλη εντολή για εκτέλεση αντικαταστάσεων μεταβλητής Makefile σε μη Makefile
# Αρχεία (σενάρια, αρχεία υπηρεσίας, κλπ.)
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
#Το εικονίδιο της εφαρμογής
appicondir=$(datadir)/icons/hicolor/scalable/apps
appicon_DATA=weather-icon.svg
#Εικονίδια στην εφαρμογή
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
Αυτό χρειάζεται λίγη περισσότερη εξήγηση. Συγκρινόμενο με το HelloWorld Makefile.am αυτό έχει αλλάξει αρκετά. Ας εξετάσουμε όλες τις νέες ομάδες:
Τα bin_scripts είναι αρχεία που απαιτούνται για την εκτέλεση της εφαρμογής σας. Σε αυτήν την περίπτωση τα δύο πρώτα είναι το ίδιο το πρόγραμμα και το τρίτο είναι το σενάριο που ξεκινά την εφαρμογή.
EXTRA_DIST είναι τα αρχεία που πρόκειται να διανεμηθούν
ομάδα do_subst είναι δυαδικά και κομμάτια που πρέπει να είναι εκεί που βρίσκονται
after the comment #icons in the application there are all the icons that are used by the program. For them to be useful you need to install the icons in correct places and that is done by the install-icons: bit
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
# Αυτό θα εκτελέσει autoconf, automake, κλπ. για μας
autoreconf --force --install
Εάν σκέφτεστε τα προσαρμοσμένα εικονίδια ένας καλός πρόχειρος κανόνας είναι ο εξής: περιμένετε να δείτε αυτό το εικονίδιο να χρησιμοποιείται κάπου αλλού ή είναι μόνο για την εφαρμογή σας; Εάν συμβαίνει το πρώτο (π.χ. τα εικονίδια στο αρχείο της επιφάνειας εργασίας που εμφανίζονται από το κέλυφος) τότε χρειαζόσαστε /usr/share/hicolor, αλλιώς (π.χ. τα εικονίδια καιρού της εφαρμογής σας) /usr/share/$application/bla/bla
Χρησιμοποιώντας το autotools πρέπει να κάνετε μερικές αλλαγές στα αρχεία σας .desktop and Makefile.am. Στο αρχείο επιφάνειας εργασίας αλλάξτε το όνομα του εικονιδίου Icon=weather-icon. Στο αρχείο Makefile.am προσθέστε αυτές τις δύο γραμμές στο τέλος της εφαρμογή σας #the application icon
appicondir=$(datadir)/icons/hicolor/scalable/apps
appicon_DATA=weather-icon.svg