diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/dofile.pl | 9 | ||||
-rw-r--r-- | util/perl/OpenSSL/fallback.pm | 112 | ||||
-rw-r--r-- | util/perl/with_fallback.pm | 27 |
3 files changed, 116 insertions, 32 deletions
diff --git a/util/dofile.pl b/util/dofile.pl index 10a1ad8cf0..8cf66cd742 100644 --- a/util/dofile.pl +++ b/util/dofile.pl @@ -14,8 +14,9 @@ use strict; use warnings; -use FindBin; use Getopt::Std; +use FindBin; +use lib "$FindBin::Bin/perl"; # We actually expect to get the following hash tables from configdata: # @@ -37,10 +38,8 @@ package OpenSSL::Template; # Because we know that Text::Template isn't a core Perl module, we use # a fallback in case it's not installed on the system -use File::Basename; -use File::Spec::Functions; -use lib "$FindBin::Bin/perl"; -use with_fallback "Text::Template 1.46"; +use OpenSSL::fallback "$FindBin::Bin/../external/perl/MODULES.txt"; +use Text::Template 1.46; #use parent qw/Text::Template/; use vars qw/@ISA/; diff --git a/util/perl/OpenSSL/fallback.pm b/util/perl/OpenSSL/fallback.pm new file mode 100644 index 0000000000..8f45971bd9 --- /dev/null +++ b/util/perl/OpenSSL/fallback.pm @@ -0,0 +1,112 @@ +# Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +=head1 NAME + +OpenSSL::fallback - push directories to the end of @INC at compile time + +=cut + +package OpenSSL::fallback; + +use strict; +use warnings; +use Carp; + +our $VERSION = '0.01'; + +=head1 SYNOPSIS + + use OpenSSL::fallback LIST; + +=head1 DESCRIPTION + +This small simple module simplifies the addition of fallback directories +in @INC at compile time. + +It is used to add extra directories at the end of perl's search path so +that later "use" or "require" statements will find modules which are not +located on perl's default search path. + +This is similar to L<lib>, except the paths are I<appended> to @INC rather +than prepended, thus allowing the use of a newer module on perl's default +search path if there is one. + +=head1 CAVEAT + +Just like with B<lib>, this only works with Unix filepaths. +Just like with L<lib>, this doesn't mean that it only works on Unix, but that +non-Unix users must first translate their file paths to Unix conventions. + + # VMS users wanting to put [.my.stuff] into their @INC should write: + use fallback 'my/stuff'; + +=head1 NOTES + +If you try to add a file to @INC as follows, you will be warned, and the file +will be ignored: + + use fallback 'file.txt'; + +The sole exception is the file F<MODULES.txt>, which must contain a list of +sub-directories relative to the location of that F<MODULES.txt> file. +All these sub-directories will be appended to @INC. + +=cut + +# Forward declare +sub glob; + +use constant DEBUG => 0; + +sub import { + shift; # Skip module name + + foreach (@_) { + my $path = $_; + + if ($path eq '') { + carp "Empty compile time value given to use fallback"; + next; + } + + print STDERR "DEBUG: $path\n" if DEBUG; + + unless (-e $path + && ($path =~ m/(?:^|\/)MODULES.txt/ || -d $path)) { + croak "Parameter to use fallback must be a directory, not a file"; + next; + } + + my @dirs = (); + if (-f $path) { # It's a MODULES.txt file + (my $dir = $path) =~ s|/[^/]*$||; # quick dirname + open my $fh, $path or die "Could not open $path: $!\n"; + while (my $l = <$fh>) { + $l =~ s|\R$||; # Better chomp + my $d = "$dir/$l"; + croak "All lines in $path must be a directory, not a file: $l" + unless -e $d && -d $d; + push @INC, $d; + } + } else { # It's a directory + push @INC, $path; + } + } +} + +=head1 SEE ALSO + +L<FindBin> - optional module which deals with paths relative to the source +file. + +=head1 AUTHOR + +Richard Levitte, 2019 + +=cut + diff --git a/util/perl/with_fallback.pm b/util/perl/with_fallback.pm deleted file mode 100644 index 481295fac9..0000000000 --- a/util/perl/with_fallback.pm +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. -# -# Licensed under the Apache License 2.0 (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html - -package with_fallback; - -sub import { - shift; - - use File::Basename; - use File::Spec::Functions; - foreach (@_) { - eval "use $_"; - if ($@) { - unshift @INC, catdir(dirname(__FILE__), - "..", "..", "external", "perl"); - my $transfer = "transfer::$_"; - eval "use $transfer"; - shift @INC; - warn $@ if $@; - } - } -} -1; |