| #!/usr/bin/env python3 | 
 | # Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | 
 | # for details. All rights reserved. Use of this source code is governed by a | 
 | # BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | import os | 
 | import sys | 
 |  | 
 | import defines | 
 |  | 
 | JDK_DIR = os.path.join(defines.THIRD_PARTY, 'openjdk') | 
 |  | 
 | ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-15', 'jdk-16', 'jdk-17', | 
 |             'jdk-18', 'jdk-21'] | 
 |  | 
 |  | 
 | def GetJdkHome(): | 
 |     return GetJdk11Home() | 
 |  | 
 |  | 
 | def GetJdkRoot(): | 
 |     return GetJdk11Root() | 
 |  | 
 |  | 
 | def GetJdk11Root(): | 
 |     root = os.path.join(JDK_DIR, 'jdk-11') | 
 |     os_root = GetOSPath(root) | 
 |     return os_root if os_root else os.environ['JAVA_HOME'] | 
 |  | 
 |  | 
 | def GetOSPath(root): | 
 |     if defines.IsLinux(): | 
 |         return os.path.join(root, 'linux') | 
 |     elif defines.IsOsX(): | 
 |         return os.path.join(root, 'osx') | 
 |     elif defines.IsWindows(): | 
 |         return os.path.join(root, 'windows') | 
 |     else: | 
 |         return None | 
 |  | 
 |  | 
 | def GetAllJdkDirs(): | 
 |     dirs = [] | 
 |     for jdk in ALL_JDKS: | 
 |         root = GetOSPath(os.path.join(JDK_DIR, jdk)) | 
 |         # Some jdks are not available on windows, don't try to get these. | 
 |         if os.path.exists(root + '.tar.gz.sha1'): | 
 |             dirs.append(root) | 
 |     return dirs | 
 |  | 
 |  | 
 | def GetJdk11Home(): | 
 |     root = GetJdk11Root() | 
 |     # osx has the home inside Contents/Home in the bundle | 
 |     if defines.IsOsX(): | 
 |         return os.path.join(root, 'Contents', 'Home') | 
 |     else: | 
 |         return root | 
 |  | 
 |  | 
 | def GetJdk9Home(): | 
 |     root = os.path.join(JDK_DIR, 'openjdk-9.0.4') | 
 |     if defines.IsLinux(): | 
 |         return os.path.join(root, 'linux') | 
 |     elif defines.IsOsX(): | 
 |         return os.path.join(root, 'osx') | 
 |     elif defines.IsWindows(): | 
 |         return os.path.join(root, 'windows') | 
 |     else: | 
 |         return os.environ['JAVA_HOME'] | 
 |  | 
 |  | 
 | def GetJdk8Home(): | 
 |     root = os.path.join(JDK_DIR, 'jdk8') | 
 |     if defines.IsLinux(): | 
 |         return os.path.join(root, 'linux-x86') | 
 |     elif defines.IsOsX(): | 
 |         return os.path.join(root, 'darwin-x86') | 
 |     else: | 
 |         return os.environ['JAVA_HOME'] | 
 |  | 
 |  | 
 | def GetJavaExecutable(jdkHome=None): | 
 |     jdkHome = jdkHome if jdkHome else GetJdkHome() | 
 |     executable = 'java.exe' if defines.IsWindows() else 'java' | 
 |     return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable | 
 |  | 
 |  | 
 | def GetJavacExecutable(jdkHome=None): | 
 |     jdkHome = jdkHome if jdkHome else GetJdkHome() | 
 |     executable = 'javac.exe' if defines.IsWindows() else 'javac' | 
 |     return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable | 
 |  | 
 |  | 
 | def Main(): | 
 |     print(GetJdkHome()) | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     sys.exit(Main()) |