ekg2
GIT master
|
Wiec chcesz zbudowac plugin dla ekg2?
W tej czesci dokumentacji sa (jesli czegos brakuje daj nam znac na ekg2-devel) informacje nt. jak zbudowac nowy modul do ekg2, jesli jest on szczegolnego typu (innego niz PLUGIN_GENERIC) znajdziesz informacje jak on powinien sie zachowywac w podgrupach.
Zaczynamy tworzenie plugina od stworzenia nowego katalogu w ekg2/plugins
ekg2/plugins $ mkdir foo ekg2/plugins $ cd foo ekg2/plugins/foo $
Nasz przykladowy plugin bedzie sie nazywac foo :) Nastepnie tworzymy plik foo.c (moglby sie nazywac main.c, ale jednak unikajmy potocznych nazw)
I edytujemy go naszym ulubionym edytorem
ekg2/plugins/foo $ $EDITOR foo.c
I wklepujemy:
#include <ekg/plugins.h>
PLUGIN_DEFINE(foo, PLUGIN_GENERIC, NULL); /* (1) */
EXPORT int foo_plugin_init(int prio) { /* (2) */ plugin_register(&foo_plugin, prio); /* (3) */ return 0; /* (4) */ }
static int foo_plugin_destroy() { /* (5) */ plugin_unregister(&foo_plugin); /* (6) */ return 0; /* (7) */ }
Komentarz:
(1) - definiuje plugin o nazwie 'foo' w foo_plugin, o typie PLUGIN_GENERIC. Trzeci parametr bede wyjasniac w dalszej czesci dokumentacji, na razie nie potrzebujemy :)
(2) - podczas ladowania plugina, ekg2 szuka symbolu o nazwie PLUGIN_plugin_init() atrybut EXPORT jest zdefiniowany w plugins.h, dzieki temu i -fvisibility=hidden zmniejszamy czas potrzebny na szukanie symbolu (oraz rozmiar binarki) W prio mamy priorytet. Wypada go nie zmieniac, tylko go przekazac do plugin_register()
(3) - Rejestrujemy plugin.
(3,4) - Zwracamy 0 - udalo sie ladowanie. Pluginy moga zwracac -1 jak sie nie udalo zainicjowac plugina (np z powodu tego ze nie udalo sie utworzyc/odczytac jakiegos pliku, or smth), Tylko wazne zeby ten powrot byl robiony _przed_ plugin_register()
(5) - definiujemy funkcje niszczaca plugin, deklaracja jest robiona przy PLUGIN_DEFINE() wiec jak chcemy zeby sie ona inaczej nazywala, albo byla w innym pliku niz foo.c, to nie mozemy korzystac z PLUGIN_DEFINE() [co jest niezalecane]
(6, 7) - odrejestrujemy plugin, i zwracamy 0.
Teraz wypadaloby go skompilowac i sprawdzic czy dziala :)
ekg2 korzysta z GNU autotoolsow i GNU libtoola, wiec pisanie Makefile'a sprowadza sie tylko do wklepania w $EDITOR Makefile.am
lib_LTLIBRARIES = foo.la foo_la_SOURCES = foo.c foo_la_LDFLAGS = -module -avoid-version foo_la_CFLAGS = $(C_FVISIBILITY) $(AM_CFLAGS) libdir = $(plugindir)
oraz w ekg2/configure.ac dodania do AC_CONFIG_FILES() plugins/foo/Makefile albo mniejszego babrania sie i zrobienia osobno wpisu:
AC_CONFIG_FILES([plugins/foo/Makefile])
[XXX, ta czesc dokumentacji do sprawdzenia. Wystarczy samo make teraz?]
Nastepnie robimy ./autogen.sh co wygeneruje nam nowe ./configure oraz je uruchomi.
Teraz jesli nie wyswietlilo nam sie:
config.status: creating plugins/foo/Makefile
bo ./autogen.sh uruchomilo ./configure z –no-create to uruchamiamy chociazby gmake, co powinno wygenerowac Makefile'a
Kiedy juz mamy ekg2/plugins/foo/Makefile to uruchamiamy:
ekg2/plugins/foo $ gmake ekg2/plugins/foo $ sudo gmake install ekg2/plugins/foo $ ekg2 -u testfoo42135627
Sprobujmy zaladowac plugin w ekg2..
/plugin +foo xx:yy:zz ::: Plugin foo zostal zaladowany
Hurray :)
[XXX, na razie tyle, dokonczyc]