[freetds] Notes on buiding for VMS from CVS sources
rbanks at arel.com.au
Mon May 16 01:55:55 EDT 2005
I don't know if anyone has built the system on VMS lately, so I just
thought I'd post a few notes about my experience building for VMS using
the latest code from the CVS tree (16-May-05).
I'm building for TDS 8.0, MSSQL, without ODBC support.
cc/version = Compaq C V6.5-001 on OpenVMS Alpha V7.2-1
ucx show version = DIGITAL TCP/IP Services for OpenVMS Alpha Version
V5.0A - ECO 3
1. The @[.VMS]CONFIGURE.COM file requires the presence of the
CONFIGURE. file (built from autoconf and included in the nightly
snapshot). As far as I can tell it's only needed to get the version
information. VMS doesn't have autoconf (that I know of) so I can't
generate it locally.
1a. Related to a lack of autoconf - CVS has a number of files in the
attic that are in the nightly snapshot that are generated by autoconf.
Some of the attic'ed files are required for the build to work. These
I had to get all of these from the snapshot.
2. In src/dblib/dblib.c the dbdatecrack function references the Sybase
date fields. I just commented out the MSDBLIB compiler directive in
sybdb.h and it compiled OK.
Dblib unittest T0012 fails to compile as a result, but a similar change
there works OK.
3. ctlib/ct.c uses snprintf() which generates a compiler message about
an implicit function declaration. This relates to my version of vms
(7.2-1) not having that function so I grabbed the source from
http://www.ijs.si/software/snprintf/ and built using that, then put the
.obj file into the libct.olb library.
4. include/replacements.h has a path reference to reaspassphrase.h.
The compiler couldn't find the file so I changed the code as follows:
# include <./src/replacements/readpassphrase.h>
# include <../src/replacements/readpassphrase.h>
5. src/dblib/buffering.h has a function static void
*buffer_row_address(). The return statement generates a compiler
warning for doing calculations on a void pointer. I changed the return
return (void *)((long*)buf->rows + offset);
6. net.c complained failed to find a declaration for TCP_NODELAY (since
UCX uses UCX$...). I just hardcoded a couple of values to get it working.
#elif defined(TCP_NODELAY) && defined(SOL_TCP)
#define USE_NODELAY 1
#define TCP_NODELAY 1
#define USE_NODELAY 1
7. When running the unittests:
dblib tests t0003, t0007 & t0008 crash ("somebody overwrote one of
the breadcrumbs" then an exception).
I haven't looked into why these are failing.
I hope someone finds this useful :-)
More information about the FreeTDS