mirror of
https://github.com/GNOME/libxml2.git
synced 2025-02-23 18:29:14 +08:00
195 lines
6.8 KiB
Plaintext
195 lines
6.8 KiB
Plaintext
Issues in porting libxml to VMS
|
|
===============================
|
|
|
|
Here's a summary of the issues I encountered when building LIBXML under
|
|
VMS. There was some VMS support in the version I got, but it was a little
|
|
out of date with the result that some newer files had problems.
|
|
|
|
I present this list "as is" to hopefully act as a guide to anyone having
|
|
problems in the future.
|
|
|
|
That's it. Good luck!
|
|
|
|
John A Fotheringham (jaf@jafsoft.com)
|
|
October 2001
|
|
|
|
|
|
Installation kit
|
|
----------------
|
|
|
|
- File attributes. Having downloaded essentially a Unix distribution, some
|
|
of the file attributes weren't correct... especially those in the [.VMS]
|
|
subdirectory. In EDT you could see line feeds and carriage returns as
|
|
<LF><CR> etc. To correct this use the command
|
|
|
|
$ set file <filespec> /attr=rfm=stm
|
|
|
|
This sets the record format to be "stream". Other variants may be used
|
|
instead depending on how you got the files onto your system. Files will
|
|
look okay in an EDT editor once the attributes are set. Without
|
|
this the command file may not run correctly, since it may be interpreted
|
|
as a single line.
|
|
|
|
- VMS-specific files are in a [.VMS] directory. If you've found this file
|
|
then you already know this :-) This directory contains
|
|
|
|
BUILD_LIBXML.COM - a build command file, which I've radically re-worked
|
|
CONFIG.VMS - a configuration file to replace config.h
|
|
|
|
- Don't execute BUILD_LIBXML.COM until you've done all the following
|
|
|
|
- read these notes
|
|
- copied CONFIG.VMS to CONFIG.H
|
|
- reviewed the configuration section of BUILD_LIBXML.COM, and in particular
|
|
updated the module lists in line with MAKEFILE
|
|
- edited XMLVERSION.H so that WITH_TRIO is defined
|
|
- identified the location of the include files, so that you can manually
|
|
set the LIBXML logical if need be.
|
|
- re-read these notes :-p
|
|
|
|
instructions for all these steps are below.
|
|
|
|
- the file [.vms]config.vms should be used to replace config.h. This file
|
|
contains a number of define statements that identify the software options
|
|
required under VMS
|
|
|
|
- The include files are in a [.INCLUDE.LIBXML] subdirectory. You need
|
|
a logical "libxml" to point to this so that include statements of the
|
|
form
|
|
|
|
#include <libxml/parser.h>
|
|
|
|
will work correctly. The source files are mostly two levels above this
|
|
directory, although there are some .h files there as well.
|
|
|
|
- The command file BUILD_LIBXML.COM will do the following
|
|
|
|
- setup some logicals
|
|
- set def to the source directory
|
|
- compile modules and place them into a LIBXML.OLB library
|
|
- compile and link a number of self-test programs
|
|
- compile and link a number of utilities and test programs
|
|
- set def back to the original directory (i.e. if it fails you might not be
|
|
where you started :-)
|
|
|
|
before running this command file review the configuration segment at
|
|
the top. In particular compare the lists of modules with those in the
|
|
most recent version of the Unix MAKEFILE. Instructions are contained
|
|
in the command file itself.
|
|
|
|
The command file will attempt to set two logicals
|
|
|
|
- xml_srcdir. The directory containing the source files
|
|
- libxml. The include file directory.
|
|
|
|
It attempts this by looking for modules globals.c and globals.h in
|
|
nearby directories. If this logic fails, you'll need to manually define
|
|
these logicals.
|
|
|
|
|
|
The TRIO package
|
|
----------------
|
|
- A sub-package TRIO is used to provide some functions not naturally available
|
|
under VMS. These include support for infinite and undefined numbers,
|
|
and specialised print functions like "snprintf"
|
|
|
|
I had to make several changes to trionan.c in discussion with the author
|
|
(hopefully these are now included in the distro, so I won't list them here)
|
|
|
|
To build this software we need to add
|
|
|
|
/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
|
|
|
|
to the compile command for xpath.c and trio.c, and to any main program
|
|
that uses this functionality. BUILD_LIBXML.COM should do this for you.
|
|
|
|
- to build in trio support you need the define WITH_TRIO to be set. This
|
|
is done by editing xmlversion.h
|
|
|
|
|
|
Compiler and linker errors
|
|
--------------------------
|
|
- the DEC C compiler will produce a number of warnings when compiling the
|
|
C code. These include
|
|
|
|
- Implicit function warnings. These indicate functions whose type is
|
|
not defined in a .h file. This will probably only happen if your
|
|
configuration is not correct (e.g. for "snprintf" if you haven't
|
|
edited xmlversion.h to set WITH_TRIO
|
|
|
|
These messages also occur for "read" and "write" when compiling trio.c
|
|
|
|
- uninitialised variables. Not usually a problem. You can solve this
|
|
by editing the code to initialise the variables affected
|
|
|
|
and with respect to the trionan code
|
|
|
|
- no main module for UNDERFLOW_TO_ZERO
|
|
- float overflow when compiling trionan.c STANDALONE
|
|
|
|
You can suppress these "expected" messages by using the compile command
|
|
|
|
$ CC /WARN=DISABLE=(FLOATOVERFL,NOMAINUFLO)
|
|
|
|
This can be achieved by specifying "NOWARN" as the first command
|
|
parameter to BUILD_LIBXML as follows
|
|
|
|
$ @BUILD_LIBXML NOWARN
|
|
|
|
- the Linker will report the following error
|
|
|
|
%LINK-W-MULDEF, symbol DECC$STRERROR multiply defined
|
|
in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;5
|
|
|
|
This is complaining that DECC$STRERROR is multiply defined, which in turn
|
|
is because this system symbol is getting added to LIBXML.OLB when strio.c
|
|
is compiled.
|
|
|
|
I'm not sure what the solution for this is, but this is a fairly benign error.
|
|
|
|
|
|
Changes made to the codebase
|
|
----------------------------
|
|
- I changed all dummy declarations in trio.c to be
|
|
|
|
va_list dummy = NULL;
|
|
|
|
to prevent compiler whinge in TRIO.C about uninitialised variables
|
|
|
|
- I had to add the following to nanoftp.c
|
|
|
|
#if defined(VMS) || defined(__VMS)
|
|
#define SOCKLEN_T unsigned int
|
|
#endif
|
|
|
|
This matches similar lines already added to nanohttp.c
|
|
|
|
- Several variables and function names exceed the 31 character limit
|
|
used in VMS. This leads to compiler warnings. The solution adopted
|
|
has been
|
|
|
|
a) where variables or functions are defined, set up an ifdef on VMS
|
|
to define a variable/function of a shorter name. This may need to
|
|
be done in the .h file, and in the implementation .c file
|
|
|
|
b) use define statements to map the long name onto a shorter name. That
|
|
way all future code can refer to the function/variable by the long name,
|
|
reducing the need to add VMS-specific code everywhere.
|
|
|
|
In the current distro, I had to do this for the following names
|
|
|
|
in globals.c, parserinternals.c, globals.h, parser.h
|
|
xmlSubstituteEntitiesDefaultValue
|
|
xmlDoValidityCheckingDefaultValue
|
|
|
|
in globals.c, globals.h
|
|
__xmlDoValidityCheckingDefaultValue
|
|
|
|
in xmlio.c, xmlio.h
|
|
xmlRegisterDefaultInputCallbacks
|
|
xmlRegisterDefaultOutputCallbacks
|
|
|
|
in xpath.c and xpathinternals.h
|
|
xmlXPathRegisteredVariablesCleanup
|
|
|