diff options
author | Ed J <mohawk2@users.noreply.github.com> | 2018-04-03 21:50:09 +0100 |
---|---|---|
committer | Ed J <mohawk2@users.noreply.github.com> | 2018-04-03 21:50:09 +0100 |
commit | 9d57c4adb3da0240a8b9ef8d6a87047e36139b15 (patch) | |
tree | 88e0c0d7f71e2aa422fe15e8a7491526c397acc2 | |
parent | f1d6e6b8938440c2e25ba8cb667ebf45843d22a7 (diff) |
use registry on Win32 to find JAVA_HOME if not in env
-rw-r--r-- | lib/Inline/Java/Portable.pm | 13 |
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} ; |