Firstly, a big thank you to everyone on this list (and espcially
Craig) for helping me get this far. What follows is what I needed to
do to get DBD::ODBC working under Perl 5.8.8 on OpenVMS 8.2-1 Itanium
and some observations/problems.
What I have
===========
OpenVMS 8.2-1
HP C V7.1-011 on OpenVMS IA64 V8.2-1
Installed VMS821I-PCSI-V0100 upgrade
Hardware Integrity rx1620 (loaned to us by HP)
mms (version?)
vmstar (built from sources found in sys$common:[GNV.src.GNV.VMSTAR]
ExtUtils::MakeMaker 6.30 (installed after Perl install)
What didn't work and I gave up with
===================================
Perl 5.6.6 binary from HP's web site because a mms clean always failed
with an access violation which I felt was such a bad sign I gave up
with it.
If you think you too have this problem
perl "-MExtUtils::Command" -e "rm_f" foo.[0-9][0-9]
died with an access violation for me.
Building/Installing Perl
========================
Lesson 1: read the docs, then read them again and don't expect to
login to OpenVMS 8 and expect it not to have changed since V5. I
wasted some time fighting ODS5 with GNU tar until vmstar and the
/ODS2 (or o switch) was found. The symptom of this is untarring perl
5.8.8 to get a very stange (for an old VMS hand) looking PERL-5^.8^.8
directory.
Configuration was fine (note I did not enable ithreads)
Building kept failing and I noticed messages saying .EXISTS files are
in the future.
e.g.
%MMS-W-GMFUTURE, Time for [-.BLIB.MAN3].EXISTS is in the future:
6-AUG-2006 12:29:13.00
I am prepared to admit there is something wrong with my setup, CRTL
(whatever) but I don't know what it is. I have double checked
localtime and gmtime functions in CRTL and they appear to return the
correct results. However:
$ perl -"MExtUtils::Command" -e touch foo.tmp
$ dir/full foo.tmp
Directory DKA0:[NICK.MARTIN]
FOO.TMP;1 File ID: (24832,28,0)
Size: 0/0 Owner: [200,1]
Created: 7-AUG-2006 08:40:44.67
Revised: 7-AUG-2006 09:40:44.00 (1)
and I am suspicious of that revision time since it is one hour in the
future.
FYI. When I ran @SYS$MANAGER:UTC$TIME_SETUP SHOW I got:
AUTO_DLIGHT_SAV is set to "0" and DTSS is not in use.
You will have to manually change to/from Daylight Saving Time.
You can do this by executing SYS$MANAGER:UTC$TIME_SETUP.COM,
or you can use SYS$EXAMPLES:DAYLIGHT_SAVING.COM.
LOCAL TIME ZONE = GB -- DAYLIGHT TIME
LOCAL SYSTEM TIME = 6-AUG-2006 11:20:11.58 (BST)
TIME DIFFERENTIAL FACTOR = 1:00
TIME ZONE RULE = GMT0BST-1,M3.4.0/01,M10.5.0/02
Change GMT to BST on the Fourth Sunday of March (26-Mar-2006) at
01:00
Change BST to GMT on the Last Sunday of October (29-Oct-2006) at
02:00
I tried installing VMS821I_UPDATE-V0300.ZIPEXE but that did not fix
the problem.
The only thing that worked for me was the change Craig posted:
--- lib/ExtUtils/Command.pm;-0 Fri Oct 21 03:55:12 2005
+++ lib/ExtUtils/Command.pm Sun Aug 6 13:30:45 2006
@@ -149,12 +149,11 @@ Makes files exist, with current timestam
=cut
sub touch {
- my $t = time;
expand_wildcards();
foreach my $file (@ARGV) {
open(FILE,">>$file") || die "Cannot write $file:$!";
close(FILE);
- utime($t,$t,$file);
+ utime(undef,undef,$file);
}
}
A mms test for perl gave the following errors:
t/io/fs...................................FAILED at test 5
t/op/stat.................................FAILED at test 33
ext/Devel/PPPort/t/ppphtest...............FAILED--unexpected output at test 0
ext/List/Util/t/p_tainted.................FAILED--no leader found
ext/List/Util/t/weak......................FAILED--unexpected output at test 7
lib/ExtUtils/t/basic......................FAILED at test 67
lib/ExtUtils/t/Command....................FAILED at test 8
lib/ExtUtils/t/Constant...................FAILED at test 23
lib/ExtUtils/t/FIRST_MAKEFILE.............FAILED at test 4
lib/ExtUtils/t/PL_FILES...................FAILED at test 3
lib/vmsish................................FAILED at test 22
Failed 13 test scripts out of 892, 98.54% okay.
### Since not all tests were successful, you may want to run some of
### them individually and examine any diagnostic messages they produce.
### See the INSTALL document's section on "make test".
### You have a good chance to get more information by running
### ./perl harness
### in the 't' directory since most (>=80%) of the tests succeeded.
u=40.80 s=0.00 cu=0.00 cs=0.00 scripts=892 tests=114061
and a mms install hung with:
$ mms install
%DCL-I-SUPERSEDE, previous value of PERL_ROOT has been superseded
%DCL-I-SUPERSEDE, previous value of PERLSHR has been superseded
If F$TrnLnm("Sys") .nes. "" Then Deass SYS
MCR Sys$Disk:[]miniperl.exe "-I[.lib]" installperl
Deep recursion on subroutine "File::Path::mkpath" at lib/File/Path.pm line 162.
However, I found the following links:
http://www.nntp.perl.org/group/perl.vmsperl/13873 and the followups in
http://www.nntp.perl.org/group/perl.vmsperl/13873
http://www.nntp.perl.org/group/perl.vmsperl/13883
http://www.nntp.perl.org/group/perl.vmsperl/13884
http://www.nntp.perl.org/group/perl.vmsperl/13885
http://www.nntp.perl.org/group/perl.vmsperl/13891
which got me past this by creating my install dir first (although I
saw the second, better method of removing the \00000).
h2ph is still not working for me. It fails with:
Cannot open perl_root:[lib.site_perl.VMS_IA64]/_h2ph_pre.ph: file
specification syntax error at perl_root:[utils]h2ph.com line 741.
%RMS-F-SYN, file specification syntax error
Building/Installing DBI
=======================
Using vmstar to unpack it and the usual perl makefile.pl, mms, mms test
and mms install worked fine for me although warnings like the following
slightly worried me:
Warning: long symbol DBD__Perl__db_selectall_arrayref
trimmed to DBD_Perl_db_selectal_arayref
Building/Installing DBD::ODBC
=============================
I have not tried this yet with an ODBC driver manager. I linked
DBD::ODBC directly to the driver.
You need to set ODBCHOME, DBI_DSN, DBI_USER and DBI_PASS before
running the configure e.g.
define/log DBI_DSN "dbi:ODBC:test"
Configuration worked fine.
mms to build failed with:
$ mms
MCR dka0:[perl]perl.exe "-MExtUtils::Command" -e cp Changes
[.blib.lib.DBD.ODBC]Changes.pm
@Continue
%DCL-E-OPENIN, error opening DKA0:[NICK.MARTIN.DBD-ODBC-1_13]Continue.COM; as
input
-RMS-E-FNF, file not found
%MMS-F-ABORT, For target CONFIG, CLI returned abort status: %X10018292.
I got around this by creating a continue.com file that was empty.
I've not idea why I need to do this. Is this a bug?
Then the build failed with many PTRMISMATCH1 warnings. I think what has
happened is that this version of decc returns PTRMISMATCH1 instead of
PTRMISMATCH as the cc line contains:
/warnings=informational=(outtypelen,ptrmismatch,promotmatchw)
Changing the ptrmismatch to ptrmismatch1 in the makefile.pl and
rerunning makefile.pl sorts this one out.
As with DBI I got a log of the following warnings:
Warning: long symbol DBD__ODBC__db_selectall_arrayref
trimmed to DBD_ODBC_db_selectal_arayref
but as they match the ones in DBI I thought it would be OK and it
seems to be.
mms test to MS SQL Server though our ODBC-ODBC Bridge appears to
mostly work with one notable exception.
1..37
ok 1 - use ODBCTEST;
ok 2 - use Data::Dumper;
ok 3 - errors on data comparison
ok 4 - temporary table handling
Can't change param 1 maxlen (51->50) after first bind at t/20sqlserver.t line
180.
# Looks like you planned 37 tests but only ran 4.
# Looks like your test died just after 4.
I've come across this before
see http://www.mail-archive.com/[email protected]/msg26946.html
It is not a VMS-specific issue and what seems to be breaking it
is:
svGrow(phs->sv, 50 + 1)
SvLEN(phs->sv) returns 52!
Problem does not exist in perl 5.8.7. This issue was way beyond me back
in March and still is.
Hope this helps anyone else trying to get DBD::ODBC working on
OpenVMS Itanium. If anyone wants to follow up on any of the issues
I had let me know.
Thanks again for all the assistance.
Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com