I think the better way is starting from the sdl component, which is very small.
So, let's suppose you want to write the gb.xyz
component. This component:
libxyz.so
library and the xyz.h
include file.
The $ROOT
variable is the directory where you uncompressed the Gambas source package.
1. Make a copy of the $ROOT/src/lib/sdl
directory (with its contents) and name
it gb.xyz
.
2. Remove the sources files, but keep main.c
and main.h
. You will write your
own main.c
and main.h
by modifying them.
3. Edit the $ROOT/src/lib/xyz/Makefile.am
file, and fills it as needed, as
explained there.
You will get something like that:
INCLUDES = -I$(top_srcdir)/src/share @XYZ_INC@ EXTRA_DIST = *.component pkglib_LTLIBRARIES = lib.gb.xyz.la lib_gb_xyz_la_LIBADD = @XYZ_LIB@ lib_gb_xyz_la_LDFLAGS = @LD_FLAGS@ lib_gb_xyz_la_SOURCES = main.h main.c myFirstClass.h myFirstClass.c mySecondClass.h mySecondClass.c ... install-exec-local: @cp -f *.component $(DESTDIR)$(pkglibdir)
4. Rename the $ROOT/src/lib/xyz/lib.gb.sdl.component
file as
lib.gb.xyz.component
and edit it.
Be careful, this file must be UTF-8 encoded.
[Component] Key=gb.xyz Name=The xyz component Author=You Alpha=1
5. Edit the $ROOT/src/lib/Makefile.am
file (located one directory up) and change the first
line to add a reference to the newly created sub-directory.
SUBDIRS = debug eval db compress @QT_DIR@ @NET_DIR@ @SDL_DIR@ @VB_DIR@ @XYZ_DIR@
6. Edit the $ROOT/configure.in
file and add the following stuff:
... GB_COMPONENT( xyz, XYZ, [XYZ component], [GB_FIND(xyz.h, /usr/local /usr, include xyz*/include include/xyz*)], [GB_FIND(libxyz.$SHLIBEXT, /usr/local /usr, lib xyz*/lib lib/xyz*)], [$C_LIB $THREAD_LIB -lxyz], [$THREAD_INC]) ...
7. At the end of the $ROOT/configure.in
file, change the AC_OUTPUT
macro:
... dnl ---- Create makefiles AC_OUTPUT( Makefile src/Makefile src/share/Makefile src/comp/Makefile src/exec/Makefile src/lib/Makefile ... src/lib/compress/Makefile src/lib/compress/zlib/Makefile src/lib/compress/bzlib2/Makefile src/lib/xyz/Makefile )
8. Open a terminal, go to the package root directory, and type:
$ ./reconf $ ./configure ... $ make ...
Everything should compile... if you didn't make a mistake of course :-)
9. To test the component, you must make three symbolic links from the ./src/lib/xyz directory to the gambas installation directory. As root, of course:
$ su ... # ln -s /usr/lib/gambas/lib.gb.xyz.component $ROOT/src/lib/xyz/lib.gb.xyz.component # ln -s /usr/lib/gambas/lib.gb.xyz.so $ROOT/src/lib/xyz/.libs/lib.gb.xyz.so # ln -s /usr/lib/gambas/lib.gb.xyz.la $ROOT/src/lib/xyz/lib.gb.xyz.la
10. Now you must create the component description files by using the gbi
command. You must do that each time you modify the interface of your component.
$ gbi -a ...
That's all. You should have a new component now :-)