commit: c489d9313da67805cccbd50934861a31c792e42b
Author: Kent Fredric <kentnl <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 3 03:17:54 2016 +0000
Commit: Kent Fredric <kentnl <AT> gentoo <DOT> org>
CommitDate: Fri Apr 21 21:30:52 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c489d931
perl-functions.eclass: Add perl_has_module
This is an incredibly fast way to check if Perl considers a module
of the given name installed in any capacity, including broken.
As long as "Foo.pm" is somewhere in @INC, `perl_has_module Foo` will
return true.
Even `perl_has_module threads` will return true on non-threaded perls,
due to that module still being present, and the module only fataling
when loaded.
Whereas `perl_has_module_version threads 0` will always fail on
non-threaded perls.
eclass/perl-functions.eclass | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/eclass/perl-functions.eclass b/eclass/perl-functions.eclass
index 81dcc0066db..77e1ffca806 100644
--- a/eclass/perl-functions.eclass
+++ b/eclass/perl-functions.eclass
@@ -318,3 +318,31 @@ perl_doexamples() {
# is there a way to undo "docinto" ?
}
+
+# @FUNCTION: perl_has_module
+# @USAGE: perl_has_module "Test::Tester"
+# @DESCRIPTION:
+# Query the installed system Perl to see if a given module is installed.
+# This does **not** load the module in question, only anticipates if it
*might* load.
+#
+# This is primarily for the purposes of dependency weakening so that
conditional
+# behaviour can be triggered without adding dependencies to portage which
would confuse
+# a dependency resolver.
+#
+# returns 'true' if the module is available, returns error if the module is
not available
+
+perl_has_module() {
+ debug-print-function $FUNCNAME "$@"
+
+ [[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided"
+ [[ $# -lt 2 ]] || die "${FUNCNAME}: Too many parameters ($#)"
+
+ perl -we 'my $mn = $ARGV[0];
+ $mn =~ s{(::|\x{27})}{/}g;
+ for(@INC){
+ next if ref $_;
+ exit 0 if -r $_ . q[/] . $mn . q[.pm]
+ }
+ exit 1' "$@";
+}
+