I have not tested this or anything on 5.8.7, I am in the process of
moving my changes over to 5.8.7.
In this case it is a simple change, in when VMS is in UNIX mode, it
needs to get the tempfile name returned to it in UNIX mode.
-John
[EMAIL PROTECTED]
Personal Opinion Only
--- lib/h2xs.t_5_8_4 Thu Apr 21 17:32:20 2005
+++ lib/h2xs.t Tue May 3 12:22:14 2005
@@ -32,6 +32,55 @@
my $extracted_program = '../utils/h2xs'; # unix, nt, ...
if ($^O eq 'VMS') { $extracted_program = '[-.utils]h2xs.com'; }
+
+# VMS can pretend it is UNIX.
+
+my $IsVMS = $^O eq 'VMS';
+my $posix_compliant;
+my $unix_report;
+my $unix_only;
+my $case_preserved = 1;
+my $vms_drop_dot;
+my $vms_format = 0;
+if ($IsVMS) {
+ $vms_format = 1;
+ $posix_compliant = $ENV{'DECC$POSIX_COMPLIANT_PATHNAMES'};
+ if (defined $posix_compliant) {
+ if (($posix_compliant lt '1') && ($posix_compliant ne 'ENABLE')) {
+ $posix_compliant = undef;
+ }
+ }
+ $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'};
+ if (defined $unix_report) {
+ if (($unix_report lt '1') && ($unix_report ne 'ENABLE')) {
+ $unix_report = undef;
+ }
+ }
+ $unix_only = $ENV{'DECC$FILENAME_UNIX_ONLY'};
+ if (defined $unix_only) {
+ if (($unix_only lt '1') && ($unix_only ne 'ENABLE')) {
+ $unix_only = undef;
+ }
+ }
+ $unix_report = 1 if (defined $unix_only);
+
+ $case_preserved = $ENV{'DECC$EFS_CASE_PRESERVE'};
+ if (defined $case_preserved) {
+ if (($case_preserved lt '1') && ($case_preserved ne 'ENABLE')) {
+ $case_preserved = undef;
+ }
+ }
+ $vms_drop_dot = $ENV{'DECC$READDIR_DROPDOTNOTYPE'};
+ if (defined $vms_drop_dot) {
+ if (($vms_drop_dot lt '1') && ($vms_drop_dot ne 'ENABLE')) {
+ $vms_drop_dot = undef;
+ }
+ }
+ if ((defined $unix_report) && (defined $vms_drop_dot)) {
+ $vms_format = 0
+ }
+}
+
if ($^O eq 'MacOS') { $extracted_program = '::utils:h2xs'; }
if (!(-e $extracted_program)) {
print "1..0 # Skip: $extracted_program was not built\n";
@@ -183,7 +231,9 @@
$_ =~ s/$name:t:1.t/$name:t\/1.t/; # is this an h2xs bug?
}
if ($^O eq 'VMS') {
- $_ .= '.' unless $_ =~ m/\./;
+ if (!(defined $vms_drop_dot)) {
+ $_ .= '.' unless ($_ =~ m/\./);
+ }
$_ = lc($_) unless exists $got{$_};
}
ok (-e $_, "check for $_") and delete $got{$_};
--- lib/Cwd.pm_5_8_7 Wed Jul 13 11:46:01 2005
+++ lib/Cwd.pm Wed Jul 13 11:57:30 2005
@@ -168,6 +168,7 @@
use strict;
use Exporter;
+use Config;
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
$VERSION = '3.05';
@@ -445,10 +446,34 @@
}
return 0 unless CORE::chdir $newdir;
-
if ($^O eq 'VMS') {
+ my $unix_report;
+ my $unix_only = $ENV{'DECC$FILENAME_UNIX_ONLY'};
+ if (defined $unix_only) {
+ if (($unix_only ne '1') && ($unix_only ne 'ENABLE')) {
+ $unix_only = undef;
+ }
+ }
+ if (defined $unix_only) {
+ $unix_report = 1;
+ } else {
+ $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'};
+ if (defined $unix_report) {
+ if (($unix_report ne '1') && ($unix_report ne 'ENABLE')) {
+ $unix_report = undef;
+ }
+ }
+ }
+
+
+ if (defined $unix_report) {
+ my $tmpcwd = _vms_abs_path(".");
+ $tmpcwd =~ s|\/\Z(?!\n)||;
+ return $ENV{'PWD'} = $tmpcwd;
+ } else {
return $ENV{'PWD'} = $ENV{'DEFAULT'}
}
+ }
elsif ($^O eq 'MacOS') {
return $ENV{'PWD'} = cwd();
}
@@ -488,7 +513,6 @@
unless (-d _) {
# Make sure we can be invoked on plain files, not just directories.
# NOTE that this routine assumes that '/' is the only directory
separator.
-
my ($dir, $file) = $start =~ m{^(.*)/(.+)$}
or return cwd() . '/' . $start;
@@ -539,7 +565,7 @@
closedir(PARENT);
return '';
}
- $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
+ $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"));
}
while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
$tst[1] != $pst[1]);
@@ -617,10 +643,131 @@
# the CRTL chdir() function persist only until Perl exits.
sub _vms_cwd {
- return $ENV{'DEFAULT'};
+ my $posix_compliant = $ENV{'DECC$POSIX_COMPLIANT_PATHNAMES'};
+ if (defined $posix_compliant) {
+ if (($posix_compliant lt '1') && ($posix_compliant ne 'ENABLE')) {
+ $posix_compliant = undef;
+ }
+ }
+
+ my $unix_report;
+ my $unix_only = $ENV{'DECC$FILENAME_UNIX_ONLY'};
+ if (defined $unix_only) {
+ if (($unix_only ne '1') && ($unix_only ne 'ENABLE')) {
+ $unix_only = undef;
+ }
+ }
+
+ if (defined $unix_only) {
+ $unix_report = 1;
+ } else {
+ $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'};
+ if (defined $unix_report) {
+ if (($unix_report ne '1') && ($unix_report ne 'ENABLE')) {
+ $unix_report = undef;
+ }
+ }
+ }
+
+# cwd is stored in $ENV{'DEFAULT'}, which could be tainted.
+# PCP mode abs_path is never tainted, so can not use it if cwd is tainted.
+# Or taint.t will fail.
+
+ my $default = $ENV{'DEFAULT'};
+
+ if ((defined $unix_only) || (defined $posix_compliant)) {
+ my $default_untaint = $default =~ /^(.*)\z/s;
+ my $cwd_tainted = ($default ne $default_untaint);
+ if ($cwd_tainted) {
+ $default = VMS::Filespec::unixify($default);
+ }
+ else {
+ $default = _vms_abs_path(".");
+ }
+ } else {
+ $default = VMS::Filespec::unixify($default) if (defined $unix_report);
+ }
+ return $default;
}
+
sub _vms_abs_path {
+
+ my $slow_realpath = $ENV{'DECC_DISABLE_CRTL_REALPATH'};
+ if (defined $slow_realpath) {
+ if (($slow_realpath ne '1') && ($slow_realpath ne 'ENABLE')) {
+ $slow_realpath = undef;
+ }
+ }
+
+ my $posix_compliant = $ENV{'DECC$POSIX_COMPLIANT_PATHNAMES'};
+ if (defined $posix_compliant) {
+ if (($posix_compliant lt '1') && ($posix_compliant ne 'ENABLE')) {
+ $posix_compliant = undef;
+ }
+ }
+
+ if ($Config{d_symlink} and (defined $posix_compliant)) {
+#
+# With symbolic links implemented, the UNIX perl code needs to be
+# used to get the correct result.
+
+ my $unix_report;
+ my $unix_only = $ENV{'DECC$FILENAME_UNIX_ONLY'};
+ if (defined $unix_only) {
+ if (($unix_only ne '1') && ($unix_only ne 'ENABLE')) {
+ $unix_only = undef;
+ }
+ }
+
+ if (defined $unix_only) {
+ $unix_report = 1;
+ } else {
+ $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'};
+ if (defined $unix_report) {
+ if (($unix_report ne '1') && ($unix_report ne 'ENABLE')) {
+ $unix_report = undef;
+ }
+ }
+ }
+
+ my $path;
+
+ if (@_) {
+ $path = $_[0];
+ }
+ else {
+#
+# Must use $ENV{'DEFAULT'} instead of '.' to preserve any
+# tainting that may be in effect.
+ $path = $ENV{'DEFAULT'};
+ }
+
+ if (!defined $unix_only) {
+ $path = VMS::Filespec::unixify($path);
+ if (defined $slow_realpath) {
+ $path = _perl_abs_path($path);
+ }
+ else {
+ $path = VMS::Filespec::vms_realpath($path);
+ }
+ } else {
+ if (defined $slow_realpath) {
+ $path = _perl_abs_path($path);
+ }
+ else {
+ $path = VMS::Filespec::vms_realpath($path);
+ }
+ }
+
+ if (defined $unix_report) {
+ return $path
+ } else {
+ return VMS::Filespec::vmsify($path);
+ }
+
+ } else {
+
return $ENV{'DEFAULT'} unless @_;
# may need to turn foo.dir into [.foo]
@@ -628,6 +775,7 @@
$path = $_[0] unless defined $path;
return VMS::Filespec::rmsexpand($path);
+ }
}
sub _os2_cwd {