Refactor file writing - arrange for use of bundled Perl modules as fallback
authorRichard Levitte <richard@levitte.org>
Fri, 22 Jan 2016 11:37:31 +0000 (12:37 +0100)
committerRichard Levitte <richard@levitte.org>
Fri, 22 Jan 2016 22:12:22 +0000 (23:12 +0100)
For our own convenience, we need a mechanism to be able to fall back
on bundled Perl modules.  It's a minimal package that's called like
this:

    use with_fallback qw(Module1 Module2 ...);

For each module, it will try to require them from the system
installation, and failing that, it will temporarly add external/perl
and try to require transfer::{ModuleName}.  It requires that each
bundled Perl modules is accompanied by a small transfer module
(external/perl/transfer/ModuleName.pm in our example) that knows
exactly what to load.

Reviewed-by: Rich Salz <rsalz@openssl.org>
util/with_fallback.pm [new file with mode: 0644]

diff --git a/util/with_fallback.pm b/util/with_fallback.pm
new file mode 100644 (file)
index 0000000..014f355
--- /dev/null
@@ -0,0 +1,19 @@
+#! /usr/bin/perl
+
+package with_fallback;
+
+sub import {
+    use File::Basename;
+    use File::Spec::Functions;
+    foreach (@_) {
+       eval "require $_";
+       if ($@) {
+           unshift @INC, catdir(dirname(__FILE__), "..", "external", "perl");
+           my $transfer = "transfer::$_";
+           eval "require $transfer";
+           shift @INC;
+           warn $@ if $@;
+       }
+    }
+}
+1;