1 | Issues in porting libxml to VMS
|
---|
2 | ===============================
|
---|
3 |
|
---|
4 | Here's a summary of the issues I encountered when building LIBXML under
|
---|
5 | VMS. There was some VMS support in the version I got, but it was a little
|
---|
6 | out of date with the result that some newer files had problems.
|
---|
7 |
|
---|
8 | I present this list "as is" to hopefully act as a guide to anyone having
|
---|
9 | problems in the future.
|
---|
10 |
|
---|
11 | That's it. Good luck!
|
---|
12 |
|
---|
13 | John A Fotheringham ([email protected])
|
---|
14 | October 2001
|
---|
15 |
|
---|
16 | Updated October 2002 by Craig A Berry ([email protected])
|
---|
17 |
|
---|
18 | Installation kit
|
---|
19 | ----------------
|
---|
20 |
|
---|
21 | - File attributes. Having downloaded essentially a Unix distribution, some
|
---|
22 | of the file attributes weren't correct... especially those in the [.VMS]
|
---|
23 | subdirectory. In EDT you could see line feeds and carriage returns as
|
---|
24 | <LF><CR> etc. To correct this use the command
|
---|
25 |
|
---|
26 | $ set file <filespec> /attr=rfm=stm
|
---|
27 |
|
---|
28 | This sets the record format to be "stream". Other variants may be used
|
---|
29 | instead depending on how you got the files onto your system. Files will
|
---|
30 | look okay in an EDT editor once the attributes are set. Without
|
---|
31 | this the command file may not run correctly, since it may be interpreted
|
---|
32 | as a single line.
|
---|
33 |
|
---|
34 | - VMS-specific files are in a [.VMS] directory. If you've found this file
|
---|
35 | then you already know this :-) This directory contains
|
---|
36 |
|
---|
37 | BUILD_LIBXML.COM - a build command file, which I've radically re-worked
|
---|
38 | CONFIG.VMS - a configuration file to replace config.h
|
---|
39 |
|
---|
40 | - Don't execute BUILD_LIBXML.COM until you've done all the following
|
---|
41 |
|
---|
42 | - read these notes
|
---|
43 | - reviewed the configuration section of BUILD_LIBXML.COM, and in particular
|
---|
44 | updated the module lists in line with MAKEFILE
|
---|
45 | - identified the location of the include files, so that you can manually
|
---|
46 | set the LIBXML logical if need be.
|
---|
47 | - re-read these notes :-p
|
---|
48 |
|
---|
49 | instructions for all these steps are below.
|
---|
50 |
|
---|
51 | - the file [.vms]config.vms is used in lieu of a Configure-generated config.h.
|
---|
52 | This file contains a number of define statements that identify the software
|
---|
53 | options required under VMS
|
---|
54 |
|
---|
55 | - The include files are in a [.INCLUDE.LIBXML] subdirectory. You need
|
---|
56 | a logical "libxml" to point to this so that include statements of the
|
---|
57 | form
|
---|
58 |
|
---|
59 | #include <libxml/parser.h>
|
---|
60 |
|
---|
61 | will work correctly. The source files are mostly two levels above this
|
---|
62 | directory, although there are some .h files there as well.
|
---|
63 |
|
---|
64 | - The command file BUILD_LIBXML.COM will do the following
|
---|
65 |
|
---|
66 | - setup some logicals
|
---|
67 | - set def to the source directory
|
---|
68 | - compile modules and place them into a LIBXML.OLB library
|
---|
69 | - compile and link a number of self-test programs
|
---|
70 | - compile and link a number of utilities and test programs
|
---|
71 | - set def back to the original directory (i.e. if it fails you might not be
|
---|
72 | where you started :-)
|
---|
73 |
|
---|
74 | before running this command file review the configuration segment at
|
---|
75 | the top. In particular compare the lists of modules with those in the
|
---|
76 | most recent version of the Unix MAKEFILE. Instructions are contained
|
---|
77 | in the command file itself.
|
---|
78 |
|
---|
79 | The command file will attempt to set two logicals
|
---|
80 |
|
---|
81 | - xml_srcdir. The directory containing the source files
|
---|
82 | - libxml. The include file directory.
|
---|
83 |
|
---|
84 | It attempts this by looking for modules globals.c and globals.h in
|
---|
85 | nearby directories. If this logic fails, you'll need to manually define
|
---|
86 | these logicals.
|
---|
87 |
|
---|
88 |
|
---|
89 | The TRIO package
|
---|
90 | ----------------
|
---|
91 | - A sub-package TRIO is used to provide some functions not naturally available
|
---|
92 | under VMS. These include support for infinite and undefined numbers,
|
---|
93 | and specialised print functions like "snprintf"
|
---|
94 |
|
---|
95 | I had to make several changes to trionan.c in discussion with the author
|
---|
96 | (hopefully these are now included in the distro, so I won't list them here)
|
---|
97 |
|
---|
98 | To build this software we need to add
|
---|
99 |
|
---|
100 | /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
|
---|
101 |
|
---|
102 | to the compile command for xpath.c and trio.c, and to any main program
|
---|
103 | that uses this functionality. BUILD_LIBXML.COM should do this for you.
|
---|
104 |
|
---|
105 | - to build in trio support you need the define WITH_TRIO to be set. This
|
---|
106 | is done by default for VMS in xmlversion.h
|
---|
107 |
|
---|
108 |
|
---|
109 | Compiler and linker errors
|
---|
110 | --------------------------
|
---|
111 | - the DEC C compiler may produce a number of warnings when compiling the
|
---|
112 | C code. These include
|
---|
113 |
|
---|
114 | - Implicit function warnings. These indicate functions whose type is
|
---|
115 | not defined in a .h file. This will probably only happen if your
|
---|
116 | configuration is not correct (e.g. for "snprintf" if you haven't
|
---|
117 | edited xmlversion.h to set WITH_TRIO
|
---|
118 |
|
---|
119 | - uninitialised variables. Not usually a problem. You can solve this
|
---|
120 | by editing the code to initialise the variables affected
|
---|
121 |
|
---|
122 | Changes made to the codebase
|
---|
123 | ----------------------------
|
---|
124 | - I changed all dummy declarations in trio.c to be
|
---|
125 |
|
---|
126 | va_list dummy = NULL;
|
---|
127 |
|
---|
128 | to prevent compiler whinge in TRIO.C about uninitialised variables
|
---|
129 |
|
---|
130 | - I had to add the following to nanoftp.c
|
---|
131 |
|
---|
132 | #if defined(VMS) || defined(__VMS)
|
---|
133 | #define SOCKLEN_T unsigned int
|
---|
134 | #endif
|
---|
135 |
|
---|
136 | This matches similar lines already added to nanohttp.c
|
---|
137 |
|
---|
138 | - Several variables and function names exceed the 31 character limit
|
---|
139 | of the VMS linker. The solution adopted has been to use the
|
---|
140 | /NAMES=SHORTENED compiler option, which requires DEC/Compaq C 5.7
|
---|
141 | or later. For a complete list of the names that needed shortening
|
---|
142 | and the short names generated by the compiler, see [.vms]config.vms.
|
---|
143 |
|
---|