[LyX/master] Configure: look for Java in the registry on Windows.
Thibaut Cuvelier
tcuvelier at lyx.org
Thu Feb 4 19:34:55 UTC 2021
commit daa6f143de8b93785201b33c153f1fcc2cfb7427
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
Date: Fri Jan 29 04:21:35 2021 +0100
Configure: look for Java in the registry on Windows.
---
lib/configure.py | 38 ++++++++++++++++++++++++++++++++++++--
1 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/lib/configure.py b/lib/configure.py
index aad9cca..7636438 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -318,13 +318,45 @@ def checkProg(description, progs, rc_entry=None, path=None, not_found =''):
addToRC(rc_entry[idx].replace('%%', ac_prog))
return [ac_dir, ac_word]
# if not successful
- logger.info(msg + ' no')
+ logger.info(msg + ' not in path')
# write rc entries for 'not found'
if len(rc_entry) > 0: # the last one.
addToRC(rc_entry[-1].replace('%%', not_found))
return ['', not_found]
+def check_java():
+ """ Check for Java, don't give up as often as checkProg, using platform-dependent techniques """
+ if os.name == 'nt':
+ # Check in the registry.
+ try: # Python 3.
+ import winreg
+ except ImportError: # Python 2.
+ import _winreg as winreg
+
+ potential_keys_64b = ["SOFTWARE\\JavaSoft\\Java Runtime Environment", "SOFTWARE\\JavaSoft\\Java Development Kit",
+ "SOFTWARE\\JavaSoft\\JDK", "SOFTWARE\\JavaSoft\\JRE"]
+ potential_keys_32b = [k.replace('SOFTWARE', 'SOFTWARE\\WOW6432Node') for k in potential_keys_64b]
+ potential_keys = potential_keys_64b + potential_keys_32b
+
+ reg_hive = winreg.HKEY_LOCAL_MACHINE
+ for key in potential_keys:
+ try:
+ with winreg.OpenKey(reg_hive, key) as reg_key:
+ version = winreg.QueryValueEx(reg_key, "CurrentVersion")[0]
+ with winreg.OpenKey(reg_hive, key + '\\' + version) as reg_key:
+ java_bin = winreg.QueryValueEx(reg_key, "JavaHome")[0] + '\\bin\\java.exe'
+ logger.info('+checking for java: found in Windows registry, ' + str(java_bin))
+ return java_bin
+ except OSError:
+ pass
+
+ # The test failed, no Java found.
+ return ''
+ else:
+ return ''
+
+
def checkProgAlternatives(description, progs, rc_entry=None,
alt_rc_entry=None, path=None, not_found=''):
'''
@@ -413,7 +445,7 @@ def checkProgAlternatives(description, progs, rc_entry=None,
break
if found_alt:
break
- if found_alt == False:
+ if not found_alt:
# if not successful
logger.info(msg + ' no')
if found_prime:
@@ -1960,6 +1992,8 @@ Format %i
LATEX = checkLatex(dtl_tools)
# check java and perl before any checkProg that may require them
java = checkProg('a java interpreter', ['java'])[1]
+ if java == '':
+ java = check_java()
perl = checkProg('a perl interpreter', ['perl'])[1]
(inkscape_path, inkscape_gui) = os.path.split(checkInkscape())
# On Windows, we need to call the "inkscape.com" wrapper
More information about the lyx-cvs
mailing list