aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/dev.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/dependencies/dev.py')
-rw-r--r--mesonbuild/dependencies/dev.py36
1 files changed, 25 insertions, 11 deletions
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 448d682..732ac8c 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -22,6 +22,7 @@ import os
import re
import pathlib
import shutil
+import subprocess
import typing as T
from mesonbuild.interpreterbase.decorators import FeatureDeprecated
@@ -546,6 +547,17 @@ class JNISystemDependency(SystemDependency):
self.java_home = environment.properties[self.for_machine].get_java_home()
if not self.java_home:
self.java_home = pathlib.Path(shutil.which(self.javac.exelist[0])).resolve().parents[1]
+ if m.is_darwin():
+ problem_java_prefix = pathlib.Path('/System/Library/Frameworks/JavaVM.framework/Versions')
+ if problem_java_prefix in self.java_home.parents:
+ res = subprocess.run(['/usr/libexec/java_home', '--failfast', '--arch', m.cpu_family],
+ stdout=subprocess.PIPE)
+ if res.returncode != 0:
+ log = mlog.error if self.required else mlog.debug
+ log('JAVA_HOME could not be discovered on the system. Please set it explicitly.')
+ self.is_found = False
+ return
+ self.java_home = pathlib.Path(res.stdout.decode().strip())
platform_include_dir = self.__machine_info_to_platform_include_dir(m)
if platform_include_dir is None:
@@ -563,17 +575,7 @@ class JNISystemDependency(SystemDependency):
java_home_lib_server = java_home_lib
else:
if version_compare(self.version, '<= 1.8.0'):
- # The JDK and Meson have a disagreement here, so translate it
- # over. In the event more translation needs to be done, add to
- # following dict.
- def cpu_translate(cpu: str) -> str:
- java_cpus = {
- 'x86_64': 'amd64',
- }
-
- return java_cpus.get(cpu, cpu)
-
- java_home_lib = self.java_home / 'jre' / 'lib' / cpu_translate(m.cpu_family)
+ java_home_lib = self.java_home / 'jre' / 'lib' / self.__cpu_translate(m.cpu_family)
else:
java_home_lib = self.java_home / 'lib'
@@ -597,6 +599,18 @@ class JNISystemDependency(SystemDependency):
self.is_found = True
@staticmethod
+ def __cpu_translate(cpu: str) -> str:
+ '''
+ The JDK and Meson have a disagreement here, so translate it over. In the event more
+ translation needs to be done, add to following dict.
+ '''
+ java_cpus = {
+ 'x86_64': 'amd64',
+ }
+
+ return java_cpus.get(cpu, cpu)
+
+ @staticmethod
def __machine_info_to_platform_include_dir(m: 'MachineInfo') -> T.Optional[str]:
"""Translates the machine information to the platform-dependent include directory