/ libxml2 / vms / readme.vms
readme.vms
  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 (jaf@jafsoft.com)
 14  October 2001
 15  
 16  Updated October 2002 by Craig A Berry (craigberry@mac.com)
 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