[Gambas-devel] expat and XML trial report of R.O.

Benoit Minisini gambas at ...1...
Wed Sep 15 14:19:06 CEST 2004


On Tuesday 14 September 2004 15:17, ron wrote:
> Thanks Christian, Daniel,
>
> I managed to get Daniels work in the build tree of gambas.
> The expatc was compiling and working, last week.
> In the weekend I updated KDE from 3.2 to 3.3
>
> But still some questions.
> I'm standing alone, only Win... users arround me. :(
> ---------------
> My system:
> SuSE 8.2
> cc --version:cc (GCC) 3.3 20030226 (prerelease) (SuSE Linux)
> automake --version:automake (GNU automake) 1.7.6
> autoconf --version:autoconf (GNU Autoconf) 2.57
>
> gambas 0.99 :=)
>
> The lib for expat is /usr/lib/libexpat.*
> The include is  /usr/include/expat.h
> Version ?.?.? (not in file)
>
> The lib for xml is /usr/lib/libxml2.*
> The include is in  /usr/include/libxml2/libxml/*
> version 2.5.11
> ----------------
> First what I did to paste it in.
> Despite expat and lib xml now discused as one I did the expat only
> and it worked before.
> I did follow the basic instruction Benoit posted here before.
> Then the fresh compile instructions.
>   reconf/configure/make and make install
> After adding the gbxml part as xml I did
>   make clean/reconf/configure/make and make install
> At this time the binaries of expat is gone?
> expat does not compile now.
> ------------------
> ('** lines' are not in file but my comment now)
>
> ** configure.in: Add after
> dnl ---- Check for threading
>
> GB_THREAD()
> ** this section
> dnl ---- Check for expath library
>
> GB_COMPONENT(
>   expatc,
>   EXPATC,
>   [expatc component],
>   [GB_FIND(expat.h, /usr/local /usr, include )],
>   [GB_FIND(libexpat.$SHLIBEXT, /usr/local /usr, lib)],
>   [$C_LIB -lexpatc]) ** <-- not sure this is right
>
> dnl ---- Check for libxml library
>
> GB_COMPONENT(
>   xml,
>   XML,
>   [XML component],
> dnl  [GB_FIND(xmlversion.h, /usr/local /usr, include )],
> dnl  [GB_FIND(libxml2.$SHLIBEXT, /usr/local /usr, lib)],
>   [$C_LIB -lxml]) ** <-- not sure this is right
>
> ** I had to add the 2 dnl to get gbxml get in (gbxml is changed to xml)

GB_COMPONENT must be able to find the includes and the libraries. Just change 
the search path so that it works.

[GB_FIND(xmlversion.h, /usr/local /usr, include include/libxml* 
include/libxml*/* )],
[GB_FIND(libxml2.$SHLIBEXT, /usr/local /usr, lib)],

Otherwise, compilation will fails because of missing include paths, linking 
will fail unless libraries are in /lib and /usr/lib, and surely other 
problems...

>
> ** In the AC_OUTPUT I add at the end before ')'
> src/lib/expatc/Makefile \
> src/lib/xml/Makefile \
>
> ** in Makefile.am in the src/lib directory
> SUBDIRS = debug eval db compress @QT_DIR@ @NET_DIR@ @SDL_DIR@ @VB_DIR@
> ** to
> SUBDIRS = debug eval db compress @QT_DIR@ @NET_DIR@ @SDL_DIR@ @VB_DIR@
> @EXPATC_DIR@ @XML_DIR@
>
> ** for expat no other changes.
>
> ** The expat problems just started after the make clean was done.
>
> static void XMLCALL
> startElement(void *_object, const char *name, const char **atts)
> {
>     int i;
>     GB_COLLECTION col;
>     GB_STRING v;
>     //GB_VALUE v;
>
> ** gives me a error for line 24 now
>   DPIC -o expatc.lo
>   expatc.c:24: error: parse error before "startElement"
>   expatc.c:25: warning: return type defaults to `int'
>   expatc.c: In function `startElement':
> ** and is gone when i change to
>
> static void XMLCALL startElement(void *_object, const char *name, const
> char **atts) {
>
> ** All procedure lines made in 2 lines give this error so and
> ** is gone after merge together them as above.
> ** The warning on line 25 is found on more lines and can be true
> ** or is due the cc(3.3) from suse8.2
> ------------------------
> The major diff between the orginal and fresh make for Makefile is many
> lines. I add then as Makefile.org and Mafefile.ron just in case.
> Same for the Makefile.in, and I understand they should/could be but I
> belive here to much.
>
> For the gbxml of Daniel the changes are as above and the rename of 'gbxml'
> to 'xml' in files and for filenames. I used the gbxml-1.tar.bz2 (70kb)
>
>
> ** in the src/lib/xml/Makefile.am
> INCLUDES = -I$(top_srcdir)/src/share -I/usr/include/libxml2
> EXTRA_DIST = *.component
>
> pkglib_LTLIBRARIES = lib.gb.gbxml.la
>
> lib_gb_gbxml_la_LIBADD =
> lib_gb_gbxml_la_LDFLAGS = -lxml2 -lz -lpthread -lm
>
> lib_gb_gbxml_la_SOURCES = main.h main.c XMLTree.h XMLTree.c
>
> ** changed to
> INCLUDES = -I$(top_srcdir)/src/share -I/usr/include/libxml2 @XML_INC@
> EXTRA_DIST = *.component
>
> pkglib_LTLIBRARIES = lib.gb.xml.la
>
> lib_gb_xml_la_LIBADD = @XML_INC@ ** <-- example instuction say this
> lib_gb_xml_la_LDFLAGS = -lxml2 -lz -lpthread -lm
>
> lib_gb_xml_la_SOURCES = main.h main.c XMLTree.h XMLTree.c
>
> ** sofar gbxml as xml
> I belive the problem with xml is mainly in the GB_COMPONENT and
> the src/lib/makefile.in.
>
> Because I wish to go on I did now the following.
> I know it is may be the wrong way but works.
> add dnl to the lines of the expat component.
> add dnl to the line src/lib/expatc/Makefile \ in AC_OUTPUT
> In the makefile.am in src/lib made a copy of the SUBDIRS line
> Put a # in front for the first line and removed the @EXPATH_DIR@ in the
> second one the reconf/configure and make
> expath is gone Ready to go for xml.
> Without fatal errors now, only warnings.
>
> XMLTree.c: In function `CXMLDOC_Save':
> XMLTree.c:76: warning: unused variable `_p'
> XMLTree.c: In function `XML_Unparent_Children':
> XMLTree.c:317: warning: int format, pointer arg (arg 2)
> XMLTree.c:318: warning: int format, long int arg (arg 2)
> XMLTree.c:324: warning: int format, pointer arg (arg 2)
> XMLTree.c:325: warning: passing arg 1 of pointer to function from
> incompatible pointer type
>
> do the 'make install'
> Start gambas and found xml. :) The expath still there, leftover i asume.
>
> My main question is de declaration for the GB_COMPONENT.
> How should it be really?
> special the   [$C_LIB -lexpatc]) line
>
> For the makefile.am the line with
> lib_gb_xml_la_LIBADD = @XML_INC@ ** <-- example instuction say this
> because the line for expat is still empty.
> lib_gb_expat_la_LIBADD =
> and works(ed)
>
> The simple test for the xml made by Daniel:
>
> ' Gambas class file
> 'STATIC PUBLIC xmld AS XMLDoc
> PUBLIC xmln AS XMLNode
>
> PUBLIC SUB btnOK_Click()
>  textbox1.Text="./channels.xml"
>  'textbox1.Text="./test.xml"
>  'xmld = NEW XMLDoc '(textbox1.Text) 'static error :)
>  'xmln = NEW XMLNode
>  xmln=xmldoc.Load(textbox1.text)
>  PRINT "name="; xmln.Name 'ok is kwintv
>  PRINT "children="; xmln.HasChildren 'ok
>  'PRINT "count="; childcount(xmln)
>  PRINT "parent="; xmln.HasParent
> '? says true but at start I should at root and can't have parents ??
>
>  ' ME.Close(TRUE)
> END
>
>
> channels.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <kwintv version="1" >
>  <tvregion>
>   <info>
>
> I feel good with it, the basic start is there.

-- 
Benoit Minisini
mailto:gambas at ...1...




More information about the Devel mailing list