summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd J <mohawk2@users.noreply.github.com>2018-04-03 21:50:09 +0100
committerEd J <mohawk2@users.noreply.github.com>2018-04-03 21:50:09 +0100
commit9d57c4adb3da0240a8b9ef8d6a87047e36139b15 (patch)
tree88e0c0d7f71e2aa422fe15e8a7491526c397acc2
parentf1d6e6b8938440c2e25ba8cb667ebf45843d22a7 (diff)
use registry on Win32 to find JAVA_HOME if not in env
-rw-r--r--lib/Inline/Java/Portable.pm13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Inline/Java/Portable.pm b/lib/Inline/Java/Portable.pm
index 67d0992..083721c 100644
--- a/lib/Inline/Java/Portable.pm
+++ b/lib/Inline/Java/Portable.pm
@@ -193,6 +193,18 @@ my $map = {
GOT_SAFE_SIGNALS => 0,
PRE_WHOLE_ARCHIVE => '',
POST_WHOLE_ARCHIVE => '',
+ DEFAULT_J2SDK_DIR => sub {
+ return $ENV{JAVA_HOME} if $ENV{JAVA_HOME};
+ my $reg;
+ require Win32::TieRegistry;
+ Win32::TieRegistry->import(Delimiter => "/", TiedRef => \$reg, ":KEY_");
+ $reg = $reg->Open('', {Access => &KEY_READ});
+ my $keybase = 'HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK';
+ my $key = "$keybase//CurrentVersion";
+ return undef unless my $version = $reg->{$key};
+ my $keyhome = "$keybase/$version//JavaHome";
+ scalar $reg->{$keyhome};
+ },
},
cygwin => {
ENV_VAR_PATH_SEP_CP => ';',
@@ -248,6 +260,7 @@ sub portable {
my $val = undef ;
if ((defined($map->{$^O}))&&(defined($map->{$^O}->{$key}))){
$val = $map->{$^O}->{$key} ;
+ $val = $val->() if ref($val) eq 'CODE' and $key !~ /^SUB_/;
}
else {
$val = $map->{_DEFAULT_}->{$key} ;