[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gentoo-dev
Subject:    [gentoo-dev] [PATCH 1/6] perl-functions.eclass: Add perl_has_module
From:       kentnl () gentoo ! org
Date:       2017-01-24 15:21:56
Message-ID: 20170124152201.15415-2-kentnl () gentoo ! org
[Download RAW message or body]

From: Kent Fredric <kentnl@gentoo.org>

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 1542b98cd4..10d19e859d 100644
--- a/eclass/perl-functions.eclass
+++ b/eclass/perl-functions.eclass
@@ -319,3 +319,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' "$@";
+}
+
-- 
2.11.0


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic