Consolidate the locations where we have our internal perl modules

Instead of having perl modules under test/testlib, util and util/perl,
consolidate them all to be inside util/perl.

Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4069)
diff --git a/Configure b/Configure
index 61b86c4..ada1472 100755
--- a/Configure
+++ b/Configure
@@ -12,6 +12,8 @@
 use 5.10.0;
 use strict;
 use Config;
+use FindBin;
+use lib "$FindBin::Bin/util/perl";
 use File::Basename;
 use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
 use File::Path qw/mkpath/;
@@ -1384,7 +1386,6 @@
 
 my $buildinfo_debug = defined($ENV{CONFIGURE_DEBUG_BUILDINFO});
 if ($builder eq "unified") {
-    use lib catdir(dirname(__FILE__),"util");
     use with_fallback qw(Text::Template);
 
     sub cleandir {
@@ -1512,8 +1513,10 @@
         my %generate = ();
 
         push @{$config{build_infos}}, catfile(abs2rel($sourced, $blddir), $f);
-        my $template = Text::Template->new(TYPE => 'FILE',
-                                           SOURCE => catfile($sourced, $f));
+        my $template =
+            Text::Template->new(TYPE => 'FILE',
+                                SOURCE => catfile($sourced, $f),
+                                PREPEND => qq{use lib "$FindBin::Bin/util/perl";});
         die "Something went wrong with $sourced/$f: $!\n" unless $template;
         my @text =
             split /^/m,
diff --git a/test/generate_ssl_tests.pl b/test/generate_ssl_tests.pl
index fd785b7..47a328c 100644
--- a/test/generate_ssl_tests.pl
+++ b/test/generate_ssl_tests.pl
@@ -22,7 +22,7 @@
     OpenSSL::Test::setup("no_test_here");
 }
 
-use lib srctop_dir("util");  # for with_fallback
+use lib srctop_dir("util", "perl");  # for with_fallback
 use lib srctop_dir("test", "ssl-tests");  # for ssltests_base
 
 use with_fallback qw(Text::Template);
diff --git a/test/recipes/80-test_ssl_new.t b/test/recipes/80-test_ssl_new.t
index de35190..f86e509 100644
--- a/test/recipes/80-test_ssl_new.t
+++ b/test/recipes/80-test_ssl_new.t
@@ -120,7 +120,7 @@
 
       skip 'failure', 2 unless
         ok(run(perltest(["generate_ssl_tests.pl", $input_file],
-                        interpreter_args => [ "-I", srctop_dir("test", "testlib")],
+                        interpreter_args => [ "-I", srctop_dir("util", "perl")],
                         stdout => $tmp_file)),
            "Getting output from generate_ssl_tests.pl.");
 
diff --git a/test/recipes/tconversion.pl b/test/recipes/tconversion.pl
index 1a308e2..fb0b766 100644
--- a/test/recipes/tconversion.pl
+++ b/test/recipes/tconversion.pl
@@ -12,7 +12,6 @@
 
 use File::Compare qw/compare_text/;
 use File::Copy;
-use lib 'testlib';
 use OpenSSL::Test qw/:DEFAULT/;
 
 my %conversionforms = (
diff --git a/test/run_tests.pl b/test/run_tests.pl
index 1695729..1171eec 100644
--- a/test/run_tests.pl
+++ b/test/run_tests.pl
@@ -25,12 +25,11 @@
 my $srctop = $ENV{SRCTOP} || $ENV{TOP};
 my $bldtop = $ENV{BLDTOP} || $ENV{TOP};
 my $recipesdir = catdir($srctop, "test", "recipes");
-my $testlib = catdir($srctop, "test", "testlib");
-my $utillib = catdir($srctop, "util");
+my $libdir = rel2abs(catdir($srctop, "util", "perl"));
 
 my %tapargs =
     ( verbosity => $ENV{VERBOSE} || $ENV{V} || $ENV{HARNESS_VERBOSE} ? 1 : 0,
-      lib       => [ $testlib, $utillib ],
+      lib       => [ $libdir ],
       switches  => '-w',
       merge     => 1
     );
diff --git a/util/dofile.pl b/util/dofile.pl
index 0d05574..36827e3 100644
--- a/util/dofile.pl
+++ b/util/dofile.pl
@@ -14,6 +14,7 @@
 use strict;
 use warnings;
 
+use FindBin;
 use Getopt::Std;
 
 # We actually expect to get the following hash tables from configdata:
@@ -38,7 +39,7 @@
 # a fallback in case it's not installed on the system
 use File::Basename;
 use File::Spec::Functions;
-use lib catdir(dirname(__FILE__));
+use lib "$FindBin::Bin/perl";
 use with_fallback qw(Text::Template);
 
 #use parent qw/Text::Template/;
@@ -175,7 +176,10 @@
 # Load the full template (combination of files) into Text::Template
 # and fill it up with our data.  Output goes directly to STDOUT
 
-my $template = OpenSSL::Template->new(TYPE => 'STRING', SOURCE => $text );
+my $template =
+    OpenSSL::Template->new(TYPE => 'STRING',
+                           SOURCE => $text,
+                           PREPEND => qq{use lib "$FindBin::Bin/perl";});
 
 sub output_reset_on {
     $template->output_reset_on();
diff --git a/test/testlib/OpenSSL/Test.pm b/util/perl/OpenSSL/Test.pm
similarity index 100%
rename from test/testlib/OpenSSL/Test.pm
rename to util/perl/OpenSSL/Test.pm
diff --git a/test/testlib/OpenSSL/Test/Simple.pm b/util/perl/OpenSSL/Test/Simple.pm
similarity index 100%
rename from test/testlib/OpenSSL/Test/Simple.pm
rename to util/perl/OpenSSL/Test/Simple.pm
diff --git a/test/testlib/OpenSSL/Test/Utils.pm b/util/perl/OpenSSL/Test/Utils.pm
similarity index 100%
rename from test/testlib/OpenSSL/Test/Utils.pm
rename to util/perl/OpenSSL/Test/Utils.pm
diff --git a/util/TLSProxy/Certificate.pm b/util/perl/TLSProxy/Certificate.pm
similarity index 100%
rename from util/TLSProxy/Certificate.pm
rename to util/perl/TLSProxy/Certificate.pm
diff --git a/util/TLSProxy/CertificateVerify.pm b/util/perl/TLSProxy/CertificateVerify.pm
similarity index 100%
rename from util/TLSProxy/CertificateVerify.pm
rename to util/perl/TLSProxy/CertificateVerify.pm
diff --git a/util/TLSProxy/ClientHello.pm b/util/perl/TLSProxy/ClientHello.pm
similarity index 100%
rename from util/TLSProxy/ClientHello.pm
rename to util/perl/TLSProxy/ClientHello.pm
diff --git a/util/TLSProxy/EncryptedExtensions.pm b/util/perl/TLSProxy/EncryptedExtensions.pm
similarity index 100%
rename from util/TLSProxy/EncryptedExtensions.pm
rename to util/perl/TLSProxy/EncryptedExtensions.pm
diff --git a/util/TLSProxy/HelloRetryRequest.pm b/util/perl/TLSProxy/HelloRetryRequest.pm
similarity index 100%
rename from util/TLSProxy/HelloRetryRequest.pm
rename to util/perl/TLSProxy/HelloRetryRequest.pm
diff --git a/util/TLSProxy/Message.pm b/util/perl/TLSProxy/Message.pm
similarity index 100%
rename from util/TLSProxy/Message.pm
rename to util/perl/TLSProxy/Message.pm
diff --git a/util/TLSProxy/NewSessionTicket.pm b/util/perl/TLSProxy/NewSessionTicket.pm
similarity index 100%
rename from util/TLSProxy/NewSessionTicket.pm
rename to util/perl/TLSProxy/NewSessionTicket.pm
diff --git a/util/TLSProxy/Proxy.pm b/util/perl/TLSProxy/Proxy.pm
similarity index 100%
rename from util/TLSProxy/Proxy.pm
rename to util/perl/TLSProxy/Proxy.pm
diff --git a/util/TLSProxy/Record.pm b/util/perl/TLSProxy/Record.pm
similarity index 100%
rename from util/TLSProxy/Record.pm
rename to util/perl/TLSProxy/Record.pm
diff --git a/util/TLSProxy/ServerHello.pm b/util/perl/TLSProxy/ServerHello.pm
similarity index 100%
rename from util/TLSProxy/ServerHello.pm
rename to util/perl/TLSProxy/ServerHello.pm
diff --git a/util/TLSProxy/ServerKeyExchange.pm b/util/perl/TLSProxy/ServerKeyExchange.pm
similarity index 100%
rename from util/TLSProxy/ServerKeyExchange.pm
rename to util/perl/TLSProxy/ServerKeyExchange.pm
diff --git a/test/testlib/checkhandshake.pm b/util/perl/checkhandshake.pm
similarity index 100%
rename from test/testlib/checkhandshake.pm
rename to util/perl/checkhandshake.pm
diff --git a/util/with_fallback.pm b/util/perl/with_fallback.pm
similarity index 83%
rename from util/with_fallback.pm
rename to util/perl/with_fallback.pm
index b6deb20..2af1d5f 100644
--- a/util/with_fallback.pm
+++ b/util/perl/with_fallback.pm
@@ -13,7 +13,8 @@
     foreach (@_) {
 	eval "require $_";
 	if ($@) {
-	    unshift @INC, catdir(dirname(__FILE__), "..", "external", "perl");
+	    unshift @INC, catdir(dirname(__FILE__),
+                                 "..", "..", "external", "perl");
 	    my $transfer = "transfer::$_";
 	    eval "require $transfer";
 	    shift @INC;