summaryrefslogtreecommitdiffstats
path: root/configdata.pm.in
diff options
context:
space:
mode:
Diffstat (limited to 'configdata.pm.in')
-rw-r--r--configdata.pm.in34
1 files changed, 29 insertions, 5 deletions
diff --git a/configdata.pm.in b/configdata.pm.in
index 6c0d30baa0..57ad440fa4 100644
--- a/configdata.pm.in
+++ b/configdata.pm.in
@@ -4,15 +4,39 @@
# We must make sourcedir() return an absolute path, because configdata.pm
# may be loaded as a module from any script in any directory, making
# relative paths untrustable. Because the result is used with 'use lib',
- # we must ensure that it returns a Unix style path. Cwd::abs_path does
- # that (File::Spec::Functions::rel2abs return O/S specific paths)
- use File::Spec::Functions;
+ # we must ensure that it returns a Unix style path. Mixing File::Spec
+ # and File::Spec::Unix does just that.
+ use File::Spec::Unix;
+ use File::Spec;
use Cwd qw(abs_path);
+ sub _fixup_path {
+ my $path = shift;
+
+ # Make the path absolute at all times
+ $path = abs_path($path);
+
+ if ($^O eq 'VMS') {
+ # Convert any path of the VMS form VOLUME:[DIR1.DIR2]FILE to the
+ # Unix form /VOLUME/DIR1/DIR2/FILE, which is what VMS perl supports
+ # for 'use lib'.
+
+ # Start with spliting the native path
+ (my $vol, my $dirs, my $file) = File::Spec->splitpath($path);
+ my @dirs = File::Spec->splitdir($dirs);
+
+ # Reassemble it as a Unix path
+ $vol =~ s|:$||;
+ $dirs = File::Spec::Unix->catdir('', $vol, @dirs);
+ $path = File::Spec::Unix->catpath('', $dirs, $file);
+ }
+
+ return $path;
+ }
sub sourcedir {
- return abs_path(catdir($config{sourcedir}, @_));
+ return _fixup_path(File::Spec->catdir($config{sourcedir}, @_))
}
sub sourcefile {
- return abs_path(catfile($config{sourcedir}, @_));
+ return _fixup_path(File::Spec->catfile($config{sourcedir}, @_))
}
use lib sourcedir('util', 'perl');
use OpenSSL::Util;