[xml] Building libxml2 with the Borland/CodeGear/Embarcadero toolset
- From: <Eric Zurcher csiro au>
- To: <xml gnome org>
- Subject: [xml] Building libxml2 with the Borland/CodeGear/Embarcadero toolset
- Date: Thu, 26 Feb 2009 16:15:32 +1100
Hello Daniel et al.
It has been a while since I've tried compiling libxml2 with the "Borland" (the compilers are now in the hands
of Embarcadero) C compiler, but I've recently had reason to do so, and have a few very minor patches that I'd
like to apply. I've been using the compiler and toolset distributed with Rad Studio 2007 and later patches:
CodeGear C/C++ compiler 5.93, incremental linker 5.81, library manager 5.1.
The first problem is nearly identical with one I reported on this forum just over 3 years ago. It's not a
problem with libxml2, but rather with one of the CodeGear header files: WSPiApi.h (in fairness to
Embarcadero, the header file comes from Microsoft, so it's really a Microsoft bug). The "inlining" directive
in the declaration of the function WspiapiStrdup is incorrect: it is given as "_inline", but ought to be
"__inline". My suggested patch is a minor change in wsockcompat.h
******************************************************************
Index: wsockcompat.h
===================================================================
--- wsockcompat.h (revision 3815)
+++ wsockcompat.h (working copy)
@@ -15,6 +15,7 @@
header when compiled with Borland C++ 6 */
#if defined(__BORLANDC__) && !defined(__cplusplus)
#define inline __inline
+#define _inline __inline
#endif
#include <ws2tcpip.h>
******************************************************************
A second problem are 2 minor changes needed in the template Makefile for BCB. The first adds a directory to
the LIB search path; the second adds a library.
******************************************************************
Index: Makefile.bcb
===================================================================
--- Makefile.bcb (revision 3815)
+++ Makefile.bcb (working copy)
@@ -72,7 +72,7 @@
# The linker and its options.
LD = ilink32.exe
LDFLAGS = -q -U$(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION)
-LDFLAGS = $(LDFLAGS) -L"$(BINDIR);$(LIBPREFIX);$(LIB);$(BCB)\lib\PSdk"
+LDFLAGS = $(LDFLAGS) -L"$(BINDIR);$(LIBPREFIX);$(LIB);$(BCB)\lib;$(BCB)\lib\PSdk"
LIBS = import32.lib
!if "$(WITH_THREADS)" != "no" && "$(DYNRUNTIME)" == "1"
LIBS = $(LIBS) cw32mti.lib
@@ -84,7 +84,7 @@
LIBS = $(LIBS) cw32.lib
!endif
!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
-LIBS = $(LIBS) wsock32.lib
+LIBS = $(LIBS) wsock32.lib ws2_32.lib
!endif
!if "$(WITH_ICONV)" == "1"
LIBS = $(LIBS) iconvomf.lib
******************************************************************
Finally, running the test suite revealed a problem in xpath.c. Within the function xmlXPathSubstringFunction,
there is a test for whether both arguments are infinity, which (as indicated by the comments near the test)
relies on Inf + -Inf yielding NaN. However, by default the CodeGear run-time initializes the floating-point
control word to enable "floating point invalid" exceptions, so attempting the Inf + -Inf operation raises an
exception, rather than quietly generating NaN as a result. This problem can be eliminated by reversing the
order of evaluation, as in the patch below.
******************************************************************
Index: xpath.c
===================================================================
--- xpath.c (revision 3815)
+++ xpath.c (working copy)
@@ -9020,7 +9020,7 @@
* the index is NaN, the length is NaN, or both
* arguments are infinity (relying on Inf + -Inf = NaN)
*/
- if (!xmlXPathIsNaN(in + le) && !xmlXPathIsInf(in)) {
+ if (!xmlXPathIsInf(in) && !xmlXPathIsNaN(in + le)) {
/*
* To meet the requirements of the spec, the arguments
* must be converted to integer format before
******************************************************************
Can these patches be applied?
Thanks,
Eric Zurcher
CSIRO Plant Industry
Canberra, Australia
Eric Zurcher csiro au
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]